@agent-native/skills 0.1.1 → 0.2.1

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,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\n\nexport type SkillClient = \"codex\" | \"claude-code\";\nexport type SkillScope = \"project\" | \"user\";\n\nexport interface SkillEntry {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface InstallSkillsOptions {\n source?: string;\n skillNames?: string[];\n clients?: SkillClient[];\n scope?: SkillScope;\n baseDir?: string;\n yes?: boolean;\n dryRun?: boolean;\n updateInstructions?: boolean;\n instructionFiles?: string[];\n withGithubAction?: boolean;\n force?: boolean;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n}\n\nexport interface InstallSkillsResult {\n source: string;\n skills: string[];\n clients: SkillClient[];\n scope: SkillScope;\n written: string[];\n instructionFiles: string[];\n githubActionPath?: string;\n dryRun: boolean;\n}\n\ninterface ParsedArgs {\n command: \"add\" | \"list\" | \"help\";\n source?: string;\n copySource: boolean;\n skillNames: string[];\n clients: SkillClient[];\n scope: SkillScope;\n scopeExplicit: boolean;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n updateInstructions?: boolean;\n instructionFiles: string[];\n withGithubAction: boolean;\n force: boolean;\n baseDir?: string;\n}\n\nconst HELP = `@agent-native/skills\n\nUsage:\n npx @agent-native/skills add [options]\n npx @agent-native/skills list\n\nOptions:\n --skill <name> Install only this skill (repeatable)\n --client, -a <client> codex, claude-code, or all (repeatable or comma-separated)\n --scope <user|project> Install globally or into the current project (default: user)\n -g, --global Alias for --scope user\n --project Alias for --scope project\n --update-instructions Add managed AGENTS.md / CLAUDE.md instructions when useful\n --no-update-instructions Skip managed instruction file updates\n --instructions-file <path> File to receive managed instructions (repeatable)\n --with-github-action Add .github/workflows/pr-visual-recap.yml when visual-recap is installed\n --force Overwrite a different existing PR Visual Recap workflow\n -y, --yes Use defaults in non-interactive mode\n --dry-run Print intended writes without changing files\n --json Print the result as JSON\n\nExamples:\n npx @agent-native/skills add\n npx @agent-native/skills add --skill quick-recap\n npx @agent-native/skills add --skill visual-recap --with-github-action\n`;\n\nconst CLIENTS: SkillClient[] = [\"codex\", \"claude-code\"];\nconst DEFAULT_SKILLS_SOURCE = \"BuilderIO/skills\";\nconst MANAGED_INSTRUCTIONS_START = \"<!-- BEGIN @agent-native/skills -->\";\nconst MANAGED_INSTRUCTIONS_END = \"<!-- END @agent-native/skills -->\";\n\nexport function parseSkillsCliArgs(argv: string[]): ParsedArgs {\n const first = argv[0];\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n return defaultArgs(\"help\");\n }\n\n const command = first === \"list\" ? \"list\" : \"add\";\n const args = first === \"add\" || first === \"list\" ? argv.slice(1) : argv;\n const out = defaultArgs(command);\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n const eat = (flag: string): string | undefined => {\n if (arg === flag) {\n const next = args[++i];\n if (!next || next.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return next;\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;\n }\n return undefined;\n };\n\n let value: string | undefined;\n if ((value = eat(\"--skill\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"-s\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"--client\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--agent\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"-a\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--scope\")) !== undefined) {\n out.scope = parseScope(value);\n out.scopeExplicit = true;\n } else if ((value = eat(\"--instructions-file\")) !== undefined)\n out.instructionFiles.push(value);\n else if ((value = eat(\"--cwd\")) !== undefined) out.baseDir = value;\n else if (arg === \"-g\" || arg === \"--global\") {\n out.scope = \"user\";\n out.scopeExplicit = true;\n } else if (arg === \"--project\") {\n out.scope = \"project\";\n out.scopeExplicit = true;\n } else if (arg === \"--copy\") {\n // Compatibility with the open `skills` CLI. This installer always copies.\n out.copySource = true;\n } else if (arg === \"-y\" || arg === \"--yes\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--update-instructions\") out.updateInstructions = true;\n else if (arg === \"--no-update-instructions\") out.updateInstructions = false;\n else if (arg === \"--with-github-action\" || arg === \"--with-github-actions\")\n out.withGithubAction = true;\n else if (arg === \"--force\") out.force = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.source) out.source = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (out.source && out.source !== DEFAULT_SKILLS_SOURCE && !out.copySource) {\n throw new Error(\n `Unexpected argument: ${out.source}. @agent-native/skills installs the BuilderIO skills collection; use --skill <name> to choose a skill.`,\n );\n }\n if (out.source === DEFAULT_SKILLS_SOURCE && !out.copySource) {\n out.source = undefined;\n }\n\n out.skillNames = unique(out.skillNames.map(normalizeSkillName));\n out.clients = unique(out.clients);\n out.instructionFiles = unique(out.instructionFiles);\n return out;\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: Pick<InstallSkillsOptions, \"log\" | \"isInteractive\" | \"baseDir\"> = {},\n): Promise<void> {\n const parsed = parseSkillsCliArgs(argv);\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n const skillSource = parsed.source ?? DEFAULT_SKILLS_SOURCE;\n\n if (parsed.command === \"list\") {\n const source = await materializeSource(skillSource);\n try {\n const skills = discoverSkills(source.root);\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n process.stdout.write(\n `${skill.name}${skill.description ? ` - ${skill.description}` : \"\"}\\n`,\n );\n }\n return;\n } finally {\n source.cleanup?.();\n }\n }\n\n const result = await installSkills({\n source: skillSource,\n skillNames: parsed.skillNames,\n clients: parsed.clients,\n // Leave scope undefined unless the user passed --scope/-g/--project so the\n // installer can prompt for it interactively.\n scope: parsed.scopeExplicit ? parsed.scope : undefined,\n baseDir: parsed.baseDir ?? options.baseDir,\n yes: parsed.yes,\n dryRun: parsed.dryRun,\n updateInstructions: parsed.updateInstructions,\n instructionFiles: parsed.instructionFiles,\n withGithubAction: parsed.withGithubAction,\n force: parsed.force,\n log: parsed.printJson ? undefined : options.log,\n isInteractive: options.isInteractive,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n const verb = parsed.dryRun ? \"Would install\" : \"Installed\";\n process.stdout.write(\n [\n `${verb} ${result.skills.join(\", \")} for ${result.clients.join(\", \")} (${result.scope}).`,\n result.written.length ? `Skill files: ${result.written.join(\", \")}` : \"\",\n result.instructionFiles.length\n ? `Managed instructions: ${result.instructionFiles.join(\", \")}`\n : \"\",\n result.githubActionPath\n ? `PR Visual Recap workflow: ${result.githubActionPath}`\n : \"\",\n parsed.dryRun\n ? \"\"\n : \"Restart or reload selected agent clients if needed.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n}\n\nexport async function installSkills(\n options: InstallSkillsOptions,\n): Promise<InstallSkillsResult> {\n const baseDir = path.resolve(options.baseDir ?? process.cwd());\n const log = options.log ?? (() => {});\n const sourceInput = options.source ?? DEFAULT_SKILLS_SOURCE;\n const source = await materializeSource(sourceInput);\n try {\n const entries = discoverSkills(source.root);\n if (entries.length === 0) {\n throw new Error(\n `No skills found in ${sourceInput}. Expected skills/*/SKILL.md.`,\n );\n }\n\n const selected = await resolveSelectedSkills(entries, options);\n const clients = await resolveSelectedClients(options);\n const scope = await resolveSelectedScope(options);\n const written: string[] = [];\n\n for (const client of clients) {\n const root = installRootForClient(client, scope, baseDir);\n for (const skill of selected) {\n const destination = path.join(root, skill.name);\n written.push(destination);\n if (!options.dryRun) {\n fs.rmSync(destination, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(destination), { recursive: true });\n fs.cpSync(skill.dir, destination, { recursive: true });\n }\n }\n }\n\n const instructionFiles = await maybeUpdateInstructions(\n selected.map((skill) => skill.name),\n baseDir,\n options,\n );\n\n const githubActionPath =\n selected.some((skill) => skill.name === \"visual-recap\") &&\n (options.withGithubAction ||\n (await shouldPromptGithubAction(options, baseDir)))\n ? writePrVisualRecapWorkflow(baseDir, options)\n : undefined;\n\n log(\n `Resolved ${selected.length} skill${selected.length === 1 ? \"\" : \"s\"} from ${source.root}.`,\n );\n return {\n source: source.root,\n skills: selected.map((skill) => skill.name),\n clients,\n scope,\n written,\n instructionFiles,\n githubActionPath,\n dryRun: Boolean(options.dryRun),\n };\n } finally {\n source.cleanup?.();\n }\n}\n\nfunction defaultArgs(command: ParsedArgs[\"command\"]): ParsedArgs {\n return {\n command,\n copySource: false,\n skillNames: [],\n clients: [],\n scope: \"user\",\n scopeExplicit: false,\n yes: false,\n dryRun: false,\n printJson: false,\n instructionFiles: [],\n withGithubAction: false,\n force: false,\n };\n}\n\nfunction parseScope(value: string): SkillScope {\n if (value === \"user\" || value === \"project\") return value;\n throw new Error(\"--scope must be user or project.\");\n}\n\nfunction normalizeClients(value: string): SkillClient[] {\n return value.split(\",\").flatMap((raw) => {\n const client = raw.trim().toLowerCase();\n if (!client) return [];\n if (client === \"all\") return CLIENTS;\n if (client === \"codex\") return [\"codex\" as const];\n if (\n client === \"claude\" ||\n client === \"claude-code\" ||\n client === \"claude-code-cli\"\n ) {\n return [\"claude-code\" as const];\n }\n throw new Error(\n `Unsupported client \"${raw}\". Use codex, claude-code, or all.`,\n );\n });\n}\n\nfunction normalizeSkillName(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return normalized;\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nasync function resolveSelectedSkills(\n entries: SkillEntry[],\n options: InstallSkillsOptions,\n): Promise<SkillEntry[]> {\n const byName = new Map(entries.map((entry) => [entry.name, entry]));\n const requested = unique((options.skillNames ?? []).map(normalizeSkillName));\n if (requested.length > 0) {\n const missing = requested.filter((name) => !byName.has(name));\n if (missing.length > 0) {\n throw new Error(\n `Unknown skill${missing.length === 1 ? \"\" : \"s\"}: ${missing.join(\", \")}. Available: ${entries\n .map((entry) => entry.name)\n .join(\", \")}.`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n if (!isInteractive(options) || options.yes) return entries;\n\n const answer = await promptLine(\n [\n \"Which skills do you want to install?\",\n ...entries.map(\n (entry, index) =>\n ` ${index + 1}. ${entry.name}${entry.description ? ` - ${entry.description}` : \"\"}`,\n ),\n \"Enter numbers or names separated by commas, or press Enter for all: \",\n ].join(\"\\n\"),\n );\n const trimmed = answer.trim();\n if (!trimmed) return entries;\n const selectedNames = trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => {\n const asNumber = Number(part);\n if (\n Number.isInteger(asNumber) &&\n asNumber >= 1 &&\n asNumber <= entries.length\n ) {\n return entries[asNumber - 1].name;\n }\n return normalizeSkillName(part);\n });\n return resolveSelectedSkills(entries, {\n ...options,\n skillNames: selectedNames,\n });\n}\n\nasync function resolveSelectedScope(\n options: InstallSkillsOptions,\n): Promise<SkillScope> {\n if (options.scope) return options.scope;\n if (!isInteractive(options) || options.yes) return \"user\";\n\n const answer = await promptLine(\n [\n \"Where do you want to install these skills?\",\n \" 1. project - this repo only (.agents / .claude in the current directory)\",\n \" 2. user - your home directory, available across all projects\",\n \"Enter project or user [project]: \",\n ].join(\"\\n\"),\n );\n const trimmed = answer.trim().toLowerCase();\n if (trimmed === \"2\" || trimmed === \"user\" || trimmed === \"u\") return \"user\";\n return \"project\";\n}\n\nasync function resolveSelectedClients(\n options: InstallSkillsOptions,\n): Promise<SkillClient[]> {\n const requested = unique(options.clients ?? []);\n if (requested.length > 0) return requested;\n if (!isInteractive(options) || options.yes) return [\"codex\"];\n\n const answer = await promptLine(\n \"Install for which clients? Enter codex, claude-code, or all [codex]: \",\n );\n const trimmed = answer.trim();\n return trimmed ? unique(normalizeClients(trimmed)) : [\"codex\"];\n}\n\nfunction isInteractive(\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\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 promptLine(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n return await rl.question(question);\n } finally {\n rl.close();\n }\n}\n\nfunction installRootForClient(\n client: SkillClient,\n scope: SkillScope,\n baseDir: string,\n): string {\n const home = process.env.HOME || os.homedir();\n if (scope === \"project\") {\n return client === \"codex\"\n ? path.join(baseDir, \".agents\", \"skills\")\n : path.join(baseDir, \".claude\", \"skills\");\n }\n if (client === \"codex\") {\n return process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, \"skills\")\n : path.join(home, \".codex\", \"skills\");\n }\n return path.join(home, \".claude\", \"skills\");\n}\n\nfunction discoverSkills(root: string): SkillEntry[] {\n const skillsRoot = resolveSkillsRoot(root);\n const directSkill = path.join(skillsRoot, \"SKILL.md\");\n if (fs.existsSync(directSkill)) {\n const entry = skillEntry(skillsRoot);\n return entry ? [entry] : [];\n }\n const entries = fs\n .readdirSync(skillsRoot, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => skillEntry(path.join(skillsRoot, entry.name)))\n .filter((entry): entry is SkillEntry => Boolean(entry));\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction resolveSkillsRoot(root: string): string {\n for (const manifestPath of [\n path.join(root, \".codex-plugin\", \"plugin.json\"),\n path.join(root, \".claude-plugin\", \"plugin.json\"),\n ]) {\n if (!fs.existsSync(manifestPath)) continue;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\")) as {\n skills?: unknown;\n };\n if (typeof manifest.skills === \"string\") {\n const resolved = path.resolve(root, manifest.skills);\n if (fs.existsSync(resolved)) return resolved;\n }\n } catch {}\n }\n const conventional = path.join(root, \"skills\");\n if (fs.existsSync(conventional)) return conventional;\n return root;\n}\n\nfunction skillEntry(dir: string): SkillEntry | null {\n const skillFile = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(skillFile)) return null;\n const body = fs.readFileSync(skillFile, \"utf-8\");\n const frontmatter = body.match(/^---\\n([\\s\\S]*?)\\n---/);\n const name =\n frontmatter?.[1]\n ?.match(/^name:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m)?.[1]\n ?.trim() ?? path.basename(dir);\n const description = frontmatter?.[1]\n ?.match(/^description:\\s*(?:>-\\s*)?(.+)$/m)?.[1]\n ?.trim();\n return { name: normalizeSkillName(name), dir, description };\n}\n\nasync function materializeSource(input: string): Promise<{\n root: string;\n cleanup?: () => void;\n}> {\n const local = path.resolve(input);\n if (fs.existsSync(local)) return { root: local };\n\n const parsed = parseGitHubSource(input);\n if (!parsed) {\n throw new Error(\n `Skill source not found: ${input}. Use a local path, GitHub owner/repo, or GitHub URL.`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-skills-\"),\n );\n const archive = path.join(tmpRoot, \"source.tgz\");\n const ref = parsed.ref ?? \"main\";\n const url = `https://codeload.github.com/${parsed.owner}/${parsed.repo}/tar.gz/${encodeURIComponent(ref)}`;\n const response = await fetch(url, {\n headers: { \"user-agent\": \"@agent-native/skills\" },\n });\n if (!response.ok) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not download ${parsed.owner}/${parsed.repo}@${ref}: HTTP ${response.status}.`,\n );\n }\n fs.writeFileSync(archive, Buffer.from(await response.arrayBuffer()));\n\n const extractDir = path.join(tmpRoot, \"extract\");\n fs.mkdirSync(extractDir, { recursive: true });\n const extracted = spawnSync(\"tar\", [\"-xzf\", archive, \"-C\", extractDir], {\n stdio: \"pipe\",\n encoding: \"utf-8\",\n });\n if (extracted.status !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not extract ${input}: ${extracted.stderr || extracted.stdout}`,\n );\n }\n const [first] = fs\n .readdirSync(extractDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory());\n if (!first) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Downloaded archive for ${input} did not contain a repo directory.`,\n );\n }\n return {\n root: path.join(extractDir, first.name),\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseGitHubSource(\n input: string,\n): { owner: string; repo: string; ref?: string } | null {\n const shorthand = input.match(\n /^([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)(?:#(.+))?$/,\n );\n if (shorthand) {\n return {\n owner: shorthand[1],\n repo: shorthand[2].replace(/\\.git$/, \"\"),\n ref: shorthand[3],\n };\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 treeIndex = parts.indexOf(\"tree\");\n return {\n owner: parts[0],\n repo: parts[1].replace(/\\.git$/, \"\"),\n ref:\n treeIndex >= 0 && parts[treeIndex + 1]\n ? parts.slice(treeIndex + 1).join(\"/\")\n : url.hash.slice(1) || undefined,\n };\n}\n\nfunction instructionContentForSkill(skillName: string): string | null {\n if (skillName === \"quick-recap\") {\n return `## Quick Recap Status Block\n\nEvery response that completes a unit of work must end with one final status line:\n\n\\`\\`\\`md\n🟢 Actual concise status sentence\n\\`\\`\\`\n\nUse 🟢 when the requested work is finished. Use 🟔 when non-routine follow-up work or a manual step remains, and name that pending item. Use šŸ”“ only when blocked on user input. Keep the status line under 100 characters. Put the status line at the very end of the response. Do not add \\`---\\`, spacer lines, or any content after it.\n\nExamples:\n\n\\`\\`\\`md\n🟢 Updated quick recap docs with output examples\n\\`\\`\\`\n\n\\`\\`\\`md\n🟔 Code updated, set PROVIDER_WEBHOOK_SECRET before testing webhooks\n\\`\\`\\`\n\n\\`\\`\\`md\nšŸ”“ Need the production API key to continue\n\\`\\`\\``;\n }\n if (skillName === \"efficient-fable\") {\n return `## Efficient Fable\n\nWhen operating as Claude Fable or another explicitly Fable-class expensive model, preserve Fable for the judgment layer: decomposition, architecture and product tradeoffs, synthesis, risk calls, and final review. Delegate token-heavy research, coding, testing, file inventory, repetitive edits, and independent implementation slices to cheaper subagents when available. Write delegated prompts as self-contained handoff packets with objective, scope, out-of-scope areas, expected evidence, verification commands, and stop conditions. For testing, Fable should suggest the validation direction and important scripts or browser checks, then lighter agents can run them, reduce logs, collect screenshots, and report exact failures and likely causes. Treat delegated reports as leads: Fable should verify important cited files, failures, and high-risk diffs before relying on them. Do not make unsupported quality or speed guarantees; frame savings as workload-dependent.`;\n }\n if (skillName === \"efficient-frontier\") {\n return `## Efficient Frontier\n\nWhen running any high-cost frontier model on a codebase-heavy task, act as the orchestrator and reviewer. Split independent research, search, summarization, coding, and testing work into cheaper/faster subagents when the host supports them, then spend frontier-model tokens on the plan, tradeoffs, integration decisions, validation strategy, and final quality pass. Delegated prompts should be self-contained: objective, repo path, scope, out-of-scope areas, expected evidence, verification commands, and stop conditions. For testing-heavy work, the frontier model should choose the scripts or browser flows that matter while lighter agents run checks, reduce output, and return the concrete signal. Treat delegated findings as leads and verify important claims before presenting them as facts.`;\n }\n if (skillName === \"stay-within-limits\") {\n return `## Stay Within Limits\n\nBefore starting long-running or parallel agent work, and between waves, check current 5-hour and weekly usage limits with the host's usage tool. For Claude Code, use npx -y ccusage@latest blocks --active --json when no better first-party signal is available. Keep waves to at most 3 parallel subagents by default. If either active 5-hour or weekly window is at or above 95%, do not launch more work; pause until the window clears. When a wake/resume tool is available, schedule a self-contained wake prompt for min(3600, secondsUntilWindowClears), re-check the actual block/window on wake, reschedule if still over budget, and only continue when safely below the threshold. The wake prompt should restate the remaining plan, usage check, wave throttle, verification steps, and any delegation scope or stop conditions needed for the next wave. Check between waves, not mid-wave.`;\n }\n return null;\n}\n\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n if (blocks.length === 0) return [];\n\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate === undefined) {\n if (options.yes) shouldUpdate = true;\n else if (isInteractive(options)) {\n const answer = await promptLine(\n \"Add managed AGENTS.md / CLAUDE.md instructions for always-on behavior? [Y/n] \",\n );\n shouldUpdate = !/^n/i.test(answer.trim());\n } else {\n shouldUpdate = false;\n }\n }\n if (!shouldUpdate) return [];\n\n const files = resolveInstructionFiles(baseDir, options.instructionFiles);\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\n\\n\")}\n${MANAGED_INSTRUCTIONS_END}`;\n for (const file of files) {\n if (options.dryRun) continue;\n upsertManagedBlock(file, content);\n }\n return files;\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\"].map((file) =>\n path.join(baseDir, file),\n );\n const existing = candidates.filter((file) => fs.existsSync(file));\n return existing.length > 0 ? existing : [path.join(baseDir, \"AGENTS.md\")];\n}\n\nfunction upsertManagedBlock(file: string, block: string): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const existing = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const pattern = new RegExp(\n `${escapeRegExp(MANAGED_INSTRUCTIONS_START)}[\\\\s\\\\S]*?${escapeRegExp(MANAGED_INSTRUCTIONS_END)}`,\n );\n const next = pattern.test(existing)\n ? existing.replace(pattern, block)\n : `${existing.trimEnd()}${existing.trim() ? \"\\n\\n\" : \"\"}${block}\\n`;\n fs.writeFileSync(file, next, \"utf-8\");\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nasync function shouldPromptGithubAction(\n options: InstallSkillsOptions,\n baseDir: string,\n): Promise<boolean> {\n if (options.withGithubAction) return true;\n if (options.yes || !isInteractive(options)) return false;\n if (\n fs.existsSync(\n path.join(baseDir, \".github\", \"workflows\", \"pr-visual-recap.yml\"),\n )\n ) {\n return false;\n }\n const answer = await promptLine(\n \"Add the optional PR Visual Recap GitHub Action? [y/N] \",\n );\n return /^y/i.test(answer.trim());\n}\n\nconst PR_VISUAL_RECAP_REUSABLE_WORKFLOW = `name: PR Visual Recap\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review]\n\npermissions:\n contents: read\n\nconcurrency:\n group: pr-visual-recap-\\${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n visual-recap:\n permissions:\n checks: write\n contents: read\n issues: write\n pull-requests: read\n uses: BuilderIO/agent-native/.github/workflows/pr-visual-recap-reusable.yml@main\n with:\n skill-source: repo\n secrets:\n PLAN_RECAP_TOKEN: \\${{ secrets.PLAN_RECAP_TOKEN }}\n ANTHROPIC_API_KEY: \\${{ secrets.ANTHROPIC_API_KEY }}\n OPENAI_API_KEY: \\${{ secrets.OPENAI_API_KEY }}\n PLAN_RECAP_APP_URL: \\${{ secrets.PLAN_RECAP_APP_URL }}\n`;\n\nfunction writePrVisualRecapWorkflow(\n baseDir: string,\n options: InstallSkillsOptions,\n): string {\n const file = path.join(\n baseDir,\n \".github\",\n \"workflows\",\n \"pr-visual-recap.yml\",\n );\n if (options.dryRun) return file;\n if (fs.existsSync(file)) {\n const current = fs.readFileSync(file, \"utf-8\");\n if (current === PR_VISUAL_RECAP_REUSABLE_WORKFLOW) return file;\n if (!options.force) {\n throw new Error(\n `${file} already exists and differs. Re-run with --force to overwrite it.`,\n );\n }\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, PR_VISUAL_RECAP_REUSABLE_WORKFLOW, \"utf-8\");\n return file;\n}\n\nexport function createInstallId(): string {\n return randomUUID();\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { resolveAppForSkill } from \"./built-in-apps.js\";\nimport { registerMcpServer } from \"./connect.js\";\nimport type { ClientId } from \"./mcp-config-writers.js\";\nimport { createCliTelemetry, type CliTelemetry } from \"./telemetry.js\";\n\nexport type SkillClient = \"codex\" | \"claude-code\";\nexport type SkillScope = \"project\" | \"user\";\n\nexport interface SkillEntry {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface InstallSkillsOptions {\n source?: string;\n skillNames?: string[];\n clients?: SkillClient[];\n scope?: SkillScope;\n baseDir?: string;\n yes?: boolean;\n dryRun?: boolean;\n updateInstructions?: boolean;\n instructionFiles?: string[];\n withGithubAction?: boolean;\n force?: boolean;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n telemetry?: CliTelemetry;\n /**\n * Register the hosted MCP server for app-backed skills (e.g. visual-plan /\n * visual-recap → the Agent-Native Plan MCP). Defaults to `true`; pass\n * `false` (CLI `--no-mcp`) to install the skill files only.\n */\n mcp?: boolean;\n}\n\nexport interface InstalledMcpServer {\n serverName: string;\n mcpUrl: string;\n clients: SkillClient[];\n files: string[];\n authenticated: boolean;\n guidance: string[];\n}\n\nexport interface InstallSkillsResult {\n source: string;\n skills: string[];\n clients: SkillClient[];\n scope: SkillScope;\n written: string[];\n instructionFiles: string[];\n githubActionPath?: string;\n mcpServers: InstalledMcpServer[];\n dryRun: boolean;\n}\n\ninterface ParsedArgs {\n command: \"add\" | \"list\" | \"help\";\n source?: string;\n copySource: boolean;\n skillNames: string[];\n clients: SkillClient[];\n scope: SkillScope;\n scopeExplicit: boolean;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n updateInstructions?: boolean;\n instructionFiles: string[];\n withGithubAction: boolean;\n force: boolean;\n baseDir?: string;\n mcp: boolean;\n}\n\nconst HELP = `@agent-native/skills\n\nUsage:\n npx @agent-native/skills@latest add [options]\n npx @agent-native/skills@latest list\n\nOptions:\n --skill <name> Install only this skill (repeatable)\n --client, -a <client> codex, claude-code, or all (default: all; repeatable or comma-separated)\n --scope <user|project> Install globally or into the current project (default: user)\n -g, --global Alias for --scope user\n --project Alias for --scope project\n --update-instructions Add managed AGENTS.md / CLAUDE.md instructions when useful\n --no-update-instructions Skip managed instruction file updates\n --instructions-file <path> File to receive managed instructions (repeatable)\n --with-github-action Add .github/workflows/pr-visual-recap.yml when visual-recap is installed\n --force Overwrite a different existing PR Visual Recap workflow\n --no-mcp Install skill files only; skip registering the app's MCP server\n -y, --yes Use defaults in non-interactive mode\n --dry-run Print intended writes without changing files\n --json Print the result as JSON\n\nApp-backed skills (visual-plan, visual-recap, assets, design-exploration)\nregister their hosted MCP server in your agent config by default so the agent\ncan actually use them. Use --no-mcp to skip that and copy the files only.\n\nExamples:\n npx @agent-native/skills@latest add\n npx @agent-native/skills@latest add --skill quick-recap\n npx @agent-native/skills@latest add --skill visual-recap --with-github-action\n`;\n\nconst CLIENTS: SkillClient[] = [\"codex\", \"claude-code\"];\nconst DEFAULT_SKILLS_SOURCE = \"BuilderIO/skills\";\nconst PUBLIC_SKILLS_REPO_APP_SKILLS = new Set([\"visual-plan\", \"visual-recap\"]);\nconst MANAGED_INSTRUCTIONS_START = \"<!-- BEGIN @agent-native/skills -->\";\nconst MANAGED_INSTRUCTIONS_END = \"<!-- END @agent-native/skills -->\";\n\nexport function parseSkillsCliArgs(argv: string[]): ParsedArgs {\n const first = argv[0];\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n return defaultArgs(\"help\");\n }\n\n const command = first === \"list\" ? \"list\" : \"add\";\n const args = first === \"add\" || first === \"list\" ? argv.slice(1) : argv;\n const out = defaultArgs(command);\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n const eat = (flag: string): string | undefined => {\n if (arg === flag) {\n const next = args[++i];\n if (!next || next.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return next;\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;\n }\n return undefined;\n };\n\n let value: string | undefined;\n if ((value = eat(\"--skill\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"-s\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"--client\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--agent\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"-a\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--scope\")) !== undefined) {\n out.scope = parseScope(value);\n out.scopeExplicit = true;\n } else if ((value = eat(\"--instructions-file\")) !== undefined)\n out.instructionFiles.push(value);\n else if ((value = eat(\"--cwd\")) !== undefined) out.baseDir = value;\n else if (arg === \"-g\" || arg === \"--global\") {\n out.scope = \"user\";\n out.scopeExplicit = true;\n } else if (arg === \"--project\") {\n out.scope = \"project\";\n out.scopeExplicit = true;\n } else if (arg === \"--copy\") {\n // Compatibility with the open `skills` CLI. This installer always copies.\n out.copySource = true;\n } else if (arg === \"-y\" || arg === \"--yes\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--update-instructions\") out.updateInstructions = true;\n else if (arg === \"--no-update-instructions\") out.updateInstructions = false;\n else if (arg === \"--with-github-action\" || arg === \"--with-github-actions\")\n out.withGithubAction = true;\n else if (arg === \"--force\") out.force = true;\n else if (arg === \"--no-mcp\") out.mcp = false;\n else if (arg === \"--mcp\") out.mcp = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.source) out.source = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (out.source && out.source !== DEFAULT_SKILLS_SOURCE && !out.copySource) {\n throw new Error(\n `Unexpected argument: ${out.source}. @agent-native/skills installs the BuilderIO skills collection; use --skill <name> to choose a skill.`,\n );\n }\n if (out.source === DEFAULT_SKILLS_SOURCE && !out.copySource) {\n out.source = undefined;\n }\n\n out.skillNames = unique(out.skillNames.map(normalizeSkillName));\n out.clients = unique(out.clients);\n out.instructionFiles = unique(out.instructionFiles);\n return out;\n}\n\n/**\n * Translate this package's parsed args into the argv shape `@agent-native/core`\n * skills expects. Core takes a single positional target + compatible flags; we\n * forward one explicit skill as that target and let core's interactive picker\n * handle 0-or-many selections.\n */\nfunction toCoreSkillsArgv(parsed: ParsedArgs): string[] {\n const out: string[] = [parsed.command];\n if (parsed.command !== \"add\") return out;\n if (parsed.skillNames.length === 1) out.push(parsed.skillNames[0]);\n else if (parsed.copySource && parsed.source) out.push(parsed.source);\n if (parsed.clients.length) out.push(\"--client\", parsed.clients.join(\",\"));\n if (parsed.scopeExplicit) out.push(\"--scope\", parsed.scope);\n if (parsed.yes) out.push(\"--yes\");\n if (parsed.dryRun) out.push(\"--dry-run\");\n if (parsed.printJson) out.push(\"--json\");\n if (parsed.withGithubAction) out.push(\"--with-github-action\");\n if (parsed.force) out.push(\"--force\");\n if (parsed.mcp === false) out.push(\"--no-mcp\");\n if (parsed.updateInstructions === true) out.push(\"--update-instructions\");\n if (parsed.updateInstructions === false) out.push(\"--no-update-instructions\");\n return out;\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: Pick<InstallSkillsOptions, \"log\" | \"isInteractive\" | \"baseDir\"> = {},\n): Promise<void> {\n const parsed = parseSkillsCliArgs(argv);\n\n // PIVOT: `@agent-native/skills` delegates explicitly selected core-only\n // app-backed installs to `@agent-native/core` for app setup. The default\n // add/list flow, plain skills, and public-repo-backed app skills stay here so\n // they always come from the live BuilderIO skills collection (quick-recap,\n // efficient-fable, visual-plan, visual-recap, …), which core does not own.\n // AGENT_NATIVE_SKILLS_DIRECT=1 (set when core delegates a plain repo back to us)\n // always forces the direct path and breaks the skills → core → skills loop.\n if (process.env.AGENT_NATIVE_SKILLS_DIRECT !== \"1\") {\n const coreOnlyAppSkills =\n parsed.skillNames.length > 0 &&\n parsed.skillNames.every(\n (name) => resolveAppForSkill(name) !== undefined,\n ) &&\n parsed.skillNames.every((name) => !skillComesFromPublicSkillsRepo(name));\n if (parsed.command === \"add\" && coreOnlyAppSkills) {\n const { runSkills } = await import(\"@agent-native/core/cli/skills\");\n await runSkills(toCoreSkillsArgv(parsed), {\n isInteractive: options.isInteractive,\n baseDir: parsed.baseDir ?? options.baseDir,\n });\n return;\n }\n }\n\n const startedAt = Date.now();\n const telemetry = createCliTelemetry({\n cli: \"skills-installer\",\n cliVersion: readCliVersion(),\n command: parsed.command,\n interactive: cliInteractive(parsed, options),\n });\n\n try {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n telemetry.track(\"skills_cli started\");\n const skillSource = parsed.source ?? DEFAULT_SKILLS_SOURCE;\n\n if (parsed.command === \"list\") {\n const source = await materializeSource(skillSource);\n try {\n const skills = discoverSkills(source.root);\n telemetry.track(\"skills_cli skills listed\", {\n availableCount: skills.length,\n available: skills.map((skill) => skill.name).join(\",\"),\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n process.stdout.write(\n `${skill.name}${skill.description ? ` - ${skill.description}` : \"\"}\\n`,\n );\n }\n return;\n } finally {\n source.cleanup?.();\n }\n }\n\n const result = await installSkills({\n source: skillSource,\n skillNames: parsed.skillNames,\n clients: parsed.clients,\n // Leave scope undefined unless the user passed --scope/-g/--project so the\n // installer can prompt for it interactively.\n scope: parsed.scopeExplicit ? parsed.scope : undefined,\n baseDir: parsed.baseDir ?? options.baseDir,\n yes: parsed.yes,\n dryRun: parsed.dryRun,\n updateInstructions: parsed.updateInstructions,\n instructionFiles: parsed.instructionFiles,\n withGithubAction: parsed.withGithubAction,\n force: parsed.force,\n log: parsed.printJson ? undefined : options.log,\n isInteractive: options.isInteractive,\n telemetry,\n mcp: parsed.mcp,\n });\n\n telemetry.track(\"skills_cli completed\", {\n skills: result.skills.join(\",\"),\n clients: result.clients.join(\",\"),\n scope: result.scope,\n dryRun: result.dryRun,\n durationMs: Date.now() - startedAt,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n const verb = parsed.dryRun ? \"Would install\" : \"Installed\";\n process.stdout.write(\n [\n `${verb} ${result.skills.join(\", \")} for ${result.clients.join(\", \")} (${result.scope}).`,\n result.written.length\n ? `Skill files: ${result.written.join(\", \")}`\n : \"\",\n result.instructionFiles.length\n ? `Managed instructions: ${result.instructionFiles.join(\", \")}`\n : \"\",\n result.githubActionPath\n ? `PR Visual Recap workflow: ${result.githubActionPath}`\n : \"\",\n ...result.mcpServers.flatMap((server) => [\n `MCP server \"${server.serverName}\" ${\n parsed.dryRun ? \"would be registered\" : \"registered\"\n } for ${server.clients.join(\", \")}${\n server.files.length ? `:\\n ${server.files.join(\"\\n \")}` : \"\"\n }`,\n ...server.guidance.map((line) => ` ${line}`),\n ]),\n parsed.dryRun\n ? \"\"\n : \"Restart or reload selected agent clients if needed.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n } catch (error) {\n telemetry.track(\"skills_cli failed\", {\n command: parsed.command,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startedAt,\n });\n throw error;\n } finally {\n await telemetry.flush();\n }\n}\n\nfunction skillComesFromPublicSkillsRepo(name: string): boolean {\n return PUBLIC_SKILLS_REPO_APP_SKILLS.has(normalizeSkillName(name));\n}\n\nfunction readCliVersion(): string {\n try {\n const here = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js → ../package.json\n const pkg = JSON.parse(\n fs.readFileSync(path.resolve(here, \"../package.json\"), \"utf8\"),\n ) as { version?: unknown };\n return typeof pkg.version === \"string\" ? pkg.version : \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nfunction cliInteractive(\n parsed: ParsedArgs,\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n if (parsed.yes) 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\nexport async function installSkills(\n options: InstallSkillsOptions,\n): Promise<InstallSkillsResult> {\n const baseDir = path.resolve(options.baseDir ?? process.cwd());\n const log = options.log ?? (() => {});\n const sourceInput = options.source ?? DEFAULT_SKILLS_SOURCE;\n const source = await materializeSource(sourceInput);\n try {\n const entries = discoverSkills(source.root);\n if (entries.length === 0) {\n throw new Error(\n `No skills found in ${sourceInput}. Expected skills/*/SKILL.md.`,\n );\n }\n\n // Fire the \"skills prompted\" step only when an interactive chooser will\n // actually be shown (mirrors resolveSelectedSkills's prompt condition), so\n // the funnel distinguishes \"saw the picker\" from \"passed --skill\".\n const preselected = (options.skillNames ?? []).length > 0;\n if (isInteractive(options) && !options.yes && !preselected) {\n options.telemetry?.track(\"skills_cli skills prompted\", {\n availableCount: entries.length,\n available: entries.map((entry) => entry.name).join(\",\"),\n });\n }\n\n const selected = await resolveSelectedSkills(entries, options);\n options.telemetry?.track(\"skills_cli skills selected\", {\n selected: selected.map((skill) => skill.name).join(\",\"),\n selectedCount: selected.length,\n selectedAll: selected.length === entries.length,\n preselected,\n });\n\n const clients = await resolveSelectedClients(options);\n options.telemetry?.track(\"skills_cli clients selected\", {\n clients: clients.join(\",\"),\n clientCount: clients.length,\n });\n\n const scope = await resolveSelectedScope(options);\n options.telemetry?.track(\"skills_cli scope selected\", { scope });\n\n const written: string[] = [];\n\n for (const client of clients) {\n const root = installRootForClient(client, scope, baseDir);\n for (const skill of selected) {\n const destination = path.join(root, skill.name);\n written.push(destination);\n if (!options.dryRun) {\n fs.rmSync(destination, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(destination), { recursive: true });\n fs.cpSync(skill.dir, destination, { recursive: true });\n }\n }\n }\n\n options.telemetry?.track(\"skills_cli install completed\", {\n skills: selected.map((skill) => skill.name).join(\",\"),\n clients: clients.join(\",\"),\n scope,\n writtenCount: written.length,\n dryRun: Boolean(options.dryRun),\n });\n\n const instructionFiles = await maybeUpdateInstructions(\n selected.map((skill) => skill.name),\n baseDir,\n options,\n );\n if (instructionFiles.length) {\n options.telemetry?.track(\"skills_cli instructions updated\", {\n fileCount: instructionFiles.length,\n });\n }\n\n const githubActionPath =\n selected.some((skill) => skill.name === \"visual-recap\") &&\n (options.withGithubAction ||\n (await shouldPromptGithubAction(options, baseDir)))\n ? writePrVisualRecapWorkflow(baseDir, options)\n : undefined;\n if (githubActionPath) {\n options.telemetry?.track(\"skills_cli github action added\");\n }\n\n // Register the hosted MCP server for app-backed skills (visual-plan /\n // visual-recap → Agent-Native Plan, assets, design-exploration) so the\n // agent can actually call them — not just read the SKILL.md. On by\n // default; `--no-mcp` installs the skill files only. One registration per\n // app, so visual-plan + visual-recap share a single \"plan\" server.\n const mcpServers: InstalledMcpServer[] = [];\n if (options.mcp !== false) {\n const mcpClients: ClientId[] = clients.map((client) =>\n client === \"claude-code\" ? \"claude-code\" : \"codex\",\n );\n const seenApps = new Set<string>();\n for (const skill of selected) {\n const app = resolveAppForSkill(skill.name);\n if (!app || seenApps.has(app.appId)) continue;\n seenApps.add(app.appId);\n if (options.dryRun) {\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n files: [],\n authenticated: false,\n guidance: [],\n });\n continue;\n }\n const registration = await registerMcpServer({\n descriptor: {\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n aliases: app.aliases,\n authMode: app.authMode,\n hostedUrl: app.hostedUrl,\n },\n clients: mcpClients,\n scope,\n baseDir,\n interactive: isInteractive(options),\n log,\n });\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n files: [...new Set(registration.written.map((entry) => entry.file))],\n authenticated: registration.authenticated,\n guidance: registration.guidance,\n });\n options.telemetry?.track(\"skills_cli mcp registered\", {\n serverName: app.serverName,\n clients: clients.join(\",\"),\n authenticated: registration.authenticated,\n });\n }\n }\n\n log(\n `Resolved ${selected.length} skill${selected.length === 1 ? \"\" : \"s\"} from ${source.root}.`,\n );\n return {\n source: source.root,\n skills: selected.map((skill) => skill.name),\n clients,\n scope,\n written,\n instructionFiles,\n githubActionPath,\n mcpServers,\n dryRun: Boolean(options.dryRun),\n };\n } finally {\n source.cleanup?.();\n }\n}\n\nfunction defaultArgs(command: ParsedArgs[\"command\"]): ParsedArgs {\n return {\n command,\n copySource: false,\n skillNames: [],\n clients: [],\n scope: \"user\",\n scopeExplicit: false,\n yes: false,\n dryRun: false,\n printJson: false,\n instructionFiles: [],\n withGithubAction: false,\n force: false,\n mcp: true,\n };\n}\n\nfunction parseScope(value: string): SkillScope {\n if (value === \"user\" || value === \"project\") return value;\n throw new Error(\"--scope must be user or project.\");\n}\n\nfunction normalizeClients(value: string): SkillClient[] {\n return value.split(\",\").flatMap((raw) => {\n const client = raw.trim().toLowerCase();\n if (!client) return [];\n if (client === \"all\") return CLIENTS;\n if (client === \"codex\") return [\"codex\" as const];\n if (\n client === \"claude\" ||\n client === \"claude-code\" ||\n client === \"claude-code-cli\"\n ) {\n return [\"claude-code\" as const];\n }\n throw new Error(\n `Unsupported client \"${raw}\". Use codex, claude-code, or all.`,\n );\n });\n}\n\nfunction normalizeSkillName(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return normalized;\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nasync function resolveSelectedSkills(\n entries: SkillEntry[],\n options: InstallSkillsOptions,\n): Promise<SkillEntry[]> {\n const byName = new Map(entries.map((entry) => [entry.name, entry]));\n const requested = unique((options.skillNames ?? []).map(normalizeSkillName));\n if (requested.length > 0) {\n const missing = requested.filter((name) => !byName.has(name));\n if (missing.length > 0) {\n throw new Error(\n `Unknown skill${missing.length === 1 ? \"\" : \"s\"}: ${missing.join(\", \")}. Available: ${entries\n .map((entry) => entry.name)\n .join(\", \")}.`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n if (!isInteractive(options) || options.yes) return entries;\n\n const answer = await promptLine(\n [\n \"Which skills do you want to install?\",\n ...entries.map(\n (entry, index) =>\n ` ${index + 1}. ${entry.name}${entry.description ? ` - ${entry.description}` : \"\"}`,\n ),\n \"Enter numbers or names separated by commas, or press Enter for all: \",\n ].join(\"\\n\"),\n );\n const trimmed = answer.trim();\n if (!trimmed) return entries;\n const selectedNames = trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => {\n const asNumber = Number(part);\n if (\n Number.isInteger(asNumber) &&\n asNumber >= 1 &&\n asNumber <= entries.length\n ) {\n return entries[asNumber - 1].name;\n }\n return normalizeSkillName(part);\n });\n return resolveSelectedSkills(entries, {\n ...options,\n skillNames: selectedNames,\n });\n}\n\nasync function resolveSelectedScope(\n options: InstallSkillsOptions,\n): Promise<SkillScope> {\n if (options.scope) return options.scope;\n if (!isInteractive(options) || options.yes) return \"user\";\n\n const answer = await promptLine(\n [\n \"Where do you want to install these skills?\",\n \" 1. project - this repo only (.agents / .claude in the current directory)\",\n \" 2. user - your home directory, available across all projects\",\n \"Enter project or user [project]: \",\n ].join(\"\\n\"),\n );\n const trimmed = answer.trim().toLowerCase();\n if (trimmed === \"2\" || trimmed === \"user\" || trimmed === \"u\") return \"user\";\n return \"project\";\n}\n\nasync function resolveSelectedClients(\n options: InstallSkillsOptions,\n): Promise<SkillClient[]> {\n const requested = unique(options.clients ?? []);\n if (requested.length > 0) return requested;\n if (!isInteractive(options) || options.yes) return CLIENTS;\n\n const answer = await promptLine(\n \"Install for which clients? Enter codex, claude-code, or all [all]: \",\n );\n const trimmed = answer.trim();\n return trimmed ? unique(normalizeClients(trimmed)) : CLIENTS;\n}\n\nfunction isInteractive(\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\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 promptLine(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n return await rl.question(question);\n } finally {\n rl.close();\n }\n}\n\nfunction installRootForClient(\n client: SkillClient,\n scope: SkillScope,\n baseDir: string,\n): string {\n const home = process.env.HOME || os.homedir();\n if (scope === \"project\") {\n return client === \"codex\"\n ? path.join(baseDir, \".agents\", \"skills\")\n : path.join(baseDir, \".claude\", \"skills\");\n }\n if (client === \"codex\") {\n return process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, \"skills\")\n : path.join(home, \".codex\", \"skills\");\n }\n return path.join(home, \".claude\", \"skills\");\n}\n\nfunction discoverSkills(root: string): SkillEntry[] {\n const skillsRoot = resolveSkillsRoot(root);\n const directSkill = path.join(skillsRoot, \"SKILL.md\");\n if (fs.existsSync(directSkill)) {\n const entry = skillEntry(skillsRoot);\n return entry ? [entry] : [];\n }\n const entries = fs\n .readdirSync(skillsRoot, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => skillEntry(path.join(skillsRoot, entry.name)))\n .filter((entry): entry is SkillEntry => Boolean(entry));\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction resolveSkillsRoot(root: string): string {\n for (const manifestPath of [\n path.join(root, \".codex-plugin\", \"plugin.json\"),\n path.join(root, \".claude-plugin\", \"plugin.json\"),\n ]) {\n if (!fs.existsSync(manifestPath)) continue;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\")) as {\n skills?: unknown;\n };\n if (typeof manifest.skills === \"string\") {\n const resolved = path.resolve(root, manifest.skills);\n if (fs.existsSync(resolved)) return resolved;\n }\n } catch {}\n }\n const conventional = path.join(root, \"skills\");\n if (fs.existsSync(conventional)) return conventional;\n return root;\n}\n\nfunction skillEntry(dir: string): SkillEntry | null {\n const skillFile = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(skillFile)) return null;\n const body = fs.readFileSync(skillFile, \"utf-8\");\n const frontmatter = body.match(/^---\\n([\\s\\S]*?)\\n---/);\n const name =\n frontmatter?.[1]\n ?.match(/^name:\\s*[\"']?([^\"'\\n]+)[\"']?\\s*$/m)?.[1]\n ?.trim() ?? path.basename(dir);\n const description = frontmatter?.[1]\n ?.match(/^description:\\s*(?:>-\\s*)?(.+)$/m)?.[1]\n ?.trim();\n return { name: normalizeSkillName(name), dir, description };\n}\n\nasync function materializeSource(input: string): Promise<{\n root: string;\n cleanup?: () => void;\n}> {\n const local = path.resolve(input);\n if (fs.existsSync(local)) return { root: local };\n\n const parsed = parseGitHubSource(input);\n if (!parsed) {\n throw new Error(\n `Skill source not found: ${input}. Use a local path, GitHub owner/repo, or GitHub URL.`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-skills-\"),\n );\n const archive = path.join(tmpRoot, \"source.tgz\");\n const ref = parsed.ref ?? \"main\";\n const url = `https://codeload.github.com/${parsed.owner}/${parsed.repo}/tar.gz/${encodeURIComponent(ref)}`;\n const response = await fetch(url, {\n headers: { \"user-agent\": \"@agent-native/skills\" },\n });\n if (!response.ok) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not download ${parsed.owner}/${parsed.repo}@${ref}: HTTP ${response.status}.`,\n );\n }\n fs.writeFileSync(archive, Buffer.from(await response.arrayBuffer()));\n\n const extractDir = path.join(tmpRoot, \"extract\");\n fs.mkdirSync(extractDir, { recursive: true });\n const extracted = spawnSync(\"tar\", [\"-xzf\", archive, \"-C\", extractDir], {\n stdio: \"pipe\",\n encoding: \"utf-8\",\n });\n if (extracted.status !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not extract ${input}: ${extracted.stderr || extracted.stdout}`,\n );\n }\n const [first] = fs\n .readdirSync(extractDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory());\n if (!first) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Downloaded archive for ${input} did not contain a repo directory.`,\n );\n }\n return {\n root: path.join(extractDir, first.name),\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseGitHubSource(\n input: string,\n): { owner: string; repo: string; ref?: string } | null {\n const shorthand = input.match(\n /^([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)(?:#(.+))?$/,\n );\n if (shorthand) {\n return {\n owner: shorthand[1],\n repo: shorthand[2].replace(/\\.git$/, \"\"),\n ref: shorthand[3],\n };\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 treeIndex = parts.indexOf(\"tree\");\n return {\n owner: parts[0],\n repo: parts[1].replace(/\\.git$/, \"\"),\n ref:\n treeIndex >= 0 && parts[treeIndex + 1]\n ? parts.slice(treeIndex + 1).join(\"/\")\n : url.hash.slice(1) || undefined,\n };\n}\n\nfunction instructionContentForSkill(skillName: string): string | null {\n if (skillName === \"quick-recap\") {\n return `## Quick Recap Status Block\n\nEvery response that completes a unit of work must end with one final status line:\n\n\\`\\`\\`md\n🟢 Actual concise status sentence\n\\`\\`\\`\n\nUse 🟢 when the requested work is finished. Use 🟔 when non-routine follow-up work or a manual step remains, and name that pending item. Use šŸ”“ only when blocked on user input. Keep the status line under 100 characters. Put the status line at the very end of the response. Do not add \\`---\\`, spacer lines, or any content after it.\n\nExamples:\n\n\\`\\`\\`md\n🟢 Updated quick recap docs with output examples\n\\`\\`\\`\n\n\\`\\`\\`md\n🟔 Code updated, set PROVIDER_WEBHOOK_SECRET before testing webhooks\n\\`\\`\\`\n\n\\`\\`\\`md\nšŸ”“ Need the production API key to continue\n\\`\\`\\``;\n }\n if (skillName === \"efficient-fable\") {\n return `## Efficient Fable\n\nWhen operating as Claude Fable or another explicitly Fable-class expensive model, preserve Fable for the judgment layer: decomposition, architecture and product tradeoffs, synthesis, risk calls, and final review. Delegate token-heavy research, coding, testing, file inventory, repetitive edits, and independent implementation slices to cheaper subagents when available. Write delegated prompts as self-contained handoff packets with objective, scope, out-of-scope areas, expected evidence, verification commands, and stop conditions. For testing, Fable should suggest the validation direction and important scripts or browser checks, then lighter agents can run them, reduce logs, collect screenshots, and report exact failures and likely causes. Treat delegated reports as leads: Fable should verify important cited files, failures, and high-risk diffs before relying on them. Do not make unsupported quality or speed guarantees; frame savings as workload-dependent.`;\n }\n if (skillName === \"efficient-frontier\") {\n return `## Efficient Frontier\n\nWhen running any high-cost frontier model on a codebase-heavy task, act as the orchestrator and reviewer. Split independent research, search, summarization, coding, and testing work into cheaper/faster subagents when the host supports them, then spend frontier-model tokens on the plan, tradeoffs, integration decisions, validation strategy, and final quality pass. Delegated prompts should be self-contained: objective, repo path, scope, out-of-scope areas, expected evidence, verification commands, and stop conditions. For testing-heavy work, the frontier model should choose the scripts or browser flows that matter while lighter agents run checks, reduce output, and return the concrete signal. Treat delegated findings as leads and verify important claims before presenting them as facts.`;\n }\n if (skillName === \"stay-within-limits\") {\n return `## Stay Within Limits\n\nBefore starting long-running or parallel agent work, and between waves, check current 5-hour and weekly usage limits with the host's usage tool. For Claude Code, use npx -y ccusage@latest blocks --active --json when no better first-party signal is available. Keep waves to at most 3 parallel subagents by default. If either active 5-hour or weekly window is at or above 95%, do not launch more work; pause until the window clears. When a wake/resume tool is available, schedule a self-contained wake prompt for min(3600, secondsUntilWindowClears), re-check the actual block/window on wake, reschedule if still over budget, and only continue when safely below the threshold. The wake prompt should restate the remaining plan, usage check, wave throttle, verification steps, and any delegation scope or stop conditions needed for the next wave. Check between waves, not mid-wave.`;\n }\n return null;\n}\n\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n if (blocks.length === 0) return [];\n\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate === undefined) {\n if (options.yes) shouldUpdate = true;\n else if (isInteractive(options)) {\n const answer = await promptLine(\n \"Add managed AGENTS.md / CLAUDE.md instructions for always-on behavior? [Y/n] \",\n );\n shouldUpdate = !/^n/i.test(answer.trim());\n } else {\n shouldUpdate = false;\n }\n }\n if (!shouldUpdate) return [];\n\n const files = resolveInstructionFiles(baseDir, options.instructionFiles);\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\n\\n\")}\n${MANAGED_INSTRUCTIONS_END}`;\n for (const file of files) {\n if (options.dryRun) continue;\n upsertManagedBlock(file, content);\n }\n return files;\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\"].map((file) =>\n path.join(baseDir, file),\n );\n const existing = candidates.filter((file) => fs.existsSync(file));\n return existing.length > 0 ? existing : [path.join(baseDir, \"AGENTS.md\")];\n}\n\nfunction upsertManagedBlock(file: string, block: string): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const existing = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const pattern = new RegExp(\n `${escapeRegExp(MANAGED_INSTRUCTIONS_START)}[\\\\s\\\\S]*?${escapeRegExp(MANAGED_INSTRUCTIONS_END)}`,\n );\n const next = pattern.test(existing)\n ? existing.replace(pattern, block)\n : `${existing.trimEnd()}${existing.trim() ? \"\\n\\n\" : \"\"}${block}\\n`;\n fs.writeFileSync(file, next, \"utf-8\");\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nasync function shouldPromptGithubAction(\n options: InstallSkillsOptions,\n baseDir: string,\n): Promise<boolean> {\n if (options.withGithubAction) return true;\n if (options.yes || !isInteractive(options)) return false;\n if (\n fs.existsSync(\n path.join(baseDir, \".github\", \"workflows\", \"pr-visual-recap.yml\"),\n )\n ) {\n return false;\n }\n const answer = await promptLine(\n \"Add the optional PR Visual Recap GitHub Action? [y/N] \",\n );\n return /^y/i.test(answer.trim());\n}\n\nconst PR_VISUAL_RECAP_REUSABLE_WORKFLOW = `name: PR Visual Recap\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review]\n\npermissions:\n contents: read\n\nconcurrency:\n group: pr-visual-recap-\\${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n visual-recap:\n permissions:\n checks: write\n contents: read\n issues: write\n pull-requests: read\n uses: BuilderIO/agent-native/.github/workflows/pr-visual-recap-reusable.yml@main\n with:\n skill-source: repo\n secrets:\n PLAN_RECAP_TOKEN: \\${{ secrets.PLAN_RECAP_TOKEN }}\n ANTHROPIC_API_KEY: \\${{ secrets.ANTHROPIC_API_KEY }}\n OPENAI_API_KEY: \\${{ secrets.OPENAI_API_KEY }}\n PLAN_RECAP_APP_URL: \\${{ secrets.PLAN_RECAP_APP_URL }}\n`;\n\nfunction writePrVisualRecapWorkflow(\n baseDir: string,\n options: InstallSkillsOptions,\n): string {\n const file = path.join(\n baseDir,\n \".github\",\n \"workflows\",\n \"pr-visual-recap.yml\",\n );\n if (options.dryRun) return file;\n if (fs.existsSync(file)) {\n const current = fs.readFileSync(file, \"utf-8\");\n if (current === PR_VISUAL_RECAP_REUSABLE_WORKFLOW) return file;\n if (!options.force) {\n throw new Error(\n `${file} already exists and differs. Re-run with --force to overwrite it.`,\n );\n }\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, PR_VISUAL_RECAP_REUSABLE_WORKFLOW, \"utf-8\");\n return file;\n}\n\nexport function createInstallId(): string {\n return randomUUID();\n}\n"]}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Shared MCP client-config writers — canonical home.
3
+ *
4
+ * This is the single source of truth for how every agent-native CLI writes
5
+ * MCP server entries into each supported client's on-disk config. Both the
6
+ * standalone `@agent-native/skills` installer AND `@agent-native/core`
7
+ * (`agent-native mcp install` / `connect` / `app-skill`) import from here so
8
+ * the on-disk formats never diverge.
9
+ *
10
+ * Supported clients and their config files:
11
+ * - claude-code / claude-code-cli → `.mcp.json` (project) or
12
+ * `~/.claude.json` (user). JSON `mcpServers[name] = entry`.
13
+ * - cowork → `~/.cowork/mcp.json`. Same JSON shape.
14
+ * - codex → `$CODEX_HOME/config.toml` when set,
15
+ * otherwise `~/.codex/config.toml`. `[mcp_servers.<name>]` block.
16
+ *
17
+ * Node-only. No npm deps — hand-rolled JSON merge + minimal TOML block merge.
18
+ */
19
+ export type ClientId = "claude-code" | "claude-code-cli" | "codex" | "cowork";
20
+ export declare const CLIENTS: ClientId[];
21
+ /** The HTTP MCP server entry written into a JSON client config. */
22
+ export interface HttpMcpEntry {
23
+ type: "http";
24
+ url: string;
25
+ headers?: Record<string, string>;
26
+ }
27
+ /** Build the HTTP MCP server entry for a deployed agent-native app. */
28
+ export declare function buildHttpMcpEntry(mcpUrl: string, token?: string, headers?: Record<string, string>): HttpMcpEntry;
29
+ /**
30
+ * Cowork consumes MCP exactly like Claude Code (same JSON server-entry
31
+ * shape). Resolved lazily so `os.homedir()` reflects the current `$HOME`.
32
+ */
33
+ export declare function coworkConfigPath(): string;
34
+ export declare function claudeCodeProjectConfig(baseDir: string): string;
35
+ export declare function claudeCodeUserConfig(): string;
36
+ export declare function codexConfigPath(): string;
37
+ /**
38
+ * Resolve the on-disk config path for a client.
39
+ *
40
+ * `scope` only affects Claude Code / Claude Code CLI: `"user"` → the global
41
+ * `~/.claude.json`, anything else → the project-local `.mcp.json` rooted at
42
+ * `baseDir`.
43
+ */
44
+ export declare function configPathFor(client: ClientId, baseDir: string, scope: string | undefined): string;
45
+ /**
46
+ * Write `data` to `file` atomically: write a sibling temp file, then rename it
47
+ * over the target. `rename(2)` is atomic on the same filesystem, so a crash or
48
+ * `kill` mid-write can never leave a half-written/truncated file. This matters
49
+ * most for `~/.claude.json`, which is Claude Code's entire user state (projects,
50
+ * history, auth) — a torn write there would corrupt the user's whole config,
51
+ * not just our MCP entry. The temp file lives in the target's directory so the
52
+ * rename stays within one filesystem.
53
+ */
54
+ export declare function writeFileAtomic(file: string, data: string): void;
55
+ /**
56
+ * Idempotently write `mcpServers[name] = entry` into a JSON config file.
57
+ * Pass `entry === null` to delete the named entry. Re-running with the same
58
+ * name replaces the existing entry in place — never duplicates.
59
+ */
60
+ export declare function writeJsonMcpEntry(file: string, name: string, entry: Record<string, unknown> | null): void;
61
+ export declare function hasJsonMcpEntry(file: string, name: string): boolean;
62
+ /** Build a `[mcp_servers.<name>]` block for an HTTP-type MCP server. */
63
+ export declare function buildCodexHttpBlock(name: string, mcpUrl: string, token?: string, headers?: Record<string, string>): string;
64
+ /**
65
+ * Replace (or append) the `[mcp_servers.<name>]` block in a TOML file
66
+ * without disturbing other content. A block is the header line plus every
67
+ * following line until the next top-level `[` table header or EOF. Pass
68
+ * `block === null` to remove the block.
69
+ */
70
+ export declare function writeCodexBlock(file: string, name: string, block: string | null): void;
71
+ export declare function codexHasBlock(file: string, name: string): boolean;
72
+ /**
73
+ * Idempotently write the HTTP MCP server entry for `serverName` into the
74
+ * given client's config file and return the file path that was written.
75
+ * Re-running replaces the same named entry — never duplicates.
76
+ */
77
+ export declare function writeHttpEntryForClient(client: ClientId, serverName: string, mcpUrl: string, token: string | undefined, baseDir: string, scope: string | undefined, headers?: Record<string, string>): string;
78
+ /**
79
+ * Canonicalise a URL for comparison: strip hash, trailing slashes, and
80
+ * normalise the scheme+host+path. Returns `undefined` for invalid URLs.
81
+ */
82
+ export declare function canonicalUrl(value: string | undefined): string | undefined;
83
+ /**
84
+ * After writing the canonical `serverName` entry into a JSON config file,
85
+ * remove any OTHER entries whose URL normalises to the same value as
86
+ * `mcpUrl`. This cleans up stale alias names, legacy default names, and
87
+ * leftover custom names that all pointed at the same server.
88
+ *
89
+ * Returns the list of entry names that were removed.
90
+ */
91
+ export declare function removeJsonSameUrlDuplicates(file: string, mcpUrl: string, keepName: string): string[];
92
+ /**
93
+ * After writing the canonical `serverName` Codex block, remove any OTHER
94
+ * `[mcp_servers.*]` blocks in the same TOML file whose `url =` line
95
+ * normalises to the same value as `mcpUrl`. Returns removed entry names.
96
+ */
97
+ export declare function removeCodexSameUrlDuplicates(file: string, mcpUrl: string, keepName: string): string[];
98
+ /**
99
+ * Unified helper: after writing the canonical `serverName` entry for the
100
+ * given `client`, remove same-URL duplicates from its config file.
101
+ * Returns the list of removed names (empty if nothing was cleaned up).
102
+ */
103
+ export declare function removeSameUrlDuplicatesForClient(client: ClientId, serverName: string, mcpUrl: string, baseDir: string, scope: string | undefined): string[];
104
+ //# sourceMappingURL=mcp-config-writers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../src/mcp-config-writers.ts"],"names":[],"mappings":"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"}