diff --git a/README.md b/README.md index bb09029d..fbf6c5b7 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ The CLI for the open agent skills ecosystem. -Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [38 more](#available-agents). +Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [39 more](#available-agents). ## Install a Skill @@ -214,7 +214,7 @@ Skills can be installed to any of these agents: | Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` | | Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` | | OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` | -| Cline, Warp | `cline`, `warp` | `.agents/skills/` | `~/.agents/skills/` | +| Cline, Swival, Warp | `cline`, `swival`, `warp` | `.agents/skills/` | `~/.agents/skills/` | | CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` | | Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` | | Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` | diff --git a/package.json b/package.json index 5de6d8d0..a94f5cf0 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "qwen-code", "replit", "roo", + "swival", "trae", "trae-cn", "warp", diff --git a/src/agents.ts b/src/agents.ts index 7798bcb9..6a138137 100644 --- a/src/agents.ts +++ b/src/agents.ts @@ -329,6 +329,15 @@ export const agents: Record = { return existsSync(join(home, '.roo')); }, }, + swival: { + name: 'swival', + displayName: 'Swival', + skillsDir: '.agents/skills', + globalSkillsDir: join(home, '.agents/skills'), + detectInstalled: async () => { + return existsSync(join(configHome, 'swival')) || existsSync(join(process.cwd(), '.swival')); + }, + }, trae: { name: 'trae', displayName: 'Trae', diff --git a/src/types.ts b/src/types.ts index d0182725..79873d62 100644 --- a/src/types.ts +++ b/src/types.ts @@ -33,6 +33,7 @@ export type AgentType = | 'qwen-code' | 'replit' | 'roo' + | 'swival' | 'trae' | 'trae-cn' | 'warp' diff --git a/tests/swival-agent.test.ts b/tests/swival-agent.test.ts new file mode 100644 index 00000000..74c2de90 --- /dev/null +++ b/tests/swival-agent.test.ts @@ -0,0 +1,27 @@ +import { describe, it, expect } from 'vitest'; +import { join } from 'path'; +import { homedir, tmpdir } from 'os'; +import { agents, isUniversalAgent } from '../src/agents.ts'; +import { getAgentBaseDir } from '../src/installer.ts'; + +describe('Swival agent', () => { + it('is a universal agent (uses .agents/skills)', () => { + expect(agents.swival.skillsDir).toBe('.agents/skills'); + expect(isUniversalAgent('swival')).toBe(true); + }); + + it('uses ~/.agents/skills for global skills', () => { + expect(agents.swival.globalSkillsDir).toBe(join(homedir(), '.agents', 'skills')); + }); + + it('project install uses canonical .agents/skills path', () => { + const projectDir = join(tmpdir(), 'swival-test-project'); + expect(getAgentBaseDir('swival', false, projectDir)).toBe( + join(projectDir, '.agents', 'skills') + ); + }); + + it('global install uses canonical ~/.agents/skills path', () => { + expect(getAgentBaseDir('swival', true)).toBe(join(homedir(), '.agents', 'skills')); + }); +});