@agent-native/core 0.28.4 → 0.28.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAoPxD,KAAK,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAWD,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D;AAcD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA4DhE;AAgHD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAuF1B;AAeD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiDf"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAqPxD,KAAK,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAWD,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D;AAcD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA4DhE;AAgHD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAuF1B;AAeD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -52,7 +52,8 @@ or generated image/video assets that another app can reference by ID and URL.
52
52
  \`generate-image-batch\`, \`generate-video\`,
53
53
  \`refresh-generation-run\`, and \`export-asset\`.
54
54
  - Use browser/deep-link fallback when the host cannot render MCP Apps inline.
55
- Surface the returned picker link instead of inventing a separate UI.
55
+ Surface the returned picker link. If it opens in a normal browser tab, have
56
+ the user select an asset there and paste back the copied handoff summary.
56
57
 
57
58
  ## Image And Video Workflows
58
59
 
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native skills` is the friendly install surface for app-backed skills.\n * The lower-level `app-skill` commands remain the packaging primitives; this\n * command handles the common \"install Assets for my agent\" path in one step.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport {\n buildAppSkillPack,\n ensureAppSkill,\n loadAppSkillManifest,\n normalizeAppSkillManifest,\n type AppSkillManifest,\n type LoadedAppSkillManifest,\n} from \"./app-skill.js\";\nimport { resolveClients } from \"./connect.js\";\nimport type { ClientId } from \"./mcp-config-writers.js\";\n\nconst HELP = `agent-native skills\n\nUsage:\n agent-native skills list\n agent-native skills add assets|design-exploration [--client codex|claude-code|claude-code-cli|cowork|all] [--scope user|project] [--yes] [--dry-run] [--json]\n agent-native skills add <manifest-or-app-dir> [--client ...] [--yes]\n\nExamples:\n agent-native skills add assets\n agent-native skills add design-exploration\n agent-native skills add assets --client claude-code\n agent-native skills add ./dist/assets-skill --client codex\n\nThe add command installs skill instructions with the open skills CLI, then\nregisters the app-backed MCP connector. Use app-skill pack for marketplace\nbundles and custom adapter output.`;\n\nconst ASSETS_SKILL_MD = `---\nname: assets\ndescription: >-\n Use Assets for brand-safe image or video generation, human picker UI,\n search/list/export actions, and cross-app asset selection.\nmetadata:\n visibility: exported\n---\n\n# Assets\n\nUse the Assets app when a workflow needs reusable brand media, a human picker,\nor generated image/video assets that another app can reference by ID and URL.\n\n## Choose The Path\n\n- Use \\`open-asset-picker\\` when a person should browse, search, generate, and\n select an asset in UI. Pass \\`mediaType: \"image\"\\` by default, or\n \\`mediaType: \"video\"\\` for video libraries. When the user asks to create a\n specific image and choose the best option, pass \\`prompt\\`,\n \\`autoGenerate: true\\`, and \\`count: 3\\` so the picker opens with candidates\n to preview and select.\n- Use unattended actions when the agent already knows what to do:\n \\`search-assets\\`, \\`list-assets\\`, \\`generate-image\\`,\n \\`generate-image-batch\\`, \\`generate-video\\`,\n \\`refresh-generation-run\\`, and \\`export-asset\\`.\n- Use browser/deep-link fallback when the host cannot render MCP Apps inline.\n Surface the returned picker link instead of inventing a separate UI.\n\n## Image And Video Workflows\n\n1. Pick or match the library with \\`list-libraries\\` or \\`match-library\\`.\n2. For images, call \\`generate-image\\` or \\`generate-image-batch\\`. Image\n actions are synchronous: one batch call should return the finished image\n candidates, so do not poll or regenerate unless a returned slot failed.\n3. For videos, call \\`generate-video\\` and poll \\`refresh-generation-run\\`\n until the run completes.\n4. Preserve returned \\`assetId\\`, \\`runId\\`, \\`previewUrl\\`, \\`downloadUrl\\`,\n media type, and dimensions so the caller can attach or embed the result.\n\n## Cross-App Use\n\n- Hosted default: connect \\`https://assets.agent-native.com/_agent-native/mcp\\`.\n Do not put shared secrets in skill files.\n- Local customization: use \\`agent-native app-skill launch --local\\` from an\n Assets app-skill manifest, or pass \\`--into <path>\\` for editable source.\n- Do not call image/video providers directly from another app. Assets owns\n generation, picker UI, search/list/export, and asset context.\n`;\n\nconst DESIGN_EXPLORATION_SKILL_MD = `---\nname: design-exploration\ndescription: >-\n Use Design for UI/UX exploration, side-by-side design directions,\n interactive prototype previews, user selection, iteration, and design-to-code\n handoff through the hosted Design MCP app.\nmetadata:\n visibility: exported\n---\n\n# Design Exploration\n\nUse the Design app when a workflow needs visual UI exploration, prototype\niteration, or a human-in-the-loop choice among design directions.\n\n## Choose The Path\n\n- Use \\`create-design\\` first to create a project shell. Do not report the\n design as ready until it has renderable HTML.\n- For open-ended UX exploration, generate three distinct, complete HTML\n directions and call \\`present-design-variants\\`. The inline Design MCP app\n shows the options, lets the user pick one, and persists the selected variant.\n- For direct refinements to an already chosen direction, call\n \\`get-design-snapshot\\`, edit from the current tuned HTML, then call\n \\`generate-design\\`.\n- Use \\`export-coding-handoff\\` when the user wants to implement the chosen\n design in a codebase.\n\n## Exploration Defaults\n\n1. Default to three variants unless the user asks for a different count.\n2. Make variants structurally and stylistically distinct, not just color swaps.\n3. Each variant must be a complete standalone HTML document that renders\n without a build step.\n4. For product UI redesigns, prefer cleaner hierarchy, progressive disclosure,\n and realistic controls over decorative mockups.\n5. After \\`present-design-variants\\`, wait for the user's pick before\n generating the next version. If they say \"I like #2 but...\", snapshot the\n chosen design and refine that direction with \\`generate-design\\`.\n\n## Cross-App Use\n\n- Hosted default: connect \\`https://design.agent-native.com/_agent-native/mcp\\`.\n Do not put shared secrets in skill files.\n- Dispatch can expose Design alongside other apps. Use Design for UI/UX design\n tasks, Assets for image/media selection, Slides for decks, and so on.\n- Keep the loop visual: surface the inline MCP App or the returned \"Open\n design\" link instead of pasting large HTML blobs into chat.\n`;\n\nconst BUILT_IN_APP_SKILLS = {\n assets: {\n skillName: \"assets\",\n manifest: normalizeAppSkillManifest({\n schemaVersion: 1,\n id: \"assets\",\n displayName: \"Assets\",\n description:\n \"Create, search, select, and export brand image and video assets from the Assets app.\",\n hosted: {\n url: \"https://assets.agent-native.com\",\n mcpUrl: \"https://assets.agent-native.com/_agent-native/mcp\",\n },\n mcp: { serverName: \"agent-native-assets\" },\n auth: {\n mode: \"oauth\",\n setup:\n \"Authenticate with the Assets MCP connector in the host app. No shared secrets are stored in skill files.\",\n },\n surfaces: [\n {\n id: \"asset-picker\",\n action: \"open-asset-picker\",\n path: \"/picker\",\n mediaTypes: [\"image\", \"video\"],\n defaultMediaType: \"image\",\n },\n ],\n skills: [\n {\n path: \"skills/assets\",\n visibility: \"exported\",\n exportAs: \"assets\",\n },\n ],\n hostAdapters: [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ],\n }),\n skillMarkdown: ASSETS_SKILL_MD,\n },\n design: {\n skillName: \"design-exploration\",\n manifest: normalizeAppSkillManifest({\n schemaVersion: 1,\n id: \"design\",\n displayName: \"Design\",\n description:\n \"Explore, compare, iterate, and export interactive UI design prototypes from the Design app.\",\n hosted: {\n url: \"https://design.agent-native.com\",\n mcpUrl: \"https://design.agent-native.com/_agent-native/mcp\",\n },\n mcp: { serverName: \"agent-native-design\" },\n auth: {\n mode: \"oauth\",\n setup:\n \"Authenticate with the Design MCP connector in the host app. No shared secrets are stored in skill files.\",\n },\n surfaces: [\n {\n id: \"design-exploration\",\n action: \"present-design-variants\",\n path: \"/design\",\n },\n ],\n skills: [\n {\n path: \"skills/design-exploration\",\n visibility: \"exported\",\n exportAs: \"design-exploration\",\n },\n ],\n hostAdapters: [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ],\n }),\n skillMarkdown: DESIGN_EXPLORATION_SKILL_MD,\n },\n} satisfies Record<\n string,\n { manifest: AppSkillManifest; skillMarkdown: string; skillName: string }\n>;\n\ntype BuiltInAppSkillId = keyof typeof BUILT_IN_APP_SKILLS;\n\nconst BUILT_IN_APP_SKILL_ALIASES = {\n assets: \"assets\",\n asset: \"assets\",\n \"asset-generation\": \"assets\",\n images: \"assets\",\n image: \"assets\",\n \"image-generation\": \"assets\",\n \"agent-native-assets\": \"assets\",\n \"agent-native-images\": \"assets\",\n design: \"design\",\n \"ui-design\": \"design\",\n \"ux-design\": \"design\",\n \"design-exploration\": \"design\",\n \"ux-exploration\": \"design\",\n \"agent-native-design\": \"design\",\n \"agent-native-design-exploration\": \"design\",\n} satisfies Record<string, BuiltInAppSkillId>;\n\nconst BUILT_IN_APP_SKILL_DISPLAY_ALIASES = {\n assets: [\"images\", \"image-generation\", \"agent-native-images\"],\n design: [\n \"design-exploration\",\n \"ux-exploration\",\n \"agent-native-design-exploration\",\n ],\n} satisfies Record<BuiltInAppSkillId, string[]>;\n\ntype SkillsCommand = \"list\" | \"add\" | \"help\";\n\nexport interface ParsedSkillsArgs {\n command: SkillsCommand;\n target?: string;\n client: string;\n scope: string;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n instructions: boolean;\n mcp: boolean;\n}\n\nexport interface SkillsAddResult {\n id: string;\n displayName: string;\n instructionSource?: string;\n skillNames: string[];\n skillsAgents: string[];\n mcpUrl: string;\n mcpClients: ClientId[];\n dryRun: boolean;\n commands: string[];\n}\n\ninterface SkillInstallTarget {\n id: string;\n displayName: string;\n loaded: LoadedAppSkillManifest;\n skillNames: string[];\n materializeInstructions(outDir: string): string;\n cleanup?: () => void;\n}\n\ninterface RunSkillsOptions {\n baseDir?: string;\n log?: (message: string) => void;\n runCommand?: (cmd: string, args: string[]) => Promise<number>;\n}\n\nfunction normalizeKnownSkillTarget(\n value: string | undefined,\n): BuiltInAppSkillId | undefined {\n const key = value?.trim().toLowerCase();\n if (!key) return undefined;\n return BUILT_IN_APP_SKILL_ALIASES[key];\n}\n\nfunction isKnownSkill(value: string | undefined): boolean {\n return Boolean(normalizeKnownSkillTarget(value));\n}\n\nexport function parseSkillsArgs(argv: string[]): ParsedSkillsArgs {\n const first = argv[0];\n let command: SkillsCommand = \"list\";\n let args = argv;\n if (first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(1);\n } else if (first === \"list\" || first === \"add\") {\n command = first;\n args = argv.slice(1);\n } else if (first) {\n command = \"add\";\n }\n\n const out: ParsedSkillsArgs = {\n command,\n client: \"codex\",\n scope: \"user\",\n yes: false,\n dryRun: false,\n printJson: false,\n instructions: true,\n mcp: true,\n };\n\n for (let i = 0; i < args.length; i++) {\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 let value: string | undefined;\n if ((value = eat(\"--client\")) !== undefined) out.client = value;\n else if ((value = eat(\"--scope\")) !== undefined) out.scope = value;\n else if (arg === \"--yes\" || arg === \"-y\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--mcp-only\") out.instructions = false;\n else if (arg === \"--instructions-only\" || arg === \"--no-mcp\")\n out.mcp = false;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.target) out.target = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (out.scope !== \"user\" && out.scope !== \"project\") {\n throw new Error(\"--scope must be either user or project.\");\n }\n return out;\n}\n\nfunction loadSkillTarget(target: string): SkillInstallTarget {\n const knownTarget = normalizeKnownSkillTarget(target);\n if (knownTarget) {\n const builtIn = BUILT_IN_APP_SKILLS[knownTarget];\n return {\n id: builtIn.manifest.id,\n displayName: builtIn.manifest.displayName,\n loaded: {\n manifest: builtIn.manifest,\n file: `<built-in:${builtIn.manifest.id}>`,\n dir: process.cwd(),\n },\n skillNames: [builtIn.skillName],\n materializeInstructions(outDir) {\n const skillDir = path.join(outDir, \"skills\", builtIn.skillName);\n fs.mkdirSync(skillDir, { recursive: true });\n fs.writeFileSync(\n path.join(skillDir, \"SKILL.md\"),\n builtIn.skillMarkdown,\n \"utf-8\",\n );\n return outDir;\n },\n };\n }\n\n const resolved = path.resolve(target);\n const manifestFile = fs.statSync(resolved).isDirectory()\n ? path.join(resolved, \"agent-native.app-skill.json\")\n : resolved;\n const loaded = loadAppSkillManifest(manifestFile);\n return {\n id: loaded.manifest.id,\n displayName: loaded.manifest.displayName,\n loaded,\n skillNames: loaded.manifest.skills\n .filter(\n (skill) =>\n skill.visibility === \"exported\" || skill.visibility === \"both\",\n )\n .map((skill) => skill.exportAs ?? path.basename(skill.path)),\n materializeInstructions(outDir) {\n const packed = buildAppSkillPack(loaded, outDir);\n const vercelAdapter = path.join(\n packed.outDir,\n \"adapters\",\n \"vercel-skills\",\n );\n return fs.existsSync(vercelAdapter) ? vercelAdapter : packed.outDir;\n },\n };\n}\n\nfunction skillsAgentsForClients(clients: ClientId[]): string[] {\n const agents = new Set<string>();\n for (const client of clients) {\n if (client === \"codex\") agents.add(\"codex\");\n if (client === \"claude-code\" || client === \"claude-code-cli\") {\n agents.add(\"claude-code\");\n }\n }\n return [...agents];\n}\n\nfunction shellArg(value: string): string {\n if (/^[A-Za-z0-9_/:=.,@+-]+$/.test(value)) return value;\n return `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\n\nfunction commandString(cmd: string, args: string[]): string {\n return [cmd, ...args].map(shellArg).join(\" \");\n}\n\nfunction dryRunInstallCommand(\n parsed: ParsedSkillsArgs,\n target: string,\n): string {\n const args = [\n \"skills\",\n \"add\",\n target,\n \"--client\",\n parsed.client,\n \"--scope\",\n parsed.scope,\n ];\n if (parsed.instructions && !parsed.mcp) args.push(\"--instructions-only\");\n if (!parsed.instructions && parsed.mcp) args.push(\"--mcp-only\");\n if (parsed.yes || isKnownSkill(target)) args.push(\"--yes\");\n return commandString(\"agent-native\", args);\n}\n\nasync function runCommand(cmd: string, args: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n shell: process.platform === \"win32\",\n env: process.env,\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) {\n reject(new Error(`${cmd} was interrupted by ${signal}.`));\n return;\n }\n resolve(code ?? 0);\n });\n });\n}\n\nexport async function addAgentNativeSkill(\n parsed: ParsedSkillsArgs,\n options: RunSkillsOptions = {},\n): Promise<SkillsAddResult> {\n const target = parsed.target ?? \"assets\";\n const knownTarget = normalizeKnownSkillTarget(target);\n if (!knownTarget && !fs.existsSync(path.resolve(target))) {\n throw new Error(\n `Unknown skill or manifest path: ${target}. Run \"agent-native skills list\".`,\n );\n }\n const installTarget = loadSkillTarget(target);\n const clients = resolveClients(parsed.client);\n const skillsAgents = skillsAgentsForClients(clients);\n if (parsed.dryRun) {\n try {\n return {\n id: installTarget.id,\n displayName: installTarget.displayName,\n skillNames: installTarget.skillNames,\n skillsAgents,\n mcpUrl: installTarget.loaded.manifest.hosted.mcpUrl,\n mcpClients: clients,\n dryRun: true,\n commands: [dryRunInstallCommand(parsed, target)],\n };\n } finally {\n installTarget.cleanup?.();\n }\n }\n const commands: string[] = [];\n const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"an-skills-add-\"));\n let instructionSource: string | undefined;\n\n try {\n if (parsed.instructions) {\n if (skillsAgents.length === 0) {\n throw new Error(\n \"Skill instructions can only be installed for Codex or Claude Code clients. Use --mcp-only for MCP-only clients.\",\n );\n }\n instructionSource = installTarget.materializeInstructions(tmpRoot);\n const args = [\n \"--yes\",\n \"skills@latest\",\n \"add\",\n instructionSource,\n \"--copy\",\n ...installTarget.skillNames.flatMap((skill) => [\"--skill\", skill]),\n ...skillsAgents.flatMap((agent) => [\"-a\", agent]),\n ...(parsed.yes || knownTarget ? [\"-y\"] : []),\n ];\n commands.push(commandString(\"npx\", args));\n if (!parsed.dryRun) {\n const code = await (options.runCommand ?? runCommand)(\"npx\", args);\n if (code !== 0) throw new Error(`npx skills add exited with ${code}.`);\n }\n }\n\n if (parsed.mcp) {\n commands.push(\n `agent-native app-skill ensure --manifest ${installTarget.loaded.file} --client ${parsed.client} --scope ${parsed.scope} --yes`,\n );\n if (!parsed.dryRun) {\n await ensureAppSkill(installTarget.loaded, {\n clients,\n scope: parsed.scope,\n baseDir: options.baseDir,\n yes: parsed.yes || Boolean(knownTarget),\n confirm: true,\n log: options.log,\n });\n }\n }\n\n return {\n id: installTarget.id,\n displayName: installTarget.displayName,\n instructionSource,\n skillNames: installTarget.skillNames,\n skillsAgents,\n mcpUrl: installTarget.loaded.manifest.hosted.mcpUrl,\n mcpClients: clients,\n dryRun: parsed.dryRun,\n commands,\n };\n } finally {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n installTarget.cleanup?.();\n }\n}\n\nfunction listSkills() {\n return Object.values(BUILT_IN_APP_SKILLS).map((entry) => ({\n id: entry.manifest.id,\n aliases:\n BUILT_IN_APP_SKILL_DISPLAY_ALIASES[\n entry.manifest.id as BuiltInAppSkillId\n ] ?? [],\n name: entry.manifest.displayName,\n description: entry.manifest.description,\n mcpUrl: entry.manifest.hosted.mcpUrl,\n }));\n}\n\nexport async function runSkills(\n argv: string[],\n options: RunSkillsOptions = {},\n): Promise<void> {\n const parsed = parseSkillsArgs(argv);\n const log = parsed.printJson\n ? undefined\n : (message: string) => process.stdout.write(`${message}\\n`);\n\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n\n if (parsed.command === \"list\") {\n const skills = listSkills();\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n const description = skill.description.replace(/[.?!]?$/, \".\");\n const aliases = skill.aliases.length\n ? ` Aliases: ${skill.aliases.join(\", \")}.`\n : \"\";\n process.stdout.write(\n `${skill.id.padEnd(12)} ${description}${aliases} (${skill.mcpUrl})\\n`,\n );\n }\n return;\n }\n\n const result = await addAgentNativeSkill(parsed, {\n ...options,\n log,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (parsed.dryRun) {\n process.stdout.write(`${result.commands.join(\"\\n\")}\\n`);\n return;\n }\n\n process.stdout.write(\n `Installed ${result.displayName} skill for ${result.skillsAgents.join(\n \", \",\n )} and registered ${result.mcpUrl} for ${result.mcpClients.join(\", \")}.\\n`,\n );\n}\n"]}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/cli/skills.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native skills` is the friendly install surface for app-backed skills.\n * The lower-level `app-skill` commands remain the packaging primitives; this\n * command handles the common \"install Assets for my agent\" path in one step.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport {\n buildAppSkillPack,\n ensureAppSkill,\n loadAppSkillManifest,\n normalizeAppSkillManifest,\n type AppSkillManifest,\n type LoadedAppSkillManifest,\n} from \"./app-skill.js\";\nimport { resolveClients } from \"./connect.js\";\nimport type { ClientId } from \"./mcp-config-writers.js\";\n\nconst HELP = `agent-native skills\n\nUsage:\n agent-native skills list\n agent-native skills add assets|design-exploration [--client codex|claude-code|claude-code-cli|cowork|all] [--scope user|project] [--yes] [--dry-run] [--json]\n agent-native skills add <manifest-or-app-dir> [--client ...] [--yes]\n\nExamples:\n agent-native skills add assets\n agent-native skills add design-exploration\n agent-native skills add assets --client claude-code\n agent-native skills add ./dist/assets-skill --client codex\n\nThe add command installs skill instructions with the open skills CLI, then\nregisters the app-backed MCP connector. Use app-skill pack for marketplace\nbundles and custom adapter output.`;\n\nconst ASSETS_SKILL_MD = `---\nname: assets\ndescription: >-\n Use Assets for brand-safe image or video generation, human picker UI,\n search/list/export actions, and cross-app asset selection.\nmetadata:\n visibility: exported\n---\n\n# Assets\n\nUse the Assets app when a workflow needs reusable brand media, a human picker,\nor generated image/video assets that another app can reference by ID and URL.\n\n## Choose The Path\n\n- Use \\`open-asset-picker\\` when a person should browse, search, generate, and\n select an asset in UI. Pass \\`mediaType: \"image\"\\` by default, or\n \\`mediaType: \"video\"\\` for video libraries. When the user asks to create a\n specific image and choose the best option, pass \\`prompt\\`,\n \\`autoGenerate: true\\`, and \\`count: 3\\` so the picker opens with candidates\n to preview and select.\n- Use unattended actions when the agent already knows what to do:\n \\`search-assets\\`, \\`list-assets\\`, \\`generate-image\\`,\n \\`generate-image-batch\\`, \\`generate-video\\`,\n \\`refresh-generation-run\\`, and \\`export-asset\\`.\n- Use browser/deep-link fallback when the host cannot render MCP Apps inline.\n Surface the returned picker link. If it opens in a normal browser tab, have\n the user select an asset there and paste back the copied handoff summary.\n\n## Image And Video Workflows\n\n1. Pick or match the library with \\`list-libraries\\` or \\`match-library\\`.\n2. For images, call \\`generate-image\\` or \\`generate-image-batch\\`. Image\n actions are synchronous: one batch call should return the finished image\n candidates, so do not poll or regenerate unless a returned slot failed.\n3. For videos, call \\`generate-video\\` and poll \\`refresh-generation-run\\`\n until the run completes.\n4. Preserve returned \\`assetId\\`, \\`runId\\`, \\`previewUrl\\`, \\`downloadUrl\\`,\n media type, and dimensions so the caller can attach or embed the result.\n\n## Cross-App Use\n\n- Hosted default: connect \\`https://assets.agent-native.com/_agent-native/mcp\\`.\n Do not put shared secrets in skill files.\n- Local customization: use \\`agent-native app-skill launch --local\\` from an\n Assets app-skill manifest, or pass \\`--into <path>\\` for editable source.\n- Do not call image/video providers directly from another app. Assets owns\n generation, picker UI, search/list/export, and asset context.\n`;\n\nconst DESIGN_EXPLORATION_SKILL_MD = `---\nname: design-exploration\ndescription: >-\n Use Design for UI/UX exploration, side-by-side design directions,\n interactive prototype previews, user selection, iteration, and design-to-code\n handoff through the hosted Design MCP app.\nmetadata:\n visibility: exported\n---\n\n# Design Exploration\n\nUse the Design app when a workflow needs visual UI exploration, prototype\niteration, or a human-in-the-loop choice among design directions.\n\n## Choose The Path\n\n- Use \\`create-design\\` first to create a project shell. Do not report the\n design as ready until it has renderable HTML.\n- For open-ended UX exploration, generate three distinct, complete HTML\n directions and call \\`present-design-variants\\`. The inline Design MCP app\n shows the options, lets the user pick one, and persists the selected variant.\n- For direct refinements to an already chosen direction, call\n \\`get-design-snapshot\\`, edit from the current tuned HTML, then call\n \\`generate-design\\`.\n- Use \\`export-coding-handoff\\` when the user wants to implement the chosen\n design in a codebase.\n\n## Exploration Defaults\n\n1. Default to three variants unless the user asks for a different count.\n2. Make variants structurally and stylistically distinct, not just color swaps.\n3. Each variant must be a complete standalone HTML document that renders\n without a build step.\n4. For product UI redesigns, prefer cleaner hierarchy, progressive disclosure,\n and realistic controls over decorative mockups.\n5. After \\`present-design-variants\\`, wait for the user's pick before\n generating the next version. If they say \"I like #2 but...\", snapshot the\n chosen design and refine that direction with \\`generate-design\\`.\n\n## Cross-App Use\n\n- Hosted default: connect \\`https://design.agent-native.com/_agent-native/mcp\\`.\n Do not put shared secrets in skill files.\n- Dispatch can expose Design alongside other apps. Use Design for UI/UX design\n tasks, Assets for image/media selection, Slides for decks, and so on.\n- Keep the loop visual: surface the inline MCP App or the returned \"Open\n design\" link instead of pasting large HTML blobs into chat.\n`;\n\nconst BUILT_IN_APP_SKILLS = {\n assets: {\n skillName: \"assets\",\n manifest: normalizeAppSkillManifest({\n schemaVersion: 1,\n id: \"assets\",\n displayName: \"Assets\",\n description:\n \"Create, search, select, and export brand image and video assets from the Assets app.\",\n hosted: {\n url: \"https://assets.agent-native.com\",\n mcpUrl: \"https://assets.agent-native.com/_agent-native/mcp\",\n },\n mcp: { serverName: \"agent-native-assets\" },\n auth: {\n mode: \"oauth\",\n setup:\n \"Authenticate with the Assets MCP connector in the host app. No shared secrets are stored in skill files.\",\n },\n surfaces: [\n {\n id: \"asset-picker\",\n action: \"open-asset-picker\",\n path: \"/picker\",\n mediaTypes: [\"image\", \"video\"],\n defaultMediaType: \"image\",\n },\n ],\n skills: [\n {\n path: \"skills/assets\",\n visibility: \"exported\",\n exportAs: \"assets\",\n },\n ],\n hostAdapters: [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ],\n }),\n skillMarkdown: ASSETS_SKILL_MD,\n },\n design: {\n skillName: \"design-exploration\",\n manifest: normalizeAppSkillManifest({\n schemaVersion: 1,\n id: \"design\",\n displayName: \"Design\",\n description:\n \"Explore, compare, iterate, and export interactive UI design prototypes from the Design app.\",\n hosted: {\n url: \"https://design.agent-native.com\",\n mcpUrl: \"https://design.agent-native.com/_agent-native/mcp\",\n },\n mcp: { serverName: \"agent-native-design\" },\n auth: {\n mode: \"oauth\",\n setup:\n \"Authenticate with the Design MCP connector in the host app. No shared secrets are stored in skill files.\",\n },\n surfaces: [\n {\n id: \"design-exploration\",\n action: \"present-design-variants\",\n path: \"/design\",\n },\n ],\n skills: [\n {\n path: \"skills/design-exploration\",\n visibility: \"exported\",\n exportAs: \"design-exploration\",\n },\n ],\n hostAdapters: [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ],\n }),\n skillMarkdown: DESIGN_EXPLORATION_SKILL_MD,\n },\n} satisfies Record<\n string,\n { manifest: AppSkillManifest; skillMarkdown: string; skillName: string }\n>;\n\ntype BuiltInAppSkillId = keyof typeof BUILT_IN_APP_SKILLS;\n\nconst BUILT_IN_APP_SKILL_ALIASES = {\n assets: \"assets\",\n asset: \"assets\",\n \"asset-generation\": \"assets\",\n images: \"assets\",\n image: \"assets\",\n \"image-generation\": \"assets\",\n \"agent-native-assets\": \"assets\",\n \"agent-native-images\": \"assets\",\n design: \"design\",\n \"ui-design\": \"design\",\n \"ux-design\": \"design\",\n \"design-exploration\": \"design\",\n \"ux-exploration\": \"design\",\n \"agent-native-design\": \"design\",\n \"agent-native-design-exploration\": \"design\",\n} satisfies Record<string, BuiltInAppSkillId>;\n\nconst BUILT_IN_APP_SKILL_DISPLAY_ALIASES = {\n assets: [\"images\", \"image-generation\", \"agent-native-images\"],\n design: [\n \"design-exploration\",\n \"ux-exploration\",\n \"agent-native-design-exploration\",\n ],\n} satisfies Record<BuiltInAppSkillId, string[]>;\n\ntype SkillsCommand = \"list\" | \"add\" | \"help\";\n\nexport interface ParsedSkillsArgs {\n command: SkillsCommand;\n target?: string;\n client: string;\n scope: string;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n instructions: boolean;\n mcp: boolean;\n}\n\nexport interface SkillsAddResult {\n id: string;\n displayName: string;\n instructionSource?: string;\n skillNames: string[];\n skillsAgents: string[];\n mcpUrl: string;\n mcpClients: ClientId[];\n dryRun: boolean;\n commands: string[];\n}\n\ninterface SkillInstallTarget {\n id: string;\n displayName: string;\n loaded: LoadedAppSkillManifest;\n skillNames: string[];\n materializeInstructions(outDir: string): string;\n cleanup?: () => void;\n}\n\ninterface RunSkillsOptions {\n baseDir?: string;\n log?: (message: string) => void;\n runCommand?: (cmd: string, args: string[]) => Promise<number>;\n}\n\nfunction normalizeKnownSkillTarget(\n value: string | undefined,\n): BuiltInAppSkillId | undefined {\n const key = value?.trim().toLowerCase();\n if (!key) return undefined;\n return BUILT_IN_APP_SKILL_ALIASES[key];\n}\n\nfunction isKnownSkill(value: string | undefined): boolean {\n return Boolean(normalizeKnownSkillTarget(value));\n}\n\nexport function parseSkillsArgs(argv: string[]): ParsedSkillsArgs {\n const first = argv[0];\n let command: SkillsCommand = \"list\";\n let args = argv;\n if (first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(1);\n } else if (first === \"list\" || first === \"add\") {\n command = first;\n args = argv.slice(1);\n } else if (first) {\n command = \"add\";\n }\n\n const out: ParsedSkillsArgs = {\n command,\n client: \"codex\",\n scope: \"user\",\n yes: false,\n dryRun: false,\n printJson: false,\n instructions: true,\n mcp: true,\n };\n\n for (let i = 0; i < args.length; i++) {\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 let value: string | undefined;\n if ((value = eat(\"--client\")) !== undefined) out.client = value;\n else if ((value = eat(\"--scope\")) !== undefined) out.scope = value;\n else if (arg === \"--yes\" || arg === \"-y\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--mcp-only\") out.instructions = false;\n else if (arg === \"--instructions-only\" || arg === \"--no-mcp\")\n out.mcp = false;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.target) out.target = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (out.scope !== \"user\" && out.scope !== \"project\") {\n throw new Error(\"--scope must be either user or project.\");\n }\n return out;\n}\n\nfunction loadSkillTarget(target: string): SkillInstallTarget {\n const knownTarget = normalizeKnownSkillTarget(target);\n if (knownTarget) {\n const builtIn = BUILT_IN_APP_SKILLS[knownTarget];\n return {\n id: builtIn.manifest.id,\n displayName: builtIn.manifest.displayName,\n loaded: {\n manifest: builtIn.manifest,\n file: `<built-in:${builtIn.manifest.id}>`,\n dir: process.cwd(),\n },\n skillNames: [builtIn.skillName],\n materializeInstructions(outDir) {\n const skillDir = path.join(outDir, \"skills\", builtIn.skillName);\n fs.mkdirSync(skillDir, { recursive: true });\n fs.writeFileSync(\n path.join(skillDir, \"SKILL.md\"),\n builtIn.skillMarkdown,\n \"utf-8\",\n );\n return outDir;\n },\n };\n }\n\n const resolved = path.resolve(target);\n const manifestFile = fs.statSync(resolved).isDirectory()\n ? path.join(resolved, \"agent-native.app-skill.json\")\n : resolved;\n const loaded = loadAppSkillManifest(manifestFile);\n return {\n id: loaded.manifest.id,\n displayName: loaded.manifest.displayName,\n loaded,\n skillNames: loaded.manifest.skills\n .filter(\n (skill) =>\n skill.visibility === \"exported\" || skill.visibility === \"both\",\n )\n .map((skill) => skill.exportAs ?? path.basename(skill.path)),\n materializeInstructions(outDir) {\n const packed = buildAppSkillPack(loaded, outDir);\n const vercelAdapter = path.join(\n packed.outDir,\n \"adapters\",\n \"vercel-skills\",\n );\n return fs.existsSync(vercelAdapter) ? vercelAdapter : packed.outDir;\n },\n };\n}\n\nfunction skillsAgentsForClients(clients: ClientId[]): string[] {\n const agents = new Set<string>();\n for (const client of clients) {\n if (client === \"codex\") agents.add(\"codex\");\n if (client === \"claude-code\" || client === \"claude-code-cli\") {\n agents.add(\"claude-code\");\n }\n }\n return [...agents];\n}\n\nfunction shellArg(value: string): string {\n if (/^[A-Za-z0-9_/:=.,@+-]+$/.test(value)) return value;\n return `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\n\nfunction commandString(cmd: string, args: string[]): string {\n return [cmd, ...args].map(shellArg).join(\" \");\n}\n\nfunction dryRunInstallCommand(\n parsed: ParsedSkillsArgs,\n target: string,\n): string {\n const args = [\n \"skills\",\n \"add\",\n target,\n \"--client\",\n parsed.client,\n \"--scope\",\n parsed.scope,\n ];\n if (parsed.instructions && !parsed.mcp) args.push(\"--instructions-only\");\n if (!parsed.instructions && parsed.mcp) args.push(\"--mcp-only\");\n if (parsed.yes || isKnownSkill(target)) args.push(\"--yes\");\n return commandString(\"agent-native\", args);\n}\n\nasync function runCommand(cmd: string, args: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n shell: process.platform === \"win32\",\n env: process.env,\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) {\n reject(new Error(`${cmd} was interrupted by ${signal}.`));\n return;\n }\n resolve(code ?? 0);\n });\n });\n}\n\nexport async function addAgentNativeSkill(\n parsed: ParsedSkillsArgs,\n options: RunSkillsOptions = {},\n): Promise<SkillsAddResult> {\n const target = parsed.target ?? \"assets\";\n const knownTarget = normalizeKnownSkillTarget(target);\n if (!knownTarget && !fs.existsSync(path.resolve(target))) {\n throw new Error(\n `Unknown skill or manifest path: ${target}. Run \"agent-native skills list\".`,\n );\n }\n const installTarget = loadSkillTarget(target);\n const clients = resolveClients(parsed.client);\n const skillsAgents = skillsAgentsForClients(clients);\n if (parsed.dryRun) {\n try {\n return {\n id: installTarget.id,\n displayName: installTarget.displayName,\n skillNames: installTarget.skillNames,\n skillsAgents,\n mcpUrl: installTarget.loaded.manifest.hosted.mcpUrl,\n mcpClients: clients,\n dryRun: true,\n commands: [dryRunInstallCommand(parsed, target)],\n };\n } finally {\n installTarget.cleanup?.();\n }\n }\n const commands: string[] = [];\n const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"an-skills-add-\"));\n let instructionSource: string | undefined;\n\n try {\n if (parsed.instructions) {\n if (skillsAgents.length === 0) {\n throw new Error(\n \"Skill instructions can only be installed for Codex or Claude Code clients. Use --mcp-only for MCP-only clients.\",\n );\n }\n instructionSource = installTarget.materializeInstructions(tmpRoot);\n const args = [\n \"--yes\",\n \"skills@latest\",\n \"add\",\n instructionSource,\n \"--copy\",\n ...installTarget.skillNames.flatMap((skill) => [\"--skill\", skill]),\n ...skillsAgents.flatMap((agent) => [\"-a\", agent]),\n ...(parsed.yes || knownTarget ? [\"-y\"] : []),\n ];\n commands.push(commandString(\"npx\", args));\n if (!parsed.dryRun) {\n const code = await (options.runCommand ?? runCommand)(\"npx\", args);\n if (code !== 0) throw new Error(`npx skills add exited with ${code}.`);\n }\n }\n\n if (parsed.mcp) {\n commands.push(\n `agent-native app-skill ensure --manifest ${installTarget.loaded.file} --client ${parsed.client} --scope ${parsed.scope} --yes`,\n );\n if (!parsed.dryRun) {\n await ensureAppSkill(installTarget.loaded, {\n clients,\n scope: parsed.scope,\n baseDir: options.baseDir,\n yes: parsed.yes || Boolean(knownTarget),\n confirm: true,\n log: options.log,\n });\n }\n }\n\n return {\n id: installTarget.id,\n displayName: installTarget.displayName,\n instructionSource,\n skillNames: installTarget.skillNames,\n skillsAgents,\n mcpUrl: installTarget.loaded.manifest.hosted.mcpUrl,\n mcpClients: clients,\n dryRun: parsed.dryRun,\n commands,\n };\n } finally {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n installTarget.cleanup?.();\n }\n}\n\nfunction listSkills() {\n return Object.values(BUILT_IN_APP_SKILLS).map((entry) => ({\n id: entry.manifest.id,\n aliases:\n BUILT_IN_APP_SKILL_DISPLAY_ALIASES[\n entry.manifest.id as BuiltInAppSkillId\n ] ?? [],\n name: entry.manifest.displayName,\n description: entry.manifest.description,\n mcpUrl: entry.manifest.hosted.mcpUrl,\n }));\n}\n\nexport async function runSkills(\n argv: string[],\n options: RunSkillsOptions = {},\n): Promise<void> {\n const parsed = parseSkillsArgs(argv);\n const log = parsed.printJson\n ? undefined\n : (message: string) => process.stdout.write(`${message}\\n`);\n\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n\n if (parsed.command === \"list\") {\n const skills = listSkills();\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n const description = skill.description.replace(/[.?!]?$/, \".\");\n const aliases = skill.aliases.length\n ? ` Aliases: ${skill.aliases.join(\", \")}.`\n : \"\";\n process.stdout.write(\n `${skill.id.padEnd(12)} ${description}${aliases} (${skill.mcpUrl})\\n`,\n );\n }\n return;\n }\n\n const result = await addAgentNativeSkill(parsed, {\n ...options,\n log,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (parsed.dryRun) {\n process.stdout.write(`${result.commands.join(\"\\n\")}\\n`);\n return;\n }\n\n process.stdout.write(\n `Installed ${result.displayName} skill for ${result.skillsAgents.join(\n \", \",\n )} and registered ${result.mcpUrl} for ${result.mcpClients.join(\", \")}.\\n`,\n );\n}\n"]}
@@ -214,7 +214,7 @@ only when it truly needs to stay visible in chat-host discovery.
214
214
 
