@agent-native/skills 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,18 +6,19 @@ Install BuilderIO skill folders into Codex and Claude skill directories.
6
6
  npx @agent-native/skills@latest add
7
7
  npx @agent-native/skills@latest add --skill quick-recap --client codex --scope project --update-instructions
8
8
  npx @agent-native/skills@latest add --skill visual-recap --client all --with-github-action
9
+ npx @agent-native/skills@latest add --skill visual-plan --mode local-files
9
10
  ```
10
11
 
11
12
  Use `--skill <name>` one or more times to select specific skills, or omit it in
12
13
  an interactive terminal to choose from a prompt. Use `--client codex`,
13
14
  `--client claude-code`, or `--client all` to choose install targets; omitted
14
- `--client` defaults to all supported clients. Add `--update-instructions` to
15
- append an idempotent managed block to `AGENTS.md` and/or `CLAUDE.md` for
16
- instruction-style skills.
15
+ `--client` defaults to all supported clients. For `visual-plan` and
16
+ `visual-recap`, use `--mode hosted`, `--mode local-files`, or
17
+ `--mode self-hosted --mcp-url <url>` to choose hosted sharing, all-local text
18
+ files, or your own Plan app. Add `--update-instructions` to append an idempotent
19
+ managed block to `AGENTS.md` and/or `CLAUDE.md` for instruction-style skills.
17
20
 
18
- Skill content comes from `BuilderIO/skills@main` at install/list time. That
19
- means adding or updating public skills such as `quick-recap` or
20
- `efficient-fable` in the skills repo is picked up by this CLI without publishing
21
- a new `@agent-native/skills` package. `visual-plan` and `visual-recap` are also
22
- installed from `BuilderIO/skills`; Agent Native syncs those two into the public
23
- repo from the framework source of truth.
21
+ Skill content comes from `BuilderIO/skills@main` at install/list time for plain
22
+ skill installs. Explicit `visual-plan` / `visual-recap` installs delegate to
23
+ `@agent-native/core` so Plan mode selection, MCP registration, and local-files
24
+ instructions stay in one framework-owned flow.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { type CliTelemetry } from "./telemetry.js";
2
2
  export type SkillClient = "codex" | "claude-code";
3
3
  export type SkillScope = "project" | "user";
4
+ export type PlanMode = "hosted" | "local-files" | "self-hosted";
4
5
  export interface SkillEntry {
5
6
  name: string;
6
7
  dir: string;
@@ -29,12 +30,16 @@ export interface InstallSkillsOptions {
29
30
  promptScope?: (context: ScopePromptContext) => Promise<SkillScope | null>;
30
31
  promptUpdateInstructions?: () => Promise<boolean | null>;
31
32
  promptGithubAction?: (context: GithubActionPromptContext) => Promise<boolean | null>;
33
+ promptPlanMode?: (context: PlanModePromptContext) => Promise<PlanMode | null>;
34
+ promptPlanMcpUrl?: () => Promise<string | null>;
32
35
  /**
33
36
  * Register the hosted MCP server for app-backed skills (e.g. visual-plan /
34
37
  * visual-recap → the Agent-Native Plan MCP). Defaults to `true`; pass
35
38
  * `false` (CLI `--no-mcp`) to install the skill files only.
36
39
  */
37
40
  mcp?: boolean;
41
+ planMode?: PlanMode;
42
+ mcpUrl?: string;
38
43
  }
39
44
  export interface InstalledMcpServer {
40
45
  serverName: string;
@@ -54,6 +59,7 @@ export interface InstallSkillsResult {
54
59
  instructionFiles: string[];
55
60
  githubActionPath?: string;
56
61
  mcpServers: InstalledMcpServer[];
62
+ planMode?: PlanMode;
57
63
  dryRun: boolean;
58
64
  }
59
65
  interface ParsedArgs {
@@ -74,6 +80,8 @@ interface ParsedArgs {
74
80
  connect: boolean;
75
81
  baseDir?: string;
76
82
  mcp: boolean;
83
+ planMode?: PlanMode;
84
+ mcpUrl?: string;
77
85
  }
78
86
  interface PromptOption<T extends string> {
79
87
  value: T;
@@ -94,8 +102,11 @@ export interface ScopePromptContext {
94
102
  export interface GithubActionPromptContext {
95
103
  workflowPath: string;
96
104
  }
105
+ export interface PlanModePromptContext {
106
+ initialMode: PlanMode;
107
+ }
97
108
  export declare function parseSkillsCliArgs(argv: string[]): ParsedArgs;
98
- export declare function runSkillsCli(argv: string[], options?: Pick<InstallSkillsOptions, "log" | "isInteractive" | "baseDir" | "promptSkills" | "promptClients" | "promptScope" | "promptUpdateInstructions" | "promptGithubAction">): Promise<void>;
109
+ export declare function runSkillsCli(argv: string[], options?: Pick<InstallSkillsOptions, "log" | "isInteractive" | "baseDir" | "promptSkills" | "promptClients" | "promptScope" | "promptUpdateInstructions" | "promptGithubAction" | "promptPlanMode" | "promptPlanMcpUrl">): Promise<void>;
99
110
  export declare function installSkills(options: InstallSkillsOptions): Promise<InstallSkillsResult>;
100
111
  export declare function createInstallId(): string;
101
112
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,6 +23,8 @@ Options:
23
23
  --no-update-instructions Skip managed instruction file updates
24
24
  --instructions-file <path> File to receive managed instructions (repeatable)
25
25
  --with-github-action Add .github/workflows/pr-visual-recap.yml when visual-recap is installed
26
+ --mode <mode> visual-plan/visual-recap mode: hosted, local-files, or self-hosted
27
+ --mcp-url <url> Self-hosted app/MCP URL for visual-plan/visual-recap
26
28
  --force Overwrite a different existing PR Visual Recap workflow
27
29
  --no-mcp Install skill files only; skip registering the app's MCP server
28
30
  --no-connect Register MCP where possible but skip inline browser/device authentication
@@ -33,6 +35,8 @@ Options:
33
35
  App-backed skills (visual-plan, visual-recap, assets, design-exploration)
34
36
  register their hosted MCP server in your agent config by default so the agent
35
37
  can actually use them. Use --no-mcp to skip that and copy the files only.
38
+ For visual-plan/visual-recap, choose --mode local-files for no sharing and all
39
+ local files, or --mode self-hosted --mcp-url <url> for your own Plan app.
36
40
 
37
41
  Examples:
38
42
  npx @agent-native/skills@latest add
@@ -41,7 +45,6 @@ Examples:
41
45
  `;
42
46
  const CLIENTS = ["codex", "claude-code"];
43
47
  const DEFAULT_SKILLS_SOURCE = "BuilderIO/skills";
44
- const PUBLIC_SKILLS_REPO_APP_SKILLS = new Set(["visual-plan", "visual-recap"]);
45
48
  const MANAGED_INSTRUCTIONS_START = "<!-- BEGIN @agent-native/skills -->";
46
49
  const MANAGED_INSTRUCTIONS_END = "<!-- END @agent-native/skills -->";
