{"version":3,"sources":["../../src/codegen/cli.ts"],"names":["args","resolve","readFileSync"],"mappings":"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","file":"cli.cjs","sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { ToolDefinition } from \"../types.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (command === \"codegen\") {\n  runCodegen(args.slice(1));\n} else if (command === \"preview\") {\n  runPreview(args.slice(1));\n} else if (command === \"check\") {\n  runCheck(args.slice(1));\n} else {\n  console.log(\"Usage:\");\n  console.log(\"  synapse codegen   Generate TypeScript types from tool schemas\");\n  console.log(\"  synapse preview   Run a standalone preview of an MCP app with UI\");\n  console.log(\"  synapse check     Check a running server against host store requirements\");\n  process.exit(command === \"--help\" || command === \"-h\" ? 0 : 1);\n}\n\n// ---------------------------------------------------------------------------\n// codegen\n// ---------------------------------------------------------------------------\n\nasync function runCodegen(args: string[]): Promise<void> {\n  const { readFromManifest, readFromSchemaDir, readFromServer } = await import(\n    \"./schema-reader.js\"\n  );\n  const { generateTypes } = await import(\"./type-generator.js\");\n  const { writeOutput } = await import(\"./writer.js\");\n\n  const flags = parseFlags(args, [\"from-manifest\", \"from-server\", \"from-schema\", \"out\", \"app\"]);\n\n  if (!flags[\"from-manifest\"] && !flags[\"from-server\"] && !flags[\"from-schema\"]) {\n    console.error(\"Usage:\");\n    console.error(\n      \"  synapse codegen --from-manifest ./manifest.json [--out ./types.ts] [--app name]\",\n    );\n    console.error(\"  synapse codegen --from-server http://localhost:3000/mcp [--out ./types.ts]\");\n    console.error(\"  synapse codegen --from-schema ./schemas/ [--out ./types.ts]\");\n    process.exit(1);\n  }\n\n  try {\n    let tools: ToolDefinition[];\n    let appName = flags.app;\n\n    if (flags[\"from-manifest\"]) {\n      const manifestPath = resolve(flags[\"from-manifest\"]);\n      tools = readFromManifest(manifestPath);\n      if (!appName) {\n        const raw = JSON.parse(readFileSync(manifestPath, \"utf-8\"));\n        appName = raw.name ?? \"app\";\n      }\n    } else if (flags[\"from-server\"]) {\n      tools = await readFromServer(flags[\"from-server\"]);\n      appName = appName ?? \"app\";\n    } else {\n      tools = readFromSchemaDir(resolve(flags[\"from-schema\"] as string));\n      appName = appName ?? \"app\";\n    }\n\n    if (tools.length === 0) console.error(\"Warning: No tools found\");\n\n    const output = generateTypes(tools, appName ?? \"app\");\n    const outPath = resolve(flags.out ?? \"src/generated/types.ts\");\n    writeOutput(output, outPath);\n    console.log(`Generated ${tools.length} tool types -> ${outPath}`);\n  } catch (err) {\n    console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);\n    process.exit(1);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// preview\n// ---------------------------------------------------------------------------\n\nasync function runPreview(args: string[]): Promise<void> {\n  const { startPreview } = await import(\"../preview/server.js\");\n\n  const flags = parseFlags(args, [\"server\", \"ui\", \"server-port\", \"ui-port\", \"port\"]);\n\n  if (!flags.server || !flags.ui) {\n    console.error(\"Usage:\");\n    console.error(\n      '  synapse preview --server \"uv run uvicorn mcp_hello.server:app --port 8001\" --ui ./ui',\n    );\n    console.error(\"\");\n    console.error(\"Options:\");\n    console.error(\"  --server <cmd>        Shell command to start the MCP server (HTTP mode)\");\n    console.error(\"  --ui <path>           Path to UI directory (must have package.json)\");\n    console.error(\"  --server-port <port>  MCP server port (default: 8001)\");\n    console.error(\"  --ui-port <port>      Vite dev server port (default: 5173)\");\n    console.error(\"  --port <port>         Preview harness port (default: 5180)\");\n    process.exit(1);\n  }\n\n  await startPreview({\n    serverCmd: flags.server,\n    uiDir: flags.ui,\n    serverPort: Number(flags[\"server-port\"] ?? 8001),\n    uiPort: Number(flags[\"ui-port\"] ?? 5173),\n    previewPort: Number(flags.port ?? 5180),\n  });\n}\n\n// ---------------------------------------------------------------------------\n// check\n// ---------------------------------------------------------------------------\n\nasync function runCheck(args: string[]): Promise<void> {\n  const { applyProfiles, formatReport, isTargetName, PROFILES, runChecks } = await import(\n    \"../check/index.js\"\n  );\n\n  const flags = parseFlags(args, [\"target\", \"token\"]);\n  const json = args.includes(\"--json\");\n  const positional = args.filter(\n    (arg, i) => !arg.startsWith(\"--\") && ![\"--target\", \"--token\"].includes(args[i - 1]),\n  );\n  const url = positional[0];\n  const targets = (flags.target ?? \"\").split(\",\").filter(Boolean);\n  const unknown = targets.filter((t) => !isTargetName(t));\n\n  if (!url || targets.length === 0 || unknown.length > 0) {\n    if (unknown.length > 0) console.error(`Unknown target: ${unknown.join(\", \")}`);\n    console.error(\"Usage:\");\n    console.error(\"  synapse check --target claude,chatgpt https://example.com/mcp\");\n    console.error(\"\");\n    console.error(\"Options:\");\n    console.error(`  --target <list>  Comma-separated: ${Object.keys(PROFILES).join(\", \")}`);\n    console.error(\"  --token <token>  Bearer token for a server that requires auth\");\n    console.error(\"                   (default: $SYNAPSE_CHECK_TOKEN)\");\n    console.error(\"  --json           Print the report as JSON\");\n    process.exit(1);\n  }\n\n  try {\n    const results = await runChecks(url, {\n      token: flags.token ?? process.env.SYNAPSE_CHECK_TOKEN,\n    });\n    const reports = applyProfiles(results, targets.filter(isTargetName));\n    console.log(json ? JSON.stringify({ url, reports }, null, 2) : formatReport(url, reports));\n    process.exit(reports.some((r) => r.failed) ? 1 : 0);\n  } catch (err) {\n    console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);\n    process.exit(1);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// helpers\n// ---------------------------------------------------------------------------\n\nfunction parseFlags(args: string[], known: string[]): Record<string, string> {\n  const flags: Record<string, string> = {};\n  for (let i = 0; i < args.length; i++) {\n    const key = args[i].replace(/^--/, \"\");\n    if (known.includes(key) && i + 1 < args.length) {\n      flags[key] = args[++i];\n    }\n  }\n  return flags;\n}\n"]}