@skillkit/agents 1.4.0 → 1.6.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/claude-code.ts","../src/base.ts","../src/cursor.ts","../src/codex.ts","../src/gemini-cli.ts","../src/opencode.ts","../src/antigravity.ts","../src/amp.ts","../src/clawdbot.ts","../src/droid.ts","../src/github-copilot.ts","../src/goose.ts","../src/kilo.ts","../src/kiro-cli.ts","../src/roo.ts","../src/trae.ts","../src/windsurf.ts","../src/universal.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'claude-code';\n readonly name = 'Claude Code';\n readonly skillsDir = '.claude/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectClaude = join(process.cwd(), '.claude');\n const globalClaude = join(homedir(), '.claude');\n const claudeMd = join(process.cwd(), 'CLAUDE.md');\n\n return existsSync(projectClaude) || existsSync(globalClaude) || existsSync(claudeMd);\n }\n}\n","import type { Skill, AgentType } from '@skillkit/core';\n\nexport interface AgentAdapter {\n readonly type: AgentType;\n readonly name: string;\n readonly skillsDir: string;\n readonly configFile: string;\n\n generateConfig(skills: Skill[]): string;\n parseConfig(content: string): string[];\n getInvokeCommand(skillName: string): string;\n isDetected(): Promise<boolean>;\n}\n\nexport function createSkillXml(skill: Skill): string {\n return `<skill>\n<name>${skill.name}</name>\n<description>${escapeXml(skill.description)}</description>\n<location>${skill.location}</location>\n</skill>`;\n}\n\nexport function escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class CursorAdapter implements AgentAdapter {\n readonly type: AgentType = 'cursor';\n readonly name = 'Cursor';\n readonly skillsDir = '.cursor/skills';\n readonly configFile = '.cursorrules';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `# Skills System\n\nYou have access to specialized skills that can help complete tasks. Use the skillkit CLI to load skill instructions when needed.\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches a skill's description, load it with:\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThe skill will provide detailed instructions for completing the task.\n\n<!-- SKILLS_DATA_START -->\n${skillsXml}\n<!-- SKILLS_DATA_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const cursorRules = join(process.cwd(), '.cursorrules');\n const cursorDir = join(process.cwd(), '.cursor');\n\n return existsSync(cursorRules) || existsSync(cursorDir);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class CodexAdapter implements AgentAdapter {\n readonly type: AgentType = 'codex';\n readonly name = 'OpenAI Codex CLI';\n readonly skillsDir = '.codex/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `| ${s.name} | ${s.description} | \\`skillkit read ${s.name}\\` |`)\n .join('\\n');\n\n return `# Skills\n\nYou have access to specialized skills for completing complex tasks.\n\n| Skill | Description | Command |\n|-------|-------------|---------|\n${skillsList}\n\n## Usage\n\nWhen a task matches a skill's capability, run the command to load detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nSkills are loaded on-demand to keep context clean. Only load skills when relevant to the current task.\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const tableRegex = /^\\|\\s*([a-z0-9-]+)\\s*\\|/gm;\n let match;\n\n while ((match = tableRegex.exec(content)) !== null) {\n const name = match[1].trim();\n if (name && name !== 'Skill' && name !== '-------') {\n skillNames.push(name);\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const codexDir = join(process.cwd(), '.codex');\n const globalCodex = join(homedir(), '.codex');\n\n return existsSync(codexDir) || existsSync(globalCodex);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GeminiCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'gemini-cli';\n readonly name = 'Gemini CLI';\n readonly skillsDir = '.gemini/skills';\n readonly configFile = 'GEMINI.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsJson = enabledSkills.map(s => ({\n name: s.name,\n description: s.description,\n invoke: `skillkit read ${s.name}`,\n location: s.location,\n }));\n\n return `# Skills Configuration\n\nYou have access to specialized skills that extend your capabilities.\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\\n${s.description}\\n\\nInvoke: \\`skillkit read ${s.name}\\``).join('\\n\\n')}\n\n## Skills Data\n\n\\`\\`\\`json\n${JSON.stringify(skillsJson, null, 2)}\n\\`\\`\\`\n\n## Usage Instructions\n\n1. When a task matches a skill's description, load it using the invoke command\n2. Skills provide step-by-step instructions for complex tasks\n3. Each skill is self-contained with its own resources\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const jsonMatch = content.match(/```json\\s*([\\s\\S]*?)```/);\n if (jsonMatch) {\n try {\n const skills = JSON.parse(jsonMatch[1]);\n if (Array.isArray(skills)) {\n skills.forEach(s => {\n if (s.name) skillNames.push(s.name);\n });\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const geminiMd = join(process.cwd(), 'GEMINI.md');\n const geminiDir = join(process.cwd(), '.gemini');\n const globalGemini = join(homedir(), '.gemini');\n\n return existsSync(geminiMd) || existsSync(geminiDir) || existsSync(globalGemini);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class OpenCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'opencode';\n readonly name = 'OpenCode';\n readonly skillsDir = '.opencode/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<!-- SKILLKIT_START -->\n# Skills\n\nThe following skills are available to help complete tasks:\n\n<skills>\n${skillsXml}\n</skills>\n\n## How to Use\n\nWhen a task matches a skill's description:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThis loads the skill's instructions into context.\n\n<!-- SKILLKIT_END -->`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const opencodeDir = join(process.cwd(), '.opencode');\n const globalOpencode = join(homedir(), '.opencode');\n\n return existsSync(opencodeDir) || existsSync(globalOpencode);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class AntigravityAdapter implements AgentAdapter {\n readonly type: AgentType = 'antigravity';\n readonly name = 'Antigravity';\n readonly skillsDir = '.antigravity/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsYaml = enabledSkills\n .map(s => ` - name: ${s.name}\\n description: \"${s.description}\"\\n invoke: skillkit read ${s.name}`)\n .join('\\n');\n\n return `# Antigravity Skills Configuration\n\n<!-- skills:\n${skillsYaml}\n-->\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\n\n${s.description}\n\n**Usage:** \\`skillkit read ${s.name}\\`\n`).join('\\n')}\n\n## How Skills Work\n\n1. Skills provide specialized knowledge for specific tasks\n2. Load a skill when the current task matches its description\n3. Skills are loaded on-demand to preserve context window\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const yamlMatch = content.match(/<!-- skills:\\s*([\\s\\S]*?)-->/);\n if (yamlMatch) {\n const nameRegex = /name:\\s*([a-z0-9-]+)/g;\n let match;\n while ((match = nameRegex.exec(yamlMatch[1])) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const agDir = join(process.cwd(), '.antigravity');\n const globalAg = join(homedir(), '.antigravity');\n\n return existsSync(agDir) || existsSync(globalAg);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class AmpAdapter implements AgentAdapter {\n readonly type: AgentType = 'amp';\n readonly name = 'Amp';\n readonly skillsDir = '.agents/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectAgents = join(process.cwd(), '.agents');\n const globalAgents = join(homedir(), '.config', 'agents');\n\n return existsSync(projectAgents) || existsSync(globalAgents);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class ClawdbotAdapter implements AgentAdapter {\n readonly type: AgentType = 'clawdbot';\n readonly name = 'Clawdbot';\n readonly skillsDir = 'skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectSkills = join(process.cwd(), 'skills');\n const globalClawdbot = join(homedir(), '.clawdbot');\n\n return existsSync(globalClawdbot) || (existsSync(projectSkills) && existsSync(join(process.cwd(), '.clawdbot')));\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class DroidAdapter implements AgentAdapter {\n readonly type: AgentType = 'droid';\n readonly name = 'Droid (Factory)';\n readonly skillsDir = '.factory/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectFactory = join(process.cwd(), '.factory');\n const globalFactory = join(homedir(), '.factory');\n\n return existsSync(projectFactory) || existsSync(globalFactory);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GitHubCopilotAdapter implements AgentAdapter {\n readonly type: AgentType = 'github-copilot';\n readonly name = 'GitHub Copilot';\n readonly skillsDir = '.github/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGithub = join(process.cwd(), '.github', 'skills');\n const globalCopilot = join(homedir(), '.copilot');\n\n return existsSync(projectGithub) || existsSync(globalCopilot);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GooseAdapter implements AgentAdapter {\n readonly type: AgentType = 'goose';\n readonly name = 'Goose';\n readonly skillsDir = '.goose/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGoose = join(process.cwd(), '.goose');\n const globalGoose = join(homedir(), '.config', 'goose');\n\n return existsSync(projectGoose) || existsSync(globalGoose);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class KiloAdapter implements AgentAdapter {\n readonly type: AgentType = 'kilo';\n readonly name = 'Kilo Code';\n readonly skillsDir = '.kilocode/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKilo = join(process.cwd(), '.kilocode');\n const globalKilo = join(homedir(), '.kilocode');\n\n return existsSync(projectKilo) || existsSync(globalKilo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class KiroCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'kiro-cli';\n readonly name = 'Kiro CLI';\n readonly skillsDir = '.kiro/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>\n\n**Note for Kiro CLI users:** After installing skills, you need to manually add them to your custom agent's \\`resources\\` in \\`.kiro/agents/<agent>.json\\`:\n\n\\`\\`\\`json\n{\n \"resources\": [\n \"skill://.kiro/skills/**/SKILL.md\"\n ]\n}\n\\`\\`\\``;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKiro = join(process.cwd(), '.kiro');\n const globalKiro = join(homedir(), '.kiro');\n\n return existsSync(projectKiro) || existsSync(globalKiro);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class RooAdapter implements AgentAdapter {\n readonly type: AgentType = 'roo';\n readonly name = 'Roo Code';\n readonly skillsDir = '.roo/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectRoo = join(process.cwd(), '.roo');\n const globalRoo = join(homedir(), '.roo');\n\n return existsSync(projectRoo) || existsSync(globalRoo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class TraeAdapter implements AgentAdapter {\n readonly type: AgentType = 'trae';\n readonly name = 'Trae';\n readonly skillsDir = '.trae/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectTrae = join(process.cwd(), '.trae');\n const globalTrae = join(homedir(), '.trae');\n\n return existsSync(projectTrae) || existsSync(globalTrae);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class WindsurfAdapter implements AgentAdapter {\n readonly type: AgentType = 'windsurf';\n readonly name = 'Windsurf';\n readonly skillsDir = '.windsurf/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectWindsurf = join(process.cwd(), '.windsurf');\n const globalWindsurf = join(homedir(), '.codeium', 'windsurf');\n\n return existsSync(projectWindsurf) || existsSync(globalWindsurf);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class UniversalAdapter implements AgentAdapter {\n readonly type: AgentType = 'universal';\n readonly name = 'Universal (Any Agent)';\n readonly skillsDir = '.agent/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n return `# Skills System\n\n<!-- SKILLKIT_SKILLS_START -->\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches one of the available skills, load it to get detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nOr with npx:\n\n\\`\\`\\`bash\nnpx skillkit read <skill-name>\n\\`\\`\\`\n\n## Skills Data\n\n<skills_system>\n<usage>\nSkills provide specialized capabilities and domain knowledge.\n- Invoke: \\`skillkit read <skill-name>\\`\n- Base directory provided in output for resolving resources\n- Only use skills listed below\n- Each invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n</skills_system>\n\n<!-- SKILLKIT_SKILLS_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n if (skillNames.length === 0) {\n const listRegex = /^- \\*\\*([a-z0-9-]+)\\*\\*:/gm;\n while ((match = listRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const agentDir = join(process.cwd(), '.agent');\n const agentsMd = join(process.cwd(), 'AGENTS.md');\n\n return existsSync(agentDir) || existsSync(agentsMd);\n }\n}\n","import type { AgentAdapter } from './base.js';\nimport type { AgentType } from '@skillkit/core';\nimport { ClaudeCodeAdapter } from './claude-code.js';\nimport { CursorAdapter } from './cursor.js';\nimport { CodexAdapter } from './codex.js';\nimport { GeminiCliAdapter } from './gemini-cli.js';\nimport { OpenCodeAdapter } from './opencode.js';\nimport { AntigravityAdapter } from './antigravity.js';\nimport { AmpAdapter } from './amp.js';\nimport { ClawdbotAdapter } from './clawdbot.js';\nimport { DroidAdapter } from './droid.js';\nimport { GitHubCopilotAdapter } from './github-copilot.js';\nimport { GooseAdapter } from './goose.js';\nimport { KiloAdapter } from './kilo.js';\nimport { KiroCliAdapter } from './kiro-cli.js';\nimport { RooAdapter } from './roo.js';\nimport { TraeAdapter } from './trae.js';\nimport { WindsurfAdapter } from './windsurf.js';\nimport { UniversalAdapter } from './universal.js';\n\nexport * from './base.js';\nexport * from './claude-code.js';\nexport * from './cursor.js';\nexport * from './codex.js';\nexport * from './gemini-cli.js';\nexport * from './opencode.js';\nexport * from './antigravity.js';\nexport * from './amp.js';\nexport * from './clawdbot.js';\nexport * from './droid.js';\nexport * from './github-copilot.js';\nexport * from './goose.js';\nexport * from './kilo.js';\nexport * from './kiro-cli.js';\nexport * from './roo.js';\nexport * from './trae.js';\nexport * from './windsurf.js';\nexport * from './universal.js';\n\nconst adapters: Record<AgentType, AgentAdapter> = {\n 'claude-code': new ClaudeCodeAdapter(),\n cursor: new CursorAdapter(),\n codex: new CodexAdapter(),\n 'gemini-cli': new GeminiCliAdapter(),\n opencode: new OpenCodeAdapter(),\n antigravity: new AntigravityAdapter(),\n amp: new AmpAdapter(),\n clawdbot: new ClawdbotAdapter(),\n droid: new DroidAdapter(),\n 'github-copilot': new GitHubCopilotAdapter(),\n goose: new GooseAdapter(),\n kilo: new KiloAdapter(),\n 'kiro-cli': new KiroCliAdapter(),\n roo: new RooAdapter(),\n trae: new TraeAdapter(),\n windsurf: new WindsurfAdapter(),\n universal: new UniversalAdapter(),\n};\n\nexport function getAdapter(type: AgentType): AgentAdapter {\n return adapters[type];\n}\n\nexport function getAllAdapters(): AgentAdapter[] {\n return Object.values(adapters);\n}\n\nexport async function detectAgent(): Promise<AgentType> {\n const checkOrder: AgentType[] = [\n 'claude-code',\n 'cursor',\n 'codex',\n 'gemini-cli',\n 'opencode',\n 'antigravity',\n 'amp',\n 'clawdbot',\n 'droid',\n 'github-copilot',\n 'goose',\n 'kilo',\n 'kiro-cli',\n 'roo',\n 'trae',\n 'windsurf',\n 'universal',\n ];\n\n for (const type of checkOrder) {\n const adapter = adapters[type];\n if (await adapter.isDetected()) {\n return type;\n }\n }\n\n return 'universal';\n}\n\nexport function getSkillsDir(type: AgentType): string {\n return adapters[type].skillsDir;\n}\n\nexport function getConfigFile(type: AgentType): string {\n return adapters[type].configFile;\n}\n"],"mappings":"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","names":["existsSync","join","join","existsSync","existsSync","join","homedir","existsSync","join","homedir","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","join","existsSync"]}
1
+ {"version":3,"sources":["../src/claude-code.ts","../src/base.ts","../src/cursor.ts","../src/codex.ts","../src/gemini-cli.ts","../src/opencode.ts","../src/antigravity.ts","../src/amp.ts","../src/clawdbot.ts","../src/droid.ts","../src/github-copilot.ts","../src/goose.ts","../src/kilo.ts","../src/kiro-cli.ts","../src/roo.ts","../src/trae.ts","../src/windsurf.ts","../src/universal.ts","../src/features/permissions.ts","../src/features/globs.ts","../src/features/bootstrap.ts","../src/features/modes.ts","../src/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'claude-code';\n readonly name = 'Claude Code';\n readonly skillsDir = '.claude/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectClaude = join(process.cwd(), '.claude');\n const globalClaude = join(homedir(), '.claude');\n const claudeMd = join(process.cwd(), 'CLAUDE.md');\n\n return existsSync(projectClaude) || existsSync(globalClaude) || existsSync(claudeMd);\n }\n}\n","import type { Skill, AgentType } from '@skillkit/core';\n\nexport interface AgentAdapter {\n readonly type: AgentType;\n readonly name: string;\n readonly skillsDir: string;\n readonly configFile: string;\n\n generateConfig(skills: Skill[]): string;\n parseConfig(content: string): string[];\n getInvokeCommand(skillName: string): string;\n isDetected(): Promise<boolean>;\n}\n\nexport function createSkillXml(skill: Skill): string {\n return `<skill>\n<name>${skill.name}</name>\n<description>${escapeXml(skill.description)}</description>\n<location>${skill.location}</location>\n</skill>`;\n}\n\nexport function escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class CursorAdapter implements AgentAdapter {\n readonly type: AgentType = 'cursor';\n readonly name = 'Cursor';\n readonly skillsDir = '.cursor/skills';\n readonly configFile = '.cursorrules';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `# Skills System\n\nYou have access to specialized skills that can help complete tasks. Use the skillkit CLI to load skill instructions when needed.\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches a skill's description, load it with:\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThe skill will provide detailed instructions for completing the task.\n\n<!-- SKILLS_DATA_START -->\n${skillsXml}\n<!-- SKILLS_DATA_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const cursorRules = join(process.cwd(), '.cursorrules');\n const cursorDir = join(process.cwd(), '.cursor');\n\n return existsSync(cursorRules) || existsSync(cursorDir);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class CodexAdapter implements AgentAdapter {\n readonly type: AgentType = 'codex';\n readonly name = 'OpenAI Codex CLI';\n readonly skillsDir = '.codex/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `| ${s.name} | ${s.description} | \\`skillkit read ${s.name}\\` |`)\n .join('\\n');\n\n return `# Skills\n\nYou have access to specialized skills for completing complex tasks.\n\n| Skill | Description | Command |\n|-------|-------------|---------|\n${skillsList}\n\n## Usage\n\nWhen a task matches a skill's capability, run the command to load detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nSkills are loaded on-demand to keep context clean. Only load skills when relevant to the current task.\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const tableRegex = /^\\|\\s*([a-z0-9-]+)\\s*\\|/gm;\n let match;\n\n while ((match = tableRegex.exec(content)) !== null) {\n const name = match[1].trim();\n if (name && name !== 'Skill' && name !== '-------') {\n skillNames.push(name);\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const codexDir = join(process.cwd(), '.codex');\n const globalCodex = join(homedir(), '.codex');\n\n return existsSync(codexDir) || existsSync(globalCodex);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GeminiCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'gemini-cli';\n readonly name = 'Gemini CLI';\n readonly skillsDir = '.gemini/skills';\n readonly configFile = 'GEMINI.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsJson = enabledSkills.map(s => ({\n name: s.name,\n description: s.description,\n invoke: `skillkit read ${s.name}`,\n location: s.location,\n }));\n\n return `# Skills Configuration\n\nYou have access to specialized skills that extend your capabilities.\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\\n${s.description}\\n\\nInvoke: \\`skillkit read ${s.name}\\``).join('\\n\\n')}\n\n## Skills Data\n\n\\`\\`\\`json\n${JSON.stringify(skillsJson, null, 2)}\n\\`\\`\\`\n\n## Usage Instructions\n\n1. When a task matches a skill's description, load it using the invoke command\n2. Skills provide step-by-step instructions for complex tasks\n3. Each skill is self-contained with its own resources\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const jsonMatch = content.match(/```json\\s*([\\s\\S]*?)```/);\n if (jsonMatch) {\n try {\n const skills = JSON.parse(jsonMatch[1]);\n if (Array.isArray(skills)) {\n skills.forEach(s => {\n if (s.name) skillNames.push(s.name);\n });\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const geminiMd = join(process.cwd(), 'GEMINI.md');\n const geminiDir = join(process.cwd(), '.gemini');\n const globalGemini = join(homedir(), '.gemini');\n\n return existsSync(geminiMd) || existsSync(geminiDir) || existsSync(globalGemini);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class OpenCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'opencode';\n readonly name = 'OpenCode';\n readonly skillsDir = '.opencode/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<!-- SKILLKIT_START -->\n# Skills\n\nThe following skills are available to help complete tasks:\n\n<skills>\n${skillsXml}\n</skills>\n\n## How to Use\n\nWhen a task matches a skill's description:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThis loads the skill's instructions into context.\n\n<!-- SKILLKIT_END -->`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const opencodeDir = join(process.cwd(), '.opencode');\n const globalOpencode = join(homedir(), '.opencode');\n\n return existsSync(opencodeDir) || existsSync(globalOpencode);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class AntigravityAdapter implements AgentAdapter {\n readonly type: AgentType = 'antigravity';\n readonly name = 'Antigravity';\n readonly skillsDir = '.antigravity/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsYaml = enabledSkills\n .map(s => ` - name: ${s.name}\\n description: \"${s.description}\"\\n invoke: skillkit read ${s.name}`)\n .join('\\n');\n\n return `# Antigravity Skills Configuration\n\n<!-- skills:\n${skillsYaml}\n-->\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\n\n${s.description}\n\n**Usage:** \\`skillkit read ${s.name}\\`\n`).join('\\n')}\n\n## How Skills Work\n\n1. Skills provide specialized knowledge for specific tasks\n2. Load a skill when the current task matches its description\n3. Skills are loaded on-demand to preserve context window\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const yamlMatch = content.match(/<!-- skills:\\s*([\\s\\S]*?)-->/);\n if (yamlMatch) {\n const nameRegex = /name:\\s*([a-z0-9-]+)/g;\n let match;\n while ((match = nameRegex.exec(yamlMatch[1])) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const agDir = join(process.cwd(), '.antigravity');\n const globalAg = join(homedir(), '.antigravity');\n\n return existsSync(agDir) || existsSync(globalAg);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class AmpAdapter implements AgentAdapter {\n readonly type: AgentType = 'amp';\n readonly name = 'Amp';\n readonly skillsDir = '.agents/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectAgents = join(process.cwd(), '.agents');\n const globalAgents = join(homedir(), '.config', 'agents');\n\n return existsSync(projectAgents) || existsSync(globalAgents);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class ClawdbotAdapter implements AgentAdapter {\n readonly type: AgentType = 'clawdbot';\n readonly name = 'Clawdbot';\n readonly skillsDir = 'skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectSkills = join(process.cwd(), 'skills');\n const globalClawdbot = join(homedir(), '.clawdbot');\n\n return existsSync(globalClawdbot) || (existsSync(projectSkills) && existsSync(join(process.cwd(), '.clawdbot')));\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class DroidAdapter implements AgentAdapter {\n readonly type: AgentType = 'droid';\n readonly name = 'Droid (Factory)';\n readonly skillsDir = '.factory/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectFactory = join(process.cwd(), '.factory');\n const globalFactory = join(homedir(), '.factory');\n\n return existsSync(projectFactory) || existsSync(globalFactory);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GitHubCopilotAdapter implements AgentAdapter {\n readonly type: AgentType = 'github-copilot';\n readonly name = 'GitHub Copilot';\n readonly skillsDir = '.github/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGithub = join(process.cwd(), '.github', 'skills');\n const globalCopilot = join(homedir(), '.copilot');\n\n return existsSync(projectGithub) || existsSync(globalCopilot);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class GooseAdapter implements AgentAdapter {\n readonly type: AgentType = 'goose';\n readonly name = 'Goose';\n readonly skillsDir = '.goose/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGoose = join(process.cwd(), '.goose');\n const globalGoose = join(homedir(), '.config', 'goose');\n\n return existsSync(projectGoose) || existsSync(globalGoose);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class KiloAdapter implements AgentAdapter {\n readonly type: AgentType = 'kilo';\n readonly name = 'Kilo Code';\n readonly skillsDir = '.kilocode/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKilo = join(process.cwd(), '.kilocode');\n const globalKilo = join(homedir(), '.kilocode');\n\n return existsSync(projectKilo) || existsSync(globalKilo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class KiroCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'kiro-cli';\n readonly name = 'Kiro CLI';\n readonly skillsDir = '.kiro/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>\n\n**Note for Kiro CLI users:** After installing skills, you need to manually add them to your custom agent's \\`resources\\` in \\`.kiro/agents/<agent>.json\\`:\n\n\\`\\`\\`json\n{\n \"resources\": [\n \"skill://.kiro/skills/**/SKILL.md\"\n ]\n}\n\\`\\`\\``;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKiro = join(process.cwd(), '.kiro');\n const globalKiro = join(homedir(), '.kiro');\n\n return existsSync(projectKiro) || existsSync(globalKiro);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class RooAdapter implements AgentAdapter {\n readonly type: AgentType = 'roo';\n readonly name = 'Roo Code';\n readonly skillsDir = '.roo/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectRoo = join(process.cwd(), '.roo');\n const globalRoo = join(homedir(), '.roo');\n\n return existsSync(projectRoo) || existsSync(globalRoo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class TraeAdapter implements AgentAdapter {\n readonly type: AgentType = 'trae';\n readonly name = 'Trae';\n readonly skillsDir = '.trae/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectTrae = join(process.cwd(), '.trae');\n const globalTrae = join(homedir(), '.trae');\n\n return existsSync(projectTrae) || existsSync(globalTrae);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class WindsurfAdapter implements AgentAdapter {\n readonly type: AgentType = 'windsurf';\n readonly name = 'Windsurf';\n readonly skillsDir = '.windsurf/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectWindsurf = join(process.cwd(), '.windsurf');\n const globalWindsurf = join(homedir(), '.codeium', 'windsurf');\n\n return existsSync(projectWindsurf) || existsSync(globalWindsurf);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '@skillkit/core';\n\nexport class UniversalAdapter implements AgentAdapter {\n readonly type: AgentType = 'universal';\n readonly name = 'Universal (Any Agent)';\n readonly skillsDir = '.agent/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n return `# Skills System\n\n<!-- SKILLKIT_SKILLS_START -->\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches one of the available skills, load it to get detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nOr with npx:\n\n\\`\\`\\`bash\nnpx skillkit read <skill-name>\n\\`\\`\\`\n\n## Skills Data\n\n<skills_system>\n<usage>\nSkills provide specialized capabilities and domain knowledge.\n- Invoke: \\`skillkit read <skill-name>\\`\n- Base directory provided in output for resolving resources\n- Only use skills listed below\n- Each invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n</skills_system>\n\n<!-- SKILLKIT_SKILLS_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n if (skillNames.length === 0) {\n const listRegex = /^- \\*\\*([a-z0-9-]+)\\*\\*:/gm;\n while ((match = listRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const agentDir = join(process.cwd(), '.agent');\n const agentsMd = join(process.cwd(), 'AGENTS.md');\n\n return existsSync(agentDir) || existsSync(agentsMd);\n }\n}\n","/**\n * Permissions System\n *\n * Implements permission patterns for agent skill access control.\n */\n\nimport { minimatch } from 'minimatch';\nimport type {\n PermissionConfig,\n PermissionPattern,\n PermissionLevel,\n} from './types.js';\n\n/**\n * PermissionManager - Manage skill permissions\n */\nexport class PermissionManager {\n private config: PermissionConfig;\n\n constructor(config?: PermissionConfig) {\n this.config = config || { default: 'ask' };\n }\n\n /**\n * Set permission configuration\n */\n setConfig(config: PermissionConfig): void {\n this.config = config;\n }\n\n /**\n * Get permission configuration\n */\n getConfig(): PermissionConfig {\n return this.config;\n }\n\n /**\n * Check file access permission\n */\n checkFileAccess(path: string): PermissionLevel {\n return this.checkPattern(path, this.config.files);\n }\n\n /**\n * Check command execution permission\n */\n checkCommandAccess(command: string): PermissionLevel {\n return this.checkPattern(command, this.config.commands);\n }\n\n /**\n * Check network access permission\n */\n checkNetworkAccess(url: string): PermissionLevel {\n return this.checkPattern(url, this.config.network);\n }\n\n /**\n * Check environment variable access\n */\n checkEnvAccess(varName: string): PermissionLevel {\n return this.checkPattern(varName, this.config.env);\n }\n\n /**\n * Add file permission pattern\n */\n addFilePattern(pattern: PermissionPattern): void {\n if (!this.config.files) {\n this.config.files = [];\n }\n this.config.files.push(pattern);\n }\n\n /**\n * Add command permission pattern\n */\n addCommandPattern(pattern: PermissionPattern): void {\n if (!this.config.commands) {\n this.config.commands = [];\n }\n this.config.commands.push(pattern);\n }\n\n /**\n * Check pattern against permission list\n */\n private checkPattern(\n value: string,\n patterns?: PermissionPattern[]\n ): PermissionLevel {\n if (!patterns || patterns.length === 0) {\n return this.config.default || 'ask';\n }\n\n // Check patterns in order (first match wins)\n for (const pattern of patterns) {\n if (this.matchPattern(value, pattern.pattern)) {\n return pattern.level;\n }\n }\n\n return this.config.default || 'ask';\n }\n\n /**\n * Match value against pattern (glob-style)\n *\n * Uses minimatch for safe glob matching, avoiding ReDoS vulnerabilities.\n */\n private matchPattern(value: string, pattern: string): boolean {\n // Use minimatch for safe, battle-tested glob matching\n // nocase option ensures case-insensitive matching\n return minimatch(value, pattern, { nocase: true });\n }\n\n /**\n * Generate OpenCode-compatible permission config\n */\n generateOpenCodeConfig(): string {\n const lines: string[] = [];\n\n lines.push('# Permission Configuration');\n lines.push('');\n\n if (this.config.files && this.config.files.length > 0) {\n lines.push('## File Access');\n lines.push('');\n for (const pattern of this.config.files) {\n lines.push(`- ${pattern.level}: \\`${pattern.pattern}\\``);\n if (pattern.reason) {\n lines.push(` - Reason: ${pattern.reason}`);\n }\n }\n lines.push('');\n }\n\n if (this.config.commands && this.config.commands.length > 0) {\n lines.push('## Command Execution');\n lines.push('');\n for (const pattern of this.config.commands) {\n lines.push(`- ${pattern.level}: \\`${pattern.pattern}\\``);\n if (pattern.reason) {\n lines.push(` - Reason: ${pattern.reason}`);\n }\n }\n lines.push('');\n }\n\n if (this.config.network && this.config.network.length > 0) {\n lines.push('## Network Access');\n lines.push('');\n for (const pattern of this.config.network) {\n lines.push(`- ${pattern.level}: \\`${pattern.pattern}\\``);\n if (pattern.reason) {\n lines.push(` - Reason: ${pattern.reason}`);\n }\n }\n lines.push('');\n }\n\n lines.push(`Default: ${this.config.default || 'ask'}`);\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate SKILL.md metadata for permissions\n */\n generateSkillMetadata(): Record<string, unknown> {\n const metadata: Record<string, unknown> = {};\n\n if (this.config.files) {\n metadata.filePermissions = this.config.files.map((p) => ({\n pattern: p.pattern,\n level: p.level,\n }));\n }\n\n if (this.config.commands) {\n metadata.commandPermissions = this.config.commands.map((p) => ({\n pattern: p.pattern,\n level: p.level,\n }));\n }\n\n if (this.config.network) {\n metadata.networkPermissions = this.config.network.map((p) => ({\n pattern: p.pattern,\n level: p.level,\n }));\n }\n\n if (this.config.default) {\n metadata.defaultPermission = this.config.default;\n }\n\n return metadata;\n }\n\n /**\n * Parse permissions from SKILL.md metadata\n */\n static fromMetadata(metadata: Record<string, unknown>): PermissionConfig {\n const config: PermissionConfig = {};\n\n if (metadata.filePermissions && Array.isArray(metadata.filePermissions)) {\n config.files = metadata.filePermissions as PermissionPattern[];\n }\n\n if (metadata.commandPermissions && Array.isArray(metadata.commandPermissions)) {\n config.commands = metadata.commandPermissions as PermissionPattern[];\n }\n\n if (metadata.networkPermissions && Array.isArray(metadata.networkPermissions)) {\n config.network = metadata.networkPermissions as PermissionPattern[];\n }\n\n if (metadata.defaultPermission) {\n config.default = metadata.defaultPermission as PermissionLevel;\n }\n\n return config;\n }\n\n /**\n * Merge two permission configs\n */\n static merge(base: PermissionConfig, override: PermissionConfig): PermissionConfig {\n return {\n files: [...(base.files || []), ...(override.files || [])],\n commands: [...(base.commands || []), ...(override.commands || [])],\n network: [...(base.network || []), ...(override.network || [])],\n env: [...(base.env || []), ...(override.env || [])],\n default: override.default || base.default,\n };\n }\n}\n\n/**\n * Create a PermissionManager instance\n */\nexport function createPermissionManager(config?: PermissionConfig): PermissionManager {\n return new PermissionManager(config);\n}\n\n/**\n * Quick permission check helpers\n */\nexport function isAllowed(level: PermissionLevel): boolean {\n return level === 'allow';\n}\n\nexport function isDenied(level: PermissionLevel): boolean {\n return level === 'deny';\n}\n\nexport function needsConfirmation(level: PermissionLevel): boolean {\n return level === 'ask';\n}\n","/**\n * Glob Pattern System\n *\n * Implements file pattern matching for file-scoped skills.\n */\n\nimport { minimatch } from 'minimatch';\nimport type { GlobConfig } from './types.js';\n\n/**\n * GlobMatcher - Match files against glob patterns\n */\nexport class GlobMatcher {\n private config: GlobConfig;\n private includePatterns: RegExp[];\n private excludePatterns: RegExp[];\n\n constructor(config: GlobConfig) {\n this.config = config;\n this.includePatterns = config.include.map((p) => this.patternToRegex(p));\n this.excludePatterns = (config.exclude || []).map((p) => this.patternToRegex(p));\n }\n\n /**\n * Check if a file matches the glob patterns\n */\n matches(filePath: string): boolean {\n // Normalize path separators\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n\n // Check if hidden file and skip if not matching hidden\n if (!this.config.matchHidden && this.isHiddenFile(normalizedPath)) {\n return false;\n }\n\n // Check exclude patterns first\n for (const pattern of this.excludePatterns) {\n if (pattern.test(normalizedPath)) {\n return false;\n }\n }\n\n // Check include patterns\n for (const pattern of this.includePatterns) {\n if (pattern.test(normalizedPath)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Filter a list of files\n */\n filter(filePaths: string[]): string[] {\n return filePaths.filter((p) => this.matches(p));\n }\n\n /**\n * Get all include patterns\n */\n getIncludePatterns(): string[] {\n return [...this.config.include];\n }\n\n /**\n * Get all exclude patterns\n */\n getExcludePatterns(): string[] {\n return [...(this.config.exclude || [])];\n }\n\n /**\n * Add an include pattern\n */\n addInclude(pattern: string): void {\n this.config.include.push(pattern);\n this.includePatterns.push(this.patternToRegex(pattern));\n }\n\n /**\n * Add an exclude pattern\n */\n addExclude(pattern: string): void {\n if (!this.config.exclude) {\n this.config.exclude = [];\n }\n this.config.exclude.push(pattern);\n this.excludePatterns.push(this.patternToRegex(pattern));\n }\n\n /**\n * Convert glob pattern to regex using minimatch\n *\n * Uses the battle-tested minimatch library to avoid ReDoS vulnerabilities\n * and ensure consistent glob matching behavior.\n */\n private patternToRegex(pattern: string): RegExp {\n // Handle negation\n const isNegated = pattern.startsWith('!');\n const cleanPattern = isNegated ? pattern.slice(1) : pattern;\n\n // Adjust pattern for directory matching\n let adjustedPattern = cleanPattern;\n if (this.config.matchDirectories && !cleanPattern.endsWith('/**')) {\n // Append /** to match directories and their contents\n adjustedPattern = cleanPattern.endsWith('/')\n ? `${cleanPattern}**`\n : `${cleanPattern}/**`;\n }\n\n // Use minimatch to create a safe regex\n // minimatch returns null if pattern is invalid, fallback to match-nothing regex\n const regex = minimatch.makeRe(adjustedPattern, { dot: this.config.matchHidden });\n\n return regex || /(?!)/; // /(?!)/ is a regex that never matches anything\n }\n\n /**\n * Check if file is hidden (starts with .)\n */\n private isHiddenFile(path: string): boolean {\n const parts = path.split('/');\n return parts.some((part) => part.startsWith('.') && part !== '.' && part !== '..');\n }\n\n /**\n * Generate Cursor-compatible globs field\n */\n generateCursorGlobs(): string[] {\n const globs: string[] = [...this.config.include];\n\n // Add negated exclude patterns\n if (this.config.exclude) {\n for (const pattern of this.config.exclude) {\n globs.push(`!${pattern}`);\n }\n }\n\n return globs;\n }\n\n /**\n * Generate MDC frontmatter\n */\n generateMDCFrontmatter(): string {\n const globs = this.generateCursorGlobs();\n return `globs: ${JSON.stringify(globs)}`;\n }\n}\n\n/**\n * Create a GlobMatcher instance\n */\nexport function createGlobMatcher(config: GlobConfig): GlobMatcher {\n return new GlobMatcher(config);\n}\n\n/**\n * Create a GlobMatcher from a single pattern\n */\nexport function matchPattern(pattern: string): GlobMatcher {\n return new GlobMatcher({ include: [pattern] });\n}\n\n/**\n * Parse glob patterns from Cursor MDC format\n */\nexport function parseGlobsFromMDC(content: string): GlobConfig | null {\n const match = content.match(/globs:\\s*(\\[.*?\\])/s);\n if (!match) {\n return null;\n }\n\n try {\n const patterns = JSON.parse(match[1]) as string[];\n const include: string[] = [];\n const exclude: string[] = [];\n\n for (const pattern of patterns) {\n if (pattern.startsWith('!')) {\n exclude.push(pattern.slice(1));\n } else {\n include.push(pattern);\n }\n }\n\n return { include, exclude };\n } catch {\n return null;\n }\n}\n\n/**\n * Common glob patterns for different file types\n */\nexport const COMMON_PATTERNS = {\n /** All TypeScript files */\n typescript: ['**/*.ts', '**/*.tsx'],\n /** All JavaScript files */\n javascript: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'],\n /** All test files */\n tests: ['**/*.test.*', '**/*.spec.*', '**/__tests__/**'],\n /** All config files */\n configs: ['*.config.*', '*rc', '*rc.*', '*.json', '*.yaml', '*.yml'],\n /** All source files */\n source: ['src/**/*'],\n /** All documentation */\n docs: ['**/*.md', 'docs/**/*', 'README*'],\n /** Node modules (usually excluded) */\n nodeModules: ['**/node_modules/**'],\n /** Build outputs (usually excluded) */\n buildOutputs: ['**/dist/**', '**/build/**', '**/.next/**'],\n /** All files */\n all: ['**/*'],\n} as const;\n\n/**\n * Create glob config from common pattern names\n */\nexport function fromCommonPatterns(\n includeNames: (keyof typeof COMMON_PATTERNS)[],\n excludeNames?: (keyof typeof COMMON_PATTERNS)[]\n): GlobConfig {\n const include: string[] = [];\n const exclude: string[] = [];\n\n for (const name of includeNames) {\n include.push(...COMMON_PATTERNS[name]);\n }\n\n if (excludeNames) {\n for (const name of excludeNames) {\n exclude.push(...COMMON_PATTERNS[name]);\n }\n }\n\n return { include, exclude };\n}\n","/**\n * Bootstrap Files System\n *\n * Implements bootstrap file generation for agents that support them.\n */\n\nimport type {\n BootstrapFile,\n BootstrapFileType,\n} from './types.js';\n\n/**\n * Default bootstrap file names for each type\n */\nconst DEFAULT_FILE_NAMES: Record<BootstrapFileType, string> = {\n agents: 'AGENTS.md',\n soul: 'SOUL.md',\n tools: 'TOOLS.md',\n identity: 'IDENTITY.md',\n context: 'CONTEXT.md',\n brief: 'BRIEF.md',\n history: 'HISTORY.md',\n};\n\n/**\n * BootstrapManager - Manage bootstrap files for agents\n */\nexport class BootstrapManager {\n private files: Map<BootstrapFileType, BootstrapFile> = new Map();\n\n /**\n * Add a bootstrap file\n */\n addFile(file: BootstrapFile): void {\n this.files.set(file.type, file);\n }\n\n /**\n * Get a bootstrap file by type\n */\n getFile(type: BootstrapFileType): BootstrapFile | undefined {\n return this.files.get(type);\n }\n\n /**\n * Get all bootstrap files\n */\n getAllFiles(): BootstrapFile[] {\n return Array.from(this.files.values());\n }\n\n /**\n * Get files sorted by priority\n */\n getFilesByPriority(): BootstrapFile[] {\n return this.getAllFiles().sort((a, b) => (b.priority || 0) - (a.priority || 0));\n }\n\n /**\n * Remove a bootstrap file\n */\n removeFile(type: BootstrapFileType): boolean {\n return this.files.delete(type);\n }\n\n /**\n * Check if a file type exists\n */\n hasFile(type: BootstrapFileType): boolean {\n return this.files.has(type);\n }\n\n /**\n * Create AGENTS.md file\n */\n createAgentsFile(agents: AgentDefinition[]): void {\n const lines: string[] = [];\n\n lines.push('# Agents');\n lines.push('');\n lines.push('This file defines the available agents and their capabilities.');\n lines.push('');\n\n for (const agent of agents) {\n lines.push(`## ${agent.name}`);\n lines.push('');\n if (agent.description) {\n lines.push(agent.description);\n lines.push('');\n }\n if (agent.capabilities && agent.capabilities.length > 0) {\n lines.push('### Capabilities');\n lines.push('');\n for (const cap of agent.capabilities) {\n lines.push(`- ${cap}`);\n }\n lines.push('');\n }\n if (agent.constraints && agent.constraints.length > 0) {\n lines.push('### Constraints');\n lines.push('');\n for (const constraint of agent.constraints) {\n lines.push(`- ${constraint}`);\n }\n lines.push('');\n }\n }\n\n this.addFile({\n type: 'agents',\n name: 'AGENTS.md',\n content: lines.join('\\n'),\n priority: 100,\n required: true,\n });\n }\n\n /**\n * Create SOUL.md file\n */\n createSoulFile(soul: SoulDefinition): void {\n const lines: string[] = [];\n\n lines.push('# Soul');\n lines.push('');\n lines.push('This file defines the personality and behavior of the agent.');\n lines.push('');\n\n if (soul.personality) {\n lines.push('## Personality');\n lines.push('');\n lines.push(soul.personality);\n lines.push('');\n }\n\n if (soul.values && soul.values.length > 0) {\n lines.push('## Values');\n lines.push('');\n for (const value of soul.values) {\n lines.push(`- ${value}`);\n }\n lines.push('');\n }\n\n if (soul.communication) {\n lines.push('## Communication Style');\n lines.push('');\n lines.push(soul.communication);\n lines.push('');\n }\n\n if (soul.rules && soul.rules.length > 0) {\n lines.push('## Rules');\n lines.push('');\n for (const rule of soul.rules) {\n lines.push(`- ${rule}`);\n }\n lines.push('');\n }\n\n this.addFile({\n type: 'soul',\n name: 'SOUL.md',\n content: lines.join('\\n'),\n priority: 90,\n });\n }\n\n /**\n * Create TOOLS.md file\n */\n createToolsFile(tools: ToolDefinition[]): void {\n const lines: string[] = [];\n\n lines.push('# Tools');\n lines.push('');\n lines.push('This file defines the available tools and their usage.');\n lines.push('');\n\n for (const tool of tools) {\n lines.push(`## ${tool.name}`);\n lines.push('');\n if (tool.description) {\n lines.push(tool.description);\n lines.push('');\n }\n if (tool.usage) {\n lines.push('### Usage');\n lines.push('');\n lines.push('```');\n lines.push(tool.usage);\n lines.push('```');\n lines.push('');\n }\n if (tool.examples && tool.examples.length > 0) {\n lines.push('### Examples');\n lines.push('');\n for (const example of tool.examples) {\n lines.push(`- ${example}`);\n }\n lines.push('');\n }\n }\n\n this.addFile({\n type: 'tools',\n name: 'TOOLS.md',\n content: lines.join('\\n'),\n priority: 80,\n });\n }\n\n /**\n * Create IDENTITY.md file\n */\n createIdentityFile(identity: IdentityDefinition): void {\n const lines: string[] = [];\n\n lines.push('# Identity');\n lines.push('');\n\n if (identity.name) {\n lines.push(`**Name:** ${identity.name}`);\n lines.push('');\n }\n\n if (identity.role) {\n lines.push(`**Role:** ${identity.role}`);\n lines.push('');\n }\n\n if (identity.description) {\n lines.push('## Description');\n lines.push('');\n lines.push(identity.description);\n lines.push('');\n }\n\n if (identity.expertise && identity.expertise.length > 0) {\n lines.push('## Expertise');\n lines.push('');\n for (const exp of identity.expertise) {\n lines.push(`- ${exp}`);\n }\n lines.push('');\n }\n\n this.addFile({\n type: 'identity',\n name: 'IDENTITY.md',\n content: lines.join('\\n'),\n priority: 95,\n });\n }\n\n /**\n * Create CONTEXT.md file\n */\n createContextFile(context: ContextDefinition): void {\n const lines: string[] = [];\n\n lines.push('# Context');\n lines.push('');\n\n if (context.project) {\n lines.push('## Project');\n lines.push('');\n lines.push(context.project);\n lines.push('');\n }\n\n if (context.techStack && context.techStack.length > 0) {\n lines.push('## Tech Stack');\n lines.push('');\n for (const tech of context.techStack) {\n lines.push(`- ${tech}`);\n }\n lines.push('');\n }\n\n if (context.conventions && context.conventions.length > 0) {\n lines.push('## Conventions');\n lines.push('');\n for (const conv of context.conventions) {\n lines.push(`- ${conv}`);\n }\n lines.push('');\n }\n\n if (context.currentTask) {\n lines.push('## Current Task');\n lines.push('');\n lines.push(context.currentTask);\n lines.push('');\n }\n\n this.addFile({\n type: 'context',\n name: 'CONTEXT.md',\n content: lines.join('\\n'),\n priority: 70,\n });\n }\n\n /**\n * Generate all files as a map\n */\n generateFiles(): Map<string, string> {\n const files = new Map<string, string>();\n\n for (const file of this.getFilesByPriority()) {\n files.set(file.name, file.content);\n }\n\n return files;\n }\n\n /**\n * Generate combined content for agents without file support\n */\n generateCombinedContent(): string {\n const lines: string[] = [];\n\n for (const file of this.getFilesByPriority()) {\n lines.push(`<!-- ${file.name} -->`);\n lines.push('');\n lines.push(file.content);\n lines.push('');\n lines.push('---');\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Get default file name for a type\n */\n static getDefaultFileName(type: BootstrapFileType): string {\n return DEFAULT_FILE_NAMES[type];\n }\n}\n\n/**\n * Agent definition for AGENTS.md\n */\nexport interface AgentDefinition {\n name: string;\n description?: string;\n capabilities?: string[];\n constraints?: string[];\n}\n\n/**\n * Soul definition for SOUL.md\n */\nexport interface SoulDefinition {\n personality?: string;\n values?: string[];\n communication?: string;\n rules?: string[];\n}\n\n/**\n * Tool definition for TOOLS.md\n */\nexport interface ToolDefinition {\n name: string;\n description?: string;\n usage?: string;\n examples?: string[];\n}\n\n/**\n * Identity definition for IDENTITY.md\n */\nexport interface IdentityDefinition {\n name?: string;\n role?: string;\n description?: string;\n expertise?: string[];\n}\n\n/**\n * Context definition for CONTEXT.md\n */\nexport interface ContextDefinition {\n project?: string;\n techStack?: string[];\n conventions?: string[];\n currentTask?: string;\n}\n\n/**\n * Create a BootstrapManager instance\n */\nexport function createBootstrapManager(): BootstrapManager {\n return new BootstrapManager();\n}\n\n/**\n * Create a complete bootstrap set from definitions\n */\nexport function createBootstrapSet(options: {\n agents?: AgentDefinition[];\n soul?: SoulDefinition;\n tools?: ToolDefinition[];\n identity?: IdentityDefinition;\n context?: ContextDefinition;\n}): BootstrapManager {\n const manager = new BootstrapManager();\n\n if (options.agents) {\n manager.createAgentsFile(options.agents);\n }\n\n if (options.soul) {\n manager.createSoulFile(options.soul);\n }\n\n if (options.tools) {\n manager.createToolsFile(options.tools);\n }\n\n if (options.identity) {\n manager.createIdentityFile(options.identity);\n }\n\n if (options.context) {\n manager.createContextFile(options.context);\n }\n\n return manager;\n}\n","/**\n * Multi-Mode System\n *\n * Implements multi-mode support for agents that support different operating modes.\n */\n\nimport type { AgentMode, ModeConfig } from './types.js';\nimport { GlobMatcher } from './globs.js';\n\n/**\n * Default mode configurations\n */\nconst DEFAULT_MODES: Record<AgentMode, Omit<ModeConfig, 'skills'>> = {\n code: {\n mode: 'code',\n description: 'Code editing and implementation mode',\n promptPrefix: 'You are in code mode. Focus on writing and editing code.',\n },\n architect: {\n mode: 'architect',\n description: 'Architecture and planning mode',\n promptPrefix: 'You are in architect mode. Focus on system design and planning.',\n },\n ask: {\n mode: 'ask',\n description: 'Question and answer mode',\n promptPrefix: 'You are in ask mode. Focus on answering questions clearly.',\n },\n debug: {\n mode: 'debug',\n description: 'Debugging and troubleshooting mode',\n promptPrefix: 'You are in debug mode. Focus on finding and fixing issues.',\n },\n review: {\n mode: 'review',\n description: 'Code review mode',\n promptPrefix: 'You are in review mode. Focus on reviewing code quality.',\n },\n test: {\n mode: 'test',\n description: 'Testing mode',\n promptPrefix: 'You are in test mode. Focus on writing and running tests.',\n },\n docs: {\n mode: 'docs',\n description: 'Documentation mode',\n promptPrefix: 'You are in docs mode. Focus on writing documentation.',\n },\n};\n\n/**\n * ModeManager - Manage agent operating modes\n */\nexport class ModeManager {\n private modes: Map<AgentMode, ModeConfig> = new Map();\n private currentMode: AgentMode = 'code';\n private modeListeners: Set<ModeChangeListener> = new Set();\n\n constructor(modes?: ModeConfig[]) {\n if (modes) {\n for (const mode of modes) {\n this.addMode(mode);\n }\n }\n }\n\n /**\n * Add a mode configuration\n */\n addMode(config: ModeConfig): void {\n this.modes.set(config.mode, config);\n }\n\n /**\n * Get a mode configuration\n */\n getMode(mode: AgentMode): ModeConfig | undefined {\n return this.modes.get(mode);\n }\n\n /**\n * Get all mode configurations\n */\n getAllModes(): ModeConfig[] {\n return Array.from(this.modes.values());\n }\n\n /**\n * Get available mode names\n */\n getAvailableModes(): AgentMode[] {\n return Array.from(this.modes.keys());\n }\n\n /**\n * Set the current mode\n */\n setMode(mode: AgentMode): void {\n const config = this.modes.get(mode);\n if (!config) {\n throw new Error(`Mode not configured: ${mode}`);\n }\n\n const previousMode = this.currentMode;\n this.currentMode = mode;\n\n // Notify listeners\n for (const listener of this.modeListeners) {\n listener(mode, previousMode, config);\n }\n }\n\n /**\n * Get the current mode\n */\n getCurrentMode(): AgentMode {\n return this.currentMode;\n }\n\n /**\n * Get current mode configuration\n */\n getCurrentModeConfig(): ModeConfig | undefined {\n return this.modes.get(this.currentMode);\n }\n\n /**\n * Get skills for current mode\n */\n getCurrentSkills(): string[] {\n const config = this.getCurrentModeConfig();\n return config?.skills || [];\n }\n\n /**\n * Get tools for current mode\n */\n getCurrentTools(): string[] {\n const config = this.getCurrentModeConfig();\n return config?.tools || [];\n }\n\n /**\n * Check if a skill is available in current mode\n */\n isSkillAvailable(skillName: string): boolean {\n const skills = this.getCurrentSkills();\n return skills.length === 0 || skills.includes(skillName);\n }\n\n /**\n * Check if a file is allowed in current mode\n */\n isFileAllowed(filePath: string): boolean {\n const config = this.getCurrentModeConfig();\n if (!config?.allowedFiles || config.allowedFiles.length === 0) {\n return true;\n }\n\n const matcher = new GlobMatcher({ include: config.allowedFiles });\n return matcher.matches(filePath);\n }\n\n /**\n * Add mode change listener\n */\n addModeListener(listener: ModeChangeListener): void {\n this.modeListeners.add(listener);\n }\n\n /**\n * Remove mode change listener\n */\n removeModeListener(listener: ModeChangeListener): void {\n this.modeListeners.delete(listener);\n }\n\n /**\n * Create a mode from default configuration\n */\n addDefaultMode(mode: AgentMode, skills: string[]): void {\n const defaultConfig = DEFAULT_MODES[mode];\n this.addMode({\n ...defaultConfig,\n skills,\n });\n }\n\n /**\n * Generate mode-specific prompt prefix\n */\n getPromptPrefix(): string {\n const config = this.getCurrentModeConfig();\n return config?.promptPrefix || '';\n }\n\n /**\n * Generate Roo-compatible mode configuration\n */\n generateRooConfig(): Record<string, unknown> {\n const modes: Record<string, unknown> = {};\n\n for (const config of this.modes.values()) {\n modes[config.mode] = {\n description: config.description,\n skills: config.skills,\n tools: config.tools,\n promptPrefix: config.promptPrefix,\n };\n }\n\n return {\n defaultMode: this.currentMode,\n modes,\n };\n }\n\n /**\n * Generate mode documentation\n */\n generateModeDocumentation(): string {\n const lines: string[] = [];\n\n lines.push('# Available Modes');\n lines.push('');\n\n for (const config of this.modes.values()) {\n lines.push(`## ${config.mode}`);\n lines.push('');\n lines.push(config.description);\n lines.push('');\n\n if (config.skills.length > 0) {\n lines.push('### Skills');\n lines.push('');\n for (const skill of config.skills) {\n lines.push(`- ${skill}`);\n }\n lines.push('');\n }\n\n if (config.tools && config.tools.length > 0) {\n lines.push('### Tools');\n lines.push('');\n for (const tool of config.tools) {\n lines.push(`- ${tool}`);\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Mode change listener type\n */\nexport type ModeChangeListener = (\n newMode: AgentMode,\n previousMode: AgentMode,\n config: ModeConfig\n) => void;\n\n/**\n * Create a ModeManager instance\n */\nexport function createModeManager(modes?: ModeConfig[]): ModeManager {\n return new ModeManager(modes);\n}\n\n/**\n * Create a ModeManager with all default modes\n */\nexport function createDefaultModeManager(\n skillsPerMode: Partial<Record<AgentMode, string[]>>\n): ModeManager {\n const manager = new ModeManager();\n\n for (const [mode, config] of Object.entries(DEFAULT_MODES)) {\n const skills = skillsPerMode[mode as AgentMode] || [];\n manager.addMode({\n ...config,\n skills,\n });\n }\n\n return manager;\n}\n\n/**\n * Get default configuration for a mode\n */\nexport function getDefaultModeConfig(mode: AgentMode): Omit<ModeConfig, 'skills'> {\n return DEFAULT_MODES[mode];\n}\n\n/**\n * All available agent modes\n */\nexport const ALL_MODES: AgentMode[] = ['code', 'architect', 'ask', 'debug', 'review', 'test', 'docs'];\n","import type { AgentAdapter } from './base.js';\nimport type { AgentType } from '@skillkit/core';\nimport { ClaudeCodeAdapter } from './claude-code.js';\nimport { CursorAdapter } from './cursor.js';\nimport { CodexAdapter } from './codex.js';\nimport { GeminiCliAdapter } from './gemini-cli.js';\nimport { OpenCodeAdapter } from './opencode.js';\nimport { AntigravityAdapter } from './antigravity.js';\nimport { AmpAdapter } from './amp.js';\nimport { ClawdbotAdapter } from './clawdbot.js';\nimport { DroidAdapter } from './droid.js';\nimport { GitHubCopilotAdapter } from './github-copilot.js';\nimport { GooseAdapter } from './goose.js';\nimport { KiloAdapter } from './kilo.js';\nimport { KiroCliAdapter } from './kiro-cli.js';\nimport { RooAdapter } from './roo.js';\nimport { TraeAdapter } from './trae.js';\nimport { WindsurfAdapter } from './windsurf.js';\nimport { UniversalAdapter } from './universal.js';\n\nexport * from './base.js';\nexport * from './claude-code.js';\nexport * from './cursor.js';\nexport * from './codex.js';\nexport * from './gemini-cli.js';\nexport * from './opencode.js';\nexport * from './antigravity.js';\nexport * from './amp.js';\nexport * from './clawdbot.js';\nexport * from './droid.js';\nexport * from './github-copilot.js';\nexport * from './goose.js';\nexport * from './kilo.js';\nexport * from './kiro-cli.js';\nexport * from './roo.js';\nexport * from './trae.js';\nexport * from './windsurf.js';\nexport * from './universal.js';\n\n// Agent features\nexport * from './features/index.js';\n\nconst adapters: Record<AgentType, AgentAdapter> = {\n 'claude-code': new ClaudeCodeAdapter(),\n cursor: new CursorAdapter(),\n codex: new CodexAdapter(),\n 'gemini-cli': new GeminiCliAdapter(),\n opencode: new OpenCodeAdapter(),\n antigravity: new AntigravityAdapter(),\n amp: new AmpAdapter(),\n clawdbot: new ClawdbotAdapter(),\n droid: new DroidAdapter(),\n 'github-copilot': new GitHubCopilotAdapter(),\n goose: new GooseAdapter(),\n kilo: new KiloAdapter(),\n 'kiro-cli': new KiroCliAdapter(),\n roo: new RooAdapter(),\n trae: new TraeAdapter(),\n windsurf: new WindsurfAdapter(),\n universal: new UniversalAdapter(),\n};\n\nexport function getAdapter(type: AgentType): AgentAdapter {\n return adapters[type];\n}\n\nexport function getAllAdapters(): AgentAdapter[] {\n return Object.values(adapters);\n}\n\nexport async function detectAgent(): Promise<AgentType> {\n const checkOrder: AgentType[] = [\n 'claude-code',\n 'cursor',\n 'codex',\n 'gemini-cli',\n 'opencode',\n 'antigravity',\n 'amp',\n 'clawdbot',\n 'droid',\n 'github-copilot',\n 'goose',\n 'kilo',\n 'kiro-cli',\n 'roo',\n 'trae',\n 'windsurf',\n 'universal',\n ];\n\n for (const type of checkOrder) {\n const adapter = adapters[type];\n if (await adapter.isDetected()) {\n return type;\n }\n }\n\n return 'universal';\n}\n\nexport function getSkillsDir(type: AgentType): string {\n return adapters[type].skillsDir;\n}\n\nexport function getConfigFile(type: AgentType): string {\n return adapters[type].configFile;\n}\n"],"mappings":"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","names":["existsSync","join","join","existsSync","existsSync","join","homedir","existsSync","join","homedir","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","homedir","join","homedir","existsSync","existsSync","join","join","existsSync","minimatch"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillkit/agents",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "Agent adapters for SkillKit - supports 17+ AI coding agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -15,7 +15,8 @@
15
15
  "dist"
16
16
  ],
17
17
  "dependencies": {
18
- "@skillkit/core": "1.4.0"
18
+ "minimatch": "^9.0.0",
19
+ "@skillkit/core": "1.6.0"
19
20
  },
20
21
  "devDependencies": {
21
22
  "@types/node": "^22.10.5",