47
50
  export function parseSkillsCliArgs(argv) {
@@ -113,6 +116,12 @@ export function parseSkillsCliArgs(argv) {
113
116
  out.updateInstructions = false;
114
117
  else if (arg === "--with-github-action" || arg === "--with-github-actions")
115
118
  out.withGithubAction = true;
119
+ else if ((value = eat("--mode")) !== undefined) {
120
+ out.planMode = parsePlanMode(value);
121
+ }
122
+ else if ((value = eat("--mcp-url")) !== undefined) {
123
+ out.mcpUrl = value;
124
+ }
116
125
  else if (arg === "--force")
117
126
  out.force = true;
118
127
  else if (arg === "--no-mcp")
@@ -139,6 +148,11 @@ export function parseSkillsCliArgs(argv) {
139
148
  out.skillNames = unique(out.skillNames.map(normalizeSkillName));
140
149
  out.clients = unique(out.clients);
141
150
  out.instructionFiles = unique(out.instructionFiles);
151
+ if (out.planMode && out.mcpUrl && out.planMode !== "self-hosted") {
152
+ throw new Error("--mcp-url can only be used with --mode self-hosted.");
153
+ }
154
+ if (out.mcpUrl && !out.planMode)
155
+ out.planMode = "self-hosted";
142
156
  return out;
143
157
  }
144
158
  /**
@@ -149,57 +163,122 @@ export function parseSkillsCliArgs(argv) {
149
163
  */
150
164
  function toCoreSkillsArgv(parsed) {
151
165
  const out = [parsed.command];
152
- if (parsed.command !== "add")
153
- return out;
154
- if (parsed.skillNames.length === 1)
155
- out.push(parsed.skillNames[0]);
156
- else if (parsed.copySource && parsed.source)
157
- out.push(parsed.source);
158
- if (parsed.clients.length)
166
+ if (parsed.command === "add") {
167
+ if (parsed.copySource && parsed.source && parsed.skillNames.length > 0) {
168
+ out.push(parsed.source);
169
+ for (const skill of parsed.skillNames)
170
+ out.push("--skill", skill);
171
+ }
172
+ else if (parsed.skillNames.length === 1) {
173
+ out.push(parsed.skillNames[0]);
174
+ }
175
+ else if (parsed.skillNames.length > 1) {
176
+ const appIds = unique(parsed.skillNames
177
+ .map((name) => resolveAppForSkill(name)?.appId)
178
+ .filter((appId) => Boolean(appId)));
179
+ if (appIds.length === 1 &&
180
+ parsed.skillNames.every((name) => resolveAppForSkill(name))) {
181
+ out.push(appIds[0]);
182
+ }
183
+ else {
184
+ for (const skill of parsed.skillNames)
185
+ out.push("--skill", skill);
186
+ }
187
+ }
188
+ }
189
+ if (parsed.command === "add" && parsed.clients.length) {
159
190
  out.push("--client", parsed.clients.join(","));
160
- if (parsed.scopeExplicit)
191
+ }
192
+ if (parsed.command === "add" && parsed.scopeExplicit) {
161
193
  out.push("--scope", parsed.scope);
162
- if (parsed.yes)
194
+ }
195
+ if (parsed.command === "add" && parsed.yes)
163
196
  out.push("--yes");
164
197
  if (parsed.dryRun)
165
198
  out.push("--dry-run");
166
199
  if (parsed.printJson)
167
200
  out.push("--json");
168
- if (parsed.withGithubAction)
201
+ if (parsed.command === "add" && parsed.withGithubAction)
169
202
  out.push("--with-github-action");
170
- if (parsed.force)
203
+ if (parsed.command === "add" && parsed.planMode)
204
+ out.push("--mode", parsed.planMode);
205
+ if (parsed.command === "add" && parsed.mcpUrl)
206
+ out.push("--mcp-url", parsed.mcpUrl);
207
+ if (parsed.command === "add" && parsed.force)
171
208
  out.push("--force");
172
- if (parsed.mcp === false)
209
+ if (parsed.command === "add" && parsed.mcp === false)
173
210
  out.push("--no-mcp");
174
- if (parsed.connect === false)
211
+ if (parsed.command === "add" && parsed.connect === false)
175
212
  out.push("--no-connect");
176
- if (parsed.updateInstructions === true)
213
+ if (parsed.command === "add" && parsed.updateInstructions === true)
177
214
  out.push("--update-instructions");
178
- if (parsed.updateInstructions === false)
215
+ if (parsed.command === "add" && parsed.updateInstructions === false)
179
216
  out.push("--no-update-instructions");
180
217
  return out;
181
218
  }
219
+ function shouldLoadPublicCatalog(parsed) {
220
+ if (parsed.command === "list")
221
+ return true;
222
+ if (parsed.command !== "add")
223
+ return false;
224
+ if (parsed.copySource && parsed.source)
225
+ return true;
226
+ if (parsed.skillNames.length === 0)
227
+ return true;
228
+ return parsed.skillNames.some((name) => !resolveAppForSkill(name));
229
+ }
182
230
  export async function runSkillsCli(argv, options = {}) {
183
231
  const parsed = parseSkillsCliArgs(argv);
184
- // PIVOT: `@agent-native/skills` delegates explicitly selected core-only
185
- // app-backed installs to `@agent-native/core` for app setup. The default
186
- // add/list flow, plain skills, and public-repo-backed app skills stay here so
187
- // they always come from the live BuilderIO skills collection (quick-recap,
188
- // efficient-fable, visual-plan, visual-recap, …), which core does not own.
189
- // AGENT_NATIVE_SKILLS_DIRECT=1 (set when core delegates a plain repo back to us)
190
- // always forces the direct path and breaks the skills → core → skills loop.
232
+ // `@agent-native/skills` normally uses the exact same core flow as
233
+ // `agent-native skills`; it only passes a broader public skill catalog.
234
+ // AGENT_NATIVE_SKILLS_DIRECT=1 is set by core when it shells out to this
235
+ // package as a headless file-copy worker for public/plain skill repos. That
236
+ // direct mode is intentionally non-user-facing prompt plumbing.
191
237
  if (process.env.AGENT_NATIVE_SKILLS_DIRECT !== "1") {
192
- const coreOnlyAppSkills = parsed.skillNames.length > 0 &&
193
- parsed.skillNames.every((name) => resolveAppForSkill(name) !== undefined) &&
194
- parsed.skillNames.every((name) => !skillComesFromPublicSkillsRepo(name));
195
- if (parsed.command === "add" && coreOnlyAppSkills) {
196
- const { runSkills } = await import("@agent-native/core/cli/skills");
238
+ if (parsed.command === "help") {
239
+ process.stdout.write(`${HELP}\n`);
240
+ return;
241
+ }
242
+ const loadedSource = shouldLoadPublicCatalog(parsed)
243
+ ? await materializeSource(parsed.source ?? DEFAULT_SKILLS_SOURCE)
244
+ : null;
245
+ try {
246
+ const { runSkills } = (await import("@agent-native/core/cli/skills"));
247
+ const publicSkillEntries = loadedSource
248
+ ? discoverSkills(loadedSource.root).map((entry) => ({
249
+ name: entry.name,
250
+ description: entry.description,
251
+ }))
252
+ : [];
197
253
  await runSkills(toCoreSkillsArgv(parsed), {
254
+ log: options.log,
198
255
  isInteractive: options.isInteractive,
199
256
  baseDir: parsed.baseDir ?? options.baseDir,
257
+ catalogMode: "all",
258
+ publicSkillSource: loadedSource?.root ?? parsed.source ?? DEFAULT_SKILLS_SOURCE,
259
+ publicSkillEntries,
260
+ promptSkills: options.promptSkills
261
+ ? async (context) => options.promptSkills?.({
262
+ initialSkills: context.initialTargets,
263
+ options: context.options,
264
+ }) ?? null
265
+ : undefined,
266
+ promptClients: options.promptClients,
267
+ promptScope: options.promptScope,
268
+ promptGithubAction: options.promptGithubAction
269
+ ? async (context) => options.promptGithubAction?.({
270
+ workflowPath: context.workflowPath,
271
+ }) ?? null
272
+ : undefined,
273
+ promptPlanMode: options.promptPlanMode,
274
+ promptPlanMcpUrl: options.promptPlanMcpUrl,
275
+ promptUpdateInstructions: options.promptUpdateInstructions,
200
276
  });
201
277
  return;
202
278
  }
279
+ finally {
280
+ loadedSource?.cleanup?.();
281
+ }
203
282
  }
204
283
  const startedAt = Date.now();
205
284
  const telemetry = createCliTelemetry({
@@ -262,8 +341,12 @@ export async function runSkillsCli(argv, options = {}) {
262
341
  promptScope: options.promptScope,
263
342
  promptUpdateInstructions: options.promptUpdateInstructions,
264
343
  promptGithubAction: options.promptGithubAction,
344
+ promptPlanMode: options.promptPlanMode,
345
+ promptPlanMcpUrl: options.promptPlanMcpUrl,
265
346
  telemetry,
266
347
  mcp: parsed.mcp,
348
+ planMode: parsed.planMode,
349
+ mcpUrl: parsed.mcpUrl,
267
350
  });
268
351
  telemetry.track("skills_cli completed", {
269
352
  skills: result.skills.join(","),
@@ -293,9 +376,6 @@ export async function runSkillsCli(argv, options = {}) {
293
376
  await telemetry.flush();
294
377
  }
295
378
  }
296
- function skillComesFromPublicSkillsRepo(name) {
297
- return PUBLIC_SKILLS_REPO_APP_SKILLS.has(normalizeSkillName(name));
298
- }
299
379
  function readCliVersion() {
300
380
  try {
301
381
  const here = path.dirname(fileURLToPath(import.meta.url));
@@ -343,6 +423,9 @@ export async function installSkills(options) {
343
423
  selectedAll: selected.length === entries.length,
344
424
  preselected,
345
425
  });
426
+ const skillNames = selected.map((skill) => skill.name);
427
+ const planMode = await resolvePlanModeForSkills(skillNames, options);
428
+ const planMcpOverride = await resolvePlanMcpOverrideForMode(planMode, options);
346
429
  const clients = await resolveSelectedClients(options);
347
430
  options.telemetry?.track("skills_cli clients selected", {
348
431
  clients: clients.join(","),
@@ -350,13 +433,14 @@ export async function installSkills(options) {
350
433
  });
351
434
  const scope = await resolveSelectedScope(options);
352
435
  options.telemetry?.track("skills_cli scope selected", { scope });
353
- const skillNames = selected.map((skill) => skill.name);
354
436
  const instructionBlocks = managedInstructionBlocksForSkills(skillNames);
355
437
  const shouldUpdateInstructions = await shouldUpdateManagedInstructions(instructionBlocks, options);
356
438
  const shouldWriteGithubAction = selected.some((skill) => skill.name === "visual-recap") &&
357
439
  (options.withGithubAction ||
358
440
  (await shouldPromptGithubAction(options, baseDir)));
359
- const mcpApps = options.mcp === false ? [] : mcpAppsForSkills(skillNames);
441
+ const mcpApps = options.mcp === false || planMode === "local-files"
442
+ ? []
443
+ : mcpAppsForSkills(skillNames, planMcpOverride);
360
444
  const progress = await createInstallProgress(options, 1 +
361
445
  (shouldUpdateInstructions ? 1 : 0) +
362
446
  (shouldWriteGithubAction ? 1 : 0) +
@@ -476,6 +560,7 @@ export async function installSkills(options) {
476
560
  instructionFiles,
477
561
  githubActionPath,
478
562
  mcpServers,
563
+ planMode,
479
564
  dryRun: Boolean(options.dryRun),
480
565
  };
481
566
  }
@@ -501,6 +586,79 @@ function defaultArgs(command) {
501
586
  mcp: true,
502
587
  };
503
588
  }
589
+ function selectedPlanApp(skillNames) {
590
+ return skillNames
591
+ .map((skillName) => resolveAppForSkill(skillName))
592
+ .find((app) => app?.appId === "visual-plans");
593
+ }
594
+ async function resolvePlanModeForSkills(skillNames, options) {
595
+ const includesPlans = Boolean(selectedPlanApp(skillNames));
596
+ if (options.planMode && !includesPlans) {
597
+ throw new Error("--mode only applies to visual-plan / visual-recap.");
598
+ }
599
+ if (options.mcpUrl && !includesPlans) {
600
+ throw new Error("--mcp-url only applies to visual-plan / visual-recap.");
601
+ }
602
+ if (!includesPlans)
603
+ return undefined;
604
+ if (options.mcpUrl && !options.planMode)
605
+ return "self-hosted";
606
+ if (options.planMode)
607
+ return options.planMode;
608
+ if (isInteractive(options) && !options.yes) {
609
+ const prompt = options.promptPlanMode ?? promptForPlanMode;
610
+ const mode = await prompt({ initialMode: "hosted" });
611
+ if (!mode)
612
+ throw new Error("Cancelled.");
613
+ return mode;
614
+ }
615
+ return "hosted";
616
+ }
617
+ function resolvePlanMcpUrlOverride(input) {
618
+ let parsed;
619
+ try {
620
+ parsed = new URL(input);
621
+ }
622
+ catch {
623
+ throw new Error(`--mcp-url must be a valid URL (got "${input}").`);
624
+ }
625
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
626
+ throw new Error("--mcp-url must use http:// or https://.");
627
+ }
628
+ const mcpSuffix = "/_agent-native/mcp";
629
+ const trimmedPath = parsed.pathname.replace(/\/+$/, "");
630
+ const appPath = trimmedPath.endsWith(mcpSuffix)
631
+ ? trimmedPath.slice(0, -mcpSuffix.length)
632
+ : trimmedPath;
633
+ const mcpPath = trimmedPath.endsWith(mcpSuffix)
634
+ ? trimmedPath
635
+ : `${trimmedPath || ""}${mcpSuffix}`;
636
+ return {
637
+ hostedUrl: `${parsed.origin}${appPath}`,
638
+ mcpUrl: `${parsed.origin}${mcpPath}`,
639
+ };
640
+ }
641
+ async function resolvePlanMcpOverrideForMode(planMode, options) {
642
+ if (planMode === "local-files" && options.mcpUrl) {
643
+ throw new Error("--mode local-files cannot be combined with --mcp-url.");
644
+ }
645
+ if (planMode !== "self-hosted")
646
+ return undefined;
647
+ let mcpUrl = options.mcpUrl;
648
+ if (!mcpUrl && isInteractive(options) && !options.yes) {
649
+ const prompt = options.promptPlanMcpUrl ?? promptForPlanMcpUrl;
650
+ mcpUrl = (await prompt()) ?? undefined;
651
+ }
652
+ if (!mcpUrl) {
653
+ throw new Error("--mode self-hosted requires --mcp-url <url> in non-interactive mode.");
654
+ }
655
+ return resolvePlanMcpUrlOverride(mcpUrl);
656
+ }
657
+ function parsePlanMode(value) {
658
+ if (value === "hosted" || value === "local-files" || value === "self-hosted")
659
+ return value;
660
+ throw new Error('--mode must be "hosted", "local-files", or "self-hosted".');
661
+ }
504
662
  function parseScope(value) {
505
663
  if (value === "user" || value === "project")
506
664
  return value;
@@ -588,7 +746,7 @@ async function createInstallProgress(options, max) {
588
746
  },
589
747
  };
590
748
  }
591
- function mcpAppsForSkills(skillNames) {
749
+ function mcpAppsForSkills(skillNames, planOverride) {
592
750
  const apps = [];
593
751
  const seen = new Set();
594
752
  for (const skillName of skillNames) {
@@ -596,7 +754,16 @@ function mcpAppsForSkills(skillNames) {
596
754
  if (!app || seen.has(app.appId))
597
755
  continue;
598
756
  seen.add(app.appId);
599
- apps.push(app);
757
+ if (app.appId === "visual-plans" && planOverride) {
758
+ apps.push({
759
+ ...app,
760
+ hostedUrl: planOverride.hostedUrl,
761
+ mcpUrl: planOverride.mcpUrl,
762
+ });
763
+ }
764
+ else {
765
+ apps.push(app);
766
+ }
600
767
  }
601
768
  return apps;
602
769
  }
@@ -622,6 +789,7 @@ async function printInstallResult(result, options) {
622
789
  `Skills ${result.skills.join(", ") || "none"}`,
623
790
  `Agents ${result.clients.join(", ") || "none"}`,
624
791
  `Scope ${result.scope}`,
792
+ result.planMode ? `Plan mode ${result.planMode}` : "",
625
793
  result.written.length
626
794
  ? `Skill folders ${plural(result.written.length, "folder")} (${summarizePaths(result.written, options.baseDir)})`
627
795
  : "",
@@ -647,6 +815,13 @@ async function printInstallResult(result, options) {
647
815
  clack.note(guidance.join("\n"), "Next steps");
648
816
  }
649
817
  }
818
+ if (result.planMode === "local-files") {
819
+ clack.note([
820
+ "No sharing, all local.",
821
+ "Run: npx @agent-native/core@latest plan blocks --out plan-blocks.md",
822
+ "Preview: npx @agent-native/core@latest plan local preview --dir plans/<slug>",
823
+ ].join("\n"), "Local Plan files");
824
+ }
650
825
  if (!options.dryRun) {
651
826
  clack.note("Restart or reload selected agent clients if needed.", "Reload");
652
827
  }
@@ -684,6 +859,56 @@ async function promptForSkills(context) {
684
859
  return [];
685
860
  return result.filter((value) => typeof value === "string");
686
861
  }
862
+ async function promptForPlanMode(context) {
863
+ const clack = await import("@clack/prompts");
864
+ const result = await clack.select({
865
+ message: "How should visual-plan / visual-recap run?",
866
+ options: [
867
+ {
868
+ value: "hosted",
869
+ label: "Hosted",
870
+ hint: "Shareable Plan app with MCP tools, auth, comments, and hosted storage.",
871
+ },
872
+ {
873
+ value: "local-files",
874
+ label: "Local files",
875
+ hint: "No sharing, all local. Installs text skills and skips MCP/auth.",
876
+ },
877
+ {
878
+ value: "self-hosted",
879
+ label: "Self-hosted",
880
+ hint: "Use your own deployed Plan app MCP URL.",
881
+ },
882
+ ],
883
+ initialValue: context.initialMode,
884
+ });
885
+ if (clack.isCancel(result)) {
886
+ clack.cancel("Cancelled.");
887
+ return null;
888
+ }
889
+ return typeof result === "string" ? parsePlanMode(result) : null;
890
+ }
891
+ async function promptForPlanMcpUrl() {
892
+ const clack = await import("@clack/prompts");
893
+ const result = await clack.text({
894
+ message: "What is your self-hosted Plan app or MCP URL?",
895
+ placeholder: "https://plans.example.com",
896
+ validate(value) {
897
+ try {
898
+ resolvePlanMcpUrlOverride(String(value));
899
+ return undefined;
900
+ }
901
+ catch (error) {
902
+ return error instanceof Error ? error.message : String(error);
903
+ }
904
+ },
905
+ });
906
+ if (clack.isCancel(result)) {
907
+ clack.cancel("Cancelled.");
908
+ return null;
909
+ }
910
+ return typeof result === "string" ? result : null;
911
+ }
687
912
  async function resolveSelectedSkills(entries, options) {
688
913
  const byName = new Map(entries.map((entry) => [entry.name, entry]));
689
914
  const requested = unique((options.skillNames ?? []).map(normalizeSkillName));
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 { fileURLToPath } from \"node:url\";\n\nimport { resolveAppForSkill, type BuiltInAppMcp } 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 connect?: boolean;\n quiet?: boolean;\n deviceFlowTimeoutMs?: number;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n telemetry?: CliTelemetry;\n promptSkills?: (context: SkillsPromptContext) => Promise<string[] | null>;\n promptClients?: (\n context: ClientsPromptContext,\n ) => Promise<SkillClient[] | null>;\n promptScope?: (context: ScopePromptContext) => Promise<SkillScope | null>;\n promptUpdateInstructions?: () => Promise<boolean | null>;\n promptGithubAction?: (\n context: GithubActionPromptContext,\n ) => Promise<boolean | null>;\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 registeredClients: 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 connect: boolean;\n baseDir?: string;\n mcp: boolean;\n}\n\ninterface PromptOption<T extends string> {\n value: T;\n label: string;\n hint: string;\n}\n\nexport interface SkillsPromptContext {\n initialSkills: string[];\n options: Array<PromptOption<string>>;\n}\n\nexport interface ClientsPromptContext {\n initialClients: SkillClient[];\n options: Array<PromptOption<SkillClient>>;\n}\n\nexport interface ScopePromptContext {\n initialScope: SkillScope;\n}\n\nexport interface GithubActionPromptContext {\n workflowPath: string;\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 --no-connect Register MCP where possible but skip inline browser/device authentication\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 === \"--no-connect\" || arg === \"--skip-connect\")\n out.connect = false;\n else if (arg === \"--connect\") out.connect = 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.connect === false) out.push(\"--no-connect\");\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<\n InstallSkillsOptions,\n | \"log\"\n | \"isInteractive\"\n | \"baseDir\"\n | \"promptSkills\"\n | \"promptClients\"\n | \"promptScope\"\n | \"promptUpdateInstructions\"\n | \"promptGithubAction\"\n > = {},\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 stdoutLog =\n parsed.printJson || options.log\n ? options.log\n : (message: string) => process.stdout.write(`${message}\\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 connect: parsed.connect,\n quiet: parsed.printJson,\n log: parsed.printJson ? undefined : stdoutLog,\n isInteractive: options.isInteractive,\n promptSkills: options.promptSkills,\n promptClients: options.promptClients,\n promptScope: options.promptScope,\n promptUpdateInstructions: options.promptUpdateInstructions,\n promptGithubAction: options.promptGithubAction,\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 await printInstallResult(result, {\n baseDir: parsed.baseDir ?? options.baseDir ?? process.cwd(),\n dryRun: parsed.dryRun,\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 skillNames = selected.map((skill) => skill.name);\n const instructionBlocks = managedInstructionBlocksForSkills(skillNames);\n const shouldUpdateInstructions = await shouldUpdateManagedInstructions(\n instructionBlocks,\n options,\n );\n const shouldWriteGithubAction =\n selected.some((skill) => skill.name === \"visual-recap\") &&\n (options.withGithubAction ||\n (await shouldPromptGithubAction(options, baseDir)));\n const mcpApps = options.mcp === false ? [] : mcpAppsForSkills(skillNames);\n const progress = await createInstallProgress(\n options,\n 1 +\n (shouldUpdateInstructions ? 1 : 0) +\n (shouldWriteGithubAction ? 1 : 0) +\n mcpApps.length,\n );\n\n const written: string[] = [];\n let instructionFiles: string[] = [];\n let githubActionPath: string | undefined;\n const mcpServers: InstalledMcpServer[] = [];\n\n try {\n progress?.start(\"Installing skill files...\");\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 progress?.advance(\"Skill files installed\");\n\n options.telemetry?.track(\"skills_cli install completed\", {\n skills: skillNames.join(\",\"),\n clients: clients.join(\",\"),\n scope,\n writtenCount: written.length,\n dryRun: Boolean(options.dryRun),\n });\n\n if (shouldUpdateInstructions) {\n progress?.message(\"Updating managed instructions...\");\n instructionFiles = writeManagedInstructions(\n instructionBlocks,\n baseDir,\n clients,\n scope,\n options,\n );\n progress?.advance(\"Managed instructions updated\");\n if (instructionFiles.length) {\n options.telemetry?.track(\"skills_cli instructions updated\", {\n fileCount: instructionFiles.length,\n });\n }\n }\n\n if (shouldWriteGithubAction) {\n progress?.message(\"Writing PR Visual Recap workflow...\");\n githubActionPath = writePrVisualRecapWorkflow(baseDir, options);\n progress?.advance(\"PR Visual Recap workflow ready\");\n if (githubActionPath) {\n options.telemetry?.track(\"skills_cli github action added\");\n }\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 if (mcpApps.length > 0) {\n const mcpClients: ClientId[] = clients.map((client) =>\n client === \"claude-code\" ? \"claude-code\" : \"codex\",\n );\n for (const app of mcpApps) {\n progress?.message(`Registering ${app.displayName} MCP server...`);\n if (!options.dryRun) {\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: options.connect !== false && isInteractive(options),\n log,\n deviceFlowTimeoutMs: options.deviceFlowTimeoutMs,\n });\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: unique(\n registration.written.map(\n (entry) => entry.client as SkillClient,\n ),\n ),\n files: [\n ...new Set(registration.written.map((entry) => entry.file)),\n ],\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 } else {\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: clients,\n files: [],\n authenticated: false,\n guidance: [],\n });\n }\n progress?.advance(`${app.displayName} MCP server ready`);\n }\n }\n progress?.stop(\"Installation complete\");\n } catch (err) {\n progress?.error(\"Installation failed\");\n throw err;\n }\n\n return {\n source: source.root,\n skills: skillNames,\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 connect: true,\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\nfunction plural(count: number, singular: string, pluralForm = `${singular}s`) {\n return `${count} ${count === 1 ? singular : pluralForm}`;\n}\n\nfunction shortenPathForOutput(file: string, baseDir: string): string {\n const resolved = path.resolve(file);\n const home = process.env.HOME || os.homedir();\n if (resolved === home || resolved.startsWith(`${home}${path.sep}`)) {\n return `~${resolved.slice(home.length)}`;\n }\n const base = path.resolve(baseDir);\n const relative = path.relative(base, resolved);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return `.${path.sep}${relative}`;\n }\n return file;\n}\n\nfunction summarizePaths(files: string[], baseDir: string, max = 4): string {\n const shortened = unique(files).map((file) =>\n shortenPathForOutput(file, baseDir),\n );\n if (shortened.length <= max) return shortened.join(\", \");\n return `${shortened.slice(0, max).join(\", \")} +${shortened.length - max} more`;\n}\n\nasync function createInstallProgress(\n options: InstallSkillsOptions,\n max: number,\n) {\n if (options.quiet || !isInteractive(options) || max <= 0) return null;\n const clack = await import(\"@clack/prompts\");\n const progress = clack.progress({ max, indicator: \"timer\" });\n let active = false;\n return {\n start(message: string) {\n active = true;\n progress.start(message);\n },\n message(message: string) {\n if (active) progress.message(message);\n },\n advance(message: string) {\n if (active) progress.advance(1, message);\n },\n stop(message: string) {\n if (!active) return;\n progress.stop(message);\n active = false;\n },\n error(message: string) {\n if (!active) return;\n progress.error(message);\n active = false;\n },\n };\n}\n\nfunction mcpAppsForSkills(skillNames: string[]): BuiltInAppMcp[] {\n const apps: BuiltInAppMcp[] = [];\n const seen = new Set<string>();\n for (const skillName of skillNames) {\n const app = resolveAppForSkill(skillName);\n if (!app || seen.has(app.appId)) continue;\n seen.add(app.appId);\n apps.push(app);\n }\n return apps;\n}\n\nfunction mcpStatus(server: InstalledMcpServer, dryRun: boolean): string {\n if (dryRun) return `would register for ${server.clients.join(\", \")}`;\n\n const registered = server.registeredClients;\n const pending = server.clients.filter(\n (client) => !registered.includes(client),\n );\n const parts: string[] = [];\n if (registered.length > 0) {\n parts.push(\n `${server.authenticated ? \"registered and authenticated\" : \"registered\"} for ${registered.join(\", \")}`,\n );\n }\n if (pending.length > 0) {\n parts.push(`authentication pending for ${pending.join(\", \")}`);\n }\n return (\n parts.join(\"; \") ||\n `authentication pending for ${server.clients.join(\", \")}`\n );\n}\n\nasync function printInstallResult(\n result: InstallSkillsResult,\n options: { baseDir: string; dryRun: boolean },\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const verb = options.dryRun ? \"Would install\" : \"Installed\";\n const summary = [\n `Skills ${result.skills.join(\", \") || \"none\"}`,\n `Agents ${result.clients.join(\", \") || \"none\"}`,\n `Scope ${result.scope}`,\n result.written.length\n ? `Skill folders ${plural(result.written.length, \"folder\")} (${summarizePaths(\n result.written,\n options.baseDir,\n )})`\n : \"\",\n ].filter(Boolean);\n\n clack.note(summary.join(\"\\n\"), verb);\n\n if (result.instructionFiles.length) {\n clack.note(\n summarizePaths(result.instructionFiles, options.baseDir),\n \"Managed instructions\",\n );\n }\n\n if (result.githubActionPath) {\n clack.note(\n shortenPathForOutput(result.githubActionPath, options.baseDir),\n \"PR Visual Recap workflow\",\n );\n }\n\n if (result.mcpServers.length) {\n const mcpLines = result.mcpServers.map((server) => {\n const status = mcpStatus(server, options.dryRun);\n const files = server.files.length\n ? ` (${summarizePaths(server.files, options.baseDir, 2)})`\n : \"\";\n return `${server.serverName}: ${status}${files}`;\n });\n clack.note(mcpLines.join(\"\\n\"), \"MCP\");\n\n const guidance = result.mcpServers.flatMap((server) => server.guidance);\n if (guidance.length) {\n clack.note(guidance.join(\"\\n\"), \"Next steps\");\n }\n }\n\n if (!options.dryRun) {\n clack.note(\"Restart or reload selected agent clients if needed.\", \"Reload\");\n }\n\n clack.outro(`${options.dryRun ? \"Dry run complete\" : \"All set\"} ✅`);\n}\n\nfunction compactPromptHint(value: string | undefined): string {\n const hint = value?.replace(/\\s+/g, \" \").trim() ?? \"\";\n if (!hint) return \"Skill from BuilderIO/skills.\";\n if (hint.length <= 96) return hint;\n return `${hint.slice(0, 93).trimEnd()}...`;\n}\n\nfunction skillPromptOptions(\n entries: SkillEntry[],\n): SkillsPromptContext[\"options\"] {\n return entries.map((entry) => ({\n value: entry.name,\n label: entry.name,\n hint: compactPromptHint(entry.description),\n }));\n}\n\nasync function promptForSkills(\n context: SkillsPromptContext,\n): Promise<string[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Which skills do you want to install?\\n\" +\n \" (space toggles, enter confirms)\",\n options: context.options,\n initialValues: context.initialSkills,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n if (!Array.isArray(result)) return [];\n return result.filter((value): value is string => typeof value === \"string\");\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 prompt = options.promptSkills ?? promptForSkills;\n const selectedNames = await prompt({\n initialSkills: entries.map((entry) => entry.name),\n options: skillPromptOptions(entries),\n });\n if (!selectedNames || selectedNames.length === 0) {\n throw new Error(\"Cancelled.\");\n }\n return resolveSelectedSkills(entries, {\n ...options,\n skillNames: selectedNames,\n });\n}\n\nasync function promptForScope(\n context: ScopePromptContext,\n): Promise<SkillScope | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.select({\n message: \"Where do you want to install these skills?\",\n options: [\n {\n value: \"project\",\n label: \"Project\",\n hint: \"This repo only (.agents / .claude in the current directory)\",\n },\n {\n value: \"user\",\n label: \"User\",\n hint: \"Your home directory (~/.codex, ~/.claude), across projects\",\n },\n ],\n initialValue: context.initialScope,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return result === \"user\" ? \"user\" : \"project\";\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 prompt = options.promptScope ?? promptForScope;\n const selected = await prompt({ initialScope: \"project\" });\n if (!selected) throw new Error(\"Cancelled.\");\n return selected;\n}\n\nfunction clientPromptOptions(): ClientsPromptContext[\"options\"] {\n return [\n {\n value: \"codex\",\n label: \"Codex\",\n hint: \"Install into Codex skill directories\",\n },\n {\n value: \"claude-code\",\n label: \"Claude Code\",\n hint: \"Install into Claude Code skill directories\",\n },\n ];\n}\n\nfunction normalizePromptClients(values: unknown): SkillClient[] {\n if (!Array.isArray(values)) return [];\n return unique(\n values.filter(\n (value): value is SkillClient =>\n value === \"codex\" || value === \"claude-code\",\n ),\n );\n}\n\nasync function promptForClients(\n context: ClientsPromptContext,\n): Promise<SkillClient[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Install these skills for which local agents?\\n\" +\n \" (space toggles, enter confirms)\",\n options: context.options,\n initialValues: context.initialClients,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizePromptClients(result);\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 prompt = options.promptClients ?? promptForClients;\n const selected = await prompt({\n initialClients: CLIENTS,\n options: clientPromptOptions(),\n });\n if (!selected || selected.length === 0) throw new Error(\"Cancelled.\");\n return selected;\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\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 = frontmatterField(frontmatter?.[1], \"name\") ?? path.basename(dir);\n const description = frontmatterField(frontmatter?.[1], \"description\");\n return { name: normalizeSkillName(name), dir, description };\n}\n\nfunction frontmatterField(\n frontmatter: string | undefined,\n field: string,\n): string | undefined {\n if (!frontmatter) return undefined;\n const lines = frontmatter.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i += 1) {\n const match = lines[i].match(new RegExp(`^${field}:\\\\s*(.*)$`));\n if (!match) continue;\n const raw = match[1].trim();\n if (raw === \">-\" || raw === \">\" || raw === \"|-\" || raw === \"|\") {\n const block: string[] = [];\n for (let j = i + 1; j < lines.length; j += 1) {\n const line = lines[j];\n if (line.trim() && !/^\\s/.test(line)) break;\n block.push(line.replace(/^\\s+/, \"\"));\n }\n const value = raw.startsWith(\"|\") ? block.join(\"\\n\") : block.join(\" \");\n return value.replace(/\\s+/g, \" \").trim() || undefined;\n }\n return raw.replace(/^[\"']|[\"']$/g, \"\").trim() || undefined;\n }\n return undefined;\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 \"When writing final response status indicators, use the /quick-recap skill always.\";\n }\n if (skillName === \"efficient-fable\") {\n return \"When operating as Claude Fable, use the /efficient-fable skill always.\";\n }\n if (skillName === \"efficient-frontier\") {\n return \"When using a high-cost frontier model for codebase-heavy work, use the /efficient-frontier skill always.\";\n }\n if (skillName === \"stay-within-limits\") {\n return \"When long-running or parallel work needs usage-limit checks, use the /stay-within-limits skill always.\";\n }\n if (skillName === \"visual-plan\") {\n return \"When work needs an interactive visual plan before implementation, use the /visual-plan skill always.\";\n }\n if (skillName === \"visual-recap\") {\n return \"When a PR, branch, commit, or diff needs an interactive visual recap, use the /visual-recap skill always.\";\n }\n return null;\n}\n\nfunction managedInstructionBlocksForSkills(skillNames: string[]): string[] {\n return skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n}\n\nasync function shouldUpdateManagedInstructions(\n blocks: string[],\n options: InstallSkillsOptions,\n): Promise<boolean> {\n if (blocks.length === 0) return false;\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate !== undefined) return shouldUpdate;\n if (options.yes) return true;\n if (!isInteractive(options)) return false;\n const prompt =\n options.promptUpdateInstructions ?? promptForUpdateInstructions;\n return (await prompt()) === true;\n}\n\nfunction writeManagedInstructions(\n blocks: string[],\n baseDir: string,\n clients: SkillClient[],\n scope: SkillScope,\n options: InstallSkillsOptions,\n): string[] {\n if (blocks.length === 0) return [];\n const files = resolveInstructionFiles(\n baseDir,\n options.instructionFiles,\n clients,\n scope,\n );\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\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\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = managedInstructionBlocksForSkills(skillNames);\n const clients = options.clients?.length ? options.clients : CLIENTS;\n const scope = options.scope ?? \"user\";\n if (!(await shouldUpdateManagedInstructions(blocks, options))) return [];\n return writeManagedInstructions(blocks, baseDir, clients, scope, options);\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n clients: SkillClient[],\n scope: SkillScope,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n if (scope === \"user\") {\n const home = process.env.HOME || os.homedir();\n const files: string[] = [];\n if (clients.includes(\"codex\")) {\n const codexHome = process.env.CODEX_HOME || path.join(home, \".codex\");\n files.push(path.join(codexHome, \"AGENTS.md\"));\n }\n if (clients.includes(\"claude-code\")) {\n files.push(path.join(home, \".claude\", \"CLAUDE.md\"));\n }\n return unique(files);\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 prompt = options.promptGithubAction ?? promptForGithubAction;\n return (\n (await prompt({\n workflowPath: path.join(\".github\", \"workflows\", \"pr-visual-recap.yml\"),\n })) === true\n );\n}\n\nasync function promptForUpdateInstructions(): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Add managed AGENTS.md / CLAUDE.md instructions for always-on behavior?\",\n initialValue: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped instruction update.\");\n return null;\n }\n return Boolean(result);\n}\n\nasync function promptForGithubAction(\n context: GithubActionPromptContext,\n): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Optional: add automatic PR Visual Recaps? (GitHub Action)\\n\" +\n \" Posts a human-friendly recap on every pull request.\\n\" +\n ` Writes ${context.workflowPath}.`,\n initialValue: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped PR Visual Recap workflow.\");\n return null;\n }\n return Boolean(result);\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 { fileURLToPath } from \"node:url\";\n\nimport { resolveAppForSkill, type BuiltInAppMcp } 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\";\nexport type PlanMode = \"hosted\" | \"local-files\" | \"self-hosted\";\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 connect?: boolean;\n quiet?: boolean;\n deviceFlowTimeoutMs?: number;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n telemetry?: CliTelemetry;\n promptSkills?: (context: SkillsPromptContext) => Promise<string[] | null>;\n promptClients?: (\n context: ClientsPromptContext,\n ) => Promise<SkillClient[] | null>;\n promptScope?: (context: ScopePromptContext) => Promise<SkillScope | null>;\n promptUpdateInstructions?: () => Promise<boolean | null>;\n promptGithubAction?: (\n context: GithubActionPromptContext,\n ) => Promise<boolean | null>;\n promptPlanMode?: (context: PlanModePromptContext) => Promise<PlanMode | null>;\n promptPlanMcpUrl?: () => Promise<string | null>;\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 planMode?: PlanMode;\n mcpUrl?: string;\n}\n\nexport interface InstalledMcpServer {\n serverName: string;\n mcpUrl: string;\n clients: SkillClient[];\n registeredClients: 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 planMode?: PlanMode;\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 connect: boolean;\n baseDir?: string;\n mcp: boolean;\n planMode?: PlanMode;\n mcpUrl?: string;\n}\n\ninterface PromptOption<T extends string> {\n value: T;\n label: string;\n hint: string;\n}\n\nexport interface SkillsPromptContext {\n initialSkills: string[];\n options: Array<PromptOption<string>>;\n}\n\nexport interface ClientsPromptContext {\n initialClients: SkillClient[];\n options: Array<PromptOption<SkillClient>>;\n}\n\nexport interface ScopePromptContext {\n initialScope: SkillScope;\n}\n\nexport interface GithubActionPromptContext {\n workflowPath: string;\n}\n\nexport interface PlanModePromptContext {\n initialMode: PlanMode;\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 --mode <mode> visual-plan/visual-recap mode: hosted, local-files, or self-hosted\n --mcp-url <url> Self-hosted app/MCP URL for visual-plan/visual-recap\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 --no-connect Register MCP where possible but skip inline browser/device authentication\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.\nFor visual-plan/visual-recap, choose --mode local-files for no sharing and all\nlocal files, or --mode self-hosted --mcp-url <url> for your own Plan app.\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 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 ((value = eat(\"--mode\")) !== undefined) {\n out.planMode = parsePlanMode(value);\n } else if ((value = eat(\"--mcp-url\")) !== undefined) {\n out.mcpUrl = value;\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 === \"--no-connect\" || arg === \"--skip-connect\")\n out.connect = false;\n else if (arg === \"--connect\") out.connect = 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 if (out.planMode && out.mcpUrl && out.planMode !== \"self-hosted\") {\n throw new Error(\"--mcp-url can only be used with --mode self-hosted.\");\n }\n if (out.mcpUrl && !out.planMode) out.planMode = \"self-hosted\";\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\") {\n if (parsed.copySource && parsed.source && parsed.skillNames.length > 0) {\n out.push(parsed.source);\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n } else if (parsed.skillNames.length === 1) {\n out.push(parsed.skillNames[0]);\n } else if (parsed.skillNames.length > 1) {\n const appIds = unique(\n parsed.skillNames\n .map((name) => resolveAppForSkill(name)?.appId)\n .filter((appId): appId is string => Boolean(appId)),\n );\n if (\n appIds.length === 1 &&\n parsed.skillNames.every((name) => resolveAppForSkill(name))\n ) {\n out.push(appIds[0]);\n } else {\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n }\n }\n }\n if (parsed.command === \"add\" && parsed.clients.length) {\n out.push(\"--client\", parsed.clients.join(\",\"));\n }\n if (parsed.command === \"add\" && parsed.scopeExplicit) {\n out.push(\"--scope\", parsed.scope);\n }\n if (parsed.command === \"add\" && parsed.yes) out.push(\"--yes\");\n if (parsed.dryRun) out.push(\"--dry-run\");\n if (parsed.printJson) out.push(\"--json\");\n if (parsed.command === \"add\" && parsed.withGithubAction)\n out.push(\"--with-github-action\");\n if (parsed.command === \"add\" && parsed.planMode)\n out.push(\"--mode\", parsed.planMode);\n if (parsed.command === \"add\" && parsed.mcpUrl)\n out.push(\"--mcp-url\", parsed.mcpUrl);\n if (parsed.command === \"add\" && parsed.force) out.push(\"--force\");\n if (parsed.command === \"add\" && parsed.mcp === false) out.push(\"--no-mcp\");\n if (parsed.command === \"add\" && parsed.connect === false)\n out.push(\"--no-connect\");\n if (parsed.command === \"add\" && parsed.updateInstructions === true)\n out.push(\"--update-instructions\");\n if (parsed.command === \"add\" && parsed.updateInstructions === false)\n out.push(\"--no-update-instructions\");\n return out;\n}\n\nfunction shouldLoadPublicCatalog(parsed: ParsedArgs): boolean {\n if (parsed.command === \"list\") return true;\n if (parsed.command !== \"add\") return false;\n if (parsed.copySource && parsed.source) return true;\n if (parsed.skillNames.length === 0) return true;\n return parsed.skillNames.some((name) => !resolveAppForSkill(name));\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: Pick<\n InstallSkillsOptions,\n | \"log\"\n | \"isInteractive\"\n | \"baseDir\"\n | \"promptSkills\"\n | \"promptClients\"\n | \"promptScope\"\n | \"promptUpdateInstructions\"\n | \"promptGithubAction\"\n | \"promptPlanMode\"\n | \"promptPlanMcpUrl\"\n > = {},\n): Promise<void> {\n const parsed = parseSkillsCliArgs(argv);\n\n // `@agent-native/skills` normally uses the exact same core flow as\n // `agent-native skills`; it only passes a broader public skill catalog.\n // AGENT_NATIVE_SKILLS_DIRECT=1 is set by core when it shells out to this\n // package as a headless file-copy worker for public/plain skill repos. That\n // direct mode is intentionally non-user-facing prompt plumbing.\n if (process.env.AGENT_NATIVE_SKILLS_DIRECT !== \"1\") {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n const loadedSource = shouldLoadPublicCatalog(parsed)\n ? await materializeSource(parsed.source ?? DEFAULT_SKILLS_SOURCE)\n : null;\n try {\n const { runSkills } = (await import(\"@agent-native/core/cli/skills\")) as {\n runSkills: (\n argv: string[],\n options: Record<string, unknown>,\n ) => Promise<void>;\n };\n const publicSkillEntries = loadedSource\n ? discoverSkills(loadedSource.root).map((entry) => ({\n name: entry.name,\n description: entry.description,\n }))\n : [];\n await runSkills(toCoreSkillsArgv(parsed), {\n log: options.log,\n isInteractive: options.isInteractive,\n baseDir: parsed.baseDir ?? options.baseDir,\n catalogMode: \"all\",\n publicSkillSource:\n loadedSource?.root ?? parsed.source ?? DEFAULT_SKILLS_SOURCE,\n publicSkillEntries,\n promptSkills: options.promptSkills\n ? async (context: any) =>\n options.promptSkills?.({\n initialSkills: context.initialTargets,\n options: context.options,\n }) ?? null\n : undefined,\n promptClients: options.promptClients as any,\n promptScope: options.promptScope,\n promptGithubAction: options.promptGithubAction\n ? async (context: any) =>\n options.promptGithubAction?.({\n workflowPath: context.workflowPath,\n }) ?? null\n : undefined,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n promptUpdateInstructions: options.promptUpdateInstructions,\n });\n return;\n } finally {\n loadedSource?.cleanup?.();\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 stdoutLog =\n parsed.printJson || options.log\n ? options.log\n : (message: string) => process.stdout.write(`${message}\\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 connect: parsed.connect,\n quiet: parsed.printJson,\n log: parsed.printJson ? undefined : stdoutLog,\n isInteractive: options.isInteractive,\n promptSkills: options.promptSkills,\n promptClients: options.promptClients,\n promptScope: options.promptScope,\n promptUpdateInstructions: options.promptUpdateInstructions,\n promptGithubAction: options.promptGithubAction,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n telemetry,\n mcp: parsed.mcp,\n planMode: parsed.planMode,\n mcpUrl: parsed.mcpUrl,\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 await printInstallResult(result, {\n baseDir: parsed.baseDir ?? options.baseDir ?? process.cwd(),\n dryRun: parsed.dryRun,\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 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 skillNames = selected.map((skill) => skill.name);\n const planMode = await resolvePlanModeForSkills(skillNames, options);\n const planMcpOverride = await resolvePlanMcpOverrideForMode(\n planMode,\n options,\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 instructionBlocks = managedInstructionBlocksForSkills(skillNames);\n const shouldUpdateInstructions = await shouldUpdateManagedInstructions(\n instructionBlocks,\n options,\n );\n const shouldWriteGithubAction =\n selected.some((skill) => skill.name === \"visual-recap\") &&\n (options.withGithubAction ||\n (await shouldPromptGithubAction(options, baseDir)));\n const mcpApps =\n options.mcp === false || planMode === \"local-files\"\n ? []\n : mcpAppsForSkills(skillNames, planMcpOverride);\n const progress = await createInstallProgress(\n options,\n 1 +\n (shouldUpdateInstructions ? 1 : 0) +\n (shouldWriteGithubAction ? 1 : 0) +\n mcpApps.length,\n );\n\n const written: string[] = [];\n let instructionFiles: string[] = [];\n let githubActionPath: string | undefined;\n const mcpServers: InstalledMcpServer[] = [];\n\n try {\n progress?.start(\"Installing skill files...\");\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 progress?.advance(\"Skill files installed\");\n\n options.telemetry?.track(\"skills_cli install completed\", {\n skills: skillNames.join(\",\"),\n clients: clients.join(\",\"),\n scope,\n writtenCount: written.length,\n dryRun: Boolean(options.dryRun),\n });\n\n if (shouldUpdateInstructions) {\n progress?.message(\"Updating managed instructions...\");\n instructionFiles = writeManagedInstructions(\n instructionBlocks,\n baseDir,\n clients,\n scope,\n options,\n );\n progress?.advance(\"Managed instructions updated\");\n if (instructionFiles.length) {\n options.telemetry?.track(\"skills_cli instructions updated\", {\n fileCount: instructionFiles.length,\n });\n }\n }\n\n if (shouldWriteGithubAction) {\n progress?.message(\"Writing PR Visual Recap workflow...\");\n githubActionPath = writePrVisualRecapWorkflow(baseDir, options);\n progress?.advance(\"PR Visual Recap workflow ready\");\n if (githubActionPath) {\n options.telemetry?.track(\"skills_cli github action added\");\n }\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 if (mcpApps.length > 0) {\n const mcpClients: ClientId[] = clients.map((client) =>\n client === \"claude-code\" ? \"claude-code\" : \"codex\",\n );\n for (const app of mcpApps) {\n progress?.message(`Registering ${app.displayName} MCP server...`);\n if (!options.dryRun) {\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: options.connect !== false && isInteractive(options),\n log,\n deviceFlowTimeoutMs: options.deviceFlowTimeoutMs,\n });\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: unique(\n registration.written.map(\n (entry) => entry.client as SkillClient,\n ),\n ),\n files: [\n ...new Set(registration.written.map((entry) => entry.file)),\n ],\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 } else {\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: clients,\n files: [],\n authenticated: false,\n guidance: [],\n });\n }\n progress?.advance(`${app.displayName} MCP server ready`);\n }\n }\n progress?.stop(\"Installation complete\");\n } catch (err) {\n progress?.error(\"Installation failed\");\n throw err;\n }\n\n return {\n source: source.root,\n skills: skillNames,\n clients,\n scope,\n written,\n instructionFiles,\n githubActionPath,\n mcpServers,\n planMode,\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 connect: true,\n mcp: true,\n };\n}\n\nfunction selectedPlanApp(skillNames: string[]): BuiltInAppMcp | undefined {\n return skillNames\n .map((skillName) => resolveAppForSkill(skillName))\n .find((app): app is BuiltInAppMcp => app?.appId === \"visual-plans\");\n}\n\nasync function resolvePlanModeForSkills(\n skillNames: string[],\n options: InstallSkillsOptions,\n): Promise<PlanMode | undefined> {\n const includesPlans = Boolean(selectedPlanApp(skillNames));\n if (options.planMode && !includesPlans) {\n throw new Error(\"--mode only applies to visual-plan / visual-recap.\");\n }\n if (options.mcpUrl && !includesPlans) {\n throw new Error(\"--mcp-url only applies to visual-plan / visual-recap.\");\n }\n if (!includesPlans) return undefined;\n\n if (options.mcpUrl && !options.planMode) return \"self-hosted\";\n if (options.planMode) return options.planMode;\n if (isInteractive(options) && !options.yes) {\n const prompt = options.promptPlanMode ?? promptForPlanMode;\n const mode = await prompt({ initialMode: \"hosted\" });\n if (!mode) throw new Error(\"Cancelled.\");\n return mode;\n }\n return \"hosted\";\n}\n\nfunction resolvePlanMcpUrlOverride(input: string): {\n hostedUrl: string;\n mcpUrl: string;\n} {\n let parsed: URL;\n try {\n parsed = new URL(input);\n } catch {\n throw new Error(`--mcp-url must be a valid URL (got \"${input}\").`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"--mcp-url must use http:// or https://.\");\n }\n const mcpSuffix = \"/_agent-native/mcp\";\n const trimmedPath = parsed.pathname.replace(/\\/+$/, \"\");\n const appPath = trimmedPath.endsWith(mcpSuffix)\n ? trimmedPath.slice(0, -mcpSuffix.length)\n : trimmedPath;\n const mcpPath = trimmedPath.endsWith(mcpSuffix)\n ? trimmedPath\n : `${trimmedPath || \"\"}${mcpSuffix}`;\n return {\n hostedUrl: `${parsed.origin}${appPath}`,\n mcpUrl: `${parsed.origin}${mcpPath}`,\n };\n}\n\nasync function resolvePlanMcpOverrideForMode(\n planMode: PlanMode | undefined,\n options: InstallSkillsOptions,\n): Promise<{ hostedUrl: string; mcpUrl: string } | undefined> {\n if (planMode === \"local-files\" && options.mcpUrl) {\n throw new Error(\"--mode local-files cannot be combined with --mcp-url.\");\n }\n if (planMode !== \"self-hosted\") return undefined;\n let mcpUrl = options.mcpUrl;\n if (!mcpUrl && isInteractive(options) && !options.yes) {\n const prompt = options.promptPlanMcpUrl ?? promptForPlanMcpUrl;\n mcpUrl = (await prompt()) ?? undefined;\n }\n if (!mcpUrl) {\n throw new Error(\n \"--mode self-hosted requires --mcp-url <url> in non-interactive mode.\",\n );\n }\n return resolvePlanMcpUrlOverride(mcpUrl);\n}\n\nfunction parsePlanMode(value: string): PlanMode {\n if (value === \"hosted\" || value === \"local-files\" || value === \"self-hosted\")\n return value;\n throw new Error('--mode must be \"hosted\", \"local-files\", or \"self-hosted\".');\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\nfunction plural(count: number, singular: string, pluralForm = `${singular}s`) {\n return `${count} ${count === 1 ? singular : pluralForm}`;\n}\n\nfunction shortenPathForOutput(file: string, baseDir: string): string {\n const resolved = path.resolve(file);\n const home = process.env.HOME || os.homedir();\n if (resolved === home || resolved.startsWith(`${home}${path.sep}`)) {\n return `~${resolved.slice(home.length)}`;\n }\n const base = path.resolve(baseDir);\n const relative = path.relative(base, resolved);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return `.${path.sep}${relative}`;\n }\n return file;\n}\n\nfunction summarizePaths(files: string[], baseDir: string, max = 4): string {\n const shortened = unique(files).map((file) =>\n shortenPathForOutput(file, baseDir),\n );\n if (shortened.length <= max) return shortened.join(\", \");\n return `${shortened.slice(0, max).join(\", \")} +${shortened.length - max} more`;\n}\n\nasync function createInstallProgress(\n options: InstallSkillsOptions,\n max: number,\n) {\n if (options.quiet || !isInteractive(options) || max <= 0) return null;\n const clack = await import(\"@clack/prompts\");\n const progress = clack.progress({ max, indicator: \"timer\" });\n let active = false;\n return {\n start(message: string) {\n active = true;\n progress.start(message);\n },\n message(message: string) {\n if (active) progress.message(message);\n },\n advance(message: string) {\n if (active) progress.advance(1, message);\n },\n stop(message: string) {\n if (!active) return;\n progress.stop(message);\n active = false;\n },\n error(message: string) {\n if (!active) return;\n progress.error(message);\n active = false;\n },\n };\n}\n\nfunction mcpAppsForSkills(\n skillNames: string[],\n planOverride?: { hostedUrl: string; mcpUrl: string },\n): BuiltInAppMcp[] {\n const apps: BuiltInAppMcp[] = [];\n const seen = new Set<string>();\n for (const skillName of skillNames) {\n const app = resolveAppForSkill(skillName);\n if (!app || seen.has(app.appId)) continue;\n seen.add(app.appId);\n if (app.appId === \"visual-plans\" && planOverride) {\n apps.push({\n ...app,\n hostedUrl: planOverride.hostedUrl,\n mcpUrl: planOverride.mcpUrl,\n });\n } else {\n apps.push(app);\n }\n }\n return apps;\n}\n\nfunction mcpStatus(server: InstalledMcpServer, dryRun: boolean): string {\n if (dryRun) return `would register for ${server.clients.join(\", \")}`;\n\n const registered = server.registeredClients;\n const pending = server.clients.filter(\n (client) => !registered.includes(client),\n );\n const parts: string[] = [];\n if (registered.length > 0) {\n parts.push(\n `${server.authenticated ? \"registered and authenticated\" : \"registered\"} for ${registered.join(\", \")}`,\n );\n }\n if (pending.length > 0) {\n parts.push(`authentication pending for ${pending.join(\", \")}`);\n }\n return (\n parts.join(\"; \") ||\n `authentication pending for ${server.clients.join(\", \")}`\n );\n}\n\nasync function printInstallResult(\n result: InstallSkillsResult,\n options: { baseDir: string; dryRun: boolean },\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const verb = options.dryRun ? \"Would install\" : \"Installed\";\n const summary = [\n `Skills ${result.skills.join(\", \") || \"none\"}`,\n `Agents ${result.clients.join(\", \") || \"none\"}`,\n `Scope ${result.scope}`,\n result.planMode ? `Plan mode ${result.planMode}` : \"\",\n result.written.length\n ? `Skill folders ${plural(result.written.length, \"folder\")} (${summarizePaths(\n result.written,\n options.baseDir,\n )})`\n : \"\",\n ].filter(Boolean);\n\n clack.note(summary.join(\"\\n\"), verb);\n\n if (result.instructionFiles.length) {\n clack.note(\n summarizePaths(result.instructionFiles, options.baseDir),\n \"Managed instructions\",\n );\n }\n\n if (result.githubActionPath) {\n clack.note(\n shortenPathForOutput(result.githubActionPath, options.baseDir),\n \"PR Visual Recap workflow\",\n );\n }\n\n if (result.mcpServers.length) {\n const mcpLines = result.mcpServers.map((server) => {\n const status = mcpStatus(server, options.dryRun);\n const files = server.files.length\n ? ` (${summarizePaths(server.files, options.baseDir, 2)})`\n : \"\";\n return `${server.serverName}: ${status}${files}`;\n });\n clack.note(mcpLines.join(\"\\n\"), \"MCP\");\n\n const guidance = result.mcpServers.flatMap((server) => server.guidance);\n if (guidance.length) {\n clack.note(guidance.join(\"\\n\"), \"Next steps\");\n }\n }\n\n if (result.planMode === \"local-files\") {\n clack.note(\n [\n \"No sharing, all local.\",\n \"Run: npx @agent-native/core@latest plan blocks --out plan-blocks.md\",\n \"Preview: npx @agent-native/core@latest plan local preview --dir plans/<slug>\",\n ].join(\"\\n\"),\n \"Local Plan files\",\n );\n }\n\n if (!options.dryRun) {\n clack.note(\"Restart or reload selected agent clients if needed.\", \"Reload\");\n }\n\n clack.outro(`${options.dryRun ? \"Dry run complete\" : \"All set\"} ✅`);\n}\n\nfunction compactPromptHint(value: string | undefined): string {\n const hint = value?.replace(/\\s+/g, \" \").trim() ?? \"\";\n if (!hint) return \"Skill from BuilderIO/skills.\";\n if (hint.length <= 96) return hint;\n return `${hint.slice(0, 93).trimEnd()}...`;\n}\n\nfunction skillPromptOptions(\n entries: SkillEntry[],\n): SkillsPromptContext[\"options\"] {\n return entries.map((entry) => ({\n value: entry.name,\n label: entry.name,\n hint: compactPromptHint(entry.description),\n }));\n}\n\nasync function promptForSkills(\n context: SkillsPromptContext,\n): Promise<string[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Which skills do you want to install?\\n\" +\n \" (space toggles, enter confirms)\",\n options: context.options,\n initialValues: context.initialSkills,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n if (!Array.isArray(result)) return [];\n return result.filter((value): value is string => typeof value === \"string\");\n}\n\nasync function promptForPlanMode(\n context: PlanModePromptContext,\n): Promise<PlanMode | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.select({\n message: \"How should visual-plan / visual-recap run?\",\n options: [\n {\n value: \"hosted\",\n label: \"Hosted\",\n hint: \"Shareable Plan app with MCP tools, auth, comments, and hosted storage.\",\n },\n {\n value: \"local-files\",\n label: \"Local files\",\n hint: \"No sharing, all local. Installs text skills and skips MCP/auth.\",\n },\n {\n value: \"self-hosted\",\n label: \"Self-hosted\",\n hint: \"Use your own deployed Plan app MCP URL.\",\n },\n ],\n initialValue: context.initialMode,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return typeof result === \"string\" ? parsePlanMode(result) : null;\n}\n\nasync function promptForPlanMcpUrl(): Promise<string | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.text({\n message: \"What is your self-hosted Plan app or MCP URL?\",\n placeholder: \"https://plans.example.com\",\n validate(value) {\n try {\n resolvePlanMcpUrlOverride(String(value));\n return undefined;\n } catch (error) {\n return error instanceof Error ? error.message : String(error);\n }\n },\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return typeof result === \"string\" ? result : null;\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 prompt = options.promptSkills ?? promptForSkills;\n const selectedNames = await prompt({\n initialSkills: entries.map((entry) => entry.name),\n options: skillPromptOptions(entries),\n });\n if (!selectedNames || selectedNames.length === 0) {\n throw new Error(\"Cancelled.\");\n }\n return resolveSelectedSkills(entries, {\n ...options,\n skillNames: selectedNames,\n });\n}\n\nasync function promptForScope(\n context: ScopePromptContext,\n): Promise<SkillScope | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.select({\n message: \"Where do you want to install these skills?\",\n options: [\n {\n value: \"project\",\n label: \"Project\",\n hint: \"This repo only (.agents / .claude in the current directory)\",\n },\n {\n value: \"user\",\n label: \"User\",\n hint: \"Your home directory (~/.codex, ~/.claude), across projects\",\n },\n ],\n initialValue: context.initialScope,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return result === \"user\" ? \"user\" : \"project\";\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 prompt = options.promptScope ?? promptForScope;\n const selected = await prompt({ initialScope: \"project\" });\n if (!selected) throw new Error(\"Cancelled.\");\n return selected;\n}\n\nfunction clientPromptOptions(): ClientsPromptContext[\"options\"] {\n return [\n {\n value: \"codex\",\n label: \"Codex\",\n hint: \"Install into Codex skill directories\",\n },\n {\n value: \"claude-code\",\n label: \"Claude Code\",\n hint: \"Install into Claude Code skill directories\",\n },\n ];\n}\n\nfunction normalizePromptClients(values: unknown): SkillClient[] {\n if (!Array.isArray(values)) return [];\n return unique(\n values.filter(\n (value): value is SkillClient =>\n value === \"codex\" || value === \"claude-code\",\n ),\n );\n}\n\nasync function promptForClients(\n context: ClientsPromptContext,\n): Promise<SkillClient[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Install these skills for which local agents?\\n\" +\n \" (space toggles, enter confirms)\",\n options: context.options,\n initialValues: context.initialClients,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizePromptClients(result);\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 prompt = options.promptClients ?? promptForClients;\n const selected = await prompt({\n initialClients: CLIENTS,\n options: clientPromptOptions(),\n });\n if (!selected || selected.length === 0) throw new Error(\"Cancelled.\");\n return selected;\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\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 = frontmatterField(frontmatter?.[1], \"name\") ?? path.basename(dir);\n const description = frontmatterField(frontmatter?.[1], \"description\");\n return { name: normalizeSkillName(name), dir, description };\n}\n\nfunction frontmatterField(\n frontmatter: string | undefined,\n field: string,\n): string | undefined {\n if (!frontmatter) return undefined;\n const lines = frontmatter.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i += 1) {\n const match = lines[i].match(new RegExp(`^${field}:\\\\s*(.*)$`));\n if (!match) continue;\n const raw = match[1].trim();\n if (raw === \">-\" || raw === \">\" || raw === \"|-\" || raw === \"|\") {\n const block: string[] = [];\n for (let j = i + 1; j < lines.length; j += 1) {\n const line = lines[j];\n if (line.trim() && !/^\\s/.test(line)) break;\n block.push(line.replace(/^\\s+/, \"\"));\n }\n const value = raw.startsWith(\"|\") ? block.join(\"\\n\") : block.join(\" \");\n return value.replace(/\\s+/g, \" \").trim() || undefined;\n }\n return raw.replace(/^[\"']|[\"']$/g, \"\").trim() || undefined;\n }\n return undefined;\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 \"When writing final response status indicators, use the /quick-recap skill always.\";\n }\n if (skillName === \"efficient-fable\") {\n return \"When operating as Claude Fable, use the /efficient-fable skill always.\";\n }\n if (skillName === \"efficient-frontier\") {\n return \"When using a high-cost frontier model for codebase-heavy work, use the /efficient-frontier skill always.\";\n }\n if (skillName === \"stay-within-limits\") {\n return \"When long-running or parallel work needs usage-limit checks, use the /stay-within-limits skill always.\";\n }\n if (skillName === \"visual-plan\") {\n return \"When work needs an interactive visual plan before implementation, use the /visual-plan skill always.\";\n }\n if (skillName === \"visual-recap\") {\n return \"When a PR, branch, commit, or diff needs an interactive visual recap, use the /visual-recap skill always.\";\n }\n return null;\n}\n\nfunction managedInstructionBlocksForSkills(skillNames: string[]): string[] {\n return skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n}\n\nasync function shouldUpdateManagedInstructions(\n blocks: string[],\n options: InstallSkillsOptions,\n): Promise<boolean> {\n if (blocks.length === 0) return false;\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate !== undefined) return shouldUpdate;\n if (options.yes) return true;\n if (!isInteractive(options)) return false;\n const prompt =\n options.promptUpdateInstructions ?? promptForUpdateInstructions;\n return (await prompt()) === true;\n}\n\nfunction writeManagedInstructions(\n blocks: string[],\n baseDir: string,\n clients: SkillClient[],\n scope: SkillScope,\n options: InstallSkillsOptions,\n): string[] {\n if (blocks.length === 0) return [];\n const files = resolveInstructionFiles(\n baseDir,\n options.instructionFiles,\n clients,\n scope,\n );\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\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\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = managedInstructionBlocksForSkills(skillNames);\n const clients = options.clients?.length ? options.clients : CLIENTS;\n const scope = options.scope ?? \"user\";\n if (!(await shouldUpdateManagedInstructions(blocks, options))) return [];\n return writeManagedInstructions(blocks, baseDir, clients, scope, options);\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n clients: SkillClient[],\n scope: SkillScope,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n if (scope === \"user\") {\n const home = process.env.HOME || os.homedir();\n const files: string[] = [];\n if (clients.includes(\"codex\")) {\n const codexHome = process.env.CODEX_HOME || path.join(home, \".codex\");\n files.push(path.join(codexHome, \"AGENTS.md\"));\n }\n if (clients.includes(\"claude-code\")) {\n files.push(path.join(home, \".claude\", \"CLAUDE.md\"));\n }\n return unique(files);\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 prompt = options.promptGithubAction ?? promptForGithubAction;\n return (\n (await prompt({\n workflowPath: path.join(\".github\", \"workflows\", \"pr-visual-recap.yml\"),\n })) === true\n );\n}\n\nasync function promptForUpdateInstructions(): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Add managed AGENTS.md / CLAUDE.md instructions for always-on behavior?\",\n initialValue: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped instruction update.\");\n return null;\n }\n return Boolean(result);\n}\n\nasync function promptForGithubAction(\n context: GithubActionPromptContext,\n): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Optional: add automatic PR Visual Recaps? (GitHub Action)\\n\" +\n \" Posts a human-friendly recap on every pull request.\\n\" +\n ` Writes ${context.workflowPath}.`,\n initialValue: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped PR Visual Recap workflow.\");\n return null;\n }\n return Boolean(result);\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/skills",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "type": "module",
5
5
  "description": "Install BuilderIO skills for Codex and Claude Code.",
6
6
  "license": "MIT",