@agent-native/core 0.41.1 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +17 -56
  2. package/dist/action.d.ts +13 -1
  3. package/dist/action.d.ts.map +1 -1
  4. package/dist/action.js.map +1 -1
  5. package/dist/agent/production-agent.d.ts +8 -0
  6. package/dist/agent/production-agent.d.ts.map +1 -1
  7. package/dist/agent/production-agent.js +93 -0
  8. package/dist/agent/production-agent.js.map +1 -1
  9. package/dist/cli/app-skill.d.ts +16 -0
  10. package/dist/cli/app-skill.d.ts.map +1 -1
  11. package/dist/cli/app-skill.js +33 -3
  12. package/dist/cli/app-skill.js.map +1 -1
  13. package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
  14. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  15. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  16. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  17. package/dist/cli/recap.d.ts.map +1 -1
  18. package/dist/cli/recap.js +38 -16
  19. package/dist/cli/recap.js.map +1 -1
  20. package/dist/cli/skills.d.ts +30 -3
  21. package/dist/cli/skills.d.ts.map +1 -1
  22. package/dist/cli/skills.js +180 -114
  23. package/dist/cli/skills.js.map +1 -1
  24. package/dist/client/AssistantChat.d.ts.map +1 -1
  25. package/dist/client/AssistantChat.js +2 -2
  26. package/dist/client/AssistantChat.js.map +1 -1
  27. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  28. package/dist/client/agent-chat-adapter.js +172 -5
  29. package/dist/client/agent-chat-adapter.js.map +1 -1
  30. package/dist/client/blocks/index.d.ts +11 -0
  31. package/dist/client/blocks/index.d.ts.map +1 -1
  32. package/dist/client/blocks/index.js +11 -0
  33. package/dist/client/blocks/index.js.map +1 -1
  34. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts +19 -0
  35. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  36. package/dist/client/blocks/library/AnnotatedCodeBlock.js +6 -58
  37. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  38. package/dist/client/blocks/library/ApiEndpointBlock.d.ts.map +1 -1
  39. package/dist/client/blocks/library/ApiEndpointBlock.js +116 -7
  40. package/dist/client/blocks/library/ApiEndpointBlock.js.map +1 -1
  41. package/dist/client/blocks/library/DataModelBlock.d.ts.map +1 -1
  42. package/dist/client/blocks/library/DataModelBlock.js +75 -9
  43. package/dist/client/blocks/library/DataModelBlock.js.map +1 -1
  44. package/dist/client/blocks/library/DiffBlock.d.ts +1 -1
  45. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  46. package/dist/client/blocks/library/DiffBlock.js +265 -39
  47. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  48. package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
  49. package/dist/client/blocks/library/FileTreeBlock.js +27 -4
  50. package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
  51. package/dist/client/blocks/library/HighlightedCode.d.ts +1 -1
  52. package/dist/client/blocks/library/HighlightedCode.js +1 -1
  53. package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
  54. package/dist/client/blocks/library/JsonExplorerBlock.js +1 -1
  55. package/dist/client/blocks/library/JsonExplorerBlock.js.map +1 -1
  56. package/dist/client/blocks/library/MermaidBlock.js +1 -1
  57. package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
  58. package/dist/client/blocks/library/annotation-rail.d.ts +115 -0
  59. package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -0
  60. package/dist/client/blocks/library/annotation-rail.js +139 -0
  61. package/dist/client/blocks/library/annotation-rail.js.map +1 -0
  62. package/dist/client/blocks/library/api-endpoint.config.d.ts +31 -6
  63. package/dist/client/blocks/library/api-endpoint.config.d.ts.map +1 -1
  64. package/dist/client/blocks/library/api-endpoint.config.js +30 -6
  65. package/dist/client/blocks/library/api-endpoint.config.js.map +1 -1
  66. package/dist/client/blocks/library/callout.config.d.ts +29 -0
  67. package/dist/client/blocks/library/callout.config.d.ts.map +1 -0
  68. package/dist/client/blocks/library/callout.config.js +33 -0
  69. package/dist/client/blocks/library/callout.config.js.map +1 -0
  70. package/dist/client/blocks/library/callout.d.ts +20 -0
  71. package/dist/client/blocks/library/callout.d.ts.map +1 -0
  72. package/dist/client/blocks/library/callout.js +61 -0
  73. package/dist/client/blocks/library/callout.js.map +1 -0
  74. package/dist/client/blocks/library/checklist.d.ts.map +1 -1
  75. package/dist/client/blocks/library/checklist.js +3 -3
  76. package/dist/client/blocks/library/checklist.js.map +1 -1
  77. package/dist/client/blocks/library/code.d.ts.map +1 -1
  78. package/dist/client/blocks/library/code.js +32 -15
  79. package/dist/client/blocks/library/code.js.map +1 -1
  80. package/dist/client/blocks/library/columns.d.ts.map +1 -1
  81. package/dist/client/blocks/library/columns.js +56 -35
  82. package/dist/client/blocks/library/columns.js.map +1 -1
  83. package/dist/client/blocks/library/data-model.config.d.ts +17 -0
  84. package/dist/client/blocks/library/data-model.config.d.ts.map +1 -1
  85. package/dist/client/blocks/library/data-model.config.js +15 -0
  86. package/dist/client/blocks/library/data-model.config.js.map +1 -1
  87. package/dist/client/blocks/library/decision.config.d.ts +37 -0
  88. package/dist/client/blocks/library/decision.config.d.ts.map +1 -0
  89. package/dist/client/blocks/library/decision.config.js +32 -0
  90. package/dist/client/blocks/library/decision.config.js.map +1 -0
  91. package/dist/client/blocks/library/decision.d.ts +19 -0
  92. package/dist/client/blocks/library/decision.d.ts.map +1 -0
  93. package/dist/client/blocks/library/decision.js +119 -0
  94. package/dist/client/blocks/library/decision.js.map +1 -0
  95. package/dist/client/blocks/library/diagram.config.d.ts +64 -0
  96. package/dist/client/blocks/library/diagram.config.d.ts.map +1 -0
  97. package/dist/client/blocks/library/diagram.config.js +111 -0
  98. package/dist/client/blocks/library/diagram.config.js.map +1 -0
  99. package/dist/client/blocks/library/diagram.d.ts +16 -0
  100. package/dist/client/blocks/library/diagram.d.ts.map +1 -0
  101. package/dist/client/blocks/library/diagram.js +261 -0
  102. package/dist/client/blocks/library/diagram.js.map +1 -0
  103. package/dist/client/blocks/library/diff.config.d.ts +28 -6
  104. package/dist/client/blocks/library/diff.config.d.ts.map +1 -1
  105. package/dist/client/blocks/library/diff.config.js +30 -6
  106. package/dist/client/blocks/library/diff.config.js.map +1 -1
  107. package/dist/client/blocks/library/question-form.config.d.ts +69 -0
  108. package/dist/client/blocks/library/question-form.config.d.ts.map +1 -0
  109. package/dist/client/blocks/library/question-form.config.js +58 -0
  110. package/dist/client/blocks/library/question-form.config.js.map +1 -0
  111. package/dist/client/blocks/library/question-form.d.ts +20 -0
  112. package/dist/client/blocks/library/question-form.d.ts.map +1 -0
  113. package/dist/client/blocks/library/question-form.js +286 -0
  114. package/dist/client/blocks/library/question-form.js.map +1 -0
  115. package/dist/client/blocks/library/sanitize-html.d.ts +5 -0
  116. package/dist/client/blocks/library/sanitize-html.d.ts.map +1 -0
  117. package/dist/client/blocks/library/sanitize-html.js +240 -0
  118. package/dist/client/blocks/library/sanitize-html.js.map +1 -0
  119. package/dist/client/blocks/library/server-specs.d.ts.map +1 -1
  120. package/dist/client/blocks/library/server-specs.js +59 -0
  121. package/dist/client/blocks/library/server-specs.js.map +1 -1
  122. package/dist/client/blocks/library/specs.d.ts.map +1 -1
  123. package/dist/client/blocks/library/specs.js +11 -0
  124. package/dist/client/blocks/library/specs.js.map +1 -1
  125. package/dist/client/blocks/library/tabs.d.ts.map +1 -1
  126. package/dist/client/blocks/library/tabs.js +12 -12
  127. package/dist/client/blocks/library/tabs.js.map +1 -1
  128. package/dist/client/blocks/library/wireframe-kit.d.ts +260 -0
  129. package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -0
  130. package/dist/client/blocks/library/wireframe-kit.js +920 -0
  131. package/dist/client/blocks/library/wireframe-kit.js.map +1 -0
  132. package/dist/client/blocks/library/wireframe.config.d.ts +123 -0
  133. package/dist/client/blocks/library/wireframe.config.d.ts.map +1 -0
  134. package/dist/client/blocks/library/wireframe.config.js +294 -0
  135. package/dist/client/blocks/library/wireframe.config.js.map +1 -0
  136. package/dist/client/blocks/library/wireframe.d.ts +15 -0
  137. package/dist/client/blocks/library/wireframe.d.ts.map +1 -0
  138. package/dist/client/blocks/library/wireframe.js +206 -0
  139. package/dist/client/blocks/library/wireframe.js.map +1 -0
  140. package/dist/client/blocks/registry.d.ts +9 -0
  141. package/dist/client/blocks/registry.d.ts.map +1 -1
  142. package/dist/client/blocks/registry.js +12 -5
  143. package/dist/client/blocks/registry.js.map +1 -1
  144. package/dist/client/blocks/server.d.ts +1 -0
  145. package/dist/client/blocks/server.d.ts.map +1 -1
  146. package/dist/client/blocks/server.js +1 -0
  147. package/dist/client/blocks/server.js.map +1 -1
  148. package/dist/client/blocks/types.d.ts +10 -2
  149. package/dist/client/blocks/types.d.ts.map +1 -1
  150. package/dist/client/blocks/types.js.map +1 -1
  151. package/dist/client/rich-markdown-editor/DragHandle.d.ts.map +1 -1
  152. package/dist/client/rich-markdown-editor/DragHandle.js +152 -21
  153. package/dist/client/rich-markdown-editor/DragHandle.js.map +1 -1
  154. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +25 -1
  155. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +1 -1
  156. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +29 -6
  157. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
  158. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +8 -1
  159. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
  160. package/dist/client/rich-markdown-editor/SharedRichEditor.js +5 -1
  161. package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
  162. package/dist/extensions/actions.d.ts.map +1 -1
  163. package/dist/extensions/actions.js +159 -12
  164. package/dist/extensions/actions.js.map +1 -1
  165. package/dist/extensions/store.d.ts +21 -0
  166. package/dist/extensions/store.d.ts.map +1 -1
  167. package/dist/extensions/store.js +33 -1
  168. package/dist/extensions/store.js.map +1 -1
  169. package/dist/server/recap-image-route.d.ts.map +1 -1
  170. package/dist/server/recap-image-route.js +12 -3
  171. package/dist/server/recap-image-route.js.map +1 -1
  172. package/dist/styles/agent-native.css +1 -0
  173. package/dist/styles/blocks.css +1380 -0
  174. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +30 -5
  175. package/docs/content/plan-plugin.md +107 -0
  176. package/docs/content/pr-visual-recap.md +2 -2
  177. package/docs/content/skills-guide.md +8 -0
  178. package/docs/content/template-plan.md +94 -17
  179. package/package.json +2 -1
  180. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +30 -5
  181. package/docs/content/visual-plans.md +0 -80
