@agent-native/core 0.49.4 → 0.49.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/app-skill.js +1 -1
  3. package/dist/cli/app-skill.js.map +1 -1
  4. package/dist/cli/connect.d.ts.map +1 -1
  5. package/dist/cli/connect.js +22 -4
  6. package/dist/cli/connect.js.map +1 -1
  7. package/dist/cli/create.js +2 -2
  8. package/dist/cli/create.js.map +1 -1
  9. package/dist/cli/index.js +1 -1
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
  12. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  13. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  14. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  15. package/dist/cli/recap.js +2 -2
  16. package/dist/cli/recap.js.map +1 -1
  17. package/dist/cli/skills.d.ts +2 -2
  18. package/dist/cli/skills.d.ts.map +1 -1
  19. package/dist/cli/skills.js +50 -35
  20. package/dist/cli/skills.js.map +1 -1
  21. package/dist/mcp/connect-route.d.ts.map +1 -1
  22. package/dist/mcp/connect-route.js +1 -1
  23. package/dist/mcp/connect-route.js.map +1 -1
  24. package/dist/server/agent-chat-plugin.js +1 -1
  25. package/dist/server/agent-chat-plugin.js.map +1 -1
  26. package/dist/server/auth-marketing.js +1 -1
  27. package/dist/server/auth-marketing.js.map +1 -1
  28. package/dist/vite/client.d.ts +16 -0
  29. package/dist/vite/client.d.ts.map +1 -1
  30. package/dist/vite/client.js +45 -4
  31. package/dist/vite/client.js.map +1 -1
  32. package/docs/content/external-agents.md +6 -6
  33. package/docs/content/frames.md +1 -1
  34. package/docs/content/mcp-clients.md +5 -5
  35. package/docs/content/plan-plugin.md +10 -8
  36. package/docs/content/skills-guide.md +3 -3
  37. package/docs/content/template-assets.md +4 -4
  38. package/docs/content/template-plan.md +11 -8
  39. package/package.json +1 -2
package/README.md CHANGED
@@ -28,7 +28,7 @@ Don't want to scaffold a whole app yet? Add agent-native superpowers to a coding
28
28
  npx @agent-native/core@latest skills add visual-plan
29
29
  ```
30
30
 
31
- It installs the skills, registers the hosted MCP connector, and signs you in in one step. You get two slash commands that upgrade how your agent plans and reports its work:
31
+ It installs the skills, registers the hosted MCP connector, and signs in the selected local client(s) in one step. You get two slash commands that upgrade how your agent plans and reports its work:
32
32
 
33
33
  - **`/visual-plan`** — before the agent writes code, it opens a structured, reviewable plan document instead of a wall of text: inline diagrams, UI wireframes and prototypes, file-by-file implementation maps, and annotations you can comment on and approve.
34
34
  - **`/visual-recap`** — after changes land, it turns a PR or git diff into a high-altitude visual recap: schema, API, and file changes rendered as grounded before/after blocks with a shareable review link, instead of scrolling a raw diff.
@@ -652,7 +652,7 @@ function writeVercelSkillsAdapter(manifest, manifestDir, skills, outDir) {
652
652
  "Install instructions only with the Vercel Labs/open skills CLI:",
653
653
  "",
654
654
  "```bash",
655
- `npx skills add . --skill ${skills.map(skillExportName).join(" --skill ")} -a codex`,
655
+ `npx skills@latest add . --skill ${skills.map(skillExportName).join(" --skill ")} -a codex`,
656
656
  "```",
657
657
  "",
658
658
  "Then register the app-backed MCP connector:",