215
215
  That makes the same app surface available to every compatible host rather than building per-client shims. The current official MCP Apps client list includes Claude, Claude Desktop, VS Code GitHub Copilot, Goose, Postman, MCPJam, ChatGPT, and Cursor; host support still varies by plan, release channel, and client version, so check the [MCP extension support matrix](https://modelcontextprotocol.io/extensions/client-matrix). ChatGPT custom MCP apps are available through developer mode for Business and Enterprise/Edu workspaces on ChatGPT web; see OpenAI's [developer mode and MCP apps](https://help.openai.com/en/articles/12584461-developer-mode-and-full-mcp-apps-in-chatgpt-beta) notes.
216
216
 
217
- Claude Code and other CLI-first clients still receive the same resources and metadata when they support MCP Apps, but the deep link remains the reliable fallback when a host chooses not to render an iframe. In practice, every agent-native app should be authored with both: MCP Apps for inline review/edit in capable hosts, and `link` for universal round-tripping back to the full app.
217
+ Claude Code and other CLI-first clients still receive the same resources and metadata when they support MCP Apps, but the deep link remains the reliable fallback when a host chooses not to render an iframe. In practice, every agent-native app should be authored with both: MCP Apps for inline review/edit in capable hosts, and `link` for universal round-tripping back to the full app. Human-selection tools can add a paste-back step to that fallback: for example, the Assets picker opens from the fallback link, lets the user choose media in the browser, then copies a handoff summary that the user pastes back into the chat.
218
218
 
219
219
  Claude and ChatGPT can cache tool and resource metadata for an existing custom
220
220
  connector. After changing MCP App metadata, verify with a fresh tool call; if
@@ -94,7 +94,11 @@ External MCP hosts should call `open-asset-picker` instead of constructing this
94
94
  iframe by hand. The action returns a browser fallback link and MCP App metadata
95
95
  for inline hosts. When a user selects an asset, the picker emits `chooseAsset`,
96
96
  the legacy `chooseImage` alias for image assets, and updates MCP App model
97
- context where the host supports it.
97
+ context where the host supports it. When a host opens the fallback link in a
98
+ normal browser tab instead of rendering the MCP App inline, selecting an asset
99
+ copies a handoff summary and shows a copyable context block; paste that summary
100
+ back into the chat so the external agent can use the selected media URL and
101
+ asset metadata.
98
102
 
99
103
  For generate-and-choose flows, call `open-asset-picker` with `prompt`,
100
104
  `autoGenerate: true`, and `count: 3` (customizable from 1-6). The picker opens
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.28.4",
3
+ "version": "0.28.5",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"