@@ -26,6 +26,12 @@ export interface AppSkillManifest {
26
26
  id: string;
27
27
  displayName: string;
28
28
  description: string;
29
+ /**
30
+ * Optional semver base for generated plugin manifests. Codex keys its plugin
31
+ * cache on the version string, so the packer appends a content hash to this
32
+ * base; leave it unset to default to "1.0.0".
33
+ */
34
+ version?: string;
29
35
  hosted: {
30
36
  url: string;
31
37
  mcpUrl: string;
@@ -126,6 +132,16 @@ export declare function loadAppSkillManifest(file?: string): LoadedAppSkillManif
126
132
  export declare function exportedSkills(manifest: AppSkillManifest): AppSkillManifestSkill[];
127
133
  export declare function internalSkills(manifest: AppSkillManifest): AppSkillManifestSkill[];
128
134
  export declare function parseAppSkillArgs(argv: string[]): ParsedAppSkillArgs;
135
+ export declare function exportedSkillContentHash(manifestDir: string, skills: AppSkillManifestSkill[], manifest: AppSkillManifest): string;
136
+ /**
137
+ * Plugin version embeds a content hash of the exported skills + MCP endpoint.
138
+ * Codex keys its plugin cache on the version string, so a changed skill or MCP
139
+ * URL yields a new version and `codex plugin marketplace upgrade` (which runs
140
+ * on startup) delivers the update automatically — no manual semver bump per
141
+ * edit. Claude Code uses commit-SHA versioning instead (plugin.json omits
142
+ * version), so it auto-updates on every push.
143
+ */
144
+ export declare function resolvePluginVersion(manifest: AppSkillManifest, manifestDir: string, skills: AppSkillManifestSkill[]): string;
129
145
  export interface AppSkillPackResult {
130
146
  outDir: string;
131
147
  exportedSkillNames: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"app-skill.d.ts","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-skill.d.ts","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import fs from "node:fs";
10
10
  import os from "node:os";
11
11
  import path from "node:path";
12
12
  import { spawn } from "node:child_process";
13
+ import { createHash } from "node:crypto";
13
14
  import { buildHttpMcpEntry } from "./mcp-config-writers.js";
14
15
  import { resolveClients, writeConfigs } from "./connect.js";
15
16
  const HELP = `agent-native app-skill
@@ -141,6 +142,7 @@ export function normalizeAppSkillManifest(raw) {
141
142
  displayName: stringValue(raw.displayName) ?? id,
142
143
  description: stringValue(raw.description) ??
143
144
  `Agent-native app-backed skill for ${id}.`,
145
+ ...(stringValue(raw.version) ? { version: stringValue(raw.version) } : {}),
144
146
  hosted: {
145
147
  url: hostedUrl,
146
148
  mcpUrl: hostedMcpUrl,
@@ -447,11 +449,37 @@ function pluginName(manifest) {
447
449
  function claudeMarketplaceName() {
448
450
  return "agent-native-apps";
449
451
  }
450
- function writeCodexPluginAdapter(manifest, outDir) {
452
+ export function exportedSkillContentHash(manifestDir, skills, manifest) {
453
+ const parts = skills
454
+ .map((skill) => {
455
+ const file = path.join(manifestDir, skill.path, "SKILL.md");
456
+ const body = fs.existsSync(file) ? fs.readFileSync(file, "utf-8") : "";
457
+ return `${skillExportName(skill)}\n${body}`;
458
+ })
459
+ .sort();
460
+ parts.push(`mcp:${manifest.hosted.mcpUrl}`);
461
+ return createHash("sha256")
462
+ .update(parts.join("\n\n"))
463
+ .digest("hex")
464
+ .slice(0, 12);
465
+ }
466
+ /**
467
+ * Plugin version embeds a content hash of the exported skills + MCP endpoint.
468
+ * Codex keys its plugin cache on the version string, so a changed skill or MCP
469
+ * URL yields a new version and `codex plugin marketplace upgrade` (which runs
470
+ * on startup) delivers the update automatically — no manual semver bump per
471
+ * edit. Claude Code uses commit-SHA versioning instead (plugin.json omits
472
+ * version), so it auto-updates on every push.
473
+ */
474
+ export function resolvePluginVersion(manifest, manifestDir, skills) {
475
+ const base = manifest.version ?? "1.0.0";
476
+ return `${base}+codex.${exportedSkillContentHash(manifestDir, skills, manifest)}`;
477
+ }
478
+ function writeCodexPluginAdapter(manifest, outDir, version) {
451
479
  const name = pluginName(manifest);
452
480
  writeJson(path.join(outDir, ".codex-plugin", "plugin.json"), {
453
481
  name,
454
- version: "0.1.0",
482
+ version,
455
483
  description: manifest.description,
456
484
  author: {
457
485
  name: "Agent-Native",
@@ -507,6 +535,7 @@ function writeClaudeMarketplaceAdapter(manifest, manifestDir, skills, outDir) {
507
535
  displayName: manifest.displayName,
508
536
  description: manifest.description,
509
537
  source: `./plugins/${name}`,
538
+ autoUpdate: true,
510
539
  homepage: manifest.hosted.url,
511
540
  keywords: [
512
541
  "agent-native",
@@ -607,6 +636,7 @@ export function buildAppSkillPack(loaded, outDir) {
607
636
  if (skills.length === 0) {
608
637
  throw new Error("Manifest has no exported or both-visibility skills.");
609
638
  }
639
+ const pluginVersion = resolvePluginVersion(manifest, loaded.dir, skills);
610
640
  fs.mkdirSync(target, { recursive: true });
611
641
  const appSource = resolveLocalSourceDir(loaded);
612
642
  const packedManifest = appSource
@@ -636,7 +666,7 @@ export function buildAppSkillPack(loaded, outDir) {
636
666
  ...exportedSkillNames.map((name) => path.join(target, "skills", name, "SKILL.md")),
637
667
  ];
638
668
  if (manifest.hostAdapters.includes("codex-plugin")) {
639
- writeCodexPluginAdapter(manifest, target);
669
+ writeCodexPluginAdapter(manifest, target, pluginVersion);
640
670
  files.push(path.join(target, ".codex-plugin", "plugin.json"), path.join(target, ".mcp.json"));
641
671
  }
642
672
  if (manifest.hostAdapters.includes("claude-marketplace")) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-skill.js","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native app-skill` packages an agent-native app as a distributable\n * skill bundle: instructions + MCP connector + embeddable app surfaces.\n *\n * The manifest intentionally contains no user secrets. Hosted installs write\n * URL-only MCP entries; clients that need auth complete OAuth/device setup in\n * the host. Local installs point at a developer-owned app process.\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 { type ClientId, buildHttpMcpEntry } from \"./mcp-config-writers.js\";\nimport { resolveClients, writeConfigs } from \"./connect.js\";\n\nexport type SkillVisibility = \"internal\" | \"exported\" | \"both\";\nexport type AppSkillHostAdapter =\n | \"codex-plugin\"\n | \"claude-marketplace\"\n | \"vercel-skills\"\n | \"plain-skill\"\n | \"claude-skill\"\n | \"chatgpt-mcp\"\n | \"generic-mcp\";\n\nexport interface AppSkillManifestSkill {\n path: string;\n visibility: SkillVisibility;\n exportAs?: string;\n}\n\nexport interface AppSkillSurface {\n id: string;\n action?: string;\n path: string;\n mediaTypes?: string[];\n defaultMediaType?: string;\n}\n\nexport interface AppSkillManifest {\n schemaVersion: 1;\n id: string;\n displayName: string;\n description: string;\n hosted: {\n url: string;\n mcpUrl: string;\n };\n mcp: {\n serverName: string;\n };\n local?: {\n template?: string;\n sourcePath?: string;\n defaultUrl?: string;\n commands?: {\n install?: string;\n dev?: string;\n start?: string;\n };\n };\n auth?: {\n mode?: \"oauth\" | \"device\" | \"none\";\n setup?: string;\n };\n surfaces: AppSkillSurface[];\n skills: AppSkillManifestSkill[];\n hostAdapters: AppSkillHostAdapter[];\n}\n\nexport interface LoadedAppSkillManifest {\n manifest: AppSkillManifest;\n file: string;\n dir: string;\n}\n\nexport interface ParsedAppSkillArgs {\n command: \"ensure\" | \"launch\" | \"pack\" | \"help\";\n manifest?: string;\n client: string;\n scope: string;\n serverName?: string;\n out?: string;\n into?: string;\n mode: \"hosted\" | \"local\";\n dryRun: boolean;\n skipInstall: boolean;\n noRegister: boolean;\n printJson: boolean;\n yes: boolean;\n}\n\nexport interface EnsureAppSkillOptions {\n mode?: \"hosted\" | \"local\";\n clients?: ClientId[];\n scope?: string;\n serverName?: string;\n baseDir?: string;\n dryRun?: boolean;\n confirm?: boolean;\n yes?: boolean;\n log?: (message: string) => void;\n}\n\nexport interface EnsureAppSkillResult {\n mode: \"hosted\" | \"local\";\n serverName: string;\n mcpUrl: string;\n clients: ClientId[];\n written: { client: ClientId; file: string }[];\n}\n\nexport interface LaunchAppSkillOptions {\n mode?: \"hosted\" | \"local\";\n into?: string;\n dryRun?: boolean;\n skipInstall?: boolean;\n noRegister?: boolean;\n clients?: ClientId[];\n scope?: string;\n serverName?: string;\n baseDir?: string;\n confirm?: boolean;\n yes?: boolean;\n log?: (message: string) => void;\n}\n\nexport interface AppSkillLaunchPlan {\n mode: \"hosted\" | \"local\";\n appId: string;\n appDir?: string;\n sourceDir?: string;\n url: string;\n mcpUrl: string;\n serverName: string;\n commands: {\n install?: string;\n dev?: string;\n start?: string;\n };\n}\n\nconst HELP = `agent-native app-skill\n\nUsage:\n agent-native app-skill ensure [--manifest <file>] [--hosted|--local] [--client all|codex|claude-code|claude-code-cli|cowork] [--scope user|project] [--name <server>] [--yes] [--dry-run] [--json]\n agent-native app-skill launch [--manifest <file>] [--local|--hosted] [--into <path>] [--client <client>] [--scope user|project] [--name <server>] [--no-register] [--skip-install] [--yes] [--dry-run] [--json]\n agent-native app-skill pack [--manifest <file>] --out <dir> [--json]\n\nCommands:\n ensure Register the app skill MCP connector for your local agent clients.\n launch Open the hosted app, or materialize and start a local editable app.\n pack Create marketplace-ready skill, MCP, Codex/Claude plugin, and Vercel skills adapters.\n\nHosted is the default. Use --local when you want editable source, offline work,\nor a privacy-sensitive local app instance.`;\n\nconst APP_SKILL_COMMANDS = new Set([\"ensure\", \"launch\", \"pack\"]);\nconst APP_SKILL_SCOPES = new Set([\"user\", \"project\"]);\nconst SAFE_PACKAGE_EXECUTABLES = new Set([\"pnpm\", \"npm\", \"bun\", \"yarn\"]);\nconst SAFE_ENV_KEYS = [\n \"PATH\",\n \"HOME\",\n \"USER\",\n \"SHELL\",\n \"TMPDIR\",\n \"TEMP\",\n \"TMP\",\n \"TERM\",\n \"CI\",\n \"PNPM_HOME\",\n \"COREPACK_HOME\",\n \"SystemRoot\",\n \"ComSpec\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction stringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction normalizeOriginUrl(value: string, field: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(`${field} must be a valid URL.`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`${field} must use http:// or https://.`);\n }\n return `${url.origin}${url.pathname}`.replace(/\\/+$/, \"\");\n}\n\nfunction withMcpPath(baseUrl: string): string {\n return `${baseUrl.replace(/\\/+$/, \"\")}/_agent-native/mcp`;\n}\n\nfunction normalizeSkillVisibility(value: unknown): SkillVisibility {\n if (value === \"internal\" || value === \"exported\" || value === \"both\") {\n return value;\n }\n return \"both\";\n}\n\nfunction normalizeHostAdapter(value: unknown): AppSkillHostAdapter | null {\n if (\n value === \"codex-plugin\" ||\n value === \"claude-marketplace\" ||\n value === \"vercel-skills\" ||\n value === \"plain-skill\" ||\n value === \"claude-skill\" ||\n value === \"chatgpt-mcp\" ||\n value === \"generic-mcp\"\n ) {\n return value;\n }\n return null;\n}\n\nfunction defaultHostAdapters(): AppSkillHostAdapter[] {\n return [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ];\n}\n\nfunction uniqueAdapters(values: AppSkillHostAdapter[]): AppSkillHostAdapter[] {\n const seen = new Set<AppSkillHostAdapter>();\n return values.filter((value) => {\n if (seen.has(value)) return false;\n seen.add(value);\n return true;\n });\n}\n\nexport function normalizeAppSkillManifest(raw: unknown): AppSkillManifest {\n if (!isRecord(raw)) throw new Error(\"App skill manifest must be an object.\");\n const schemaVersion = raw.schemaVersion ?? 1;\n if (schemaVersion !== 1) {\n throw new Error(`Unsupported app skill schemaVersion: ${schemaVersion}`);\n }\n\n const id = stringValue(raw.id);\n if (!id || !/^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/.test(id)) {\n throw new Error(\n \"App skill manifest id must be kebab-case and 2-64 characters.\",\n );\n }\n\n const hostedRaw = isRecord(raw.hosted) ? raw.hosted : {};\n const hostedUrl = normalizeOriginUrl(\n stringValue(hostedRaw.url) ?? \"\",\n \"hosted.url\",\n );\n const hostedMcpUrl = normalizeOriginUrl(\n stringValue(hostedRaw.mcpUrl) ?? withMcpPath(hostedUrl),\n \"hosted.mcpUrl\",\n );\n\n const mcpRaw = isRecord(raw.mcp) ? raw.mcp : {};\n const localRaw = isRecord(raw.local) ? raw.local : undefined;\n const commandsRaw = isRecord(localRaw?.commands)\n ? localRaw.commands\n : undefined;\n const surfacesRaw = Array.isArray(raw.surfaces) ? raw.surfaces : [];\n const skillsRaw = Array.isArray(raw.skills) ? raw.skills : [];\n const adaptersRaw = Array.isArray(raw.hostAdapters) ? raw.hostAdapters : [];\n const authRaw = isRecord(raw.auth) ? raw.auth : undefined;\n\n const adapters = uniqueAdapters(\n adaptersRaw\n .map(normalizeHostAdapter)\n .filter((value): value is AppSkillHostAdapter => Boolean(value)),\n );\n\n return {\n schemaVersion: 1,\n id,\n displayName: stringValue(raw.displayName) ?? id,\n description:\n stringValue(raw.description) ??\n `Agent-native app-backed skill for ${id}.`,\n hosted: {\n url: hostedUrl,\n mcpUrl: hostedMcpUrl,\n },\n mcp: {\n serverName: stringValue(mcpRaw.serverName) ?? `agent-native-${id}`,\n },\n ...(localRaw\n ? {\n local: {\n ...(stringValue(localRaw.template)\n ? { template: stringValue(localRaw.template) }\n : {}),\n ...(stringValue(localRaw.sourcePath)\n ? { sourcePath: stringValue(localRaw.sourcePath) }\n : {}),\n ...(stringValue(localRaw.defaultUrl)\n ? {\n defaultUrl: normalizeOriginUrl(\n stringValue(localRaw.defaultUrl)!,\n \"local.defaultUrl\",\n ),\n }\n : {}),\n commands: {\n install: stringValue(commandsRaw?.install) ?? \"pnpm install\",\n dev: stringValue(commandsRaw?.dev) ?? \"pnpm dev\",\n start: stringValue(commandsRaw?.start) ?? \"pnpm start\",\n },\n },\n }\n : {}),\n ...(authRaw\n ? {\n auth: {\n ...(authRaw.mode === \"oauth\" ||\n authRaw.mode === \"device\" ||\n authRaw.mode === \"none\"\n ? { mode: authRaw.mode }\n : {}),\n ...(stringValue(authRaw.setup)\n ? { setup: stringValue(authRaw.setup) }\n : {}),\n },\n }\n : {}),\n surfaces: surfacesRaw.filter(isRecord).map((surface) => ({\n id: stringValue(surface.id) ?? \"app\",\n ...(stringValue(surface.action)\n ? { action: stringValue(surface.action) }\n : {}),\n path: stringValue(surface.path) ?? \"/\",\n mediaTypes: stringArray(surface.mediaTypes),\n ...(stringValue(surface.defaultMediaType)\n ? { defaultMediaType: stringValue(surface.defaultMediaType) }\n : {}),\n })),\n skills: skillsRaw\n .filter(isRecord)\n .map((skill) => ({\n path: stringValue(skill.path) ?? \"\",\n visibility: normalizeSkillVisibility(skill.visibility),\n ...(stringValue(skill.exportAs)\n ? { exportAs: stringValue(skill.exportAs) }\n : {}),\n }))\n .filter((skill) => skill.path),\n hostAdapters: adapters.length ? adapters : defaultHostAdapters(),\n };\n}\n\nexport function findAppSkillManifest(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"agent-native.app-skill.json\");\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n throw new Error(\n \"Could not find agent-native.app-skill.json. Pass --manifest <file>.\",\n );\n}\n\nexport function loadAppSkillManifest(file?: string): LoadedAppSkillManifest {\n const resolved = path.resolve(file ?? findAppSkillManifest());\n const raw = JSON.parse(fs.readFileSync(resolved, \"utf-8\"));\n return {\n manifest: normalizeAppSkillManifest(raw),\n file: resolved,\n dir: path.dirname(resolved),\n };\n}\n\nexport function exportedSkills(\n manifest: AppSkillManifest,\n): AppSkillManifestSkill[] {\n return manifest.skills.filter(\n (skill) => skill.visibility === \"exported\" || skill.visibility === \"both\",\n );\n}\n\nexport function internalSkills(\n manifest: AppSkillManifest,\n): AppSkillManifestSkill[] {\n return manifest.skills.filter(\n (skill) => skill.visibility === \"internal\" || skill.visibility === \"both\",\n );\n}\n\nexport function parseAppSkillArgs(argv: string[]): ParsedAppSkillArgs {\n const first = argv[0];\n let command: ParsedAppSkillArgs[\"command\"] = \"ensure\";\n let args = argv;\n if (first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(1);\n } else if (APP_SKILL_COMMANDS.has(first ?? \"\")) {\n command = first as ParsedAppSkillArgs[\"command\"];\n args = argv.slice(1);\n } else if (first && !first.startsWith(\"-\") && !looksLikeManifestArg(first)) {\n throw new Error(`Unknown app-skill command: ${first}`);\n }\n const out: ParsedAppSkillArgs = {\n command,\n client: \"all\",\n scope: \"user\",\n mode: \"hosted\",\n dryRun: false,\n skipInstall: false,\n noRegister: false,\n printJson: false,\n yes: false,\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(\"--manifest\")) !== undefined) out.manifest = value;\n else if ((value = eat(\"--client\")) !== undefined) out.client = value;\n else if ((value = eat(\"--scope\")) !== undefined) out.scope = value;\n else if ((value = eat(\"--name\")) !== undefined) out.serverName = value;\n else if ((value = eat(\"--server-name\")) !== undefined)\n out.serverName = value;\n else if ((value = eat(\"--out\")) !== undefined) out.out = value;\n else if ((value = eat(\"--into\")) !== undefined) out.into = value;\n else if (arg === \"--local\") out.mode = \"local\";\n else if (arg === \"--hosted\") out.mode = \"hosted\";\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--skip-install\" || arg === \"--no-install\")\n out.skipInstall = true;\n else if (arg === \"--no-register\") out.noRegister = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--yes\" || arg === \"-y\") out.yes = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.manifest) out.manifest = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (!APP_SKILL_SCOPES.has(out.scope)) {\n throw new Error(\"--scope must be either user or project.\");\n }\n\n return out;\n}\n\nfunction looksLikeManifestArg(value: string): boolean {\n return (\n value.endsWith(\".json\") ||\n value.includes(\"/\") ||\n value.includes(\"\\\\\") ||\n fs.existsSync(value)\n );\n}\n\nfunction assertPathInside(root: string, target: string, field: string): string {\n const resolvedRoot = path.resolve(root);\n const resolvedTarget = path.resolve(target);\n const relative = path.relative(resolvedRoot, resolvedTarget);\n if (relative && (relative.startsWith(\"..\") || path.isAbsolute(relative))) {\n throw new Error(`${field} must resolve inside ${resolvedRoot}.`);\n }\n return resolvedTarget;\n}\n\nfunction resolveSkillSource(manifestDir: string, skill: AppSkillManifestSkill) {\n if (path.isAbsolute(skill.path)) {\n throw new Error(`Skill path must be relative: ${skill.path}`);\n }\n return assertPathInside(\n manifestDir,\n path.resolve(manifestDir, skill.path),\n `Skill path ${skill.path}`,\n );\n}\n\nfunction skillExportName(skill: AppSkillManifestSkill): string {\n if (skill.exportAs) {\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(skill.exportAs)) {\n throw new Error(`Invalid skill export name: ${skill.exportAs}`);\n }\n return skill.exportAs;\n }\n const normalized = skill.path.replace(/\\/+$/, \"\");\n return path.basename(normalized);\n}\n\nfunction copyDirFiltered(source: string, dest: string): void {\n const sourceRoot = path.resolve(source);\n const destRoot = path.resolve(dest);\n const relativeDest = path.relative(sourceRoot, destRoot);\n const outputRootInsideSource =\n relativeDest &&\n !relativeDest.startsWith(\"..\") &&\n !path.isAbsolute(relativeDest)\n ? path.join(sourceRoot, relativeDest.split(path.sep)[0])\n : destRoot;\n fs.cpSync(source, dest, {\n recursive: true,\n filter: (src) => {\n const resolved = path.resolve(src);\n if (\n resolved === outputRootInsideSource ||\n resolved.startsWith(`${outputRootInsideSource}${path.sep}`)\n ) {\n return false;\n }\n const base = path.basename(src);\n const lower = base.toLowerCase();\n return (\n base !== \"node_modules\" &&\n base !== \".git\" &&\n base !== \"dist\" &&\n base !== \".output\" &&\n base !== \".react-router\" &&\n base !== \".netlify\" &&\n base !== \"secrets\" &&\n base !== \"private\" &&\n !base.startsWith(\".env\") &&\n base !== \".dev.vars\" &&\n base !== \".npmrc\" &&\n !lower.endsWith(\".db\") &&\n !lower.endsWith(\".sqlite\") &&\n !lower.endsWith(\".sqlite3\") &&\n !lower.endsWith(\".pem\") &&\n !lower.endsWith(\".key\") &&\n !lower.endsWith(\".crt\") &&\n !lower.endsWith(\".p12\")\n );\n },\n });\n}\n\nfunction copySkill(\n manifestDir: string,\n skill: AppSkillManifestSkill,\n destRoot: string,\n): string {\n const source = resolveSkillSource(manifestDir, skill);\n const exportName = skillExportName(skill);\n const dest = path.join(destRoot, exportName);\n if (!fs.existsSync(source)) {\n throw new Error(`Exported skill source not found: ${source}`);\n }\n fs.mkdirSync(destRoot, { recursive: true });\n const stat = fs.statSync(source);\n if (stat.isDirectory()) {\n copyDirFiltered(source, dest);\n } else {\n fs.mkdirSync(dest, { recursive: true });\n fs.copyFileSync(source, path.join(dest, \"SKILL.md\"));\n }\n rewriteSkillFrontmatterName(path.join(dest, \"SKILL.md\"), exportName);\n return dest;\n}\n\nfunction rewriteSkillFrontmatterName(file: string, name: string): void {\n if (!fs.existsSync(file)) return;\n const source = fs.readFileSync(file, \"utf-8\");\n const lines = source.split(\"\\n\");\n if (lines[0]?.trim() !== \"---\") return;\n const end = lines.findIndex(\n (line, index) => index > 0 && line.trim() === \"---\",\n );\n if (end <= 0) return;\n const nameIndex = lines.findIndex(\n (line, index) => index > 0 && index < end && /^name\\s*:/.test(line),\n );\n if (nameIndex === -1) {\n lines.splice(1, 0, `name: ${name}`);\n } else {\n lines[nameIndex] = `name: ${name}`;\n }\n fs.writeFileSync(file, lines.join(\"\\n\"), \"utf-8\");\n}\n\nfunction writeJson(file: string, value: unknown): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value, null, 2) + \"\\n\", \"utf-8\");\n}\n\nfunction mcpServerConfig(manifest: AppSkillManifest, serverName?: string) {\n return {\n mcpServers: {\n [serverName ?? manifest.mcp.serverName]: buildHttpMcpEntry(\n manifest.hosted.mcpUrl,\n ),\n },\n };\n}\n\nfunction pluginName(manifest: AppSkillManifest): string {\n return `agent-native-${manifest.id}`;\n}\n\nfunction claudeMarketplaceName(): string {\n return \"agent-native-apps\";\n}\n\nfunction writeCodexPluginAdapter(\n manifest: AppSkillManifest,\n outDir: string,\n): void {\n const name = pluginName(manifest);\n writeJson(path.join(outDir, \".codex-plugin\", \"plugin.json\"), {\n name,\n version: \"0.1.0\",\n description: manifest.description,\n author: {\n name: \"Agent-Native\",\n url: \"https://agent-native.com\",\n },\n homepage: manifest.hosted.url,\n license: \"MIT\",\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n skills: \"./skills/\",\n mcpServers: \"./.mcp.json\",\n interface: {\n displayName: manifest.displayName,\n shortDescription: manifest.description,\n longDescription:\n `${manifest.displayName} packages agent instructions, app actions, ` +\n \"an MCP connector, and inline UI surfaces as an installable skill.\",\n developerName: \"Agent-Native\",\n category: \"Productivity\",\n capabilities: [\"Interactive\", \"Read\", \"Write\"],\n websiteURL: manifest.hosted.url,\n defaultPrompt: [\n `Open ${manifest.displayName} where useful`,\n `Use ${manifest.displayName} for app-backed workflows`,\n `Search ${manifest.displayName} and return usable context`,\n ],\n brandColor: \"#2563EB\",\n },\n });\n writeJson(path.join(outDir, \".mcp.json\"), mcpServerConfig(manifest));\n}\n\nfunction writeClaudeMarketplaceAdapter(\n manifest: AppSkillManifest,\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n): void {\n const adapterDir = path.join(outDir, \"adapters\", \"claude-marketplace\");\n const name = pluginName(manifest);\n const marketplaceName = claudeMarketplaceName();\n const pluginDir = path.join(adapterDir, \"plugins\", name);\n const skillRoot = path.join(pluginDir, \"skills\");\n\n for (const skill of skills) copySkill(manifestDir, skill, skillRoot);\n\n writeJson(path.join(adapterDir, \".claude-plugin\", \"marketplace.json\"), {\n name: marketplaceName,\n description:\n \"Agent-Native app-backed skills that bundle instructions, MCP connectors, and UI surfaces.\",\n owner: {\n name: \"Agent-Native\",\n },\n plugins: [\n {\n name,\n displayName: manifest.displayName,\n description: manifest.description,\n source: `./plugins/${name}`,\n homepage: manifest.hosted.url,\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n },\n ],\n });\n\n writeJson(path.join(pluginDir, \".claude-plugin\", \"plugin.json\"), {\n name,\n displayName: manifest.displayName,\n description: manifest.description,\n author: {\n name: \"Agent-Native\",\n url: \"https://agent-native.com\",\n },\n homepage: manifest.hosted.url,\n repository: \"https://github.com/BuilderIO/agent-native\",\n license: \"MIT\",\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n skills: \"./skills/\",\n mcpServers: \"./.mcp.json\",\n });\n writeJson(path.join(pluginDir, \".mcp.json\"), mcpServerConfig(manifest));\n fs.writeFileSync(\n path.join(adapterDir, \"README.md\"),\n [\n `# ${manifest.displayName} Claude Code Marketplace`,\n \"\",\n \"Install this local marketplace from Claude Code:\",\n \"\",\n \"```text\",\n `/plugin marketplace add ./dist/${manifest.id}-skill/adapters/claude-marketplace`,\n `/plugin install ${name}@${marketplaceName}`,\n \"/reload-plugins\",\n \"/mcp\",\n \"```\",\n \"\",\n \"Authenticate the MCP connector from `/mcp` after installation. The plugin ships a URL-only MCP config, so no shared secrets are stored in the marketplace package.\",\n \"\",\n \"For a published marketplace repo, point `/plugin marketplace add` at the repository URL instead of the local folder.\",\n \"\",\n ].join(\"\\n\"),\n \"utf-8\",\n );\n}\n\nfunction writeMcpAdapter(\n manifest: AppSkillManifest,\n outDir: string,\n adapter: \"generic-mcp\" | \"chatgpt-mcp\",\n): void {\n const dir = path.join(outDir, \"adapters\", adapter);\n if (adapter === \"generic-mcp\") {\n writeJson(path.join(dir, \"mcp.json\"), mcpServerConfig(manifest));\n return;\n }\n writeJson(path.join(dir, \"connector.json\"), {\n name: manifest.mcp.serverName,\n title: manifest.displayName,\n url: manifest.hosted.mcpUrl,\n auth: manifest.auth?.mode ?? \"oauth\",\n surfaces: manifest.surfaces,\n });\n}\n\nfunction copySkillAdapter(\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n adapter: \"plain-skill\" | \"claude-skill\" | \"vercel-skills\",\n): void {\n const skillRoot = path.join(outDir, \"adapters\", adapter, \"skills\");\n for (const skill of skills) copySkill(manifestDir, skill, skillRoot);\n}\n\nfunction writeVercelSkillsAdapter(\n manifest: AppSkillManifest,\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n): void {\n const adapterDir = path.join(outDir, \"adapters\", \"vercel-skills\");\n copySkillAdapter(manifestDir, skills, outDir, \"vercel-skills\");\n fs.writeFileSync(\n path.join(adapterDir, \"README.md\"),\n [\n `# ${manifest.displayName} Skills`,\n \"\",\n \"Install instructions only with the Vercel Labs/open skills CLI:\",\n \"\",\n \"```bash\",\n `npx skills add . --skill ${skills.map(skillExportName).join(\" --skill \")} -a codex`,\n \"```\",\n \"\",\n \"Then register the app-backed MCP connector:\",\n \"\",\n \"```bash\",\n `npx @agent-native/core@latest app-skill ensure --manifest agent-native.app-skill.json --yes`,\n \"```\",\n \"\",\n \"The open skills CLI installs instruction files only; it does not run postinstall scripts or register MCP connectors. OAuth or device setup happens in the MCP host; secrets are not stored in skills.\",\n \"\",\n ].join(\"\\n\"),\n \"utf-8\",\n );\n writeJson(path.join(adapterDir, \"agent-native.app-skill.json\"), manifest);\n}\n\nexport interface AppSkillPackResult {\n outDir: string;\n exportedSkillNames: string[];\n files: string[];\n}\n\nexport function buildAppSkillPack(\n loaded: LoadedAppSkillManifest,\n outDir: string,\n): AppSkillPackResult {\n const manifest = loaded.manifest;\n const target = path.resolve(outDir);\n const skills = exportedSkills(manifest);\n if (skills.length === 0) {\n throw new Error(\"Manifest has no exported or both-visibility skills.\");\n }\n\n fs.mkdirSync(target, { recursive: true });\n const appSource = resolveLocalSourceDir(loaded);\n const packedManifest: AppSkillManifest = appSource\n ? {\n ...manifest,\n local: {\n ...(manifest.local ?? {}),\n sourcePath: \"./app\",\n commands: manifest.local?.commands ?? {\n install: \"pnpm install\",\n dev: \"pnpm dev\",\n start: \"pnpm start\",\n },\n },\n }\n : manifest;\n writeJson(path.join(target, \"agent-native.app-skill.json\"), packedManifest);\n if (appSource) {\n copyDirFiltered(appSource, path.join(target, \"app\"));\n }\n const exportedSkillNames = skills.map(skillExportName);\n for (const skill of skills)\n copySkill(loaded.dir, skill, path.join(target, \"skills\"));\n\n const files: string[] = [\n path.join(target, \"agent-native.app-skill.json\"),\n ...(appSource ? [path.join(target, \"app\")] : []),\n ...exportedSkillNames.map((name) =>\n path.join(target, \"skills\", name, \"SKILL.md\"),\n ),\n ];\n\n if (manifest.hostAdapters.includes(\"codex-plugin\")) {\n writeCodexPluginAdapter(manifest, target);\n files.push(\n path.join(target, \".codex-plugin\", \"plugin.json\"),\n path.join(target, \".mcp.json\"),\n );\n }\n if (manifest.hostAdapters.includes(\"claude-marketplace\")) {\n writeClaudeMarketplaceAdapter(manifest, loaded.dir, skills, target);\n files.push(\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \".claude-plugin\",\n \"marketplace.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \".claude-plugin\",\n \"plugin.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \".mcp.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \"skills\",\n ),\n path.join(target, \"adapters\", \"claude-marketplace\", \"README.md\"),\n );\n }\n if (manifest.hostAdapters.includes(\"vercel-skills\")) {\n writeVercelSkillsAdapter(manifest, loaded.dir, skills, target);\n files.push(\n path.join(target, \"adapters\", \"vercel-skills\", \"skills\"),\n path.join(target, \"adapters\", \"vercel-skills\", \"README.md\"),\n path.join(\n target,\n \"adapters\",\n \"vercel-skills\",\n \"agent-native.app-skill.json\",\n ),\n );\n }\n if (manifest.hostAdapters.includes(\"plain-skill\")) {\n copySkillAdapter(loaded.dir, skills, target, \"plain-skill\");\n files.push(path.join(target, \"adapters\", \"plain-skill\", \"skills\"));\n }\n if (manifest.hostAdapters.includes(\"claude-skill\")) {\n copySkillAdapter(loaded.dir, skills, target, \"claude-skill\");\n files.push(path.join(target, \"adapters\", \"claude-skill\", \"skills\"));\n }\n if (manifest.hostAdapters.includes(\"generic-mcp\")) {\n writeMcpAdapter(manifest, target, \"generic-mcp\");\n files.push(path.join(target, \"adapters\", \"generic-mcp\", \"mcp.json\"));\n }\n if (manifest.hostAdapters.includes(\"chatgpt-mcp\")) {\n writeMcpAdapter(manifest, target, \"chatgpt-mcp\");\n files.push(path.join(target, \"adapters\", \"chatgpt-mcp\", \"connector.json\"));\n }\n\n return { outDir: target, exportedSkillNames, files };\n}\n\nfunction appSkillCacheDir(appId: string): string {\n return path.join(os.homedir(), \".agent-native\", \"app-skills\", appId, \"app\");\n}\n\nfunction resolveLocalSourceDir(\n loaded: LoadedAppSkillManifest,\n): string | undefined {\n const local = loaded.manifest.local;\n if (local?.sourcePath) {\n if (path.isAbsolute(local.sourcePath)) {\n throw new Error(\"local.sourcePath must be relative to the manifest.\");\n }\n const source = assertPathInside(\n loaded.dir,\n path.resolve(loaded.dir, local.sourcePath),\n \"local.sourcePath\",\n );\n if (fs.existsSync(source)) return source;\n throw new Error(\n `local.sourcePath \"${local.sourcePath}\" does not exist. ` +\n \"Run pack from the directory containing the app source.\",\n );\n }\n if (local?.template) {\n if (!/^[a-z0-9][a-z0-9-]*$/i.test(local.template)) {\n throw new Error(\"local.template must be a direct template name.\");\n }\n const repoTemplate = path.resolve(\n process.cwd(),\n \"templates\",\n local.template,\n );\n if (fs.existsSync(repoTemplate)) return repoTemplate;\n }\n return undefined;\n}\n\nexport function resolveLaunchPlan(\n loaded: LoadedAppSkillManifest,\n options: LaunchAppSkillOptions = {},\n): AppSkillLaunchPlan {\n const manifest = loaded.manifest;\n const mode = options.mode ?? \"hosted\";\n const serverName = options.serverName ?? manifest.mcp.serverName;\n if (mode === \"hosted\") {\n return {\n mode,\n appId: manifest.id,\n url: manifest.hosted.url,\n mcpUrl: manifest.hosted.mcpUrl,\n serverName,\n commands: {},\n };\n }\n\n const defaultUrl = manifest.local?.defaultUrl ?? \"http://127.0.0.1:8100\";\n const appDir = path.resolve(options.into ?? appSkillCacheDir(manifest.id));\n return {\n mode,\n appId: manifest.id,\n appDir,\n sourceDir: resolveLocalSourceDir(loaded),\n url: defaultUrl,\n mcpUrl: withMcpPath(defaultUrl),\n serverName,\n commands: manifest.local?.commands ?? {\n install: \"pnpm install\",\n dev: \"pnpm dev\",\n start: \"pnpm start\",\n },\n };\n}\n\nfunction printPlan(plan: AppSkillLaunchPlan, log: (message: string) => void) {\n log(` App: ${plan.appId}`);\n log(` Mode: ${plan.mode}`);\n log(` URL: ${plan.url}`);\n log(` MCP URL: ${plan.mcpUrl}`);\n log(` Server: ${plan.serverName}`);\n if (plan.appDir) log(` App dir: ${plan.appDir}`);\n if (plan.sourceDir) log(` Source: ${plan.sourceDir}`);\n if (plan.commands.install) log(` Install: ${plan.commands.install}`);\n if (plan.commands.dev) log(` Dev: ${plan.commands.dev}`);\n}\n\nfunction safeChildEnv(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {};\n for (const key of SAFE_ENV_KEYS) {\n const value = process.env[key];\n if (value !== undefined) env[key] = value;\n }\n return env;\n}\n\nfunction parsePackageCommand(command: string): {\n executable: string;\n args: string[];\n} {\n const trimmed = command.trim();\n if (!trimmed) throw new Error(\"Command cannot be empty.\");\n if (/[\\n\\r;&|<>`$]/.test(trimmed)) {\n throw new Error(\n `Unsafe shell syntax is not allowed in command: ${command}`,\n );\n }\n const parts = trimmed.split(/\\s+/);\n const executable = parts[0];\n if (!SAFE_PACKAGE_EXECUTABLES.has(executable)) {\n throw new Error(\n `Unsupported app-skill command executable: ${executable}. Use pnpm, npm, bun, or yarn.`,\n );\n }\n return { executable, args: parts.slice(1) };\n}\n\nfunction runShell(command: string, cwd: string): Promise<number> {\n const { executable, args } = parsePackageCommand(command);\n return new Promise((resolve, reject) => {\n const child = spawn(executable, args, {\n cwd,\n env: safeChildEnv(),\n stdio: \"inherit\",\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) {\n reject(new Error(`Command \"${command}\" was terminated by ${signal}.`));\n return;\n }\n resolve(code ?? 1);\n });\n });\n}\n\nfunction openUrl(url: string): void {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args = process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, args, {\n detached: true,\n stdio: \"ignore\",\n shell: process.platform === \"win32\",\n });\n child.unref();\n}\n\nexport async function ensureAppSkill(\n loaded: LoadedAppSkillManifest,\n options: EnsureAppSkillOptions = {},\n): Promise<EnsureAppSkillResult> {\n const manifest = loaded.manifest;\n const mode = options.mode ?? \"hosted\";\n const clients = options.clients ?? resolveClients(\"all\");\n const serverName = options.serverName ?? manifest.mcp.serverName;\n const scope = options.scope ?? \"user\";\n const plan = resolveLaunchPlan(loaded, { mode, serverName });\n const result: EnsureAppSkillResult = {\n mode,\n serverName,\n mcpUrl: plan.mcpUrl,\n clients,\n written: [],\n };\n\n if (options.dryRun) return result;\n\n if (options.confirm && !options.yes) {\n await confirmMcpRegistration(result, loaded.manifest.displayName, scope);\n }\n\n result.written = writeConfigs(\n clients,\n serverName,\n plan.mcpUrl,\n undefined,\n scope,\n options.baseDir ?? process.cwd(),\n );\n options.log?.(\n `Registered ${serverName} for ${clients.join(\", \")} at ${plan.mcpUrl}`,\n );\n return result;\n}\n\nasync function confirmMcpRegistration(\n result: EnsureAppSkillResult,\n displayName: string,\n scope: string,\n): Promise<void> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new Error(\n \"Refusing to register MCP servers from a manifest without confirmation. Re-run with --yes to approve.\",\n );\n }\n const readline = await import(\"node:readline/promises\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n const answer = await rl.question(\n [\n `Register ${displayName} MCP server \"${result.serverName}\"?`,\n ` URL: ${result.mcpUrl}`,\n ` Clients: ${result.clients.join(\", \")}`,\n ` Scope: ${scope}`,\n \"Proceed? [y/N] \",\n ].join(\"\\n\"),\n );\n if (!/^(y|yes)$/i.test(answer.trim())) {\n throw new Error(\"Cancelled app-skill MCP registration.\");\n }\n } finally {\n rl.close();\n }\n}\n\nexport async function launchAppSkill(\n loaded: LoadedAppSkillManifest,\n options: LaunchAppSkillOptions = {},\n): Promise<AppSkillLaunchPlan> {\n const log =\n options.log ?? ((message: string) => process.stdout.write(`${message}\\n`));\n const plan = resolveLaunchPlan(loaded, options);\n\n if (options.dryRun) {\n printPlan(plan, log);\n return plan;\n }\n\n if (plan.mode === \"hosted\") {\n log(`Opening ${loaded.manifest.displayName}: ${plan.url}`);\n openUrl(plan.url);\n return plan;\n }\n\n if (!plan.appDir) throw new Error(\"Local launch plan is missing appDir.\");\n if (!fs.existsSync(path.join(plan.appDir, \"package.json\"))) {\n if (!plan.sourceDir) {\n throw new Error(\n \"Local launch needs bundled app source. Pass --into <path> from a manifest with local.sourcePath.\",\n );\n }\n fs.mkdirSync(path.dirname(plan.appDir), { recursive: true });\n copyDirFiltered(plan.sourceDir, plan.appDir);\n log(`Materialized ${loaded.manifest.displayName} at ${plan.appDir}`);\n } else {\n log(`Using existing local app at ${plan.appDir}`);\n }\n\n if (!options.noRegister) {\n await ensureAppSkill(loaded, {\n mode: \"local\",\n clients: options.clients,\n scope: options.scope,\n serverName: options.serverName,\n baseDir: options.baseDir,\n confirm: options.confirm,\n yes: options.yes,\n log,\n });\n }\n\n if (!options.skipInstall && plan.commands.install) {\n const installCode = await runShell(plan.commands.install, plan.appDir);\n if (installCode !== 0) {\n throw new Error(`Install command failed with exit code ${installCode}.`);\n }\n }\n\n if (plan.commands.dev) {\n const code = await runShell(plan.commands.dev, plan.appDir);\n if (code !== 0) throw new Error(`Dev command exited with code ${code}.`);\n }\n\n return plan;\n}\n\nfunction resolveArgsClients(parsed: ParsedAppSkillArgs): ClientId[] {\n return resolveClients(parsed.client);\n}\n\nexport async function runAppSkill(argv: string[]): Promise<void> {\n try {\n const parsed = parseAppSkillArgs(argv);\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n\n const loaded = loadAppSkillManifest(parsed.manifest);\n const log = (message: string) =>\n (parsed.printJson ? process.stderr : process.stdout).write(\n `${message}\\n`,\n );\n if (parsed.command === \"ensure\") {\n const result = await ensureAppSkill(loaded, {\n mode: parsed.mode,\n clients: resolveArgsClients(parsed),\n scope: parsed.scope,\n serverName: parsed.serverName,\n dryRun: parsed.dryRun,\n confirm: true,\n yes: parsed.yes,\n log,\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else if (parsed.dryRun) {\n process.stdout.write(\n `Would register ${result.serverName} at ${result.mcpUrl} for ${result.clients.join(\", \")}\\n`,\n );\n }\n return;\n }\n\n if (parsed.command === \"launch\") {\n const plan = await launchAppSkill(loaded, {\n mode: parsed.mode,\n into: parsed.into,\n dryRun: parsed.dryRun,\n skipInstall: parsed.skipInstall,\n noRegister: parsed.noRegister,\n clients: resolveArgsClients(parsed),\n scope: parsed.scope,\n serverName: parsed.serverName,\n confirm: true,\n yes: parsed.yes,\n log,\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(plan, null, 2)}\\n`);\n }\n return;\n }\n\n if (parsed.command === \"pack\") {\n if (!parsed.out) {\n throw new Error(\"Missing --out <dir> for app-skill pack.\");\n }\n const result = buildAppSkillPack(loaded, parsed.out);\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n process.stdout.write(\n `Packed ${loaded.manifest.displayName} app skill at ${result.outDir}\\n`,\n );\n }\n }\n } catch (err: any) {\n process.stderr.write(`${err?.message ?? err}\\n`);\n process.exitCode = 1;\n }\n}\n"]}
1
+ {"version":3,"file":"app-skill.js","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native app-skill` packages an agent-native app as a distributable\n * skill bundle: instructions + MCP connector + embeddable app surfaces.\n *\n * The manifest intentionally contains no user secrets. Hosted installs write\n * URL-only MCP entries; clients that need auth complete OAuth/device setup in\n * the host. Local installs point at a developer-owned app process.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\n\nimport { type ClientId, buildHttpMcpEntry } from \"./mcp-config-writers.js\";\nimport { resolveClients, writeConfigs } from \"./connect.js\";\n\nexport type SkillVisibility = \"internal\" | \"exported\" | \"both\";\nexport type AppSkillHostAdapter =\n | \"codex-plugin\"\n | \"claude-marketplace\"\n | \"vercel-skills\"\n | \"plain-skill\"\n | \"claude-skill\"\n | \"chatgpt-mcp\"\n | \"generic-mcp\";\n\nexport interface AppSkillManifestSkill {\n path: string;\n visibility: SkillVisibility;\n exportAs?: string;\n}\n\nexport interface AppSkillSurface {\n id: string;\n action?: string;\n path: string;\n mediaTypes?: string[];\n defaultMediaType?: string;\n}\n\nexport interface AppSkillManifest {\n schemaVersion: 1;\n id: string;\n displayName: string;\n description: string;\n /**\n * Optional semver base for generated plugin manifests. Codex keys its plugin\n * cache on the version string, so the packer appends a content hash to this\n * base; leave it unset to default to \"1.0.0\".\n */\n version?: string;\n hosted: {\n url: string;\n mcpUrl: string;\n };\n mcp: {\n serverName: string;\n };\n local?: {\n template?: string;\n sourcePath?: string;\n defaultUrl?: string;\n commands?: {\n install?: string;\n dev?: string;\n start?: string;\n };\n };\n auth?: {\n mode?: \"oauth\" | \"device\" | \"none\";\n setup?: string;\n };\n surfaces: AppSkillSurface[];\n skills: AppSkillManifestSkill[];\n hostAdapters: AppSkillHostAdapter[];\n}\n\nexport interface LoadedAppSkillManifest {\n manifest: AppSkillManifest;\n file: string;\n dir: string;\n}\n\nexport interface ParsedAppSkillArgs {\n command: \"ensure\" | \"launch\" | \"pack\" | \"help\";\n manifest?: string;\n client: string;\n scope: string;\n serverName?: string;\n out?: string;\n into?: string;\n mode: \"hosted\" | \"local\";\n dryRun: boolean;\n skipInstall: boolean;\n noRegister: boolean;\n printJson: boolean;\n yes: boolean;\n}\n\nexport interface EnsureAppSkillOptions {\n mode?: \"hosted\" | \"local\";\n clients?: ClientId[];\n scope?: string;\n serverName?: string;\n baseDir?: string;\n dryRun?: boolean;\n confirm?: boolean;\n yes?: boolean;\n log?: (message: string) => void;\n}\n\nexport interface EnsureAppSkillResult {\n mode: \"hosted\" | \"local\";\n serverName: string;\n mcpUrl: string;\n clients: ClientId[];\n written: { client: ClientId; file: string }[];\n}\n\nexport interface LaunchAppSkillOptions {\n mode?: \"hosted\" | \"local\";\n into?: string;\n dryRun?: boolean;\n skipInstall?: boolean;\n noRegister?: boolean;\n clients?: ClientId[];\n scope?: string;\n serverName?: string;\n baseDir?: string;\n confirm?: boolean;\n yes?: boolean;\n log?: (message: string) => void;\n}\n\nexport interface AppSkillLaunchPlan {\n mode: \"hosted\" | \"local\";\n appId: string;\n appDir?: string;\n sourceDir?: string;\n url: string;\n mcpUrl: string;\n serverName: string;\n commands: {\n install?: string;\n dev?: string;\n start?: string;\n };\n}\n\nconst HELP = `agent-native app-skill\n\nUsage:\n agent-native app-skill ensure [--manifest <file>] [--hosted|--local] [--client all|codex|claude-code|claude-code-cli|cowork] [--scope user|project] [--name <server>] [--yes] [--dry-run] [--json]\n agent-native app-skill launch [--manifest <file>] [--local|--hosted] [--into <path>] [--client <client>] [--scope user|project] [--name <server>] [--no-register] [--skip-install] [--yes] [--dry-run] [--json]\n agent-native app-skill pack [--manifest <file>] --out <dir> [--json]\n\nCommands:\n ensure Register the app skill MCP connector for your local agent clients.\n launch Open the hosted app, or materialize and start a local editable app.\n pack Create marketplace-ready skill, MCP, Codex/Claude plugin, and Vercel skills adapters.\n\nHosted is the default. Use --local when you want editable source, offline work,\nor a privacy-sensitive local app instance.`;\n\nconst APP_SKILL_COMMANDS = new Set([\"ensure\", \"launch\", \"pack\"]);\nconst APP_SKILL_SCOPES = new Set([\"user\", \"project\"]);\nconst SAFE_PACKAGE_EXECUTABLES = new Set([\"pnpm\", \"npm\", \"bun\", \"yarn\"]);\nconst SAFE_ENV_KEYS = [\n \"PATH\",\n \"HOME\",\n \"USER\",\n \"SHELL\",\n \"TMPDIR\",\n \"TEMP\",\n \"TMP\",\n \"TERM\",\n \"CI\",\n \"PNPM_HOME\",\n \"COREPACK_HOME\",\n \"SystemRoot\",\n \"ComSpec\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction stringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\");\n}\n\nfunction normalizeOriginUrl(value: string, field: string): string {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new Error(`${field} must be a valid URL.`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`${field} must use http:// or https://.`);\n }\n return `${url.origin}${url.pathname}`.replace(/\\/+$/, \"\");\n}\n\nfunction withMcpPath(baseUrl: string): string {\n return `${baseUrl.replace(/\\/+$/, \"\")}/_agent-native/mcp`;\n}\n\nfunction normalizeSkillVisibility(value: unknown): SkillVisibility {\n if (value === \"internal\" || value === \"exported\" || value === \"both\") {\n return value;\n }\n return \"both\";\n}\n\nfunction normalizeHostAdapter(value: unknown): AppSkillHostAdapter | null {\n if (\n value === \"codex-plugin\" ||\n value === \"claude-marketplace\" ||\n value === \"vercel-skills\" ||\n value === \"plain-skill\" ||\n value === \"claude-skill\" ||\n value === \"chatgpt-mcp\" ||\n value === \"generic-mcp\"\n ) {\n return value;\n }\n return null;\n}\n\nfunction defaultHostAdapters(): AppSkillHostAdapter[] {\n return [\n \"codex-plugin\",\n \"claude-marketplace\",\n \"vercel-skills\",\n \"plain-skill\",\n \"claude-skill\",\n \"chatgpt-mcp\",\n \"generic-mcp\",\n ];\n}\n\nfunction uniqueAdapters(values: AppSkillHostAdapter[]): AppSkillHostAdapter[] {\n const seen = new Set<AppSkillHostAdapter>();\n return values.filter((value) => {\n if (seen.has(value)) return false;\n seen.add(value);\n return true;\n });\n}\n\nexport function normalizeAppSkillManifest(raw: unknown): AppSkillManifest {\n if (!isRecord(raw)) throw new Error(\"App skill manifest must be an object.\");\n const schemaVersion = raw.schemaVersion ?? 1;\n if (schemaVersion !== 1) {\n throw new Error(`Unsupported app skill schemaVersion: ${schemaVersion}`);\n }\n\n const id = stringValue(raw.id);\n if (!id || !/^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/.test(id)) {\n throw new Error(\n \"App skill manifest id must be kebab-case and 2-64 characters.\",\n );\n }\n\n const hostedRaw = isRecord(raw.hosted) ? raw.hosted : {};\n const hostedUrl = normalizeOriginUrl(\n stringValue(hostedRaw.url) ?? \"\",\n \"hosted.url\",\n );\n const hostedMcpUrl = normalizeOriginUrl(\n stringValue(hostedRaw.mcpUrl) ?? withMcpPath(hostedUrl),\n \"hosted.mcpUrl\",\n );\n\n const mcpRaw = isRecord(raw.mcp) ? raw.mcp : {};\n const localRaw = isRecord(raw.local) ? raw.local : undefined;\n const commandsRaw = isRecord(localRaw?.commands)\n ? localRaw.commands\n : undefined;\n const surfacesRaw = Array.isArray(raw.surfaces) ? raw.surfaces : [];\n const skillsRaw = Array.isArray(raw.skills) ? raw.skills : [];\n const adaptersRaw = Array.isArray(raw.hostAdapters) ? raw.hostAdapters : [];\n const authRaw = isRecord(raw.auth) ? raw.auth : undefined;\n\n const adapters = uniqueAdapters(\n adaptersRaw\n .map(normalizeHostAdapter)\n .filter((value): value is AppSkillHostAdapter => Boolean(value)),\n );\n\n return {\n schemaVersion: 1,\n id,\n displayName: stringValue(raw.displayName) ?? id,\n description:\n stringValue(raw.description) ??\n `Agent-native app-backed skill for ${id}.`,\n ...(stringValue(raw.version) ? { version: stringValue(raw.version) } : {}),\n hosted: {\n url: hostedUrl,\n mcpUrl: hostedMcpUrl,\n },\n mcp: {\n serverName: stringValue(mcpRaw.serverName) ?? `agent-native-${id}`,\n },\n ...(localRaw\n ? {\n local: {\n ...(stringValue(localRaw.template)\n ? { template: stringValue(localRaw.template) }\n : {}),\n ...(stringValue(localRaw.sourcePath)\n ? { sourcePath: stringValue(localRaw.sourcePath) }\n : {}),\n ...(stringValue(localRaw.defaultUrl)\n ? {\n defaultUrl: normalizeOriginUrl(\n stringValue(localRaw.defaultUrl)!,\n \"local.defaultUrl\",\n ),\n }\n : {}),\n commands: {\n install: stringValue(commandsRaw?.install) ?? \"pnpm install\",\n dev: stringValue(commandsRaw?.dev) ?? \"pnpm dev\",\n start: stringValue(commandsRaw?.start) ?? \"pnpm start\",\n },\n },\n }\n : {}),\n ...(authRaw\n ? {\n auth: {\n ...(authRaw.mode === \"oauth\" ||\n authRaw.mode === \"device\" ||\n authRaw.mode === \"none\"\n ? { mode: authRaw.mode }\n : {}),\n ...(stringValue(authRaw.setup)\n ? { setup: stringValue(authRaw.setup) }\n : {}),\n },\n }\n : {}),\n surfaces: surfacesRaw.filter(isRecord).map((surface) => ({\n id: stringValue(surface.id) ?? \"app\",\n ...(stringValue(surface.action)\n ? { action: stringValue(surface.action) }\n : {}),\n path: stringValue(surface.path) ?? \"/\",\n mediaTypes: stringArray(surface.mediaTypes),\n ...(stringValue(surface.defaultMediaType)\n ? { defaultMediaType: stringValue(surface.defaultMediaType) }\n : {}),\n })),\n skills: skillsRaw\n .filter(isRecord)\n .map((skill) => ({\n path: stringValue(skill.path) ?? \"\",\n visibility: normalizeSkillVisibility(skill.visibility),\n ...(stringValue(skill.exportAs)\n ? { exportAs: stringValue(skill.exportAs) }\n : {}),\n }))\n .filter((skill) => skill.path),\n hostAdapters: adapters.length ? adapters : defaultHostAdapters(),\n };\n}\n\nexport function findAppSkillManifest(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"agent-native.app-skill.json\");\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n throw new Error(\n \"Could not find agent-native.app-skill.json. Pass --manifest <file>.\",\n );\n}\n\nexport function loadAppSkillManifest(file?: string): LoadedAppSkillManifest {\n const resolved = path.resolve(file ?? findAppSkillManifest());\n const raw = JSON.parse(fs.readFileSync(resolved, \"utf-8\"));\n return {\n manifest: normalizeAppSkillManifest(raw),\n file: resolved,\n dir: path.dirname(resolved),\n };\n}\n\nexport function exportedSkills(\n manifest: AppSkillManifest,\n): AppSkillManifestSkill[] {\n return manifest.skills.filter(\n (skill) => skill.visibility === \"exported\" || skill.visibility === \"both\",\n );\n}\n\nexport function internalSkills(\n manifest: AppSkillManifest,\n): AppSkillManifestSkill[] {\n return manifest.skills.filter(\n (skill) => skill.visibility === \"internal\" || skill.visibility === \"both\",\n );\n}\n\nexport function parseAppSkillArgs(argv: string[]): ParsedAppSkillArgs {\n const first = argv[0];\n let command: ParsedAppSkillArgs[\"command\"] = \"ensure\";\n let args = argv;\n if (first === \"help\" || first === \"--help\" || first === \"-h\") {\n command = \"help\";\n args = argv.slice(1);\n } else if (APP_SKILL_COMMANDS.has(first ?? \"\")) {\n command = first as ParsedAppSkillArgs[\"command\"];\n args = argv.slice(1);\n } else if (first && !first.startsWith(\"-\") && !looksLikeManifestArg(first)) {\n throw new Error(`Unknown app-skill command: ${first}`);\n }\n const out: ParsedAppSkillArgs = {\n command,\n client: \"all\",\n scope: \"user\",\n mode: \"hosted\",\n dryRun: false,\n skipInstall: false,\n noRegister: false,\n printJson: false,\n yes: false,\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(\"--manifest\")) !== undefined) out.manifest = value;\n else if ((value = eat(\"--client\")) !== undefined) out.client = value;\n else if ((value = eat(\"--scope\")) !== undefined) out.scope = value;\n else if ((value = eat(\"--name\")) !== undefined) out.serverName = value;\n else if ((value = eat(\"--server-name\")) !== undefined)\n out.serverName = value;\n else if ((value = eat(\"--out\")) !== undefined) out.out = value;\n else if ((value = eat(\"--into\")) !== undefined) out.into = value;\n else if (arg === \"--local\") out.mode = \"local\";\n else if (arg === \"--hosted\") out.mode = \"hosted\";\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--skip-install\" || arg === \"--no-install\")\n out.skipInstall = true;\n else if (arg === \"--no-register\") out.noRegister = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--yes\" || arg === \"-y\") out.yes = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.manifest) out.manifest = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (!APP_SKILL_SCOPES.has(out.scope)) {\n throw new Error(\"--scope must be either user or project.\");\n }\n\n return out;\n}\n\nfunction looksLikeManifestArg(value: string): boolean {\n return (\n value.endsWith(\".json\") ||\n value.includes(\"/\") ||\n value.includes(\"\\\\\") ||\n fs.existsSync(value)\n );\n}\n\nfunction assertPathInside(root: string, target: string, field: string): string {\n const resolvedRoot = path.resolve(root);\n const resolvedTarget = path.resolve(target);\n const relative = path.relative(resolvedRoot, resolvedTarget);\n if (relative && (relative.startsWith(\"..\") || path.isAbsolute(relative))) {\n throw new Error(`${field} must resolve inside ${resolvedRoot}.`);\n }\n return resolvedTarget;\n}\n\nfunction resolveSkillSource(manifestDir: string, skill: AppSkillManifestSkill) {\n if (path.isAbsolute(skill.path)) {\n throw new Error(`Skill path must be relative: ${skill.path}`);\n }\n return assertPathInside(\n manifestDir,\n path.resolve(manifestDir, skill.path),\n `Skill path ${skill.path}`,\n );\n}\n\nfunction skillExportName(skill: AppSkillManifestSkill): string {\n if (skill.exportAs) {\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(skill.exportAs)) {\n throw new Error(`Invalid skill export name: ${skill.exportAs}`);\n }\n return skill.exportAs;\n }\n const normalized = skill.path.replace(/\\/+$/, \"\");\n return path.basename(normalized);\n}\n\nfunction copyDirFiltered(source: string, dest: string): void {\n const sourceRoot = path.resolve(source);\n const destRoot = path.resolve(dest);\n const relativeDest = path.relative(sourceRoot, destRoot);\n const outputRootInsideSource =\n relativeDest &&\n !relativeDest.startsWith(\"..\") &&\n !path.isAbsolute(relativeDest)\n ? path.join(sourceRoot, relativeDest.split(path.sep)[0])\n : destRoot;\n fs.cpSync(source, dest, {\n recursive: true,\n filter: (src) => {\n const resolved = path.resolve(src);\n if (\n resolved === outputRootInsideSource ||\n resolved.startsWith(`${outputRootInsideSource}${path.sep}`)\n ) {\n return false;\n }\n const base = path.basename(src);\n const lower = base.toLowerCase();\n return (\n base !== \"node_modules\" &&\n base !== \".git\" &&\n base !== \"dist\" &&\n base !== \".output\" &&\n base !== \".react-router\" &&\n base !== \".netlify\" &&\n base !== \"secrets\" &&\n base !== \"private\" &&\n !base.startsWith(\".env\") &&\n base !== \".dev.vars\" &&\n base !== \".npmrc\" &&\n !lower.endsWith(\".db\") &&\n !lower.endsWith(\".sqlite\") &&\n !lower.endsWith(\".sqlite3\") &&\n !lower.endsWith(\".pem\") &&\n !lower.endsWith(\".key\") &&\n !lower.endsWith(\".crt\") &&\n !lower.endsWith(\".p12\")\n );\n },\n });\n}\n\nfunction copySkill(\n manifestDir: string,\n skill: AppSkillManifestSkill,\n destRoot: string,\n): string {\n const source = resolveSkillSource(manifestDir, skill);\n const exportName = skillExportName(skill);\n const dest = path.join(destRoot, exportName);\n if (!fs.existsSync(source)) {\n throw new Error(`Exported skill source not found: ${source}`);\n }\n fs.mkdirSync(destRoot, { recursive: true });\n const stat = fs.statSync(source);\n if (stat.isDirectory()) {\n copyDirFiltered(source, dest);\n } else {\n fs.mkdirSync(dest, { recursive: true });\n fs.copyFileSync(source, path.join(dest, \"SKILL.md\"));\n }\n rewriteSkillFrontmatterName(path.join(dest, \"SKILL.md\"), exportName);\n return dest;\n}\n\nfunction rewriteSkillFrontmatterName(file: string, name: string): void {\n if (!fs.existsSync(file)) return;\n const source = fs.readFileSync(file, \"utf-8\");\n const lines = source.split(\"\\n\");\n if (lines[0]?.trim() !== \"---\") return;\n const end = lines.findIndex(\n (line, index) => index > 0 && line.trim() === \"---\",\n );\n if (end <= 0) return;\n const nameIndex = lines.findIndex(\n (line, index) => index > 0 && index < end && /^name\\s*:/.test(line),\n );\n if (nameIndex === -1) {\n lines.splice(1, 0, `name: ${name}`);\n } else {\n lines[nameIndex] = `name: ${name}`;\n }\n fs.writeFileSync(file, lines.join(\"\\n\"), \"utf-8\");\n}\n\nfunction writeJson(file: string, value: unknown): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(value, null, 2) + \"\\n\", \"utf-8\");\n}\n\nfunction mcpServerConfig(manifest: AppSkillManifest, serverName?: string) {\n return {\n mcpServers: {\n [serverName ?? manifest.mcp.serverName]: buildHttpMcpEntry(\n manifest.hosted.mcpUrl,\n ),\n },\n };\n}\n\nfunction pluginName(manifest: AppSkillManifest): string {\n return `agent-native-${manifest.id}`;\n}\n\nfunction claudeMarketplaceName(): string {\n return \"agent-native-apps\";\n}\n\nexport function exportedSkillContentHash(\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n manifest: AppSkillManifest,\n): string {\n const parts = skills\n .map((skill) => {\n const file = path.join(manifestDir, skill.path, \"SKILL.md\");\n const body = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n return `${skillExportName(skill)}\\n${body}`;\n })\n .sort();\n parts.push(`mcp:${manifest.hosted.mcpUrl}`);\n return createHash(\"sha256\")\n .update(parts.join(\"\\n\u0000\\n\"))\n .digest(\"hex\")\n .slice(0, 12);\n}\n\n/**\n * Plugin version embeds a content hash of the exported skills + MCP endpoint.\n * Codex keys its plugin cache on the version string, so a changed skill or MCP\n * URL yields a new version and `codex plugin marketplace upgrade` (which runs\n * on startup) delivers the update automatically — no manual semver bump per\n * edit. Claude Code uses commit-SHA versioning instead (plugin.json omits\n * version), so it auto-updates on every push.\n */\nexport function resolvePluginVersion(\n manifest: AppSkillManifest,\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n): string {\n const base = manifest.version ?? \"1.0.0\";\n return `${base}+codex.${exportedSkillContentHash(manifestDir, skills, manifest)}`;\n}\n\nfunction writeCodexPluginAdapter(\n manifest: AppSkillManifest,\n outDir: string,\n version: string,\n): void {\n const name = pluginName(manifest);\n writeJson(path.join(outDir, \".codex-plugin\", \"plugin.json\"), {\n name,\n version,\n description: manifest.description,\n author: {\n name: \"Agent-Native\",\n url: \"https://agent-native.com\",\n },\n homepage: manifest.hosted.url,\n license: \"MIT\",\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n skills: \"./skills/\",\n mcpServers: \"./.mcp.json\",\n interface: {\n displayName: manifest.displayName,\n shortDescription: manifest.description,\n longDescription:\n `${manifest.displayName} packages agent instructions, app actions, ` +\n \"an MCP connector, and inline UI surfaces as an installable skill.\",\n developerName: \"Agent-Native\",\n category: \"Productivity\",\n capabilities: [\"Interactive\", \"Read\", \"Write\"],\n websiteURL: manifest.hosted.url,\n defaultPrompt: [\n `Open ${manifest.displayName} where useful`,\n `Use ${manifest.displayName} for app-backed workflows`,\n `Search ${manifest.displayName} and return usable context`,\n ],\n brandColor: \"#2563EB\",\n },\n });\n writeJson(path.join(outDir, \".mcp.json\"), mcpServerConfig(manifest));\n}\n\nfunction writeClaudeMarketplaceAdapter(\n manifest: AppSkillManifest,\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n): void {\n const adapterDir = path.join(outDir, \"adapters\", \"claude-marketplace\");\n const name = pluginName(manifest);\n const marketplaceName = claudeMarketplaceName();\n const pluginDir = path.join(adapterDir, \"plugins\", name);\n const skillRoot = path.join(pluginDir, \"skills\");\n\n for (const skill of skills) copySkill(manifestDir, skill, skillRoot);\n\n writeJson(path.join(adapterDir, \".claude-plugin\", \"marketplace.json\"), {\n name: marketplaceName,\n description:\n \"Agent-Native app-backed skills that bundle instructions, MCP connectors, and UI surfaces.\",\n owner: {\n name: \"Agent-Native\",\n },\n plugins: [\n {\n name,\n displayName: manifest.displayName,\n description: manifest.description,\n source: `./plugins/${name}`,\n autoUpdate: true,\n homepage: manifest.hosted.url,\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n },\n ],\n });\n\n writeJson(path.join(pluginDir, \".claude-plugin\", \"plugin.json\"), {\n name,\n displayName: manifest.displayName,\n description: manifest.description,\n author: {\n name: \"Agent-Native\",\n url: \"https://agent-native.com\",\n },\n homepage: manifest.hosted.url,\n repository: \"https://github.com/BuilderIO/agent-native\",\n license: \"MIT\",\n keywords: [\n \"agent-native\",\n manifest.id,\n \"mcp\",\n \"skills\",\n \"app-backed-skill\",\n ],\n skills: \"./skills/\",\n mcpServers: \"./.mcp.json\",\n });\n writeJson(path.join(pluginDir, \".mcp.json\"), mcpServerConfig(manifest));\n fs.writeFileSync(\n path.join(adapterDir, \"README.md\"),\n [\n `# ${manifest.displayName} Claude Code Marketplace`,\n \"\",\n \"Install this local marketplace from Claude Code:\",\n \"\",\n \"```text\",\n `/plugin marketplace add ./dist/${manifest.id}-skill/adapters/claude-marketplace`,\n `/plugin install ${name}@${marketplaceName}`,\n \"/reload-plugins\",\n \"/mcp\",\n \"```\",\n \"\",\n \"Authenticate the MCP connector from `/mcp` after installation. The plugin ships a URL-only MCP config, so no shared secrets are stored in the marketplace package.\",\n \"\",\n \"For a published marketplace repo, point `/plugin marketplace add` at the repository URL instead of the local folder.\",\n \"\",\n ].join(\"\\n\"),\n \"utf-8\",\n );\n}\n\nfunction writeMcpAdapter(\n manifest: AppSkillManifest,\n outDir: string,\n adapter: \"generic-mcp\" | \"chatgpt-mcp\",\n): void {\n const dir = path.join(outDir, \"adapters\", adapter);\n if (adapter === \"generic-mcp\") {\n writeJson(path.join(dir, \"mcp.json\"), mcpServerConfig(manifest));\n return;\n }\n writeJson(path.join(dir, \"connector.json\"), {\n name: manifest.mcp.serverName,\n title: manifest.displayName,\n url: manifest.hosted.mcpUrl,\n auth: manifest.auth?.mode ?? \"oauth\",\n surfaces: manifest.surfaces,\n });\n}\n\nfunction copySkillAdapter(\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n adapter: \"plain-skill\" | \"claude-skill\" | \"vercel-skills\",\n): void {\n const skillRoot = path.join(outDir, \"adapters\", adapter, \"skills\");\n for (const skill of skills) copySkill(manifestDir, skill, skillRoot);\n}\n\nfunction writeVercelSkillsAdapter(\n manifest: AppSkillManifest,\n manifestDir: string,\n skills: AppSkillManifestSkill[],\n outDir: string,\n): void {\n const adapterDir = path.join(outDir, \"adapters\", \"vercel-skills\");\n copySkillAdapter(manifestDir, skills, outDir, \"vercel-skills\");\n fs.writeFileSync(\n path.join(adapterDir, \"README.md\"),\n [\n `# ${manifest.displayName} Skills`,\n \"\",\n \"Install instructions only with the Vercel Labs/open skills CLI:\",\n \"\",\n \"```bash\",\n `npx skills add . --skill ${skills.map(skillExportName).join(\" --skill \")} -a codex`,\n \"```\",\n \"\",\n \"Then register the app-backed MCP connector:\",\n \"\",\n \"```bash\",\n `npx @agent-native/core@latest app-skill ensure --manifest agent-native.app-skill.json --yes`,\n \"```\",\n \"\",\n \"The open skills CLI installs instruction files only; it does not run postinstall scripts or register MCP connectors. OAuth or device setup happens in the MCP host; secrets are not stored in skills.\",\n \"\",\n ].join(\"\\n\"),\n \"utf-8\",\n );\n writeJson(path.join(adapterDir, \"agent-native.app-skill.json\"), manifest);\n}\n\nexport interface AppSkillPackResult {\n outDir: string;\n exportedSkillNames: string[];\n files: string[];\n}\n\nexport function buildAppSkillPack(\n loaded: LoadedAppSkillManifest,\n outDir: string,\n): AppSkillPackResult {\n const manifest = loaded.manifest;\n const target = path.resolve(outDir);\n const skills = exportedSkills(manifest);\n if (skills.length === 0) {\n throw new Error(\"Manifest has no exported or both-visibility skills.\");\n }\n const pluginVersion = resolvePluginVersion(manifest, loaded.dir, skills);\n\n fs.mkdirSync(target, { recursive: true });\n const appSource = resolveLocalSourceDir(loaded);\n const packedManifest: AppSkillManifest = appSource\n ? {\n ...manifest,\n local: {\n ...(manifest.local ?? {}),\n sourcePath: \"./app\",\n commands: manifest.local?.commands ?? {\n install: \"pnpm install\",\n dev: \"pnpm dev\",\n start: \"pnpm start\",\n },\n },\n }\n : manifest;\n writeJson(path.join(target, \"agent-native.app-skill.json\"), packedManifest);\n if (appSource) {\n copyDirFiltered(appSource, path.join(target, \"app\"));\n }\n const exportedSkillNames = skills.map(skillExportName);\n for (const skill of skills)\n copySkill(loaded.dir, skill, path.join(target, \"skills\"));\n\n const files: string[] = [\n path.join(target, \"agent-native.app-skill.json\"),\n ...(appSource ? [path.join(target, \"app\")] : []),\n ...exportedSkillNames.map((name) =>\n path.join(target, \"skills\", name, \"SKILL.md\"),\n ),\n ];\n\n if (manifest.hostAdapters.includes(\"codex-plugin\")) {\n writeCodexPluginAdapter(manifest, target, pluginVersion);\n files.push(\n path.join(target, \".codex-plugin\", \"plugin.json\"),\n path.join(target, \".mcp.json\"),\n );\n }\n if (manifest.hostAdapters.includes(\"claude-marketplace\")) {\n writeClaudeMarketplaceAdapter(manifest, loaded.dir, skills, target);\n files.push(\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \".claude-plugin\",\n \"marketplace.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \".claude-plugin\",\n \"plugin.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \".mcp.json\",\n ),\n path.join(\n target,\n \"adapters\",\n \"claude-marketplace\",\n \"plugins\",\n pluginName(manifest),\n \"skills\",\n ),\n path.join(target, \"adapters\", \"claude-marketplace\", \"README.md\"),\n );\n }\n if (manifest.hostAdapters.includes(\"vercel-skills\")) {\n writeVercelSkillsAdapter(manifest, loaded.dir, skills, target);\n files.push(\n path.join(target, \"adapters\", \"vercel-skills\", \"skills\"),\n path.join(target, \"adapters\", \"vercel-skills\", \"README.md\"),\n path.join(\n target,\n \"adapters\",\n \"vercel-skills\",\n \"agent-native.app-skill.json\",\n ),\n );\n }\n if (manifest.hostAdapters.includes(\"plain-skill\")) {\n copySkillAdapter(loaded.dir, skills, target, \"plain-skill\");\n files.push(path.join(target, \"adapters\", \"plain-skill\", \"skills\"));\n }\n if (manifest.hostAdapters.includes(\"claude-skill\")) {\n copySkillAdapter(loaded.dir, skills, target, \"claude-skill\");\n files.push(path.join(target, \"adapters\", \"claude-skill\", \"skills\"));\n }\n if (manifest.hostAdapters.includes(\"generic-mcp\")) {\n writeMcpAdapter(manifest, target, \"generic-mcp\");\n files.push(path.join(target, \"adapters\", \"generic-mcp\", \"mcp.json\"));\n }\n if (manifest.hostAdapters.includes(\"chatgpt-mcp\")) {\n writeMcpAdapter(manifest, target, \"chatgpt-mcp\");\n files.push(path.join(target, \"adapters\", \"chatgpt-mcp\", \"connector.json\"));\n }\n\n return { outDir: target, exportedSkillNames, files };\n}\n\nfunction appSkillCacheDir(appId: string): string {\n return path.join(os.homedir(), \".agent-native\", \"app-skills\", appId, \"app\");\n}\n\nfunction resolveLocalSourceDir(\n loaded: LoadedAppSkillManifest,\n): string | undefined {\n const local = loaded.manifest.local;\n if (local?.sourcePath) {\n if (path.isAbsolute(local.sourcePath)) {\n throw new Error(\"local.sourcePath must be relative to the manifest.\");\n }\n const source = assertPathInside(\n loaded.dir,\n path.resolve(loaded.dir, local.sourcePath),\n \"local.sourcePath\",\n );\n if (fs.existsSync(source)) return source;\n throw new Error(\n `local.sourcePath \"${local.sourcePath}\" does not exist. ` +\n \"Run pack from the directory containing the app source.\",\n );\n }\n if (local?.template) {\n if (!/^[a-z0-9][a-z0-9-]*$/i.test(local.template)) {\n throw new Error(\"local.template must be a direct template name.\");\n }\n const repoTemplate = path.resolve(\n process.cwd(),\n \"templates\",\n local.template,\n );\n if (fs.existsSync(repoTemplate)) return repoTemplate;\n }\n return undefined;\n}\n\nexport function resolveLaunchPlan(\n loaded: LoadedAppSkillManifest,\n options: LaunchAppSkillOptions = {},\n): AppSkillLaunchPlan {\n const manifest = loaded.manifest;\n const mode = options.mode ?? \"hosted\";\n const serverName = options.serverName ?? manifest.mcp.serverName;\n if (mode === \"hosted\") {\n return {\n mode,\n appId: manifest.id,\n url: manifest.hosted.url,\n mcpUrl: manifest.hosted.mcpUrl,\n serverName,\n commands: {},\n };\n }\n\n const defaultUrl = manifest.local?.defaultUrl ?? \"http://127.0.0.1:8100\";\n const appDir = path.resolve(options.into ?? appSkillCacheDir(manifest.id));\n return {\n mode,\n appId: manifest.id,\n appDir,\n sourceDir: resolveLocalSourceDir(loaded),\n url: defaultUrl,\n mcpUrl: withMcpPath(defaultUrl),\n serverName,\n commands: manifest.local?.commands ?? {\n install: \"pnpm install\",\n dev: \"pnpm dev\",\n start: \"pnpm start\",\n },\n };\n}\n\nfunction printPlan(plan: AppSkillLaunchPlan, log: (message: string) => void) {\n log(` App: ${plan.appId}`);\n log(` Mode: ${plan.mode}`);\n log(` URL: ${plan.url}`);\n log(` MCP URL: ${plan.mcpUrl}`);\n log(` Server: ${plan.serverName}`);\n if (plan.appDir) log(` App dir: ${plan.appDir}`);\n if (plan.sourceDir) log(` Source: ${plan.sourceDir}`);\n if (plan.commands.install) log(` Install: ${plan.commands.install}`);\n if (plan.commands.dev) log(` Dev: ${plan.commands.dev}`);\n}\n\nfunction safeChildEnv(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {};\n for (const key of SAFE_ENV_KEYS) {\n const value = process.env[key];\n if (value !== undefined) env[key] = value;\n }\n return env;\n}\n\nfunction parsePackageCommand(command: string): {\n executable: string;\n args: string[];\n} {\n const trimmed = command.trim();\n if (!trimmed) throw new Error(\"Command cannot be empty.\");\n if (/[\\n\\r;&|<>`$]/.test(trimmed)) {\n throw new Error(\n `Unsafe shell syntax is not allowed in command: ${command}`,\n );\n }\n const parts = trimmed.split(/\\s+/);\n const executable = parts[0];\n if (!SAFE_PACKAGE_EXECUTABLES.has(executable)) {\n throw new Error(\n `Unsupported app-skill command executable: ${executable}. Use pnpm, npm, bun, or yarn.`,\n );\n }\n return { executable, args: parts.slice(1) };\n}\n\nfunction runShell(command: string, cwd: string): Promise<number> {\n const { executable, args } = parsePackageCommand(command);\n return new Promise((resolve, reject) => {\n const child = spawn(executable, args, {\n cwd,\n env: safeChildEnv(),\n stdio: \"inherit\",\n });\n child.on(\"error\", reject);\n child.on(\"exit\", (code, signal) => {\n if (signal) {\n reject(new Error(`Command \"${command}\" was terminated by ${signal}.`));\n return;\n }\n resolve(code ?? 1);\n });\n });\n}\n\nfunction openUrl(url: string): void {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args = process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, args, {\n detached: true,\n stdio: \"ignore\",\n shell: process.platform === \"win32\",\n });\n child.unref();\n}\n\nexport async function ensureAppSkill(\n loaded: LoadedAppSkillManifest,\n options: EnsureAppSkillOptions = {},\n): Promise<EnsureAppSkillResult> {\n const manifest = loaded.manifest;\n const mode = options.mode ?? \"hosted\";\n const clients = options.clients ?? resolveClients(\"all\");\n const serverName = options.serverName ?? manifest.mcp.serverName;\n const scope = options.scope ?? \"user\";\n const plan = resolveLaunchPlan(loaded, { mode, serverName });\n const result: EnsureAppSkillResult = {\n mode,\n serverName,\n mcpUrl: plan.mcpUrl,\n clients,\n written: [],\n };\n\n if (options.dryRun) return result;\n\n if (options.confirm && !options.yes) {\n await confirmMcpRegistration(result, loaded.manifest.displayName, scope);\n }\n\n result.written = writeConfigs(\n clients,\n serverName,\n plan.mcpUrl,\n undefined,\n scope,\n options.baseDir ?? process.cwd(),\n );\n options.log?.(\n `Registered ${serverName} for ${clients.join(\", \")} at ${plan.mcpUrl}`,\n );\n return result;\n}\n\nasync function confirmMcpRegistration(\n result: EnsureAppSkillResult,\n displayName: string,\n scope: string,\n): Promise<void> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new Error(\n \"Refusing to register MCP servers from a manifest without confirmation. Re-run with --yes to approve.\",\n );\n }\n const readline = await import(\"node:readline/promises\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n const answer = await rl.question(\n [\n `Register ${displayName} MCP server \"${result.serverName}\"?`,\n ` URL: ${result.mcpUrl}`,\n ` Clients: ${result.clients.join(\", \")}`,\n ` Scope: ${scope}`,\n \"Proceed? [y/N] \",\n ].join(\"\\n\"),\n );\n if (!/^(y|yes)$/i.test(answer.trim())) {\n throw new Error(\"Cancelled app-skill MCP registration.\");\n }\n } finally {\n rl.close();\n }\n}\n\nexport async function launchAppSkill(\n loaded: LoadedAppSkillManifest,\n options: LaunchAppSkillOptions = {},\n): Promise<AppSkillLaunchPlan> {\n const log =\n options.log ?? ((message: string) => process.stdout.write(`${message}\\n`));\n const plan = resolveLaunchPlan(loaded, options);\n\n if (options.dryRun) {\n printPlan(plan, log);\n return plan;\n }\n\n if (plan.mode === \"hosted\") {\n log(`Opening ${loaded.manifest.displayName}: ${plan.url}`);\n openUrl(plan.url);\n return plan;\n }\n\n if (!plan.appDir) throw new Error(\"Local launch plan is missing appDir.\");\n if (!fs.existsSync(path.join(plan.appDir, \"package.json\"))) {\n if (!plan.sourceDir) {\n throw new Error(\n \"Local launch needs bundled app source. Pass --into <path> from a manifest with local.sourcePath.\",\n );\n }\n fs.mkdirSync(path.dirname(plan.appDir), { recursive: true });\n copyDirFiltered(plan.sourceDir, plan.appDir);\n log(`Materialized ${loaded.manifest.displayName} at ${plan.appDir}`);\n } else {\n log(`Using existing local app at ${plan.appDir}`);\n }\n\n if (!options.noRegister) {\n await ensureAppSkill(loaded, {\n mode: \"local\",\n clients: options.clients,\n scope: options.scope,\n serverName: options.serverName,\n baseDir: options.baseDir,\n confirm: options.confirm,\n yes: options.yes,\n log,\n });\n }\n\n if (!options.skipInstall && plan.commands.install) {\n const installCode = await runShell(plan.commands.install, plan.appDir);\n if (installCode !== 0) {\n throw new Error(`Install command failed with exit code ${installCode}.`);\n }\n }\n\n if (plan.commands.dev) {\n const code = await runShell(plan.commands.dev, plan.appDir);\n if (code !== 0) throw new Error(`Dev command exited with code ${code}.`);\n }\n\n return plan;\n}\n\nfunction resolveArgsClients(parsed: ParsedAppSkillArgs): ClientId[] {\n return resolveClients(parsed.client);\n}\n\nexport async function runAppSkill(argv: string[]): Promise<void> {\n try {\n const parsed = parseAppSkillArgs(argv);\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n\n const loaded = loadAppSkillManifest(parsed.manifest);\n const log = (message: string) =>\n (parsed.printJson ? process.stderr : process.stdout).write(\n `${message}\\n`,\n );\n if (parsed.command === \"ensure\") {\n const result = await ensureAppSkill(loaded, {\n mode: parsed.mode,\n clients: resolveArgsClients(parsed),\n scope: parsed.scope,\n serverName: parsed.serverName,\n dryRun: parsed.dryRun,\n confirm: true,\n yes: parsed.yes,\n log,\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else if (parsed.dryRun) {\n process.stdout.write(\n `Would register ${result.serverName} at ${result.mcpUrl} for ${result.clients.join(\", \")}\\n`,\n );\n }\n return;\n }\n\n if (parsed.command === \"launch\") {\n const plan = await launchAppSkill(loaded, {\n mode: parsed.mode,\n into: parsed.into,\n dryRun: parsed.dryRun,\n skipInstall: parsed.skipInstall,\n noRegister: parsed.noRegister,\n clients: resolveArgsClients(parsed),\n scope: parsed.scope,\n serverName: parsed.serverName,\n confirm: true,\n yes: parsed.yes,\n log,\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(plan, null, 2)}\\n`);\n }\n return;\n }\n\n if (parsed.command === \"pack\") {\n if (!parsed.out) {\n throw new Error(\"Missing --out <dir> for app-skill pack.\");\n }\n const result = buildAppSkillPack(loaded, parsed.out);\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n process.stdout.write(\n `Packed ${loaded.manifest.displayName} app skill at ${result.outDir}\\n`,\n );\n }\n }\n } catch (err: any) {\n process.stderr.write(`${err?.message ?? err}\\n`);\n process.exitCode = 1;\n }\n}\n"]}