@agent-native/skills 0.2.160 → 0.2.161

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/install.js CHANGED
@@ -550,16 +550,39 @@ ${skillLines}
550
550
  ${MANAGED_BLOCK_END}
551
551
  `;
552
552
  }
553
+ /**
554
+ * Remove EVERY managed block from `text`. Re-running the installer should always
555
+ * leave exactly one block, so we strip them all before re-inserting a single
556
+ * fresh one — a file that somehow accumulated duplicates (older versions, a
557
+ * manual copy/paste) collapses back to one instead of growing forever.
558
+ */
559
+ function stripManagedBlocks(text) {
560
+ let result = text;
561
+ for (;;) {
562
+ const start = result.indexOf(MANAGED_BLOCK_START);
563
+ if (start < 0)
564
+ break;
565
+ const end = result.indexOf(MANAGED_BLOCK_END, start);
566
+ if (end < 0)
567
+ break; // unterminated marker — leave the rest of the file alone
568
+ result =
569
+ result.slice(0, start) + result.slice(end + MANAGED_BLOCK_END.length);
570
+ }
571
+ return result;
572
+ }
553
573
  export function upsertManagedBlock(file, block, dryRun = false) {
554
574
  const current = fs.existsSync(file) ? fs.readFileSync(file, "utf-8") : "";
555
- const start = current.indexOf(MANAGED_BLOCK_START);
556
- const end = current.indexOf(MANAGED_BLOCK_END);
575
+ const firstAt = current.indexOf(MANAGED_BLOCK_START);
557
576
  let next;
558
- if (start >= 0 && end >= start) {
559
- const afterEnd = end + MANAGED_BLOCK_END.length;
560
- next = `${current.slice(0, start).trimEnd()}\n\n${block.trimEnd()}\n${current
561
- .slice(afterEnd)
562
- .trimStart()}`;
577
+ if (firstAt >= 0) {
578
+ // Re-insert the fresh block where the first managed block began, dropping
579
+ // every other managed block in the file (not just the first).
580
+ const before = current.slice(0, firstAt).trimEnd();
581
+ const after = stripManagedBlocks(current.slice(firstAt)).trimStart();
582
+ next =
583
+ (before ? `${before}\n\n` : "") +
584
+ `${block.trimEnd()}\n` +
585
+ (after ? `\n${after}` : "");
563
586
  }
564
587
  else {
565
588
  next = `${current.trimEnd()}${current.trim() ? "\n\n" : ""}${block.trimEnd()}\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\n\nexport type AgentId = \"codex\" | \"claude\";\nexport type Scope = \"project\" | \"user\";\ntype Command = \"add\" | \"list\" | \"help\";\ntype InstructionTarget = \"agents\" | \"claude\";\n\nexport const MANAGED_BLOCK_START =\n \"<!-- BEGIN @agent-native/skills managed block -->\";\nexport const MANAGED_BLOCK_END =\n \"<!-- END @agent-native/skills managed block -->\";\n\nexport const HELP = `skills\n\nUsage:\n skills list <source> [--json]\n skills add <source> [--skill <name> ...|--all] [--agent codex|claude|all] [--scope user|project] [--project <dir>] [--instructions agents|claude|both] [--yes] [--force] [--dry-run] [--json]\n\nSources:\n ./skills\n ./skills/my-skill\n owner/repo\n owner/repo/path/to/skills#ref\n github:owner/repo/path/to/skills#ref\n https://github.com/owner/repo/tree/ref/path/to/skills\n\nTargets:\n project codex -> <project>/.agents/skills\n project claude -> <project>/.claude/skills\n user codex -> $CODEX_HOME/skills or ~/.codex/skills\n user claude -> ~/.claude/skills\n\nOptions:\n -s, --skill <name> Install one skill. Repeat or comma-separate.\n --all Install every discovered skill.\n -a, --agent <target> codex, claude, or all. Defaults to codex.\n --scope <scope> user or project. Defaults to user.\n --project <dir> Project root for project-scoped installs.\n --ref <git-ref> Git ref for GitHub-style sources.\n --instructions <set> agents, claude, both/all, or none.\n --with-agents-md Append/update the AGENTS.md managed block.\n --with-claude-md Append/update the CLAUDE.md managed block.\n --agents-file <path> Override the AGENTS.md path.\n --claude-file <path> Override the CLAUDE.md path.\n -y, --yes Accept prompts.\n --force Overwrite existing skill folders.\n --dry-run Print what would change.\n --json Print machine-readable output.`;\n\nexport interface ParsedSkillsCliArgs {\n command: Command;\n source?: string;\n skills: string[];\n all: boolean;\n agents: AgentId[];\n scope: Scope;\n projectDir: string;\n ref?: string;\n instructionTargets: InstructionTarget[];\n agentsFile: string;\n claudeFile: string;\n yes: boolean;\n force: boolean;\n dryRun: boolean;\n json: boolean;\n}\n\nexport interface DiscoveredSkill {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface GitHubSource {\n cloneUrl: string;\n ref?: string;\n subdir: string;\n display: string;\n}\n\ninterface ResolvedSource {\n root: string;\n display: string;\n cleanup: () => void;\n}\n\ninterface TargetRoot {\n agent: AgentId;\n scope: Scope;\n root: string;\n}\n\ninterface CopiedSkill {\n skillName: string;\n agent: AgentId;\n scope: Scope;\n from: string;\n to: string;\n}\n\nexport interface InstallResult {\n source: string;\n dryRun: boolean;\n skills: string[];\n copied: CopiedSkill[];\n instructionFiles: string[];\n}\n\ninterface RunCommandOptions {\n cwd?: string;\n}\n\nexport interface RunSkillsCliOptions {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n isInteractive?: () => boolean;\n log?: (message: string) => void;\n promptSkills?: (skills: DiscoveredSkill[]) => Promise<string[] | null>;\n promptOverwrite?: (paths: string[]) => Promise<boolean>;\n runCommand?: (\n cmd: string,\n args: string[],\n options?: RunCommandOptions,\n ) => Promise<number>;\n}\n\nfunction valueFor(\n args: string[],\n index: number,\n flag: string,\n): { value: string; nextIndex: number } | null {\n const arg = args[index];\n if (arg === flag) {\n const value = args[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return { value, nextIndex: index + 1 };\n }\n if (arg.startsWith(`${flag}=`)) {\n const value = arg.slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}.`);\n return { value, nextIndex: index };\n }\n return null;\n}\n\nfunction splitList(value: string): string[] {\n return value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction normalizeAgent(value: string): AgentId[] {\n const out: AgentId[] = [];\n for (const part of splitList(value)) {\n const key = part.toLowerCase();\n if (key === \"all\") {\n out.push(\"codex\", \"claude\");\n } else if (key === \"codex\") {\n out.push(\"codex\");\n } else if (key === \"claude\" || key === \"claude-code\") {\n out.push(\"claude\");\n } else {\n throw new Error(\n `Unknown agent \"${part}\". Expected codex, claude, or all.`,\n );\n }\n }\n return [...new Set(out)];\n}\n\nfunction normalizeInstructions(value: string): InstructionTarget[] {\n const key = value.trim().toLowerCase();\n if (key === \"none\") return [];\n if (key === \"agents\" || key === \"agents.md\" || key === \"agent\") {\n return [\"agents\"];\n }\n if (key === \"claude\" || key === \"claude.md\") return [\"claude\"];\n if (key === \"both\" || key === \"all\") return [\"agents\", \"claude\"];\n throw new Error(\n `Unknown instructions target \"${value}\". Expected agents, claude, both, or none.`,\n );\n}\n\nfunction pushUnique<T>(items: T[], value: T): void {\n if (!items.includes(value)) items.push(value);\n}\n\nexport function parseSkillsCliArgs(\n argv: string[],\n cwd = process.cwd(),\n): ParsedSkillsCliArgs {\n const first = argv[0];\n let command: Command = \"add\";\n let args = argv;\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(first ? 1 : 0);\n } else if (first === \"add\" || first === \"list\") {\n command = first;\n args = argv.slice(1);\n }\n\n const parsed: ParsedSkillsCliArgs = {\n command,\n skills: [],\n all: false,\n agents: [\"codex\"],\n scope: \"user\",\n projectDir: cwd,\n instructionTargets: [],\n agentsFile: \"AGENTS.md\",\n claudeFile: \"CLAUDE.md\",\n yes: false,\n force: false,\n dryRun: false,\n json: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n let consumed: { value: string; nextIndex: number } | null;\n if (\n (consumed = valueFor(args, i, \"--skill\")) ||\n (consumed = valueFor(args, i, \"-s\"))\n ) {\n for (const skill of splitList(consumed.value)) parsed.skills.push(skill);\n i = consumed.nextIndex;\n } else if (\n (consumed = valueFor(args, i, \"--agent\")) ||\n (consumed = valueFor(args, i, \"-a\"))\n ) {\n parsed.agents = normalizeAgent(consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--scope\"))) {\n if (consumed.value !== \"user\" && consumed.value !== \"project\") {\n throw new Error(\"--scope must be either user or project.\");\n }\n parsed.scope = consumed.value;\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--project\"))) {\n parsed.projectDir = path.resolve(cwd, consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--ref\"))) {\n parsed.ref = consumed.value;\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--instructions\"))) {\n parsed.instructionTargets = normalizeInstructions(consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--agents-file\"))) {\n parsed.agentsFile = consumed.value;\n pushUnique(parsed.instructionTargets, \"agents\");\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--claude-file\"))) {\n parsed.claudeFile = consumed.value;\n pushUnique(parsed.instructionTargets, \"claude\");\n i = consumed.nextIndex;\n } else if (arg === \"--with-agents-md\") {\n pushUnique(parsed.instructionTargets, \"agents\");\n } else if (arg === \"--with-claude-md\") {\n pushUnique(parsed.instructionTargets, \"claude\");\n } else if (arg === \"--all\") {\n parsed.all = true;\n } else if (arg === \"--global\") {\n parsed.scope = \"user\";\n } else if (arg === \"--project-scope\") {\n parsed.scope = \"project\";\n } else if (arg === \"--yes\" || arg === \"-y\") {\n parsed.yes = true;\n } else if (arg === \"--force\") {\n parsed.force = true;\n } else if (arg === \"--dry-run\") {\n parsed.dryRun = true;\n } else if (arg === \"--json\") {\n parsed.json = true;\n } else if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${arg}`);\n } else if (!parsed.source) {\n parsed.source = arg;\n } else {\n throw new Error(`Unexpected argument: ${arg}`);\n }\n }\n\n parsed.skills = [...new Set(parsed.skills)];\n parsed.agents = [...new Set(parsed.agents)];\n return parsed;\n}\n\nfunction stripGitSuffix(value: string): string {\n return value.endsWith(\".git\") ? value.slice(0, -4) : value;\n}\n\nfunction parsePathGitHubSource(\n input: string,\n ref?: string,\n): GitHubSource | null {\n const hashIndex = input.indexOf(\"#\");\n const withoutHash = hashIndex >= 0 ? input.slice(0, hashIndex) : input;\n const hashRef = hashIndex >= 0 ? input.slice(hashIndex + 1) : undefined;\n const raw = withoutHash.startsWith(\"github:\")\n ? withoutHash.slice(\"github:\".length)\n : withoutHash;\n if (/^[./~]/.test(raw)) return null;\n const parts = raw.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n if (!/^[A-Za-z0-9_.-]+$/.test(parts[0])) return null;\n if (!/^[A-Za-z0-9_.-]+(?:\\.git)?$/.test(parts[1])) return null;\n const owner = parts[0];\n const repo = stripGitSuffix(parts[1]);\n const subdir = parts.slice(2).join(\"/\");\n return {\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n ref: ref ?? hashRef,\n subdir,\n display: `github:${owner}/${repo}${subdir ? `/${subdir}` : \"\"}${\n (ref ?? hashRef) ? `#${ref ?? hashRef}` : \"\"\n }`,\n };\n}\n\nexport function parseGitHubSource(\n input: string,\n ref?: string,\n): GitHubSource | null {\n if (input.startsWith(\"git@github.com:\")) {\n const withoutPrefix = input.slice(\"git@github.com:\".length);\n return parsePathGitHubSource(withoutPrefix, ref);\n }\n\n if (!input.startsWith(\"http://\") && !input.startsWith(\"https://\")) {\n return parsePathGitHubSource(input, ref);\n }\n\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n return null;\n }\n if (url.hostname !== \"github.com\") return null;\n const parts = url.pathname.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n const owner = parts[0];\n const repo = stripGitSuffix(parts[1]);\n let sourceRef = ref ?? (url.hash ? url.hash.slice(1) : undefined);\n let subdir = \"\";\n if (parts[2] === \"tree\" || parts[2] === \"blob\") {\n sourceRef = ref ?? parts[3] ?? sourceRef;\n subdir = parts.slice(4).join(\"/\");\n } else {\n subdir = parts.slice(2).join(\"/\");\n }\n return {\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n ref: sourceRef,\n subdir,\n display: `github:${owner}/${repo}${subdir ? `/${subdir}` : \"\"}${\n sourceRef ? `#${sourceRef}` : \"\"\n }`,\n };\n}\n\nfunction runCommand(\n cmd: string,\n args: string[],\n options: RunCommandOptions = {},\n): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: options.cwd,\n stdio: \"inherit\",\n shell: process.platform === \"win32\",\n env: process.env,\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) reject(new Error(`${cmd} interrupted by ${signal}.`));\n else resolve(code ?? 0);\n });\n });\n}\n\nasync function resolveSource(\n source: string,\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions,\n): Promise<ResolvedSource> {\n const local = path.resolve(options.cwd ?? process.cwd(), source);\n if (fs.existsSync(local)) {\n return { root: local, display: source, cleanup: () => {} };\n }\n\n const github = parseGitHubSource(source, parsed.ref);\n if (!github) {\n throw new Error(\n `Source does not exist and is not a GitHub source: ${source}`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"an-skills-\"));\n const repoDir = path.join(tmpRoot, \"repo\");\n const args = [\"clone\", \"--depth\", \"1\"];\n if (github.ref) args.push(\"--branch\", github.ref);\n args.push(github.cloneUrl, repoDir);\n const code = await (options.runCommand ?? runCommand)(\"git\", args);\n if (code !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(`git clone exited with ${code}.`);\n }\n\n const root = github.subdir ? path.join(repoDir, github.subdir) : repoDir;\n if (!fs.existsSync(root)) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(`GitHub source path not found: ${github.subdir}`);\n }\n return {\n root,\n display: github.display,\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseFrontmatterField(\n content: string,\n field: string,\n): string | undefined {\n const match = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!match) return undefined;\n const fieldMatch = match[1].match(new RegExp(`^${field}:\\\\s*(.+)$`, \"m\"));\n if (!fieldMatch) return undefined;\n return fieldMatch[1].trim().replace(/^['\"]|['\"]$/g, \"\");\n}\n\nfunction safeSkillName(value: string): string {\n const name = value.trim();\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return name;\n}\n\nfunction skillFromDir(dir: string): DiscoveredSkill | null {\n const file = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(file)) return null;\n const content = fs.readFileSync(file, \"utf-8\");\n return {\n name: safeSkillName(\n parseFrontmatterField(content, \"name\") ?? path.basename(dir),\n ),\n description: parseFrontmatterField(content, \"description\"),\n dir,\n };\n}\n\nfunction addSkillDir(\n out: DiscoveredSkill[],\n seen: Set<string>,\n dir: string,\n): void {\n const skill = skillFromDir(dir);\n if (!skill) return;\n const key = `${skill.name}:${path.resolve(skill.dir)}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push(skill);\n}\n\nexport function discoverSkillFolders(root: string): DiscoveredSkill[] {\n const out: DiscoveredSkill[] = [];\n const seen = new Set<string>();\n addSkillDir(out, seen, root);\n\n const containers = [\n path.join(root, \"skills\"),\n path.join(root, \".agents\", \"skills\"),\n path.join(root, \".claude\", \"skills\"),\n root,\n ];\n\n for (const container of containers) {\n if (!fs.existsSync(container)) continue;\n const stat = fs.statSync(container);\n if (!stat.isDirectory()) continue;\n for (const entry of fs.readdirSync(container, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n addSkillDir(out, seen, path.join(container, entry.name));\n }\n }\n\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction homeDir(env: NodeJS.ProcessEnv): string {\n return env.HOME || os.homedir();\n}\n\nexport function targetRootsFor(input: {\n agents: AgentId[];\n scope: Scope;\n projectDir: string;\n env?: NodeJS.ProcessEnv;\n}): TargetRoot[] {\n const env = input.env ?? process.env;\n const roots: TargetRoot[] = [];\n for (const agent of input.agents) {\n if (input.scope === \"project\") {\n roots.push({\n agent,\n scope: \"project\",\n root:\n agent === \"codex\"\n ? path.join(input.projectDir, \".agents\", \"skills\")\n : path.join(input.projectDir, \".claude\", \"skills\"),\n });\n } else if (agent === \"codex\") {\n roots.push({\n agent,\n scope: \"user\",\n root: env.CODEX_HOME\n ? path.join(env.CODEX_HOME, \"skills\")\n : path.join(homeDir(env), \".codex\", \"skills\"),\n });\n } else {\n roots.push({\n agent,\n scope: \"user\",\n root: path.join(homeDir(env), \".claude\", \"skills\"),\n });\n }\n }\n return roots;\n}\n\nfunction shouldPrompt(\n options: RunSkillsCliOptions,\n parsed: ParsedSkillsCliArgs,\n) {\n if (parsed.yes || parsed.json) return false;\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nasync function promptForSkills(\n skills: DiscoveredSkill[],\n): Promise<string[] | null> {\n process.stdout.write(\"Select skills to install:\\n\");\n skills.forEach((skill, index) => {\n const suffix = skill.description ? ` - ${skill.description}` : \"\";\n process.stdout.write(` ${index + 1}. ${skill.name}${suffix}\\n`);\n });\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\n \"Enter numbers or names separated by commas, or all: \",\n );\n const trimmed = answer.trim();\n if (!trimmed) return null;\n if (trimmed.toLowerCase() === \"all\")\n return skills.map((skill) => skill.name);\n const selected: string[] = [];\n for (const part of splitList(trimmed)) {\n const index = Number(part);\n if (Number.isInteger(index) && index >= 1 && index <= skills.length) {\n selected.push(skills[index - 1].name);\n } else {\n selected.push(part);\n }\n }\n return selected;\n } finally {\n rl.close();\n }\n}\n\nasync function promptForOverwrite(paths: string[]): Promise<boolean> {\n process.stdout.write(\"Existing skill folders will be overwritten:\\n\");\n for (const target of paths) process.stdout.write(` ${target}\\n`);\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\"Overwrite? [y/N] \");\n return answer.trim().toLowerCase() === \"y\";\n } finally {\n rl.close();\n }\n}\n\nasync function selectSkills(\n discovered: DiscoveredSkill[],\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions,\n): Promise<DiscoveredSkill[]> {\n if (discovered.length === 0) {\n throw new Error(\"No skill folders found. Expected folders with SKILL.md.\");\n }\n let names = parsed.skills;\n if (parsed.all) {\n names = discovered.map((skill) => skill.name);\n } else if (names.length === 0 && discovered.length === 1) {\n names = [discovered[0].name];\n } else if (names.length === 0 && shouldPrompt(options, parsed)) {\n const picked = await (options.promptSkills ?? promptForSkills)(discovered);\n if (!picked || picked.length === 0) throw new Error(\"No skills selected.\");\n names = picked;\n } else if (names.length === 0) {\n throw new Error(\n \"Multiple skills found. Pass --skill <name>, --all, or run interactively.\",\n );\n }\n\n const byName = new Map(discovered.map((skill) => [skill.name, skill]));\n return names.map((name) => {\n const skill = byName.get(name);\n if (!skill) {\n throw new Error(\n `Skill \"${name}\" not found. Available: ${discovered\n .map((item) => item.name)\n .join(\", \")}`,\n );\n }\n return skill;\n });\n}\n\nfunction assertWithin(root: string, target: string): void {\n const rel = path.relative(path.resolve(root), path.resolve(target));\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\n throw new Error(`Refusing to write outside target root: ${target}`);\n }\n}\n\nfunction copySkillDir(from: string, to: string, dryRun: boolean): void {\n if (dryRun) return;\n fs.rmSync(to, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(to), { recursive: true });\n fs.cpSync(from, to, {\n recursive: true,\n filter(source) {\n const base = path.basename(source);\n return base !== \".git\" && base !== \"node_modules\";\n },\n });\n}\n\nfunction instructionFilePath(\n projectDir: string,\n target: InstructionTarget,\n parsed: ParsedSkillsCliArgs,\n): string {\n const file = target === \"agents\" ? parsed.agentsFile : parsed.claudeFile;\n return path.isAbsolute(file) ? file : path.join(projectDir, file);\n}\n\nfunction buildManagedBlock(input: {\n skills: DiscoveredSkill[];\n source: string;\n roots: TargetRoot[];\n}): string {\n const agentText = [...new Set(input.roots.map((root) => root.agent))].join(\n \", \",\n );\n const scopeText = [...new Set(input.roots.map((root) => root.scope))].join(\n \", \",\n );\n const skillLines = input.skills\n .map((skill) => `- \\`${skill.name}\\``)\n .join(\"\\n\");\n return `${MANAGED_BLOCK_START}\n## Installed Agent Skills\n\nThis block is managed by \\`@agent-native/skills\\`. Re-run the installer to update\nit.\n\nSource: \\`${input.source}\\`\nAgents: ${agentText}\nScope: ${scopeText}\n\n${skillLines}\n${MANAGED_BLOCK_END}\n`;\n}\n\nexport function upsertManagedBlock(\n file: string,\n block: string,\n dryRun = false,\n): boolean {\n const current = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const start = current.indexOf(MANAGED_BLOCK_START);\n const end = current.indexOf(MANAGED_BLOCK_END);\n let next: string;\n if (start >= 0 && end >= start) {\n const afterEnd = end + MANAGED_BLOCK_END.length;\n next = `${current.slice(0, start).trimEnd()}\\n\\n${block.trimEnd()}\\n${current\n .slice(afterEnd)\n .trimStart()}`;\n } else {\n next = `${current.trimEnd()}${current.trim() ? \"\\n\\n\" : \"\"}${block.trimEnd()}\\n`;\n }\n if (next === current) return false;\n if (!dryRun) {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, next, \"utf-8\");\n }\n return true;\n}\n\nexport async function installSkills(\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions = {},\n): Promise<InstallResult> {\n if (!parsed.source) throw new Error(\"Missing source.\");\n const source = await resolveSource(parsed.source, parsed, options);\n try {\n const discovered = discoverSkillFolders(source.root);\n const selected = await selectSkills(discovered, parsed, options);\n const roots = targetRootsFor({\n agents: parsed.agents,\n scope: parsed.scope,\n projectDir: parsed.projectDir,\n env: options.env,\n });\n\n const existing: string[] = [];\n for (const root of roots) {\n for (const skill of selected) {\n const dest = path.join(root.root, safeSkillName(skill.name));\n assertWithin(root.root, dest);\n if (fs.existsSync(dest)) existing.push(dest);\n }\n }\n if (existing.length > 0 && !parsed.force && !parsed.yes && !parsed.dryRun) {\n if (!shouldPrompt(options, parsed)) {\n throw new Error(\n `Refusing to overwrite existing skill folders without --force: ${existing.join(\n \", \",\n )}`,\n );\n }\n const ok = await (options.promptOverwrite ?? promptForOverwrite)(\n existing,\n );\n if (!ok) throw new Error(\"Install cancelled.\");\n }\n\n const copied: CopiedSkill[] = [];\n for (const root of roots) {\n for (const skill of selected) {\n const dest = path.join(root.root, safeSkillName(skill.name));\n assertWithin(root.root, dest);\n copySkillDir(skill.dir, dest, parsed.dryRun);\n copied.push({\n skillName: skill.name,\n agent: root.agent,\n scope: root.scope,\n from: skill.dir,\n to: dest,\n });\n }\n }\n\n const instructionFiles: string[] = [];\n if (parsed.instructionTargets.length > 0) {\n const block = buildManagedBlock({\n skills: selected,\n source: source.display,\n roots,\n });\n for (const target of parsed.instructionTargets) {\n const file = instructionFilePath(parsed.projectDir, target, parsed);\n upsertManagedBlock(file, block, parsed.dryRun);\n instructionFiles.push(file);\n }\n }\n\n return {\n source: source.display,\n dryRun: parsed.dryRun,\n skills: selected.map((skill) => skill.name),\n copied,\n instructionFiles,\n };\n } finally {\n source.cleanup();\n }\n}\n\nfunction formatList(skills: DiscoveredSkill[]): string {\n if (skills.length === 0) return \"No skill folders found.\\n\";\n return skills\n .map((skill) => {\n const suffix = skill.description ? ` - ${skill.description}` : \"\";\n return `${skill.name}${suffix}\\n ${skill.dir}`;\n })\n .join(\"\\n\");\n}\n\nfunction formatInstallResult(result: InstallResult): string {\n const verb = result.dryRun ? \"Would install\" : \"Installed\";\n const rows = result.copied.map(\n (item) => ` ${item.skillName} -> ${item.to} (${item.agent}/${item.scope})`,\n );\n const instructions =\n result.instructionFiles.length > 0\n ? `\\nUpdated managed instruction blocks:\\n${result.instructionFiles\n .map((file) => ` ${file}`)\n .join(\"\\n\")}`\n : \"\";\n return `${verb} ${result.skills.length} skill${\n result.skills.length === 1 ? \"\" : \"s\"\n } from ${result.source}:\\n${rows.join(\"\\n\")}${instructions}\\n`;\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: RunSkillsCliOptions = {},\n): Promise<void> {\n const cwd = options.cwd ?? process.cwd();\n const parsed = parseSkillsCliArgs(argv, cwd);\n const write =\n options.log ?? ((message: string) => process.stdout.write(message));\n\n if (parsed.command === \"help\") {\n write(`${HELP}\\n`);\n return;\n }\n\n if (!parsed.source) throw new Error(\"Missing source.\");\n\n if (parsed.command === \"list\") {\n const source = await resolveSource(parsed.source, parsed, options);\n try {\n const skills = discoverSkillFolders(source.root);\n if (parsed.json) {\n write(\n `${JSON.stringify({ source: source.display, skills }, null, 2)}\\n`,\n );\n } else {\n write(`${formatList(skills)}\\n`);\n }\n } finally {\n source.cleanup();\n }\n return;\n }\n\n const result = await installSkills(parsed, options);\n if (parsed.json) {\n write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n write(formatInstallResult(result));\n }\n}\n"]}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\n\nexport type AgentId = \"codex\" | \"claude\";\nexport type Scope = \"project\" | \"user\";\ntype Command = \"add\" | \"list\" | \"help\";\ntype InstructionTarget = \"agents\" | \"claude\";\n\nexport const MANAGED_BLOCK_START =\n \"<!-- BEGIN @agent-native/skills managed block -->\";\nexport const MANAGED_BLOCK_END =\n \"<!-- END @agent-native/skills managed block -->\";\n\nexport const HELP = `skills\n\nUsage:\n skills list <source> [--json]\n skills add <source> [--skill <name> ...|--all] [--agent codex|claude|all] [--scope user|project] [--project <dir>] [--instructions agents|claude|both] [--yes] [--force] [--dry-run] [--json]\n\nSources:\n ./skills\n ./skills/my-skill\n owner/repo\n owner/repo/path/to/skills#ref\n github:owner/repo/path/to/skills#ref\n https://github.com/owner/repo/tree/ref/path/to/skills\n\nTargets:\n project codex -> <project>/.agents/skills\n project claude -> <project>/.claude/skills\n user codex -> $CODEX_HOME/skills or ~/.codex/skills\n user claude -> ~/.claude/skills\n\nOptions:\n -s, --skill <name> Install one skill. Repeat or comma-separate.\n --all Install every discovered skill.\n -a, --agent <target> codex, claude, or all. Defaults to codex.\n --scope <scope> user or project. Defaults to user.\n --project <dir> Project root for project-scoped installs.\n --ref <git-ref> Git ref for GitHub-style sources.\n --instructions <set> agents, claude, both/all, or none.\n --with-agents-md Append/update the AGENTS.md managed block.\n --with-claude-md Append/update the CLAUDE.md managed block.\n --agents-file <path> Override the AGENTS.md path.\n --claude-file <path> Override the CLAUDE.md path.\n -y, --yes Accept prompts.\n --force Overwrite existing skill folders.\n --dry-run Print what would change.\n --json Print machine-readable output.`;\n\nexport interface ParsedSkillsCliArgs {\n command: Command;\n source?: string;\n skills: string[];\n all: boolean;\n agents: AgentId[];\n scope: Scope;\n projectDir: string;\n ref?: string;\n instructionTargets: InstructionTarget[];\n agentsFile: string;\n claudeFile: string;\n yes: boolean;\n force: boolean;\n dryRun: boolean;\n json: boolean;\n}\n\nexport interface DiscoveredSkill {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface GitHubSource {\n cloneUrl: string;\n ref?: string;\n subdir: string;\n display: string;\n}\n\ninterface ResolvedSource {\n root: string;\n display: string;\n cleanup: () => void;\n}\n\ninterface TargetRoot {\n agent: AgentId;\n scope: Scope;\n root: string;\n}\n\ninterface CopiedSkill {\n skillName: string;\n agent: AgentId;\n scope: Scope;\n from: string;\n to: string;\n}\n\nexport interface InstallResult {\n source: string;\n dryRun: boolean;\n skills: string[];\n copied: CopiedSkill[];\n instructionFiles: string[];\n}\n\ninterface RunCommandOptions {\n cwd?: string;\n}\n\nexport interface RunSkillsCliOptions {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n isInteractive?: () => boolean;\n log?: (message: string) => void;\n promptSkills?: (skills: DiscoveredSkill[]) => Promise<string[] | null>;\n promptOverwrite?: (paths: string[]) => Promise<boolean>;\n runCommand?: (\n cmd: string,\n args: string[],\n options?: RunCommandOptions,\n ) => Promise<number>;\n}\n\nfunction valueFor(\n args: string[],\n index: number,\n flag: string,\n): { value: string; nextIndex: number } | null {\n const arg = args[index];\n if (arg === flag) {\n const value = args[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return { value, nextIndex: index + 1 };\n }\n if (arg.startsWith(`${flag}=`)) {\n const value = arg.slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}.`);\n return { value, nextIndex: index };\n }\n return null;\n}\n\nfunction splitList(value: string): string[] {\n return value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction normalizeAgent(value: string): AgentId[] {\n const out: AgentId[] = [];\n for (const part of splitList(value)) {\n const key = part.toLowerCase();\n if (key === \"all\") {\n out.push(\"codex\", \"claude\");\n } else if (key === \"codex\") {\n out.push(\"codex\");\n } else if (key === \"claude\" || key === \"claude-code\") {\n out.push(\"claude\");\n } else {\n throw new Error(\n `Unknown agent \"${part}\". Expected codex, claude, or all.`,\n );\n }\n }\n return [...new Set(out)];\n}\n\nfunction normalizeInstructions(value: string): InstructionTarget[] {\n const key = value.trim().toLowerCase();\n if (key === \"none\") return [];\n if (key === \"agents\" || key === \"agents.md\" || key === \"agent\") {\n return [\"agents\"];\n }\n if (key === \"claude\" || key === \"claude.md\") return [\"claude\"];\n if (key === \"both\" || key === \"all\") return [\"agents\", \"claude\"];\n throw new Error(\n `Unknown instructions target \"${value}\". Expected agents, claude, both, or none.`,\n );\n}\n\nfunction pushUnique<T>(items: T[], value: T): void {\n if (!items.includes(value)) items.push(value);\n}\n\nexport function parseSkillsCliArgs(\n argv: string[],\n cwd = process.cwd(),\n): ParsedSkillsCliArgs {\n const first = argv[0];\n let command: Command = \"add\";\n let args = argv;\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(first ? 1 : 0);\n } else if (first === \"add\" || first === \"list\") {\n command = first;\n args = argv.slice(1);\n }\n\n const parsed: ParsedSkillsCliArgs = {\n command,\n skills: [],\n all: false,\n agents: [\"codex\"],\n scope: \"user\",\n projectDir: cwd,\n instructionTargets: [],\n agentsFile: \"AGENTS.md\",\n claudeFile: \"CLAUDE.md\",\n yes: false,\n force: false,\n dryRun: false,\n json: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n let consumed: { value: string; nextIndex: number } | null;\n if (\n (consumed = valueFor(args, i, \"--skill\")) ||\n (consumed = valueFor(args, i, \"-s\"))\n ) {\n for (const skill of splitList(consumed.value)) parsed.skills.push(skill);\n i = consumed.nextIndex;\n } else if (\n (consumed = valueFor(args, i, \"--agent\")) ||\n (consumed = valueFor(args, i, \"-a\"))\n ) {\n parsed.agents = normalizeAgent(consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--scope\"))) {\n if (consumed.value !== \"user\" && consumed.value !== \"project\") {\n throw new Error(\"--scope must be either user or project.\");\n }\n parsed.scope = consumed.value;\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--project\"))) {\n parsed.projectDir = path.resolve(cwd, consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--ref\"))) {\n parsed.ref = consumed.value;\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--instructions\"))) {\n parsed.instructionTargets = normalizeInstructions(consumed.value);\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--agents-file\"))) {\n parsed.agentsFile = consumed.value;\n pushUnique(parsed.instructionTargets, \"agents\");\n i = consumed.nextIndex;\n } else if ((consumed = valueFor(args, i, \"--claude-file\"))) {\n parsed.claudeFile = consumed.value;\n pushUnique(parsed.instructionTargets, \"claude\");\n i = consumed.nextIndex;\n } else if (arg === \"--with-agents-md\") {\n pushUnique(parsed.instructionTargets, \"agents\");\n } else if (arg === \"--with-claude-md\") {\n pushUnique(parsed.instructionTargets, \"claude\");\n } else if (arg === \"--all\") {\n parsed.all = true;\n } else if (arg === \"--global\") {\n parsed.scope = \"user\";\n } else if (arg === \"--project-scope\") {\n parsed.scope = \"project\";\n } else if (arg === \"--yes\" || arg === \"-y\") {\n parsed.yes = true;\n } else if (arg === \"--force\") {\n parsed.force = true;\n } else if (arg === \"--dry-run\") {\n parsed.dryRun = true;\n } else if (arg === \"--json\") {\n parsed.json = true;\n } else if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${arg}`);\n } else if (!parsed.source) {\n parsed.source = arg;\n } else {\n throw new Error(`Unexpected argument: ${arg}`);\n }\n }\n\n parsed.skills = [...new Set(parsed.skills)];\n parsed.agents = [...new Set(parsed.agents)];\n return parsed;\n}\n\nfunction stripGitSuffix(value: string): string {\n return value.endsWith(\".git\") ? value.slice(0, -4) : value;\n}\n\nfunction parsePathGitHubSource(\n input: string,\n ref?: string,\n): GitHubSource | null {\n const hashIndex = input.indexOf(\"#\");\n const withoutHash = hashIndex >= 0 ? input.slice(0, hashIndex) : input;\n const hashRef = hashIndex >= 0 ? input.slice(hashIndex + 1) : undefined;\n const raw = withoutHash.startsWith(\"github:\")\n ? withoutHash.slice(\"github:\".length)\n : withoutHash;\n if (/^[./~]/.test(raw)) return null;\n const parts = raw.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n if (!/^[A-Za-z0-9_.-]+$/.test(parts[0])) return null;\n if (!/^[A-Za-z0-9_.-]+(?:\\.git)?$/.test(parts[1])) return null;\n const owner = parts[0];\n const repo = stripGitSuffix(parts[1]);\n const subdir = parts.slice(2).join(\"/\");\n return {\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n ref: ref ?? hashRef,\n subdir,\n display: `github:${owner}/${repo}${subdir ? `/${subdir}` : \"\"}${\n (ref ?? hashRef) ? `#${ref ?? hashRef}` : \"\"\n }`,\n };\n}\n\nexport function parseGitHubSource(\n input: string,\n ref?: string,\n): GitHubSource | null {\n if (input.startsWith(\"git@github.com:\")) {\n const withoutPrefix = input.slice(\"git@github.com:\".length);\n return parsePathGitHubSource(withoutPrefix, ref);\n }\n\n if (!input.startsWith(\"http://\") && !input.startsWith(\"https://\")) {\n return parsePathGitHubSource(input, ref);\n }\n\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n return null;\n }\n if (url.hostname !== \"github.com\") return null;\n const parts = url.pathname.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n const owner = parts[0];\n const repo = stripGitSuffix(parts[1]);\n let sourceRef = ref ?? (url.hash ? url.hash.slice(1) : undefined);\n let subdir = \"\";\n if (parts[2] === \"tree\" || parts[2] === \"blob\") {\n sourceRef = ref ?? parts[3] ?? sourceRef;\n subdir = parts.slice(4).join(\"/\");\n } else {\n subdir = parts.slice(2).join(\"/\");\n }\n return {\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n ref: sourceRef,\n subdir,\n display: `github:${owner}/${repo}${subdir ? `/${subdir}` : \"\"}${\n sourceRef ? `#${sourceRef}` : \"\"\n }`,\n };\n}\n\nfunction runCommand(\n cmd: string,\n args: string[],\n options: RunCommandOptions = {},\n): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n cwd: options.cwd,\n stdio: \"inherit\",\n shell: process.platform === \"win32\",\n env: process.env,\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) reject(new Error(`${cmd} interrupted by ${signal}.`));\n else resolve(code ?? 0);\n });\n });\n}\n\nasync function resolveSource(\n source: string,\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions,\n): Promise<ResolvedSource> {\n const local = path.resolve(options.cwd ?? process.cwd(), source);\n if (fs.existsSync(local)) {\n return { root: local, display: source, cleanup: () => {} };\n }\n\n const github = parseGitHubSource(source, parsed.ref);\n if (!github) {\n throw new Error(\n `Source does not exist and is not a GitHub source: ${source}`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"an-skills-\"));\n const repoDir = path.join(tmpRoot, \"repo\");\n const args = [\"clone\", \"--depth\", \"1\"];\n if (github.ref) args.push(\"--branch\", github.ref);\n args.push(github.cloneUrl, repoDir);\n const code = await (options.runCommand ?? runCommand)(\"git\", args);\n if (code !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(`git clone exited with ${code}.`);\n }\n\n const root = github.subdir ? path.join(repoDir, github.subdir) : repoDir;\n if (!fs.existsSync(root)) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(`GitHub source path not found: ${github.subdir}`);\n }\n return {\n root,\n display: github.display,\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseFrontmatterField(\n content: string,\n field: string,\n): string | undefined {\n const match = content.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!match) return undefined;\n const fieldMatch = match[1].match(new RegExp(`^${field}:\\\\s*(.+)$`, \"m\"));\n if (!fieldMatch) return undefined;\n return fieldMatch[1].trim().replace(/^['\"]|['\"]$/g, \"\");\n}\n\nfunction safeSkillName(value: string): string {\n const name = value.trim();\n if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return name;\n}\n\nfunction skillFromDir(dir: string): DiscoveredSkill | null {\n const file = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(file)) return null;\n const content = fs.readFileSync(file, \"utf-8\");\n return {\n name: safeSkillName(\n parseFrontmatterField(content, \"name\") ?? path.basename(dir),\n ),\n description: parseFrontmatterField(content, \"description\"),\n dir,\n };\n}\n\nfunction addSkillDir(\n out: DiscoveredSkill[],\n seen: Set<string>,\n dir: string,\n): void {\n const skill = skillFromDir(dir);\n if (!skill) return;\n const key = `${skill.name}:${path.resolve(skill.dir)}`;\n if (seen.has(key)) return;\n seen.add(key);\n out.push(skill);\n}\n\nexport function discoverSkillFolders(root: string): DiscoveredSkill[] {\n const out: DiscoveredSkill[] = [];\n const seen = new Set<string>();\n addSkillDir(out, seen, root);\n\n const containers = [\n path.join(root, \"skills\"),\n path.join(root, \".agents\", \"skills\"),\n path.join(root, \".claude\", \"skills\"),\n root,\n ];\n\n for (const container of containers) {\n if (!fs.existsSync(container)) continue;\n const stat = fs.statSync(container);\n if (!stat.isDirectory()) continue;\n for (const entry of fs.readdirSync(container, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n addSkillDir(out, seen, path.join(container, entry.name));\n }\n }\n\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction homeDir(env: NodeJS.ProcessEnv): string {\n return env.HOME || os.homedir();\n}\n\nexport function targetRootsFor(input: {\n agents: AgentId[];\n scope: Scope;\n projectDir: string;\n env?: NodeJS.ProcessEnv;\n}): TargetRoot[] {\n const env = input.env ?? process.env;\n const roots: TargetRoot[] = [];\n for (const agent of input.agents) {\n if (input.scope === \"project\") {\n roots.push({\n agent,\n scope: \"project\",\n root:\n agent === \"codex\"\n ? path.join(input.projectDir, \".agents\", \"skills\")\n : path.join(input.projectDir, \".claude\", \"skills\"),\n });\n } else if (agent === \"codex\") {\n roots.push({\n agent,\n scope: \"user\",\n root: env.CODEX_HOME\n ? path.join(env.CODEX_HOME, \"skills\")\n : path.join(homeDir(env), \".codex\", \"skills\"),\n });\n } else {\n roots.push({\n agent,\n scope: \"user\",\n root: path.join(homeDir(env), \".claude\", \"skills\"),\n });\n }\n }\n return roots;\n}\n\nfunction shouldPrompt(\n options: RunSkillsCliOptions,\n parsed: ParsedSkillsCliArgs,\n) {\n if (parsed.yes || parsed.json) return false;\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nasync function promptForSkills(\n skills: DiscoveredSkill[],\n): Promise<string[] | null> {\n process.stdout.write(\"Select skills to install:\\n\");\n skills.forEach((skill, index) => {\n const suffix = skill.description ? ` - ${skill.description}` : \"\";\n process.stdout.write(` ${index + 1}. ${skill.name}${suffix}\\n`);\n });\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\n \"Enter numbers or names separated by commas, or all: \",\n );\n const trimmed = answer.trim();\n if (!trimmed) return null;\n if (trimmed.toLowerCase() === \"all\")\n return skills.map((skill) => skill.name);\n const selected: string[] = [];\n for (const part of splitList(trimmed)) {\n const index = Number(part);\n if (Number.isInteger(index) && index >= 1 && index <= skills.length) {\n selected.push(skills[index - 1].name);\n } else {\n selected.push(part);\n }\n }\n return selected;\n } finally {\n rl.close();\n }\n}\n\nasync function promptForOverwrite(paths: string[]): Promise<boolean> {\n process.stdout.write(\"Existing skill folders will be overwritten:\\n\");\n for (const target of paths) process.stdout.write(` ${target}\\n`);\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\"Overwrite? [y/N] \");\n return answer.trim().toLowerCase() === \"y\";\n } finally {\n rl.close();\n }\n}\n\nasync function selectSkills(\n discovered: DiscoveredSkill[],\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions,\n): Promise<DiscoveredSkill[]> {\n if (discovered.length === 0) {\n throw new Error(\"No skill folders found. Expected folders with SKILL.md.\");\n }\n let names = parsed.skills;\n if (parsed.all) {\n names = discovered.map((skill) => skill.name);\n } else if (names.length === 0 && discovered.length === 1) {\n names = [discovered[0].name];\n } else if (names.length === 0 && shouldPrompt(options, parsed)) {\n const picked = await (options.promptSkills ?? promptForSkills)(discovered);\n if (!picked || picked.length === 0) throw new Error(\"No skills selected.\");\n names = picked;\n } else if (names.length === 0) {\n throw new Error(\n \"Multiple skills found. Pass --skill <name>, --all, or run interactively.\",\n );\n }\n\n const byName = new Map(discovered.map((skill) => [skill.name, skill]));\n return names.map((name) => {\n const skill = byName.get(name);\n if (!skill) {\n throw new Error(\n `Skill \"${name}\" not found. Available: ${discovered\n .map((item) => item.name)\n .join(\", \")}`,\n );\n }\n return skill;\n });\n}\n\nfunction assertWithin(root: string, target: string): void {\n const rel = path.relative(path.resolve(root), path.resolve(target));\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\n throw new Error(`Refusing to write outside target root: ${target}`);\n }\n}\n\nfunction copySkillDir(from: string, to: string, dryRun: boolean): void {\n if (dryRun) return;\n fs.rmSync(to, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(to), { recursive: true });\n fs.cpSync(from, to, {\n recursive: true,\n filter(source) {\n const base = path.basename(source);\n return base !== \".git\" && base !== \"node_modules\";\n },\n });\n}\n\nfunction instructionFilePath(\n projectDir: string,\n target: InstructionTarget,\n parsed: ParsedSkillsCliArgs,\n): string {\n const file = target === \"agents\" ? parsed.agentsFile : parsed.claudeFile;\n return path.isAbsolute(file) ? file : path.join(projectDir, file);\n}\n\nfunction buildManagedBlock(input: {\n skills: DiscoveredSkill[];\n source: string;\n roots: TargetRoot[];\n}): string {\n const agentText = [...new Set(input.roots.map((root) => root.agent))].join(\n \", \",\n );\n const scopeText = [...new Set(input.roots.map((root) => root.scope))].join(\n \", \",\n );\n const skillLines = input.skills\n .map((skill) => `- \\`${skill.name}\\``)\n .join(\"\\n\");\n return `${MANAGED_BLOCK_START}\n## Installed Agent Skills\n\nThis block is managed by \\`@agent-native/skills\\`. Re-run the installer to update\nit.\n\nSource: \\`${input.source}\\`\nAgents: ${agentText}\nScope: ${scopeText}\n\n${skillLines}\n${MANAGED_BLOCK_END}\n`;\n}\n\n/**\n * Remove EVERY managed block from `text`. Re-running the installer should always\n * leave exactly one block, so we strip them all before re-inserting a single\n * fresh one — a file that somehow accumulated duplicates (older versions, a\n * manual copy/paste) collapses back to one instead of growing forever.\n */\nfunction stripManagedBlocks(text: string): string {\n let result = text;\n for (;;) {\n const start = result.indexOf(MANAGED_BLOCK_START);\n if (start < 0) break;\n const end = result.indexOf(MANAGED_BLOCK_END, start);\n if (end < 0) break; // unterminated marker — leave the rest of the file alone\n result =\n result.slice(0, start) + result.slice(end + MANAGED_BLOCK_END.length);\n }\n return result;\n}\n\nexport function upsertManagedBlock(\n file: string,\n block: string,\n dryRun = false,\n): boolean {\n const current = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const firstAt = current.indexOf(MANAGED_BLOCK_START);\n let next: string;\n if (firstAt >= 0) {\n // Re-insert the fresh block where the first managed block began, dropping\n // every other managed block in the file (not just the first).\n const before = current.slice(0, firstAt).trimEnd();\n const after = stripManagedBlocks(current.slice(firstAt)).trimStart();\n next =\n (before ? `${before}\\n\\n` : \"\") +\n `${block.trimEnd()}\\n` +\n (after ? `\\n${after}` : \"\");\n } else {\n next = `${current.trimEnd()}${current.trim() ? \"\\n\\n\" : \"\"}${block.trimEnd()}\\n`;\n }\n if (next === current) return false;\n if (!dryRun) {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, next, \"utf-8\");\n }\n return true;\n}\n\nexport async function installSkills(\n parsed: ParsedSkillsCliArgs,\n options: RunSkillsCliOptions = {},\n): Promise<InstallResult> {\n if (!parsed.source) throw new Error(\"Missing source.\");\n const source = await resolveSource(parsed.source, parsed, options);\n try {\n const discovered = discoverSkillFolders(source.root);\n const selected = await selectSkills(discovered, parsed, options);\n const roots = targetRootsFor({\n agents: parsed.agents,\n scope: parsed.scope,\n projectDir: parsed.projectDir,\n env: options.env,\n });\n\n const existing: string[] = [];\n for (const root of roots) {\n for (const skill of selected) {\n const dest = path.join(root.root, safeSkillName(skill.name));\n assertWithin(root.root, dest);\n if (fs.existsSync(dest)) existing.push(dest);\n }\n }\n if (existing.length > 0 && !parsed.force && !parsed.yes && !parsed.dryRun) {\n if (!shouldPrompt(options, parsed)) {\n throw new Error(\n `Refusing to overwrite existing skill folders without --force: ${existing.join(\n \", \",\n )}`,\n );\n }\n const ok = await (options.promptOverwrite ?? promptForOverwrite)(\n existing,\n );\n if (!ok) throw new Error(\"Install cancelled.\");\n }\n\n const copied: CopiedSkill[] = [];\n for (const root of roots) {\n for (const skill of selected) {\n const dest = path.join(root.root, safeSkillName(skill.name));\n assertWithin(root.root, dest);\n copySkillDir(skill.dir, dest, parsed.dryRun);\n copied.push({\n skillName: skill.name,\n agent: root.agent,\n scope: root.scope,\n from: skill.dir,\n to: dest,\n });\n }\n }\n\n const instructionFiles: string[] = [];\n if (parsed.instructionTargets.length > 0) {\n const block = buildManagedBlock({\n skills: selected,\n source: source.display,\n roots,\n });\n for (const target of parsed.instructionTargets) {\n const file = instructionFilePath(parsed.projectDir, target, parsed);\n upsertManagedBlock(file, block, parsed.dryRun);\n instructionFiles.push(file);\n }\n }\n\n return {\n source: source.display,\n dryRun: parsed.dryRun,\n skills: selected.map((skill) => skill.name),\n copied,\n instructionFiles,\n };\n } finally {\n source.cleanup();\n }\n}\n\nfunction formatList(skills: DiscoveredSkill[]): string {\n if (skills.length === 0) return \"No skill folders found.\\n\";\n return skills\n .map((skill) => {\n const suffix = skill.description ? ` - ${skill.description}` : \"\";\n return `${skill.name}${suffix}\\n ${skill.dir}`;\n })\n .join(\"\\n\");\n}\n\nfunction formatInstallResult(result: InstallResult): string {\n const verb = result.dryRun ? \"Would install\" : \"Installed\";\n const rows = result.copied.map(\n (item) => ` ${item.skillName} -> ${item.to} (${item.agent}/${item.scope})`,\n );\n const instructions =\n result.instructionFiles.length > 0\n ? `\\nUpdated managed instruction blocks:\\n${result.instructionFiles\n .map((file) => ` ${file}`)\n .join(\"\\n\")}`\n : \"\";\n return `${verb} ${result.skills.length} skill${\n result.skills.length === 1 ? \"\" : \"s\"\n } from ${result.source}:\\n${rows.join(\"\\n\")}${instructions}\\n`;\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: RunSkillsCliOptions = {},\n): Promise<void> {\n const cwd = options.cwd ?? process.cwd();\n const parsed = parseSkillsCliArgs(argv, cwd);\n const write =\n options.log ?? ((message: string) => process.stdout.write(message));\n\n if (parsed.command === \"help\") {\n write(`${HELP}\\n`);\n return;\n }\n\n if (!parsed.source) throw new Error(\"Missing source.\");\n\n if (parsed.command === \"list\") {\n const source = await resolveSource(parsed.source, parsed, options);\n try {\n const skills = discoverSkillFolders(source.root);\n if (parsed.json) {\n write(\n `${JSON.stringify({ source: source.display, skills }, null, 2)}\\n`,\n );\n } else {\n write(`${formatList(skills)}\\n`);\n }\n } finally {\n source.cleanup();\n }\n return;\n }\n\n const result = await installSkills(parsed, options);\n if (parsed.json) {\n write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n write(formatInstallResult(result));\n }\n}\n"]}
