{"version":3,"sources":["../src/cli/commands/sync.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport {\n  PromptsApiService,\n  PromptsError,\n} from \"@/client-sdk/services/prompts\";\nimport type { SyncResult } from \"../types\";\nimport { FileManager } from \"../utils/fileManager\";\nimport { ensureProjectInitialized } from \"../utils/init\";\nimport { checkApiKey } from \"../utils/apiKey\";\nimport { pullPrompts } from \"./pull\";\nimport { pushPrompts } from \"./push\";\nimport { formatApiErrorMessage } from \"@/client-sdk/services/_shared/format-api-error\";\n\nexport const syncCommand = async (): Promise<void> => {\n  console.log(\"🔄 Starting sync...\");\n\n  const startTime = Date.now();\n\n  try {\n    // Check API key before doing anything else\n    checkApiKey();\n\n    // Get prompts API service\n    const promptsApiService = new PromptsApiService();\n\n    // Ensure project is initialized (prompts.json, lock file, directories)\n    await ensureProjectInitialized(false); // Don't prompt for .gitignore in sync\n\n    // Load prompts config and lock\n    const config = FileManager.loadPromptsConfig();\n    const lock = FileManager.loadPromptsLock();\n\n    const result: SyncResult = {\n      fetched: [],\n      pushed: [],\n      unchanged: [],\n      cleaned: [],\n      errors: [],\n    };\n\n    // Pull remote prompts (fetch and materialize)\n    await pullPrompts({ config, lock, promptsApiService, result });\n\n    // Push local prompts to API\n    await pushPrompts({ config, lock, promptsApiService, result });\n\n    // Save the updated lock file\n    FileManager.savePromptsLock(lock);\n\n    // Print individual results if there were actions\n    if (result.fetched.length > 0) {\n      for (const { name, version, versionSpec } of result.fetched) {\n        const lockEntry = lock.prompts[name];\n        const displayPath = lockEntry?.materialized\n          ? `./${lockEntry.materialized}`\n          : `./prompts/.materialized/${name}.prompt.yaml`;\n\n        console.log(\n          chalk.green(\n            `✓ Pulled ${chalk.cyan(`${name}@${versionSpec}`)} ${chalk.gray(\n              `(version ${version})`\n            )} → ${chalk.gray(displayPath)}`\n          )\n        );\n      }\n    }\n\n    if (result.pushed.length > 0) {\n      for (const { name, version } of result.pushed) {\n        const localPath = `./prompts/${name}.prompt.yaml`;\n        console.log(\n          chalk.green(\n            `✓ Pushed ${chalk.cyan(name)} ${chalk.gray(\n              `(version ${version})`\n            )} from ${chalk.gray(localPath)}`\n          )\n        );\n      }\n    }\n\n    // Print cleaned up files\n    if (result.cleaned.length > 0) {\n      for (const name of result.cleaned) {\n        console.log(\n          chalk.yellow(\n            `✓ Cleaned ${chalk.cyan(name)} (no longer in dependencies)`\n          )\n        );\n      }\n    }\n\n    // Print errors\n    if (result.errors.length > 0) {\n      for (const { name, error } of result.errors) {\n        console.error(chalk.red(`✗ Failed ${chalk.cyan(name)}: ${error}`));\n      }\n    }\n\n    // Print summary\n    const duration = ((Date.now() - startTime) / 1000).toFixed(1);\n    const totalActions =\n      result.fetched.length + result.pushed.length + result.cleaned.length;\n\n    if (totalActions === 0 && result.errors.length === 0) {\n      console.log(chalk.gray(`Synced in ${duration}s, no changes`));\n    } else {\n      const summary = [];\n      if (result.fetched.length > 0)\n        summary.push(`${result.fetched.length} fetched`);\n      if (result.pushed.length > 0)\n        summary.push(`${result.pushed.length} pushed`);\n      if (result.cleaned.length > 0)\n        summary.push(`${result.cleaned.length} cleaned`);\n      if (result.errors.length > 0)\n        summary.push(`${result.errors.length} errors`);\n\n      console.log(chalk.gray(`Synced ${summary.join(\", \")} in ${duration}s`));\n    }\n\n    if (result.errors.length > 0) {\n      process.exit(1);\n    }\n  } catch (error) {\n    if (error instanceof PromptsError) {\n      console.error(chalk.red(`Error: ${error.message}`));\n    } else {\n      console.error(\n        chalk.red(\n          `Unexpected error: ${\n            formatApiErrorMessage({ error })\n          }`\n        )\n      );\n    }\n    process.exit(1);\n  }\n};\n"],"mappings":"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","names":[]}