@@ -1 +1 @@
1
- {"version":3,"file":"app-skill.js","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAEL,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwI5D,MAAM,IAAI,GAAG;;;;;;;;;;;;;2CAa8B,CAAC;AAE5C,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AACtD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACzE,MAAM,aAAa,GAAG;IACpB,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,KAAK;IACL,MAAM;IACN,IAAI;IACJ,WAAW;IACX,eAAe;IACf,YAAY;IACZ,SAAS;CACV,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAa;IACtD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC;AAC5D,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IACE,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,oBAAoB;QAC9B,KAAK,KAAK,eAAe;QACzB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,aAAa,EACvB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;QACL,cAAc;QACd,oBAAoB;QACpB,eAAe;QACf,aAAa;QACb,cAAc;QACd,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAA6B;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;IAC7C,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,aAAa,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,kBAAkB,CAClC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAChC,YAAY,CACb,CAAC;IACF,MAAM,YAAY,GAAG,kBAAkB,CACrC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,EACvD,eAAe,CAChB,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC9C,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1D,MAAM,QAAQ,GAAG,cAAc,CAC7B,WAAW;SACR,GAAG,CAAC,oBAAoB,CAAC;SACzB,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACnE,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE;QACF,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAC/C,WAAW,EACT,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5B,qCAAqC,EAAE,GAAG;QAC5C,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,EAAE;YACN,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,YAAY;SACrB;QACD,GAAG,EAAE;YACH,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,gBAAgB,EAAE,EAAE;YAClE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;SACrC;QACD,GAAG,CAAC,QAAQ;YACV,CAAC,CAAC;gBACE,KAAK,EAAE;oBACL,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAChC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;wBAC9C,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAClC,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;wBAClD,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAClC,CAAC,CAAC;4BACE,UAAU,EAAE,kBAAkB,CAC5B,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAE,EACjC,kBAAkB,CACnB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,QAAQ,EAAE;wBACR,OAAO,EAAE,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,cAAc;wBAC5D,GAAG,EAAE,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,UAAU;wBAChD,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,YAAY;qBACvD;iBACF;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO;YACT,CAAC,CAAC;gBACE,IAAI,EAAE;oBACJ,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;wBAC5B,OAAO,CAAC,IAAI,KAAK,QAAQ;wBACzB,OAAO,CAAC,IAAI,KAAK,MAAM;wBACrB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;wBACxB,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;wBAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACvC,CAAC,CAAC,EAAE,CAAC;iBACR;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACvD,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK;YACpC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACzC,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG;YACtC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;YAC3C,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBACvC,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gBAC7D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,EAAE,SAAS;aACd,MAAM,CAAC,QAAQ,CAAC;aAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YACnC,UAAU,EAAE,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC;YACtD,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7B,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,EAAE;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IACnE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM;QAC9B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,oBAAoB,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,QAAQ,EAAE,yBAAyB,CAAC,GAAG,CAAC;QACxC,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAA0B;IAE1B,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAA0B;IAE1B,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,OAAO,GAAkC,QAAQ,CAAC;IACtD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC7D,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,KAAsC,CAAC;QACjD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAuB;QAC9B,OAAO;QACP,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,GAAG,EAAE,KAAK;KACX,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE;YAC/C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;aAC/D,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC;aAChE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;aAC9D,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;aAClE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,SAAS;YACnD,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;aACpB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;aAC1D,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;aAC5D,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;aAC1C,IAAI,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;aAC5C,IAAI,GAAG,KAAK,WAAW;YAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;aAC3C,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,KAAK,cAAc;YACzD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;aACpB,IAAI,GAAG,KAAK,eAAe;YAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;aACnD,IAAI,GAAG,KAAK,QAAQ;YAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;aAC3C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;aACpD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;aACnE,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;;YACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,CACL,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,MAAc,EAAE,KAAa;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7D,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wBAAwB,YAAY,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,KAA4B;IAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,gBAAgB,CACrB,WAAW,EACX,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EACrC,cAAc,KAAK,CAAC,IAAI,EAAE,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAA4B;IACnD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,IAAY;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,sBAAsB,GAC1B,YAAY;QACZ,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,QAAQ,CAAC;IACf,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;QACtB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IACE,QAAQ,KAAK,sBAAsB;gBACnC,QAAQ,CAAC,UAAU,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAC3D,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,OAAO,CACL,IAAI,KAAK,cAAc;gBACvB,IAAI,KAAK,MAAM;gBACf,IAAI,KAAK,MAAM;gBACf,IAAI,KAAK,SAAS;gBAClB,IAAI,KAAK,eAAe;gBACxB,IAAI,KAAK,UAAU;gBACnB,IAAI,KAAK,SAAS;gBAClB,IAAI,KAAK,SAAS;gBAClB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACxB,IAAI,KAAK,WAAW;gBACpB,IAAI,KAAK,QAAQ;gBACjB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC1B,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC3B,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAChB,WAAmB,EACnB,KAA4B,EAC5B,QAAgB;IAEhB,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY,EAAE,IAAY;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IACjC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CACzB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CACpD,CAAC;IACF,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO;IACrB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC/B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CACpE,CAAC;IACF,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,IAAI,EAAE,CAAC;IACrC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAc;IAC7C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,cAAc,CACrB,QAA0B,EAC1B,UAAmB;IAEnB,IAAI,UAAU;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,QAA0B,EAAE,UAAmB;IACtE,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAClE;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,QAA0B;IAC5C,OAAO,gBAAgB,QAAQ,CAAC,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,MAA+B,EAC/B,QAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM;SACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,kEAAkE;QAClE,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC;aACrC,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,GAAG,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAClE;aACA,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9C,CAAC,CAAC;SACD,IAAI,EAAE,CAAC;IACV,KAAK,CAAC,IAAI,CACR,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CACtE,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3B,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAc,EAAQ,EAAE;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO;QACnE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5D,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;iBAC1D,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,4EAA4E;QAC5E,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA0B,EAC1B,WAAmB,EACnB,MAA+B;IAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC;IACzC,OAAO,GAAG,IAAI,UAAU,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAA0B,EAC1B,MAAc,EACd,OAAe;IAEf,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE;QAC3D,IAAI;QACJ,OAAO;QACP,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE;YACN,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,0BAA0B;SAChC;QACD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;QAC7B,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE;YACR,cAAc;YACd,QAAQ,CAAC,EAAE;YACX,KAAK;YACL,QAAQ;YACR,kBAAkB;SACnB;QACD,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE;YACT,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,gBAAgB,EAAE,QAAQ,CAAC,WAAW;YACtC,eAAe,EACb,GAAG,QAAQ,CAAC,WAAW,6CAA6C;gBACpE,mEAAmE;YACrE,aAAa,EAAE,cAAc;YAC7B,QAAQ,EAAE,cAAc;YACxB,YAAY,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;YAC9C,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;YAC/B,aAAa,EAAE;gBACb,QAAQ,QAAQ,CAAC,WAAW,eAAe;gBAC3C,OAAO,QAAQ,CAAC,WAAW,2BAA2B;gBACtD,UAAU,QAAQ,CAAC,WAAW,4BAA4B;aAC3D;YACD,UAAU,EAAE,SAAS;SACtB;KACF,CAAC,CAAC;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,6BAA6B,CACpC,QAA0B,EAC1B,WAAmB,EACnB,MAA+B,EAC/B,MAAc;IAEd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAErE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE;QACrE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,2FAA2F;QAC7F,KAAK,EAAE;YACL,IAAI,EAAE,cAAc;SACrB;QACD,OAAO,EAAE;YACP;gBACE,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,MAAM,EAAE,aAAa,IAAI,EAAE;gBAC3B,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;gBAC7B,QAAQ,EAAE;oBACR,cAAc;oBACd,QAAQ,CAAC,EAAE;oBACX,KAAK;oBACL,QAAQ;oBACR,kBAAkB;iBACnB;aACF;SACF;KACF,CAAC,CAAC;IAEH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE;QAC/D,IAAI;QACJ,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE;YACN,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,0BAA0B;SAChC;QACD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;QAC7B,UAAU,EAAE,2CAA2C;QACvD,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE;YACR,cAAc;YACd,QAAQ,CAAC,EAAE;YACX,KAAK;YACL,QAAQ;YACR,kBAAkB;SACnB;QACD,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,aAAa;KAC1B,CAAC,CAAC;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAClC;QACE,KAAK,QAAQ,CAAC,WAAW,0BAA0B;QACnD,EAAE;QACF,kDAAkD;QAClD,EAAE;QACF,SAAS;QACT,kCAAkC,QAAQ,CAAC,EAAE,oCAAoC;QACjF,mBAAmB,IAAI,IAAI,eAAe,EAAE;QAC5C,iBAAiB;QACjB,MAAM;QACN,KAAK;QACL,EAAE;QACF,oKAAoK;QACpK,EAAE;QACF,sHAAsH;QACtH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,QAA0B,EAC1B,MAAc,EACd,OAAsC;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE;QAC1C,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU;QAC7B,KAAK,EAAE,QAAQ,CAAC,WAAW;QAC3B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO;QACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,MAA+B,EAC/B,MAAc,EACd,OAAyD;IAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,wBAAwB,CAC/B,QAA0B,EAC1B,WAAmB,EACnB,MAA+B,EAC/B,MAAc;IAEd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAClE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAClC;QACE,KAAK,QAAQ,CAAC,WAAW,SAAS;QAClC,EAAE;QACF,iEAAiE;QACjE,EAAE;QACF,SAAS;QACT,4BAA4B,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW;QACpF,KAAK;QACL,EAAE;QACF,6CAA6C;QAC7C,EAAE;QACF,SAAS;QACT,6FAA6F;QAC7F,KAAK;QACL,EAAE;QACF,uMAAuM;QACvM,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAQD,MAAM,UAAU,iBAAiB,CAC/B,MAA8B,EAC9B,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEzE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,cAAc,GAAqB,SAAS;QAChD,CAAC,CAAC;YACE,GAAG,QAAQ;YACX,KAAK,EAAE;gBACL,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzB,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,IAAI;oBACpC,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,YAAY;iBACpB;aACF;SACF;QACH,CAAC,CAAC,QAAQ,CAAC;IACb,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAAE,cAAc,CAAC,CAAC;IAC5E,IAAI,SAAS,EAAE,CAAC;QACd,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,MAAM;QACxB,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAa;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,6BAA6B,CAAC;QAChD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAC9C;KACF,CAAC;IAEF,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EACjD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACzD,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,IAAI,CACP,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,CACnB,EACD,IAAI,CAAC,IAAI,CACP,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,UAAU,CAAC,QAAQ,CAAC,EACpB,gBAAgB,EAChB,aAAa,CACd,EACD,IAAI,CAAC,IAAI,CACP,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,UAAU,CAAC,QAAQ,CAAC,EACpB,WAAW,CACZ,EACD,IAAI,CAAC,IAAI,CACP,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,UAAU,CAAC,QAAQ,CAAC,EACpB,QAAQ,CACT,EACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,CAAC,CACjE,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,EACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,CAAC,EAC3D,IAAI,CAAC,IAAI,CACP,MAAM,EACN,UAAU,EACV,eAAe,EACf,6BAA6B,CAC9B,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnD,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA8B;IAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACpC,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAC7B,MAAM,CAAC,GAAG,EACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,EAC1C,kBAAkB,CACnB,CAAC;QACF,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,CAAC,UAAU,oBAAoB;YACvD,wDAAwD,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAC/B,OAAO,CAAC,GAAG,EAAE,EACb,WAAW,EACX,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,YAAY,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA8B,EAC9B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;YACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;YAC9B,UAAU;YACV,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,IAAI,uBAAuB,CAAC;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,EAAE;QAClB,MAAM;QACN,SAAS,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACxC,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC;QAC/B,UAAU;QACV,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,IAAI;YACpC,OAAO,EAAE,cAAc;YACvB,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;SACpB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAwB,EAAE,GAA8B;IACzE,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,GAAG,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,SAAS;QAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG;QAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAI1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1D,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,kDAAkD,OAAO,EAAE,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,6CAA6C,UAAU,gCAAgC,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,GAAW;IAC5C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,GAAG;YACH,GAAG,EAAE,YAAY,EAAE;YACnB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,OAAO,uBAAuB,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YACD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,UAAU,CAAC;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QACjC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA8B,EAC9B,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAyB;QACnC,IAAI;QACJ,UAAU;QACV,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO;QACP,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAElC,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,CAAC,OAAO,GAAG,YAAY,CAC3B,OAAO,EACP,UAAU,EACV,IAAI,CAAC,MAAM,EACX,SAAS,EACT,KAAK,EACL,OAAO,CACR,CAAC;IAEF,sEAAsE;IACtE,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,6CAA6C;IAC7C,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,gCAAgC,CAC9C,MAAM,EACN,UAAU,EACV,IAAI,CAAC,MAAM,EACX,OAAO,EACP,KAAK,CACN,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GACV,aAAa,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,eAAe,UAAU,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,gCAAgC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClI,CAAC,CAAC,eAAe,UAAU,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/E,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAA4B,EAC5B,WAAmB,EACnB,KAAa;IAEb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC9B;YACE,YAAY,WAAW,gBAAgB,MAAM,CAAC,UAAU,IAAI;YAC5D,cAAc,MAAM,CAAC,MAAM,EAAE;YAC7B,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzC,cAAc,KAAK,EAAE;YACrB,iBAAiB;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA8B,EAC9B,UAAiC,EAAE;IAEnC,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;QACJ,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,GAAG,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,WAAW,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,+BAA+B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,cAAc,CAAC,MAAM,EAAE;YAC3B,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,WAAW,GAAG,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA0B;IACpD,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAC9B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CACxD,GAAG,OAAO,IAAI,CACf,CAAC;QACJ,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;gBAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kBAAkB,MAAM,CAAC,UAAU,OAAO,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC7F,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;gBACxC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAiB,MAAM,CAAC,MAAM,IAAI,CACxE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC","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 {\n type ClientId,\n buildHttpMcpEntry,\n removeSameUrlDuplicatesForClient,\n} 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 aliases?: 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 aliases: stringArray(mcpRaw.aliases),\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 mcpServerNames(\n manifest: AppSkillManifest,\n serverName?: string,\n): string[] {\n if (serverName) return [serverName];\n const names = [manifest.mcp.serverName, ...(manifest.mcp.aliases ?? [])];\n return [...new Set(names.filter(Boolean))];\n}\n\nfunction mcpServerConfig(manifest: AppSkillManifest, serverName?: string) {\n const entry = buildHttpMcpEntry(manifest.hosted.mcpUrl);\n return {\n mcpServers: Object.fromEntries(\n mcpServerNames(manifest, serverName).map((name) => [name, entry]),\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 skillDir = path.join(manifestDir, skill.path);\n // Hash SKILL.md plus every sibling file under the skill dir (e.g.\n // references/*), so a progressive-disclosure reference edit still changes\n // the content hash and bumps the Codex plugin version for auto-upgrade.\n const body = collectSkillFiles(skillDir)\n .map(\n (rel) =>\n `${rel}\\n${fs.readFileSync(path.join(skillDir, rel), \"utf-8\")}`,\n )\n .join(\"\\n \\n\");\n return `${skillExportName(skill)}\\n${body}`;\n })\n .sort();\n parts.push(\n `mcp:${mcpServerNames(manifest).join(\",\")}:${manifest.hosted.mcpUrl}`,\n );\n return createHash(\"sha256\")\n .update(parts.join(\"\\n\u0000\\n\"))\n .digest(\"hex\")\n .slice(0, 12);\n}\n\n/**\n * List a skill dir's files (SKILL.md + any siblings like references/*) as\n * skill-relative POSIX paths, sorted for a stable content hash. A bare SKILL.md\n * source (file, not dir) falls back to just \"SKILL.md\".\n */\nfunction collectSkillFiles(skillDir: string): string[] {\n const out: string[] = [];\n const walk = (dir: string, prefix: string): void => {\n if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) walk(path.join(dir, entry.name), rel);\n else if (entry.isFile()) out.push(rel);\n }\n };\n walk(skillDir, \"\");\n if (out.length === 0) {\n // Source resolved to a single SKILL.md file rather than a dir, or is empty.\n return [\"SKILL.md\"];\n }\n return out.sort();\n}\n\n/**\n * Plugin version embeds a content hash of the exported skills + MCP server\n * identity/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 const baseDir = options.baseDir ?? process.cwd();\n result.written = writeConfigs(\n clients,\n serverName,\n plan.mcpUrl,\n undefined,\n scope,\n baseDir,\n );\n\n // Aliases are intentionally NOT written as separate entries. Instead,\n // repurpose the alias list as a cleanup list: remove any other entries in\n // the same config files that point at the same URL (covers legacy alias\n // names, old default names like 'agent-native-<slug>', and any stale\n // custom names left from previous installs).\n const allRemovedNames: string[] = [];\n for (const client of clients) {\n const removed = removeSameUrlDuplicatesForClient(\n client,\n serverName,\n plan.mcpUrl,\n baseDir,\n scope,\n );\n allRemovedNames.push(...removed);\n }\n\n const uniqueRemoved = [...new Set(allRemovedNames)];\n const logMsg =\n uniqueRemoved.length > 0\n ? `Registered \"${serverName}\" for ${clients.join(\", \")} at ${plan.mcpUrl}; removed duplicate entries: ${uniqueRemoved.join(\", \")}`\n : `Registered \"${serverName}\" for ${clients.join(\", \")} at ${plan.mcpUrl}`;\n options.log?.(logMsg);\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 {\n type ClientId,\n buildHttpMcpEntry,\n removeSameUrlDuplicatesForClient,\n} 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 aliases?: 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 aliases: stringArray(mcpRaw.aliases),\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 mcpServerNames(\n manifest: AppSkillManifest,\n serverName?: string,\n): string[] {\n if (serverName) return [serverName];\n const names = [manifest.mcp.serverName, ...(manifest.mcp.aliases ?? [])];\n return [...new Set(names.filter(Boolean))];\n}\n\nfunction mcpServerConfig(manifest: AppSkillManifest, serverName?: string) {\n const entry = buildHttpMcpEntry(manifest.hosted.mcpUrl);\n return {\n mcpServers: Object.fromEntries(\n mcpServerNames(manifest, serverName).map((name) => [name, entry]),\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 skillDir = path.join(manifestDir, skill.path);\n // Hash SKILL.md plus every sibling file under the skill dir (e.g.\n // references/*), so a progressive-disclosure reference edit still changes\n // the content hash and bumps the Codex plugin version for auto-upgrade.\n const body = collectSkillFiles(skillDir)\n .map(\n (rel) =>\n `${rel}\\n${fs.readFileSync(path.join(skillDir, rel), \"utf-8\")}`,\n )\n .join(\"\\n \\n\");\n return `${skillExportName(skill)}\\n${body}`;\n })\n .sort();\n parts.push(\n `mcp:${mcpServerNames(manifest).join(\",\")}:${manifest.hosted.mcpUrl}`,\n );\n return createHash(\"sha256\")\n .update(parts.join(\"\\n\u0000\\n\"))\n .digest(\"hex\")\n .slice(0, 12);\n}\n\n/**\n * List a skill dir's files (SKILL.md + any siblings like references/*) as\n * skill-relative POSIX paths, sorted for a stable content hash. A bare SKILL.md\n * source (file, not dir) falls back to just \"SKILL.md\".\n */\nfunction collectSkillFiles(skillDir: string): string[] {\n const out: string[] = [];\n const walk = (dir: string, prefix: string): void => {\n if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) return;\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) walk(path.join(dir, entry.name), rel);\n else if (entry.isFile()) out.push(rel);\n }\n };\n walk(skillDir, \"\");\n if (out.length === 0) {\n // Source resolved to a single SKILL.md file rather than a dir, or is empty.\n return [\"SKILL.md\"];\n }\n return out.sort();\n}\n\n/**\n * Plugin version embeds a content hash of the exported skills + MCP server\n * identity/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@latest 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 const baseDir = options.baseDir ?? process.cwd();\n result.written = writeConfigs(\n clients,\n serverName,\n plan.mcpUrl,\n undefined,\n scope,\n baseDir,\n );\n\n // Aliases are intentionally NOT written as separate entries. Instead,\n // repurpose the alias list as a cleanup list: remove any other entries in\n // the same config files that point at the same URL (covers legacy alias\n // names, old default names like 'agent-native-<slug>', and any stale\n // custom names left from previous installs).\n const allRemovedNames: string[] = [];\n for (const client of clients) {\n const removed = removeSameUrlDuplicatesForClient(\n client,\n serverName,\n plan.mcpUrl,\n baseDir,\n scope,\n );\n allRemovedNames.push(...removed);\n }\n\n const uniqueRemoved = [...new Set(allRemovedNames)];\n const logMsg =\n uniqueRemoved.length > 0\n ? `Registered \"${serverName}\" for ${clients.join(\", \")} at ${plan.mcpUrl}; removed duplicate entries: ${uniqueRemoved.join(\", \")}`\n : `Registered \"${serverName}\" for ${clients.join(\", \")} at ${plan.mcpUrl}`;\n options.log?.(logMsg);\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 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
@@ -352,6 +352,10 @@ export function supportsRemoteMcpOAuth(client) {
352
352
  function clientLabelList(clients) {
353
353
  return clients.map((client) => CLIENT_LABELS[client]).join(", ");
354
354
  }
355
+ function clientsNotIn(requestedClients, effectiveClients) {
356
+ const effective = new Set(effectiveClients);
357
+ return requestedClients.filter((client) => !effective.has(client));
358
+ }
355
359
  function withFullCatalogHeader(headers) {
356
360
  return { ...(headers ?? {}), [MCP_FULL_CATALOG_HEADER]: "1" };
357
361
  }
@@ -1362,6 +1366,14 @@ async function reconnectOne(parsed, clients, deps) {
1362
1366
  logOut("");
1363
1367
  logOut(` Reconnecting${effectiveParsed.name ? ` "${effectiveParsed.name}"` : ""}...`);
1364
1368
  const res = await connectOne(target.rawUrl, effectiveParsed, effectiveClients, deps);
1369
+ const skippedClients = clientsNotIn(clients, effectiveClients);
1370
+ if (res.ok && skippedClients.length > 0) {
1371
+ const baseUrl = stripMcpPath(normalizeUrl(target.rawUrl));
1372
+ logOut("");
1373
+ logOut(` Reconnected existing client configs for ${clientLabelList(effectiveClients)}.`);
1374
+ logOut(` Did not touch ${clientLabelList(skippedClients)} because no matching MCP entry was found.`);
1375
+ logOut(` To add another client, run: npx @agent-native/core@latest connect ${baseUrl} --client <client>`);
1376
+ }
1365
1377
  return res.ok;
1366
1378
  }
1367
1379
  async function connectOne(rawUrl, parsed, clients, deps) {
@@ -1491,6 +1503,7 @@ async function connectOne(rawUrl, parsed, clients, deps) {
1491
1503
  for (const w of allWritten) {
1492
1504
  logOut(` ${w.client.padEnd(18)} ${w.file}`);
1493
1505
  }
1506
+ logOut(` Auth/config is per client: this command updated ${clientLabelList(clients)} only.`);
1494
1507
  if (oauthClients.length > 0 && !parsed.token) {
1495
1508
  logOut("");
1496
1509
  if (oauthMigrations.length > 0) {
@@ -1500,7 +1513,10 @@ async function connectOne(rawUrl, parsed, clients, deps) {
1500
1513
  logOut(" Next: restart Claude Code, run /mcp, and choose Authenticate.");
1501
1514
  }
1502
1515
  logOut("");
1503
- logOut(" Restart your coding agent to pick up the new MCP server.");
1516
+ logOut(` Restart or reload ${clientLabelList(clients)} to pick up the new MCP server.`);
1517
+ if (clients.includes("codex")) {
1518
+ logOut(" Codex sessions load MCP tools at startup; start a new Codex session if the tools are still missing.");
1519
+ }
1504
1520
  return { ok: true, serverName, files: allWritten.map((w) => w.file) };
1505
1521
  }
1506
1522
  // ---------------------------------------------------------------------------
@@ -1683,6 +1699,8 @@ Usage:
1683
1699
  URL, polls until approved, then writes bearer headers. With no --client,
1684
1700
  opens a brief picker preselected from ~/.agent-native/connect.json, or
1685
1701
  all clients on first run. Idempotent — re-running replaces the same entry.
1702
+ Auth is stored per client config/session; restart or reload each selected
1703
+ client before expecting new tools to appear.
1686
1704
  Re-running over an older Claude bearer entry upgrades it to URL-only
1687
1705
  OAuth config and prompts you to authenticate with /mcp.
1688
1706
 
@@ -1706,9 +1724,9 @@ Usage:
1706
1724
  Re-authenticate an existing MCP entry without reinstalling apps/skills.
1707
1725
  With a URL, it reuses the existing server name for that MCP URL when
1708
1726
  possible, reconnecting only clients that already have that entry. Pass
1709
- --client to limit which configs it searches. Without a URL, it reconnects
1710
- the only matching Agent Native entry in local client configs. Use --name
1711
- for custom server names.
1727
+ --client to limit which configs it searches; for Codex recovery, prefer
1728
+ --client codex. Without a URL, it reconnects the only matching Agent
1729
+ Native entry in local client configs. Use --name for custom server names.
1712
1730
 
1713
1731
  npx @agent-native/core@latest connect --all [--client <c>] [--scope user|project]
1714
1732
  Connect every first-party hosted app as separate MCP resources.