wittyhub 0.0.5 → 0.0.6

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.
Files changed (3) hide show
  1. package/README.md +82 -67
  2. package/dist/cli.mjs +117 -12
  3. package/package.json +4 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@ The CLI for the open agent skills ecosystem.
4
4
 
5
5
  <!-- agent-list:start -->
6
6
 
7
- Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [68 more](#supported-agents).
7
+ Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [71 more](#supported-agents).
8
8
 
9
9
  <!-- agent-list:end -->
10
10
 
@@ -291,75 +291,87 @@ Skills can be installed to any of these agents:
291
291
 
292
292
  <!-- supported-agents:start -->
293
293
 
294
- | Agent | `--agent` | Project Path | Global Path |
295
- | -------------------------------------------- | -------------------------------------------------------- | ------------------------ | ----------------------------------- |
296
- | AiderDesk | `aider-desk` | `.aider-desk/skills/` | `~/.aider-desk/skills/` |
297
- | Amp, Replit, Universal | `amp`, `replit`, `universal` | `.agents/skills/` | `~/.config/agents/skills/` |
298
- | Antigravity | `antigravity` | `.agents/skills/` | `~/.gemini/antigravity/skills/` |
299
- | Antigravity CLI | `antigravity-cli` | `.agents/skills/` | `~/.gemini/antigravity-cli/skills/` |
300
- | AstrBot | `astrbot` | `data/skills/` | `~/.astrbot/data/skills/` |
301
- | Autohand Code CLI | `autohand-code` | `.autohand/skills/` | `~/.autohand/skills/` |
302
- | Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
303
- | IBM Bob | `bob` | `.bob/skills/` | `~/.bob/skills/` |
304
- | Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
305
- | OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |
306
- | Cline, Dexto, Kimi Code CLI, Loaf, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |
307
- | CodeArts Agent | `codearts-agent` | `.codeartsdoer/skills/` | `~/.codeartsdoer/skills/` |
308
- | CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
309
- | Codemaker | `codemaker` | `.codemaker/skills/` | `~/.codemaker/skills/` |
310
- | Code Studio | `codestudio` | `.codestudio/skills/` | `~/.codestudio/skills/` |
311
- | Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
312
- | Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
313
- | Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
314
- | Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
315
- | Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
316
- | Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
317
- | Deep Agents | `deepagents` | `.agents/skills/` | `~/.deepagents/agent/skills/` |
318
- | Devin for Terminal | `devin` | `.devin/skills/` | `~/.config/devin/skills/` |
319
- | Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |
320
- | Eve | `eve` | `agent/skills/` | N/A (project-only) |
321
- | Firebender | `firebender` | `.agents/skills/` | `~/.firebender/skills/` |
322
- | ForgeCode | `forgecode` | `.forge/skills/` | `~/.forge/skills/` |
323
- | Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
324
- | GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
325
- | Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |
326
- | Hermes Agent | `hermes-agent` | `.hermes/skills/` | `~/.hermes/skills/` |
327
- | inference.sh | `inference-sh` | `.inferencesh/skills/` | `~/.inferencesh/skills/` |
328
- | Jazz | `jazz` | `.jazz/skills/` | `~/.jazz/skills/` |
329
- | Junie | `junie` | `.junie/skills/` | `~/.junie/skills/` |
330
- | iFlow CLI | `iflow-cli` | `.iflow/skills/` | `~/.iflow/skills/` |
331
- | Kilo Code | `kilo` | `.kilocode/skills/` | `~/.kilocode/skills/` |
332
- | Kiro CLI | `kiro-cli` | `.kiro/skills/` | `~/.kiro/skills/` |
333
- | Kode | `kode` | `.kode/skills/` | `~/.kode/skills/` |
334
- | Lingma | `lingma` | `.lingma/skills/` | `~/.lingma/skills/` |
335
- | MCPJam | `mcpjam` | `.mcpjam/skills/` | `~/.mcpjam/skills/` |
336
- | Mistral Vibe | `mistral-vibe` | `.vibe/skills/` | `~/.vibe/skills/` |
337
- | Moxby | `moxby` | `.moxby/skills/` | `~/.moxby/skills/` |
338
- | Mux | `mux` | `.mux/skills/` | `~/.mux/skills/` |
339
- | OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
340
- | OpenHands | `openhands` | `.openhands/skills/` | `~/.openhands/skills/` |
341
- | Ona | `ona` | `.ona/skills/` | `~/.ona/skills/` |
342
- | Pi | `pi` | `.pi/skills/` | `~/.pi/agent/skills/` |
343
- | Qoder | `qoder` | `.qoder/skills/` | `~/.qoder/skills/` |
344
- | Qoder CN | `qoder-cn` | `.qoder/skills/` | `~/.qoder-cn/skills/` |
345
- | Qwen Code | `qwen-code` | `.qwen/skills/` | `~/.qwen/skills/` |
346
- | Reasonix | `reasonix` | `.reasonix/skills/` | `~/.reasonix/skills/` |
347
- | Rovo Dev | `rovodev` | `.rovodev/skills/` | `~/.rovodev/skills/` |
348
- | Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
349
- | Tabnine CLI | `tabnine-cli` | `.tabnine/agent/skills/` | `~/.tabnine/agent/skills/` |
350
- | Terramind | `terramind` | `.terramind/skills/` | `~/.terramind/skills/` |
351
- | Tinycloud | `tinycloud` | `.tinycloud/skills/` | `~/.tinycloud/skills/` |
352
- | Trae | `trae` | `.trae/skills/` | `~/.trae/skills/` |
353
- | Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
354
- | Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
355
- | Zencoder, Zenflow | `zencoder`, `zenflow` | `.zencoder/skills/` | `~/.zencoder/skills/` |
356
- | Neovate | `neovate` | `.neovate/skills/` | `~/.neovate/skills/` |
357
- | Pochi | `pochi` | `.pochi/skills/` | `~/.pochi/skills/` |
358
- | PromptScript | `promptscript` | `.agents/skills/` | N/A (project-only) |
359
- | AdaL | `adal` | `.adal/skills/` | `~/.adal/skills/` |
294
+ | Agent | `--agent` | Project Path | Global Path |
295
+ | -------------------------------------------- | -------------------------------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------- |
296
+ | AiderDesk | `aider-desk` | `.aider-desk/skills/` | `~/.aider-desk/skills/` |
297
+ | Amp, Replit, Universal | `amp`, `replit`, `universal` | `.agents/skills/` | `~/.config/agents/skills/` |
298
+ | Antigravity | `antigravity` | `.agents/skills/` | `~/.gemini/antigravity/skills/` |
299
+ | Antigravity CLI | `antigravity-cli` | `.agents/skills/` | `~/.gemini/antigravity-cli/skills/` |
300
+ | AstrBot | `astrbot` | `data/skills/` | `~/.astrbot/data/skills/` |
301
+ | Autohand Code CLI | `autohand-code` | `.autohand/skills/` | `~/.autohand/skills/` |
302
+ | Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
303
+ | IBM Bob | `bob` | `.bob/skills/` | `~/.bob/skills/` |
304
+ | Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
305
+ | OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |
306
+ | Cline, Dexto, Kimi Code CLI, Loaf, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |
307
+ | CodeArts Agent | `codearts-agent` | `.codeartsdoer/skills/` | `~/.codeartsdoer/skills/` |
308
+ | CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
309
+ | Codemaker | `codemaker` | `.codemaker/skills/` | `~/.codemaker/skills/` |
310
+ | Code Studio | `codestudio` | `.codestudio/skills/` | `~/.codestudio/skills/` |
311
+ | Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
312
+ | Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
313
+ | Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
314
+ | Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
315
+ | Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
316
+ | Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
317
+ | Deep Agents | `deepagents` | `.agents/skills/` | `~/.deepagents/agent/skills/` |
318
+ | Devin for Terminal | `devin` | `.devin/skills/` | `~/.config/devin/skills/` |
319
+ | Doubao | `doubao` | `.doubao/agent_mode/workspace/.user_skills/` | `~/Library/Application Support/Doubao/Default/.doubao/agent_mode/workspace/.user_skills/` |
320
+ | Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |
321
+ | Eve | `eve` | `agent/skills/` | N/A (project-only) |
322
+ | Firebender | `firebender` | `.agents/skills/` | `~/.firebender/skills/` |
323
+ | ForgeCode | `forgecode` | `.forge/skills/` | `~/.forge/skills/` |
324
+ | Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
325
+ | GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
326
+ | Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |
327
+ | Hermes Agent | `hermes-agent` | `.hermes/skills/` | `~/.hermes/skills/` |
328
+ | inference.sh | `inference-sh` | `.inferencesh/skills/` | `~/.inferencesh/skills/` |
329
+ | Jazz | `jazz` | `.jazz/skills/` | `~/.jazz/skills/` |
330
+ | Junie | `junie` | `.junie/skills/` | `~/.junie/skills/` |
331
+ | iFlow CLI | `iflow-cli` | `.iflow/skills/` | `~/.iflow/skills/` |
332
+ | Kilo Code | `kilo` | `.kilocode/skills/` | `~/.kilocode/skills/` |
333
+ | Kiro CLI | `kiro-cli` | `.kiro/skills/` | `~/.kiro/skills/` |
334
+ | Kode | `kode` | `.kode/skills/` | `~/.kode/skills/` |
335
+ | Lingma | `lingma` | `.lingma/skills/` | `~/.lingma/skills/` |
336
+ | MCPJam | `mcpjam` | `.mcpjam/skills/` | `~/.mcpjam/skills/` |
337
+ | Mistral Vibe | `mistral-vibe` | `.vibe/skills/` | `~/.vibe/skills/` |
338
+ | Moxby | `moxby` | `.moxby/skills/` | `~/.moxby/skills/` |
339
+ | Mux | `mux` | `.mux/skills/` | `~/.mux/skills/` |
340
+ | OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
341
+ | OpenHands | `openhands` | `.openhands/skills/` | `~/.openhands/skills/` |
342
+ | Ona | `ona` | `.ona/skills/` | `~/.ona/skills/` |
343
+ | Pi | `pi` | `.pi/skills/` | `~/.pi/agent/skills/` |
344
+ | Qoder | `qoder` | `.qoder/skills/` | `~/.qoder/skills/` |
345
+ | Qoder CN | `qoder-cn` | `.qoder/skills/` | `~/.qoder-cn/skills/` |
346
+ | QoderWork | `qoderwork` | `.qoderwork/skills/` | `~/.qoderwork/skills/` |
347
+ | Qwen Code | `qwen-code` | `.qwen/skills/` | `~/.qwen/skills/` |
348
+ | Reasonix | `reasonix` | `.reasonix/skills/` | `~/.reasonix/skills/` |
349
+ | Rovo Dev | `rovodev` | `.rovodev/skills/` | `~/.rovodev/skills/` |
350
+ | Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
351
+ | Tabnine CLI | `tabnine-cli` | `.tabnine/agent/skills/` | `~/.tabnine/agent/skills/` |
352
+ | Terramind | `terramind` | `.terramind/skills/` | `~/.terramind/skills/` |
353
+ | Tinycloud | `tinycloud` | `.tinycloud/skills/` | `~/.tinycloud/skills/` |
354
+ | Trae | `trae` | `.trae/skills/` | `~/.trae/skills/` |
355
+ | Trae CN | `trae-cn` | `.trae/skills/` | `~/.trae-cn/skills/` |
356
+ | WorkBuddy | `workbuddy` | `.workbuddy/skills/` | `~/.workbuddy/skills/` |
357
+ | Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
358
+ | Zencoder, Zenflow | `zencoder`, `zenflow` | `.zencoder/skills/` | `~/.zencoder/skills/` |
359
+ | Neovate | `neovate` | `.neovate/skills/` | `~/.neovate/skills/` |
360
+ | Pochi | `pochi` | `.pochi/skills/` | `~/.pochi/skills/` |
361
+ | PromptScript | `promptscript` | `.agents/skills/` | N/A (project-only) |
362
+ | AdaL | `adal` | `.adal/skills/` | `~/.adal/skills/` |
360
363
 
361
364
  <!-- supported-agents:end -->
362
365
 
366
+ > [!NOTE]
367
+ > **Doubao install path:** Doubao only reads user-level skills, so installs always go to its global directory:
368
+ >
369
+ > - macOS: `~/Library/Application Support/Doubao/Default/.doubao/agent_mode/workspace/.user_skills/`
370
+ > - Windows: `%LOCALAPPDATA%\Doubao\User Data\Default\.doubao\agent_mode\workspace\.user_skills\`
371
+ >
372
+ > DoubaoWork uses the same layout under `~/Library/Application Support/DoubaoWork` (macOS) or
373
+ > `%LOCALAPPDATA%\DoubaoWork\User Data` (Windows). There is no official Linux client.
374
+
363
375
  > [!NOTE]
364
376
  > **Kiro CLI users:** The default agent automatically loads skills from `.kiro/skills/` and `~/.kiro/skills/` — no
365
377
  > configuration needed. If you use a **custom agent**, add skills to its `resources` in `.kiro/agents/<agent>.json`:
@@ -450,6 +462,7 @@ to also discover `SKILL.md` files outside these container directories
450
462
  - `.cortex/skills/`
451
463
  - `.crush/skills/`
452
464
  - `.devin/skills/`
465
+ - `.doubao/agent_mode/workspace/.user_skills/`
453
466
  - `.factory/skills/`
454
467
  - `agent/skills/`
455
468
  - `.forge/skills/`
@@ -471,6 +484,7 @@ to also discover `SKILL.md` files outside these container directories
471
484
  - `.ona/skills/`
472
485
  - `.pi/skills/`
473
486
  - `.qoder/skills/`
487
+ - `.qoderwork/skills/`
474
488
  - `.qwen/skills/`
475
489
  - `.reasonix/skills/`
476
490
  - `.rovodev/skills/`
@@ -479,6 +493,7 @@ to also discover `SKILL.md` files outside these container directories
479
493
  - `.terramind/skills/`
480
494
  - `.tinycloud/skills/`
481
495
  - `.trae/skills/`
496
+ - `.workbuddy/skills/`
482
497
  - `.windsurf/skills/`
483
498
  - `.zencoder/skills/`
484
499
  - `.neovate/skills/`
package/dist/cli.mjs CHANGED
@@ -1106,6 +1106,19 @@ const hermesHome = process.env.HERMES_HOME?.trim() || join(home, ".hermes");
1106
1106
  const autohandHome = process.env.AUTOHAND_HOME?.trim() || join(home, ".autohand");
1107
1107
  const zedAppDataHome = process.env.APPDATA?.trim();
1108
1108
  const zedFlatpakConfigHome = process.env.FLATPAK_XDG_CONFIG_HOME?.trim();
1109
+ function getDoubaoDataRoots() {
1110
+ if (process.platform === "darwin") return [join(home, "Library", "Application Support", "DoubaoWork"), join(home, "Library", "Application Support", "Doubao")];
1111
+ if (process.platform === "win32") {
1112
+ const localAppData = process.env.LOCALAPPDATA?.trim() || join(home, "AppData", "Local");
1113
+ return [join(localAppData, "DoubaoWork", "User Data"), join(localAppData, "Doubao", "User Data")];
1114
+ }
1115
+ return [join(configHome, "DoubaoWork"), join(configHome, "Doubao")];
1116
+ }
1117
+ const doubaoRoots = getDoubaoDataRoots();
1118
+ const doubaoHome = process.env.DOUBAO_HOME?.trim() || doubaoRoots.find((root) => existsSync(root)) || doubaoRoots[0];
1119
+ function getDoubaoWorkspaceDir() {
1120
+ return join(doubaoHome, "Default", ".doubao", "agent_mode", "workspace");
1121
+ }
1109
1122
  function packageJsonHasDependency(packageJsonPath, dependencyName) {
1110
1123
  try {
1111
1124
  const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
@@ -1338,6 +1351,16 @@ const agents = {
1338
1351
  return existsSync(join(home, ".dexto"));
1339
1352
  }
1340
1353
  },
1354
+ doubao: {
1355
+ name: "doubao",
1356
+ displayName: "Doubao",
1357
+ skillsDir: ".doubao/agent_mode/workspace/.user_skills",
1358
+ globalSkillsDir: join(getDoubaoWorkspaceDir(), ".user_skills"),
1359
+ requiresGlobal: true,
1360
+ detectInstalled: async () => {
1361
+ return existsSync(doubaoHome);
1362
+ }
1363
+ },
1341
1364
  droid: {
1342
1365
  name: "droid",
1343
1366
  displayName: "Droid",
@@ -1593,6 +1616,16 @@ const agents = {
1593
1616
  return existsSync(join(home, ".qoder-cn"));
1594
1617
  }
1595
1618
  },
1619
+ qoderwork: {
1620
+ name: "qoderwork",
1621
+ displayName: "QoderWork",
1622
+ skillsDir: ".qoderwork/skills",
1623
+ globalSkillsDir: join(home, ".qoderwork/skills"),
1624
+ requiresGlobal: true,
1625
+ detectInstalled: async () => {
1626
+ return existsSync(join(home, ".qoderwork"));
1627
+ }
1628
+ },
1596
1629
  "qwen-code": {
1597
1630
  name: "qwen-code",
1598
1631
  displayName: "Qwen Code",
@@ -1693,6 +1726,15 @@ const agents = {
1693
1726
  return existsSync(join(home, ".warp"));
1694
1727
  }
1695
1728
  },
1729
+ workbuddy: {
1730
+ name: "workbuddy",
1731
+ displayName: "WorkBuddy",
1732
+ skillsDir: ".workbuddy/skills",
1733
+ globalSkillsDir: join(home, ".workbuddy/skills"),
1734
+ detectInstalled: async () => {
1735
+ return existsSync(join(home, ".workbuddy"));
1736
+ }
1737
+ },
1696
1738
  windsurf: {
1697
1739
  name: "windsurf",
1698
1740
  displayName: "Windsurf",
@@ -2338,12 +2380,56 @@ const agentNameToType = {
2338
2380
  codex: "codex",
2339
2381
  antigravity: "antigravity",
2340
2382
  "augment-cli": "augment",
2383
+ doubao: "doubao",
2341
2384
  opencode: "opencode",
2342
- "github-copilot": "github-copilot"
2385
+ "github-copilot": "github-copilot",
2386
+ openclaw: "openclaw",
2387
+ qoderwork: "qoderwork",
2388
+ trae: "trae",
2389
+ "trae-cn": "trae-cn",
2390
+ workbuddy: "workbuddy"
2343
2391
  };
2392
+ const envPrefixAgents = [
2393
+ {
2394
+ prefixes: ["DOUBAO_"],
2395
+ agent: "doubao"
2396
+ },
2397
+ {
2398
+ prefixes: ["WORKBUDDY_"],
2399
+ agent: "workbuddy"
2400
+ },
2401
+ {
2402
+ prefixes: ["QODERWORK_"],
2403
+ agent: "qoderwork"
2404
+ },
2405
+ {
2406
+ prefixes: [
2407
+ "OPENCLAW_",
2408
+ "CLAWDBOT_",
2409
+ "MOLTBOT_"
2410
+ ],
2411
+ agent: "openclaw"
2412
+ }
2413
+ ];
2414
+ function detectFromEnvPrefixes() {
2415
+ const keys = Object.keys(process.env);
2416
+ for (const { prefixes, agent } of envPrefixAgents) if (keys.some((key) => prefixes.some((prefix) => key.startsWith(prefix)))) return {
2417
+ isAgent: true,
2418
+ agent: { name: agent }
2419
+ };
2420
+ return null;
2421
+ }
2422
+ function detectTrae() {
2423
+ const brand = process.env.TRAE_BRAND_NAME ?? "";
2424
+ if (!(Boolean(process.env.TRAE_RUNTIME) || brand.toLowerCase().includes("trae") || process.env.TERM_PRODUCT === "Trae")) return null;
2425
+ return {
2426
+ isAgent: true,
2427
+ agent: { name: /trae\s*cn|cn\s*trae/i.test(brand) || process.env.TRAE_PRODUCT_REGION?.toLowerCase() === "cn" ? "trae-cn" : "trae" }
2428
+ };
2429
+ }
2344
2430
  async function detectAgent() {
2345
2431
  if (cachedResult) return cachedResult;
2346
- cachedResult = await (0, import_dist.determineAgent)();
2432
+ cachedResult = detectTrae() ?? detectFromEnvPrefixes() ?? await (0, import_dist.determineAgent)();
2347
2433
  if (cachedResult.isAgent) setDetectedAgent(cachedResult.agent.name);
2348
2434
  return cachedResult;
2349
2435
  }
@@ -2351,7 +2437,9 @@ async function isRunningInAgent() {
2351
2437
  return (await detectAgent()).isAgent;
2352
2438
  }
2353
2439
  function getAgentType(agentName) {
2354
- return agentNameToType[agentName] ?? null;
2440
+ const mapped = agentNameToType[agentName];
2441
+ if (mapped) return mapped;
2442
+ return Object.hasOwn(agents, agentName) ? agentName : null;
2355
2443
  }
2356
2444
  var ProviderRegistryImpl = class {
2357
2445
  providers = [];
@@ -3178,7 +3266,7 @@ async function tryBlobInstall(ownerRepo, options = {}) {
3178
3266
  tree
3179
3267
  };
3180
3268
  }
3181
- var version$1 = "0.0.5";
3269
+ var version$1 = "0.0.6";
3182
3270
  const isCancelled$1 = (value) => typeof value === "symbol";
3183
3271
  function getLockSource(parsedUrl, normalizedSource) {
3184
3272
  return parsedUrl.startsWith("git@") || parsedUrl.startsWith("ssh://") ? parsedUrl : normalizedSource;
@@ -3694,9 +3782,16 @@ async function runAdd(args, options = {}) {
3694
3782
  options.yes = true;
3695
3783
  if (!options.agent || options.agent.length === 0) {
3696
3784
  const mappedAgent = getAgentType(agentResult.agent.name);
3697
- if (mappedAgent) options.agent = ensureUniversalAgents([mappedAgent]);
3785
+ if (!mappedAgent) {
3786
+ M.error(`Unsupported agent: ${agentResult.agent.name}`);
3787
+ M.info(`Specify the target explicitly with --agent <name>.`);
3788
+ M.info(`Valid agents: ${Object.keys(agents).join(", ")}`);
3789
+ process.exit(1);
3790
+ }
3791
+ options.agent = [mappedAgent];
3698
3792
  }
3699
3793
  }
3794
+ if (options.global === void 0 && options.agent?.some((a) => agents[a]?.requiresGlobal)) options.global = true;
3700
3795
  console.log();
3701
3796
  if (!agentResult.isAgent) Ie(import_picocolors.default.bgCyan(import_picocolors.default.black(" skills ")));
3702
3797
  if (agentResult.isAgent) M.info(import_picocolors.default.bgCyan(import_picocolors.default.black(import_picocolors.default.bold(` ${agentResult.agent.name} `))) + " Agent detected — installing non-interactively");
@@ -4113,13 +4208,23 @@ async function runAdd(args, options = {}) {
4113
4208
  const printSkillSummary = (skills) => {
4114
4209
  for (const skill of skills) {
4115
4210
  if (summaryLines.length > 0) summaryLines.push("");
4116
- const shortCanonical = shortenPath$2(installTargets.length === 1 ? getCanonicalPath(skill.name, {
4117
- global: installGlobally,
4118
- agent: installTargets[0].agent,
4119
- eveSubagent: installTargets[0].subagent
4120
- }) : getCanonicalPath(skill.name, { global: installGlobally }), cwd);
4121
- summaryLines.push(`${import_picocolors.default.cyan(shortCanonical)}`);
4122
- summaryLines.push(...buildTargetSummaryLines(installTargets, installMode));
4211
+ if (installMode === "symlink") {
4212
+ const shortCanonical = shortenPath$2(installTargets.length === 1 ? getCanonicalPath(skill.name, {
4213
+ global: installGlobally,
4214
+ agent: installTargets[0].agent,
4215
+ eveSubagent: installTargets[0].subagent
4216
+ }) : getCanonicalPath(skill.name, { global: installGlobally }), cwd);
4217
+ summaryLines.push(`${import_picocolors.default.cyan(shortCanonical)}`);
4218
+ summaryLines.push(...buildTargetSummaryLines(installTargets, installMode));
4219
+ } else for (const target of installTargets) {
4220
+ const installPath = getInstallPath(skill.name, target.agent, {
4221
+ global: installGlobally,
4222
+ cwd,
4223
+ eveSubagent: target.subagent
4224
+ });
4225
+ summaryLines.push(`${import_picocolors.default.cyan(shortenPath$2(installPath, cwd))}`);
4226
+ summaryLines.push(` ${import_picocolors.default.dim("copy →")} ${targetDisplayName(target)}`);
4227
+ }
4123
4228
  const skillOverwrites = overwriteStatus.get(skill.name);
4124
4229
  const overwriteAgents = installTargets.filter((t) => skillOverwrites?.get(targetKey(t))).map(targetDisplayName);
4125
4230
  if (overwriteAgents.length > 0) summaryLines.push(` ${import_picocolors.default.yellow("overwrites:")} ${formatList$1(overwriteAgents)}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wittyhub",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "The open agent skills ecosystem",
5
5
  "type": "module",
6
6
  "bin": {
@@ -60,6 +60,7 @@
60
60
  "deepagents",
61
61
  "devin",
62
62
  "dexto",
63
+ "doubao",
63
64
  "droid",
64
65
  "eve",
65
66
  "firebender",
@@ -88,6 +89,7 @@
88
89
  "pi",
89
90
  "qoder",
90
91
  "qoder-cn",
92
+ "qoderwork",
91
93
  "qwen-code",
92
94
  "replit",
93
95
  "reasonix",
@@ -99,6 +101,7 @@
99
101
  "trae",
100
102
  "trae-cn",
101
103
  "warp",
104
+ "workbuddy",
102
105
  "windsurf",
103
106
  "zed",
104
107
  "zencoder",