@@ -80,11 +80,16 @@ export declare function hasJsonMcpEntryForClient(client: ClientId, file: string,
80
80
  export declare function buildCodexHttpBlock(name: string, mcpUrl: string, token?: string, headers?: Record<string, string>): string;
81
81
  export declare function buildCodexLocalBlock(name: string, args: string[], env?: Record<string, string>): string;
82
82
  /**
83
- * Replace (or append) the `[mcp_servers.<name>]` block in a TOML file
84
- * without disturbing other content. A block is the header line plus every
85
- * following line until the next top-level `[` table header or EOF. Pass
86
- * `block === null` to remove the block. Identical algorithm to `mcp.ts`'s
87
- * `writeCodexBlock` so the two never diverge.
83
+ * Replace (or append) the entire `[mcp_servers.<name>]` footprint in a TOML
84
+ * file without disturbing other content. The footprint is the server's own
85
+ * table AND every sub-table of it (`[mcp_servers.<name>.http_headers]`,
86
+ * `[mcp_servers.<name>.env]`, …), each spanning its header line plus every
87
+ * following line until the next table header or EOF. Removing the whole
88
+ * footprint — wherever the pieces sit in the file — is what keeps a re-install
89
+ * from leaving a stale sub-table that collides with the freshly written inline
90
+ * block (a TOML duplicate-key error). Matches both the canonical quoted header
91
+ * and the legacy bare header. Pass `block === null` to remove the footprint.
92
+ * Identical algorithm to `mcp.ts`'s `writeCodexBlock` so the two never diverge.
88
93
  */
89
94
  export declare function writeCodexBlock(file: string, name: string, block: string | null): void;
90
95
  export declare function codexHasBlock(file: string, name: string): boolean;
@@ -102,8 +107,11 @@ export declare function canonicalUrl(value: string | undefined): string | undefi
102
107
  export declare function removeJsonSameUrlDuplicates(file: string, mcpUrl: string, keepName: string): string[];
103
108
  /**
104
109
  * After writing the canonical `keepName` Codex block, remove any OTHER
105
- * `[mcp_servers.*]` blocks in the same TOML file whose `url =` line
106
- * normalises to the same value as `mcpUrl`. Returns removed entry names.
110
+ * `[mcp_servers.*]` servers in the same TOML file whose `url =` line normalises
111
+ * to the same value as `mcpUrl`. A server's entire footprint is removed its
112
+ * own table AND any sub-tables (`.http_headers`, `.env`, …), even when they are
113
+ * not contiguous — so cleanup never leaves an orphaned sub-table behind.
114
+ * Returns removed entry names in first-seen order.
107
115
  */
108
116
  export declare function removeCodexSameUrlDuplicates(file: string, mcpUrl: string, keepName: string): string[];
109
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../src/mcp-config-writers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../src/mcp-config-writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,MAAM,MAAM,QAAQ,GAChB,aAAa,GACb,iBAAiB,GACjB,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,gBAAgB,CAAC;AAErB,eAAO,MAAM,OAAO,EAAE,QAAQ,EAQ7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAUd;AAYD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6BzB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAmBhD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAwBR;AAmCD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAuBhE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAIlE;AAqBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,IAAI,CAEN;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,IAAI,CAEN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAIT;AAsID,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAgBR;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,CAYR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CAsCN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CASjE;AAMD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAiBR;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAU1E;AAiDD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAEV;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA4EV;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,EAAE,CAWV"}