@carrierllc/mcp 0.2.16 → 0.2.17

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 (79) hide show
  1. package/dist/cli.js +644 -0
  2. package/dist/cli.js.map +1 -0
  3. package/dist/index.js +1263 -233
  4. package/dist/index.js.map +1 -1
  5. package/package.json +21 -14
  6. package/plugin/.claude-plugin/marketplace.json +31 -0
  7. package/plugin/carrier/.claude-plugin/plugin.json +19 -0
  8. package/plugin/carrier/.mcp.json +8 -0
  9. package/plugin/carrier/README.md +48 -0
  10. package/plugin/carrier/agents/carrier-billing-auditor.md +16 -0
  11. package/plugin/carrier/agents/carrier-fleet-ops.md +15 -0
  12. package/plugin/carrier/agents/carrier-storefront-builder.md +17 -0
  13. package/plugin/carrier/commands/billing.md +16 -0
  14. package/plugin/carrier/commands/churn.md +15 -0
  15. package/plugin/carrier/commands/credits.md +15 -0
  16. package/plugin/carrier/commands/esim-status.md +15 -0
  17. package/plugin/carrier/commands/fleet.md +17 -0
  18. package/plugin/carrier/commands/greenzone.md +16 -0
  19. package/plugin/carrier/commands/onboard.md +17 -0
  20. package/plugin/carrier/commands/packages.md +18 -0
  21. package/plugin/carrier/commands/provision.md +20 -0
  22. package/plugin/carrier/commands/sms.md +18 -0
  23. package/plugin/carrier/commands/status.md +15 -0
  24. package/plugin/carrier/commands/storefront.md +21 -0
  25. package/plugin/carrier/commands/subscribers.md +18 -0
  26. package/plugin/carrier/commands/usage.md +16 -0
  27. package/plugin/carrier/skills/carrier-operations/SKILL.md +36 -0
  28. package/templates/storefront/eslint.config.mjs +15 -0
  29. package/templates/storefront/next.config.ts +22 -0
  30. package/templates/storefront/open-next.config.ts +3 -0
  31. package/templates/storefront/package.json +38 -0
  32. package/templates/storefront/pnpm-lock.yaml +4020 -0
  33. package/templates/storefront/postcss.config.mjs +7 -0
  34. package/templates/storefront/src/app/activate/[orderId]/page.tsx +28 -0
  35. package/templates/storefront/src/app/apple-icon.tsx +29 -0
  36. package/templates/storefront/src/app/checkout/[templateId]/CheckoutClient.tsx +52 -0
  37. package/templates/storefront/src/app/checkout/[templateId]/page.tsx +24 -0
  38. package/templates/storefront/src/app/contact/page.tsx +35 -0
  39. package/templates/storefront/src/app/dashboard/page.tsx +26 -0
  40. package/templates/storefront/src/app/globals.css +99 -0
  41. package/templates/storefront/src/app/help/page.tsx +25 -0
  42. package/templates/storefront/src/app/icon.tsx +29 -0
  43. package/templates/storefront/src/app/layout.tsx +56 -0
  44. package/templates/storefront/src/app/legal/acceptable-use/page.tsx +21 -0
  45. package/templates/storefront/src/app/legal/privacy/page.tsx +27 -0
  46. package/templates/storefront/src/app/legal/terms/page.tsx +25 -0
  47. package/templates/storefront/src/app/manifest.ts +18 -0
  48. package/templates/storefront/src/app/page.tsx +31 -0
  49. package/templates/storefront/src/app/robots.ts +9 -0
  50. package/templates/storefront/src/app/shop/ShopClient.tsx +27 -0
  51. package/templates/storefront/src/app/shop/page.tsx +9 -0
  52. package/templates/storefront/src/app/sign-in/[[...sign-in]]/page.tsx +24 -0
  53. package/templates/storefront/src/app/sign-up/[[...sign-up]]/page.tsx +13 -0
  54. package/templates/storefront/src/app/sitemap.ts +14 -0
  55. package/templates/storefront/src/brand.config.ts +28 -0
  56. package/templates/storefront/src/components/Providers.tsx +16 -0
  57. package/templates/storefront/src/components/faq/FaqSection.tsx +80 -0
  58. package/templates/storefront/src/components/footer/StorefrontFooter.tsx +61 -0
  59. package/templates/storefront/src/components/landing/HeroSection.tsx +52 -0
  60. package/templates/storefront/src/components/landing/PlanCard.tsx +61 -0
  61. package/templates/storefront/src/components/nav/StorefrontNav.tsx +69 -0
  62. package/templates/storefront/src/components/theme/clerk-appearance.ts +51 -0
  63. package/templates/storefront/src/components/theme/theme-provider.tsx +87 -0
  64. package/templates/storefront/src/components/theme/theme-script.tsx +24 -0
  65. package/templates/storefront/src/lib/conversion-events.ts +36 -0
  66. package/templates/storefront/src/lib/sanitize-auth-redirect.ts +16 -0
  67. package/templates/storefront/src/middleware.ts +25 -0
  68. package/templates/storefront/src/vendor/carrier/client.ts +95 -0
  69. package/templates/storefront/src/vendor/carrier/index.ts +2 -0
  70. package/templates/storefront/src/vendor/carrier/types.ts +21 -0
  71. package/templates/storefront/src/vendor/config/index.ts +2 -0
  72. package/templates/storefront/src/vendor/geo/index.ts +32 -0
  73. package/templates/storefront/src/vendor/ui/brand.ts +68 -0
  74. package/templates/storefront/src/vendor/ui/cn.ts +7 -0
  75. package/templates/storefront/src/vendor/ui/countryImagery.ts +46 -0
  76. package/templates/storefront/src/vendor/ui/index.ts +3 -0
  77. package/templates/storefront/tsconfig.json +23 -0
  78. package/templates/storefront/wrangler.jsonc +11 -0
  79. package/dist/.metadata_never_index +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/lib/brand.ts","../src/cli/lib/plugin.ts","../src/cli/lib/paths.ts","../src/cli/lib/fsx.ts","../src/cli/lib/exec.ts","../src/cli/lib/whitelabel.ts","../src/cli/lib/site.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { resolve } from \"node:path\";\nimport { Brand, CARRIER_BRAND, deriveAccentDark } from \"./lib/brand.js\";\nimport { installPlugin, manualCommands, pluginStatus, MCP_URL } from \"./lib/plugin.js\";\nimport { scaffoldStorefront } from \"./lib/whitelabel.js\";\nimport { buildSite, deploySite, installDeps, loadStorefrontBrand, slug } from \"./lib/site.js\";\nimport { exists } from \"./lib/fsx.js\";\n\nconst VERSION = \"0.2.17\";\n\nfunction header(): void {\n p.intro(`${pc.bold(pc.yellow(\"◆ carrier\"))} ${pc.dim(\"· the Stripe of telecom — CLI v\" + VERSION)}`);\n}\n\nfunction ok(msg: string): void {\n p.log.success(pc.green(msg));\n}\nfunction info(msg: string): void {\n p.log.info(msg);\n}\n\n/** Interactive brand capture, seeded from Carrier defaults. */\nasync function promptBrand(seed: Brand): Promise<Brand> {\n const name = (await p.text({\n message: \"Brand name\",\n placeholder: seed.name,\n defaultValue: seed.name,\n })) as string;\n if (p.isCancel(name)) process.exit(0);\n\n const domain = (await p.text({\n message: \"Domain\",\n placeholder: seed.domain,\n defaultValue: seed.domain,\n })) as string;\n if (p.isCancel(domain)) process.exit(0);\n\n const accent = (await p.text({\n message: \"Accent color (hex)\",\n placeholder: seed.colors.accent,\n defaultValue: seed.colors.accent,\n })) as string;\n if (p.isCancel(accent)) process.exit(0);\n\n const supportEmail = (await p.text({\n message: \"Support email\",\n placeholder: `support@${domain}`,\n defaultValue: `support@${domain}`,\n })) as string;\n if (p.isCancel(supportEmail)) process.exit(0);\n\n const accentDark = deriveAccentDark(accent, seed);\n const isCarrier = name === CARRIER_BRAND.name && domain === CARRIER_BRAND.domain;\n return {\n ...seed,\n name,\n legalName: name,\n tagline: isCarrier ? seed.tagline : `Mobile connectivity by ${name}.`,\n domain,\n supportEmail,\n supportUrl: `https://${domain}/help`,\n supportWhatsapp: isCarrier ? seed.supportWhatsapp : \"\",\n social: isCarrier ? seed.social : {},\n colors: { ...seed.colors, accent, accentDark },\n };\n}\n\nasync function doPluginInstall(): Promise<void> {\n const s = p.spinner();\n s.start(\"Installing Carrier Claude Code plugin\");\n const r = await installPlugin();\n s.stop(\"Plugin staged\");\n ok(`Plugin → ${r.copiedTo}`);\n info(\n `MCP: ${r.mcpAdded ? pc.green(\"registered\") : pc.yellow(\"manual\")} · ` +\n `marketplace: ${r.marketplaceAdded ? pc.green(\"added\") : pc.yellow(\"manual\")} · ` +\n `install: ${r.pluginInstalled ? pc.green(\"done\") : pc.yellow(\"manual\")}`,\n );\n if (!r.claudeFound || r.notes.length) {\n p.note(manualCommands().join(\"\\n\"), \"Finish wiring (run in your terminal)\");\n if (r.notes.length) info(pc.dim(r.notes.join(\"\\n\")));\n }\n}\n\nasync function doSiteCreate(target: string, brand: Brand): Promise<void> {\n const s = p.spinner();\n s.start(`Scaffolding ${brand.name} storefront → ${target}`);\n await scaffoldStorefront(target, brand);\n s.stop(\"Storefront scaffolded\");\n ok(`Created ${target} (white-labeled: ${brand.name}, accent ${brand.colors.accent})`);\n}\n\nasync function maybeBuildDeploy(target: string, brand: Brand, opts: { install: boolean; build: boolean; deploy: boolean }): Promise<void> {\n if (opts.install) {\n const s = p.spinner();\n s.start(\"Installing storefront dependencies\");\n const oki = await installDeps(target);\n s.stop(oki ? \"Dependencies installed\" : \"Dependency install reported errors\");\n if (!oki) return;\n }\n if (opts.build) {\n const s = p.spinner();\n s.start(\"Building storefront (next build)\");\n const okb = await buildSite(target);\n s.stop(okb ? \"Build succeeded\" : \"Build failed — see output above\");\n if (!okb) return;\n }\n if (opts.deploy) {\n const s = p.spinner();\n s.start(\"Deploying to Cloudflare Workers\");\n const r = await deploySite(target, brand);\n s.stop(r.ok ? `Deployed: ${r.projectName}` : \"Deploy skipped\");\n if (!r.ok && r.reason) info(pc.yellow(r.reason));\n }\n}\n\nconst program = new Command();\n\nprogram\n .name(\"carrier\")\n .description(\"Carrier CLI — install the Claude Code plugin and roll out a white-labeled eSIM storefront.\")\n .version(VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Interactive: install the plugin AND scaffold/deploy a storefront.\")\n .option(\"--dir <path>\", \"Storefront output directory\", \"./storefront\")\n .option(\"--yes\", \"Use Carrier defaults, no prompts\")\n .action(async (o: { dir: string; yes?: boolean }) => {\n header();\n await doPluginInstall();\n\n const brand = o.yes ? CARRIER_BRAND : await promptBrand(CARRIER_BRAND);\n const target = resolve(o.dir);\n if (await exists(target)) {\n const go = await p.confirm({ message: `${target} exists — write into it anyway?`, initialValue: false });\n if (p.isCancel(go) || !go) {\n p.outro(\"Stopped. Re-run with --dir <new path>.\");\n return;\n }\n }\n await doSiteCreate(target, brand);\n\n let install = !!o.yes;\n let build = !!o.yes;\n let deploy = false;\n if (!o.yes) {\n const next = await p.select({\n message: \"Roll it out now?\",\n options: [\n { value: \"build\", label: \"Install deps + build\" },\n { value: \"deploy\", label: \"Install + build + deploy to Cloudflare Workers\" },\n { value: \"none\", label: \"Just scaffold — I'll build later\" },\n ],\n initialValue: \"build\",\n });\n if (p.isCancel(next)) process.exit(0);\n install = next !== \"none\";\n build = next !== \"none\";\n deploy = next === \"deploy\";\n }\n await maybeBuildDeploy(target, brand, { install, build, deploy });\n\n p.note(\n [\n `cd ${o.dir}`,\n `Edit src/brand.config.ts to re-brand anytime`,\n `pnpm dev # local preview`,\n `MCP endpoint: ${MCP_URL}`,\n ].join(\"\\n\"),\n \"Next\",\n );\n p.outro(pc.green(\"Done. Your connectivity business is wired.\"));\n });\n\nconst plugin = program.command(\"plugin\").description(\"Manage the Carrier Claude Code plugin.\");\nplugin\n .command(\"install\")\n .description(\"Install/register the Carrier plugin + MCP into Claude Code.\")\n .action(async () => {\n header();\n await doPluginInstall();\n p.outro(pc.green(\"Plugin ready. Restart Claude Code to load it.\"));\n });\nplugin\n .command(\"status\")\n .description(\"Show plugin install status.\")\n .action(async () => {\n const st = await pluginStatus();\n header();\n info(st.installed ? pc.green(`Installed v${st.version ?? \"?\"} → ${st.dir}`) : pc.yellow(`Not installed (${st.dir})`));\n p.outro(\"\");\n });\n\nconst site = program.command(\"site\").description(\"Scaffold and deploy a white-labeled storefront.\");\nsite\n .command(\"create [dir]\")\n .description(\"Scaffold a white-labeled storefront from the Mango template.\")\n .option(\"--name <name>\", \"Brand name\")\n .option(\"--domain <domain>\", \"Domain\")\n .option(\"--accent <hex>\", \"Accent color\")\n .option(\"--yes\", \"Carrier defaults, no prompts\")\n .action(async (dir: string | undefined, o: { name?: string; domain?: string; accent?: string; yes?: boolean }) => {\n header();\n let brand: Brand = { ...CARRIER_BRAND };\n if (o.name || o.domain || o.accent) {\n const name = o.name ?? brand.name;\n const domain = o.domain ?? (o.name ? `${slug(o.name)}.com` : brand.domain);\n const isCarrier = name === CARRIER_BRAND.name && domain === CARRIER_BRAND.domain;\n brand = {\n ...brand,\n name,\n domain,\n legalName: o.name ?? brand.legalName,\n tagline: o.name ? `Mobile connectivity by ${o.name}.` : brand.tagline,\n supportEmail: `support@${domain}`,\n supportUrl: `https://${domain}/help`,\n supportWhatsapp: isCarrier ? brand.supportWhatsapp : \"\",\n social: isCarrier ? brand.social : {},\n colors: {\n ...brand.colors,\n accent: o.accent ?? brand.colors.accent,\n accentDark: o.accent ? deriveAccentDark(o.accent) : brand.colors.accentDark,\n },\n };\n } else if (!o.yes) {\n brand = await promptBrand(CARRIER_BRAND);\n }\n const target = resolve(dir ?? \"./storefront\");\n if (await exists(target)) {\n const go = await p.confirm({ message: `${target} exists — write into it anyway?`, initialValue: false });\n if (p.isCancel(go) || !go) {\n p.outro(\"Stopped. Re-run with a different directory.\");\n return;\n }\n }\n await doSiteCreate(target, brand);\n p.outro(pc.green(`Scaffolded. cd ${dir ?? \"storefront\"} && pnpm install && pnpm dev`));\n });\nsite\n .command(\"deploy [dir]\")\n .description(\"Build + deploy a storefront to Cloudflare Workers.\")\n .option(\"--name <name>\", \"Cloudflare Worker name (defaults from brand)\")\n .action(async (dir: string | undefined, o: { name?: string }) => {\n header();\n const target = resolve(dir ?? \"./storefront\");\n const brand = await loadStorefrontBrand(target, o.name ? { name: o.name } : undefined);\n await maybeBuildDeploy(target, brand, { install: true, build: true, deploy: true });\n p.outro(\"\");\n });\n\nprogram.parseAsync(process.argv).catch((e: unknown) => {\n console.error(pc.red(String(e instanceof Error ? e.message : e)));\n process.exit(1);\n});\n","/**\n * Brand config — the single white-label surface for the storefront.\n * Carrier defaults; overridable interactively or via `carrier site create --brand`.\n */\nexport interface Brand {\n name: string;\n legalName: string;\n tagline: string;\n domain: string;\n supportEmail: string;\n supportUrl: string;\n supportWhatsapp: string;\n colors: {\n /** Page background (deepest ink). */\n bg: string;\n /** Primary accent. */\n accent: string;\n /** Accent pressed/dark. */\n accentDark: string;\n /** Primary text. */\n text: string;\n };\n social: {\n x?: string;\n linkedin?: string;\n instagram?: string;\n tiktok?: string;\n };\n /** MCP control-plane endpoint the storefront's API talks to. */\n carrierApiUrl: string;\n}\n\nexport const CARRIER_BRAND: Brand = {\n name: \"Carrier\",\n legalName: \"Lifecycle Innovations Limited\",\n tagline: \"Programmable connectivity, on demand.\",\n domain: \"carrier.llc\",\n supportEmail: \"support@carrier.llc\",\n supportUrl: \"https://carrier.llc/help\",\n supportWhatsapp: \"+17864604829\",\n colors: {\n bg: \"#080C16\",\n accent: \"#FF6B35\",\n accentDark: \"#D9461C\",\n text: \"#F5F1EA\",\n },\n social: {\n x: \"@carrier_llc\",\n instagram: \"@carrier.llc\",\n tiktok: \"@carrier.llc\",\n },\n carrierApiUrl: \"https://api.carrier.llc\",\n};\n\nconst CARRIER_ACCENT_LIGHT = \"#FFB088\";\nconst CARRIER_ACCENT_GRADIENT_START = \"#FF7A45\";\n\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const h = hex.replace(/^#/, \"\");\n if (!/^[0-9a-fA-F]{6}$/.test(h)) return null;\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];\n}\n\nfunction rgbToHex(r: number, g: number, b: number, lower = false): string {\n const fmt = (n: number) =>\n Math.max(0, Math.min(255, Math.round(n)))\n .toString(16)\n .padStart(2, \"0\");\n const out = `#${fmt(r)}${fmt(g)}${fmt(b)}`;\n return lower ? out : out.toUpperCase();\n}\n\nfunction mixHexWithWhite(hex: string, whiteRatio: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n const mix = (n: number) => n + (255 - n) * whiteRatio;\n return rgbToHex(mix(rgb[0]), mix(rgb[1]), mix(rgb[2]));\n}\n\nfunction darkenHex(hex: string, factor: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n const scale = (n: number) => n * factor;\n return rgbToHex(scale(rgb[0]), scale(rgb[1]), scale(rgb[2]), true);\n}\n\n/** Derive a darker pressed-state accent; keeps the Carrier default pair when accent is unchanged. */\nexport function deriveAccentDark(accent: string, seed: Brand = CARRIER_BRAND): string {\n if (accent.toUpperCase() === seed.colors.accent.toUpperCase()) return seed.colors.accentDark;\n const rgb = hexToRgb(accent);\n if (!rgb) return accent;\n const scale = (n: number) => Math.max(0, Math.min(255, Math.round(n * 0.75)));\n return rgbToHex(scale(rgb[0]), scale(rgb[1]), scale(rgb[2]));\n}\n\n/** Derive a lighter accent for glows and `--brand-accent-light`. */\nexport function deriveAccentLight(accent: string, seed: Brand = CARRIER_BRAND): string {\n if (accent.toUpperCase() === seed.colors.accent.toUpperCase()) return CARRIER_ACCENT_LIGHT;\n return mixHexWithWhite(accent, 0.45);\n}\n\n/** Derive the lighter hero-gradient stop paired with accent. */\nexport function deriveAccentGradientStart(accent: string, seed: Brand = CARRIER_BRAND): string {\n if (accent.toUpperCase() === seed.colors.accent.toUpperCase()) return CARRIER_ACCENT_GRADIENT_START;\n return mixHexWithWhite(accent, 0.08);\n}\n\n/** Tree-wide hex swaps for accent-derived template colors (gradients, mango scale, CSS vars). */\nexport function deriveAccentPaletteSubs(accent: string, accentDark: string): Array<[string, string]> {\n if (accent.toUpperCase() === CARRIER_BRAND.colors.accent.toUpperCase()) return [];\n const accentLight = deriveAccentLight(accent);\n const gradientStart = deriveAccentGradientStart(accent);\n return [\n [\"#FF6B35\", accent],\n [\"#D9461C\", accentDark],\n [\"#FFB088\", accentLight],\n [\"#FF7A45\", gradientStart],\n [\"#fff4ef\", mixHexWithWhite(accent, 0.94).toLowerCase()],\n [\"#ffe0d0\", mixHexWithWhite(accent, 0.85).toLowerCase()],\n [\"#ffbfa0\", mixHexWithWhite(accent, 0.7).toLowerCase()],\n [\"#ff9970\", mixHexWithWhite(accent, 0.55).toLowerCase()],\n [\"#ff7d4d\", mixHexWithWhite(accent, 0.4).toLowerCase()],\n [\"#b33a17\", darkenHex(accentDark, 0.75)],\n [\"#8a2d12\", darkenHex(accentDark, 0.58)],\n [\"#5e1e0c\", darkenHex(accentDark, 0.4)],\n [\"#3a1107\", darkenHex(accentDark, 0.25)],\n ];\n}\n\n/** Serialize a brand to the `src/brand.config.ts` the storefront imports. */\nexport function renderBrandConfig(brand: Brand): string {\n return `// Auto-generated by @carrierllc/mcp — edit freely to re-brand this storefront.\n// This is the single white-label surface: name, copy, colors, domain, support.\nexport interface Brand {\n name: string;\n legalName: string;\n tagline: string;\n domain: string;\n supportEmail: string;\n supportUrl: string;\n colors: { bg: string; accent: string; accentDark: string; text: string };\n social: { x?: string; linkedin?: string };\n carrierApiUrl: string;\n}\n\nexport const brand: Brand = ${JSON.stringify(brand, null, 2)};\n\nexport default brand;\n`;\n}\n\n/** Serialize a brand to a `.env.local` for the storefront. */\nexport function renderEnv(brand: Brand): string {\n return [\n `# Generated by @carrierllc/mcp`,\n `NEXT_PUBLIC_BRAND_NAME=${JSON.stringify(brand.name)}`,\n `NEXT_PUBLIC_CARRIER_API_URL=${JSON.stringify(brand.carrierApiUrl)}`,\n `# Clerk (fill in from your Clerk dashboard to enable auth + checkout)`,\n `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=`,\n `CLERK_SECRET_KEY=`,\n ``,\n ].join(\"\\n\");\n}\n","import { join } from \"node:path\";\nimport { claudeHome, installedPluginDir, pluginManifestDir, pluginSourceDir } from \"./paths.js\";\nimport { copyTree, exists, readFile } from \"./fsx.js\";\nimport { run, which } from \"./exec.js\";\n\nexport const MCP_NAME = \"carrier\";\nexport const MCP_URL = \"https://mcp.carrier.llc/mcp\";\n\nexport interface InstallReport {\n copiedTo: string;\n marketplaceAdded: boolean;\n pluginInstalled: boolean;\n mcpAdded: boolean;\n claudeFound: boolean;\n notes: string[];\n}\n\n/**\n * Install the bundled Carrier Claude Code plugin:\n * 1. copy plugin → ~/.claude/plugins/carrier\n * 2. best-effort register marketplace + install via the `claude` CLI\n * 3. best-effort register the Carrier MCP server (HTTP + OAuth)\n * Best-effort steps never hard-fail; a manual fallback is always reported.\n */\nexport async function installPlugin(): Promise<InstallReport> {\n const marketplace = pluginSourceDir();\n const pluginRoot = pluginManifestDir();\n const dest = installedPluginDir();\n const notes: string[] = [];\n\n if (!(await exists(pluginRoot))) {\n throw new Error(`Bundled plugin not found at ${pluginRoot}. Reinstall @carrierllc/mcp.`);\n }\n\n // Fallback drop-in is the plugin itself (carrier/), not the marketplace wrapper.\n await copyTree(pluginRoot, dest);\n\n const claudeFound = await which(\"claude\");\n let marketplaceAdded = false;\n let pluginInstalled = false;\n let mcpAdded = false;\n\n if (claudeFound) {\n const mkt = await run(\"claude\", [\"plugin\", \"marketplace\", \"add\", marketplace]);\n marketplaceAdded = (mkt.ok && !/✘|failed|error/i.test(mkt.stdout + mkt.stderr)) || /already/i.test(mkt.stderr + mkt.stdout);\n if (!marketplaceAdded) notes.push(`marketplace add: ${(mkt.stderr || mkt.stdout).trim().slice(0, 200)}`);\n\n // `claude plugin install` exits 0 even on failure — gate on output text, not just exit code.\n const inst = await run(\"claude\", [\"plugin\", \"install\", \"carrier@carrier\"]);\n const instOut = inst.stdout + inst.stderr;\n pluginInstalled =\n /✔|success(fully)? installed|already (installed|enabled)/i.test(instOut) && !/✘|failed/i.test(instOut);\n if (!pluginInstalled) notes.push(`plugin install: ${instOut.replace(/\\s+/g, \" \").trim().slice(0, 200)}`);\n\n const mcp = await run(\"claude\", [\"mcp\", \"add\", \"--transport\", \"http\", MCP_NAME, MCP_URL]);\n mcpAdded = mcp.ok || /already|exists/i.test(mcp.stderr + mcp.stdout);\n if (!mcpAdded) notes.push(`mcp add: ${(mcp.stderr || mcp.stdout).trim().slice(0, 200)}`);\n } else {\n notes.push(\"`claude` CLI not on PATH — plugin copied; finish wiring with the manual commands below.\");\n }\n\n return { copiedTo: dest, marketplaceAdded, pluginInstalled, mcpAdded, claudeFound, notes };\n}\n\nexport async function pluginStatus(): Promise<{ installed: boolean; version?: string; dir: string }> {\n const dir = installedPluginDir();\n const manifest = join(dir, \".claude-plugin\", \"plugin.json\");\n if (!(await exists(manifest))) return { installed: false, dir };\n try {\n const json = JSON.parse(await readFile(manifest, \"utf8\")) as { version?: string };\n return { installed: true, version: json.version, dir };\n } catch {\n return { installed: true, dir };\n }\n}\n\nexport function manualCommands(): string[] {\n return [\n `claude plugin marketplace add ${pluginSourceDir()}`,\n `claude plugin install carrier@carrier`,\n `claude mcp add --transport http ${MCP_NAME} ${MCP_URL}`,\n ];\n}\n\nexport { claudeHome };\n","import { fileURLToPath } from \"node:url\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\n\n/**\n * Package root = the installed @carrierllc/mcp directory.\n * dist/index.js lives at <root>/dist/index.js, so root is one level up.\n * The bundled `plugin/` and `templates/` dirs are shipped alongside `dist`.\n */\nexport function packageRoot(): string {\n const here = dirname(fileURLToPath(import.meta.url));\n // When bundled, `here` is <root>/dist. During ts-node/source runs it is <root>/src/lib.\n for (const candidate of [resolve(here, \"..\"), resolve(here, \"..\", \"..\")]) {\n if (existsSync(join(candidate, \"plugin\")) && existsSync(join(candidate, \"templates\"))) {\n return candidate;\n }\n }\n return resolve(here, \"..\");\n}\n\n/** Marketplace root — passed to `claude plugin marketplace add`. */\nexport function pluginSourceDir(): string {\n return join(packageRoot(), \"plugin\");\n}\n\n/** Plugin root (the `carrier/` subdir of the marketplace) — used for the file-copy\n * fallback and reading the plugin manifest. Claude Code rejects a marketplace that\n * points a plugin at its own root (`source: \".\"`), so the plugin lives one level in. */\nexport function pluginManifestDir(): string {\n return join(packageRoot(), \"plugin\", \"carrier\");\n}\n\nexport function storefrontTemplateDir(): string {\n return join(packageRoot(), \"templates\", \"storefront\");\n}\n\n/** ~/.claude — Claude Code's user config home. */\nexport function claudeHome(): string {\n return process.env.CLAUDE_CONFIG_DIR\n ? resolve(process.env.CLAUDE_CONFIG_DIR)\n : join(homedir(), \".claude\");\n}\n\nexport function claudePluginsDir(): string {\n return join(claudeHome(), \"plugins\");\n}\n\nexport function installedPluginDir(): string {\n return join(claudePluginsDir(), \"carrier\");\n}\n","import { cp, mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst SKIP = new Set([\n \"node_modules\",\n \".next\",\n \".turbo\",\n \".vercel\",\n \"dist\",\n \".git\",\n \"test-results\",\n \"playwright-report\",\n]);\n\nconst cpFilter = (s: string) => {\n const base = s.split(\"/\").pop() ?? \"\";\n return !SKIP.has(base);\n};\n\n/** Recursively copy a directory's contents into `dest`, skipping build artifacts and VCS noise. */\nexport async function copyTree(src: string, dest: string): Promise<void> {\n await mkdir(dest, { recursive: true });\n for (const entry of await readdir(src, { withFileTypes: true })) {\n if (SKIP.has(entry.name)) continue;\n await cp(join(src, entry.name), join(dest, entry.name), {\n recursive: true,\n filter: cpFilter,\n });\n }\n}\n\n/** Remove paths under `dest` that are absent from `src` (mirror sync after `copyTree`). */\nexport async function pruneTree(src: string, dest: string): Promise<void> {\n if (!(await isDir(dest))) return;\n for (const entry of await readdir(dest, { withFileTypes: true })) {\n if (SKIP.has(entry.name)) continue;\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n if (!existsSync(srcPath)) {\n await rm(destPath, { recursive: true, force: true });\n continue;\n }\n if (entry.isDirectory() && (await isDir(srcPath))) await pruneTree(srcPath, destPath);\n }\n}\n\n/** Walk every file under `dir` and yield absolute paths. */\nexport async function* walk(dir: string): AsyncGenerator<string> {\n for (const entry of await readdir(dir, { withFileTypes: true })) {\n if (SKIP.has(entry.name)) continue;\n const full = join(dir, entry.name);\n if (entry.isDirectory()) yield* walk(full);\n else yield full;\n }\n}\n\nconst TEXT_EXT = new Set([\n \".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\",\n \".json\", \".css\", \".md\", \".mdx\", \".html\", \".txt\",\n \".env\", \".example\", \".yml\", \".yaml\", \".toml\",\n]);\n\nexport function isTextFile(path: string): boolean {\n const dot = path.lastIndexOf(\".\");\n if (dot === -1) return false;\n return TEXT_EXT.has(path.slice(dot));\n}\n\n/** Apply ordered [find, replace] string substitutions to every text file under `dir`. */\nexport async function replaceInTree(\n dir: string,\n subs: ReadonlyArray<readonly [from: string | RegExp, to: string]>,\n): Promise<number> {\n let touched = 0;\n for await (const file of walk(dir)) {\n if (!isTextFile(file)) continue;\n const before = await readFile(file, \"utf8\");\n let after = before;\n for (const [from, to] of subs) {\n after = typeof from === \"string\" ? after.split(from).join(to) : after.replace(from, to);\n }\n if (after !== before) {\n await writeFile(file, after);\n touched++;\n }\n }\n return touched;\n}\n\nexport async function exists(p: string): Promise<boolean> {\n return existsSync(p);\n}\n\nexport async function isDir(p: string): Promise<boolean> {\n try {\n return (await stat(p)).isDirectory();\n } catch {\n return false;\n }\n}\n\nexport { writeFile, mkdir, readFile, readdir };\n","import { spawn } from \"node:child_process\";\n\nexport interface RunResult {\n ok: boolean;\n code: number | null;\n stdout: string;\n stderr: string;\n}\n\n/** Run a command, capturing output. Never throws — inspect `.ok`. */\nexport function run(cmd: string, args: string[], opts: { cwd?: string } = {}): Promise<RunResult> {\n return new Promise((resolve) => {\n const child = spawn(cmd, args, { cwd: opts.cwd, shell: false });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout?.on(\"data\", (d) => (stdout += d.toString()));\n child.stderr?.on(\"data\", (d) => (stderr += d.toString()));\n child.on(\"error\", () => resolve({ ok: false, code: null, stdout, stderr }));\n child.on(\"close\", (code) => resolve({ ok: code === 0, code, stdout, stderr }));\n });\n}\n\n/** Run a command inheriting stdio (for long, user-visible tasks like installs/builds). */\nexport function runInherit(cmd: string, args: string[], opts: { cwd?: string } = {}): Promise<RunResult> {\n return new Promise((resolve) => {\n const child = spawn(cmd, args, { cwd: opts.cwd, shell: false, stdio: \"inherit\" });\n child.on(\"error\", () => resolve({ ok: false, code: null, stdout: \"\", stderr: \"\" }));\n child.on(\"close\", (code) => resolve({ ok: code === 0, code, stdout: \"\", stderr: \"\" }));\n });\n}\n\n/** True if a binary is resolvable on PATH. */\nexport async function which(bin: string): Promise<boolean> {\n const probe = process.platform === \"win32\" ? \"where\" : \"which\";\n const r = await run(probe, [bin]);\n return r.ok && r.stdout.trim().length > 0;\n}\n","import { join } from \"node:path\";\nimport { storefrontTemplateDir } from \"./paths.js\";\nimport { Brand, deriveAccentLight, deriveAccentPaletteSubs, renderEnv } from \"./brand.js\";\nimport { copyTree, exists, pruneTree, readFile, replaceInTree, writeFile } from \"./fsx.js\";\n\n/**\n * Scaffold a white-labeled storefront from the bundled Mango-derived template.\n *\n * Strategy: the template's own `src/brand.config.ts` is the canonical schema the\n * components consume (it carries extra fields like supportWhatsapp/accentLight).\n * We PATCH its values in place rather than regenerate it, so we never drop a field\n * a component depends on. Tree-wide replacements are limited to unambiguous tokens\n * (visible \"Mango\" copy, the 🥭 mark, and hex colors) — never the `carrier.llc`\n * apex, which is also the real api./mcp. control-plane host.\n */\n/** Keep non-empty Clerk keys from a prior `.env.local` when re-scaffolding. */\nfunction preserveClerkFromEnv(existing: string, fresh: string): string {\n let out = fresh;\n for (const key of [\"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\", \"CLERK_SECRET_KEY\"] as const) {\n const line = existing.split(\"\\n\").find((l) => l.startsWith(`${key}=`));\n if (!line) continue;\n const value = line.slice(key.length + 1);\n if (!value.trim()) continue;\n out = out.replace(new RegExp(`^${key}=.*$`, \"m\"), `${key}=${value}`);\n }\n return out;\n}\n\nexport async function scaffoldStorefront(target: string, brand: Brand): Promise<void> {\n const template = storefrontTemplateDir();\n if (!(await exists(template))) {\n throw new Error(\n `Storefront template not found at ${template}. The @carrierllc/mcp package may be corrupt — reinstall it.`,\n );\n }\n\n const envPath = join(target, \".env.local\");\n const existingEnv = (await exists(envPath)) ? await readFile(envPath, \"utf8\") : undefined;\n\n await copyTree(template, target);\n await pruneTree(template, target);\n\n // Tree-wide, unambiguous swaps only.\n const subs: Array<[string, string]> = [\n [\"Mango\", brand.name],\n [\"🥭\", \"\"],\n ];\n // Hex colors are safe to swap globally (they appear in globals.css + brand.config).\n subs.push(...deriveAccentPaletteSubs(brand.colors.accent, brand.colors.accentDark));\n if (brand.colors.bg.toUpperCase() !== \"#080C16\") subs.push([\"#080C16\", brand.colors.bg]);\n if (brand.colors.text.toUpperCase() !== \"#F5F1EA\") subs.push([\"#F5F1EA\", brand.colors.text]);\n await replaceInTree(target, subs);\n\n // Patch the canonical brand.config.ts field values in place.\n await patchBrandConfig(join(target, \"src\", \"brand.config.ts\"), brand);\n\n // Runtime env (brand name + control-plane URL).\n const envBody = existingEnv ? preserveClerkFromEnv(existingEnv, renderEnv(brand)) : renderEnv(brand);\n await writeFile(envPath, envBody);\n\n // npm strips nested .npmrc on publish, so (re)write it for standalone installs —\n // lets `pnpm install` work even when the storefront is created inside a workspace.\n await writeFile(join(target, \".npmrc\"), \"ignore-workspace-root-check=true\\n\");\n}\n\n/** Field-scoped value patches against the template's brand.config.ts — preserves its schema. */\nasync function patchBrandConfig(path: string, brand: Brand): Promise<void> {\n if (!(await exists(path))) return;\n let src = await readFile(path, \"utf8\");\n\n const setField = (field: string, value: string): void => {\n // matches ` field: \"...\"` or ` field: process.env.X ?? \"...\"` — replaces the LAST quoted literal on that key's line\n const re = new RegExp(`(\\\\b${field}:\\\\s*(?:[^\"\\\\n]*\\\\?\\\\?\\\\s*)?)\"[^\"]*\"`);\n src = src.replace(re, `$1${JSON.stringify(value)}`);\n };\n\n setField(\"name\", brand.name);\n setField(\"legalName\", brand.legalName);\n setField(\"tagline\", brand.tagline);\n setField(\"domain\", brand.domain);\n setField(\"supportUrl\", brand.supportUrl);\n setField(\"supportEmail\", brand.supportEmail);\n setField(\"supportWhatsapp\", brand.supportWhatsapp);\n setField(\"accent\", brand.colors.accent);\n setField(\"accentDark\", brand.colors.accentDark);\n setField(\"accentLight\", deriveAccentLight(brand.colors.accent));\n setField(\"bg\", brand.colors.bg);\n\n const socialEntries = Object.entries(brand.social).filter(([, v]) => v);\n const socialBody = socialEntries.map(([k, v]) => ` ${k}: ${JSON.stringify(v)},`).join(\"\\n\");\n src = src.replace(\n /social:\\s*\\{[^}]*\\}/s,\n socialEntries.length ? `social: {\\n${socialBody}\\n }` : \"social: {}\",\n );\n\n await writeFile(path, src);\n}\n","import { join } from \"node:path\";\nimport { Brand, CARRIER_BRAND } from \"./brand.js\";\nimport { exists, readFile } from \"./fsx.js\";\nimport { runInherit, which } from \"./exec.js\";\n\nfunction slug(s: string): string {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 40) || \"storefront\";\n}\n\n/** Install storefront deps. Uses npm to stay independent of the pnpm workspace. */\nexport async function installDeps(target: string): Promise<boolean> {\n const pkgMgr = (await which(\"pnpm\")) ? \"pnpm\" : \"npm\";\n const r = await runInherit(pkgMgr, [\"install\"], { cwd: target });\n return r.ok;\n}\n\nexport async function buildSite(target: string): Promise<boolean> {\n const pkgMgr = (await which(\"pnpm\")) ? \"pnpm\" : \"npm\";\n // cf:build runs `next build` internally (via OpenNext) then emits the\n // .open-next/worker.js bundle that deploySite ships to Cloudflare.\n const r = await runInherit(pkgMgr, [\"run\", \"cf:build\"], { cwd: target });\n return r.ok;\n}\n\n/** Read white-label name from a scaffolded storefront (falls back to Carrier defaults). */\nexport async function loadStorefrontBrand(\n target: string,\n overrides?: { name?: string },\n): Promise<Brand> {\n const configPath = join(target, \"src\", \"brand.config.ts\");\n if (!(await exists(configPath))) {\n return { ...CARRIER_BRAND, ...overrides };\n }\n const src = await readFile(configPath, \"utf8\");\n const pick = (field: string, fallback: string): string => {\n const m = src.match(new RegExp(`\\\\b${field}:\\\\s*(?:[^\"\\\\n]*\\\\?\\\\?\\\\s*)?\"([^\"]*)\"`));\n return m?.[1] ?? fallback;\n };\n return {\n ...CARRIER_BRAND,\n name: overrides?.name ?? pick(\"name\", CARRIER_BRAND.name),\n domain: pick(\"domain\", CARRIER_BRAND.domain),\n supportEmail: pick(\"supportEmail\", CARRIER_BRAND.supportEmail),\n supportUrl: pick(\"supportUrl\", CARRIER_BRAND.supportUrl),\n tagline: pick(\"tagline\", CARRIER_BRAND.tagline),\n legalName: pick(\"legalName\", CARRIER_BRAND.legalName),\n colors: {\n ...CARRIER_BRAND.colors,\n accent: pick(\"accent\", CARRIER_BRAND.colors.accent),\n accentDark: pick(\"accentDark\", CARRIER_BRAND.colors.accentDark),\n bg: pick(\"bg\", CARRIER_BRAND.colors.bg),\n text: pick(\"text\", CARRIER_BRAND.colors.text),\n },\n carrierApiUrl: CARRIER_BRAND.carrierApiUrl,\n };\n}\n\n/**\n * Deploy the OpenNext build to Cloudflare Workers via wrangler.\n * Returns false (with guidance) when wrangler is absent or unauthenticated.\n */\nexport async function deploySite(\n target: string,\n brand: Brand,\n): Promise<{ ok: boolean; projectName: string; reason?: string }> {\n const projectName = slug(brand.name);\n const workerBundle = join(target, \".open-next\", \"worker.js\");\n if (!(await exists(workerBundle))) {\n return {\n ok: false,\n projectName,\n reason:\n \"No OpenNext build found — run `carrier site deploy` (build step) or `pnpm run build` in the storefront first.\",\n };\n }\n if (!(await which(\"wrangler\")) && !(await which(\"npx\"))) {\n return { ok: false, projectName, reason: \"wrangler/npx not found — install wrangler to deploy.\" };\n }\n const bin = (await which(\"wrangler\")) ? \"wrangler\" : \"npx\";\n const args =\n bin === \"wrangler\"\n ? [\"deploy\", \"--name\", projectName]\n : [\"wrangler\", \"deploy\", \"--name\", projectName];\n const r = await runInherit(bin, args, { cwd: target });\n return r.ok\n ? { ok: true, projectName }\n : { ok: false, projectName, reason: \"wrangler deploy failed — run `wrangler login` then retry `carrier site deploy`.\" };\n}\n\nexport { slug };\n"],"mappings":"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","names":["resolve","join","existsSync","join","p","resolve","join","join","join","join","join","resolve"]}