{"version":3,"sources":["../src/cli/commands/agents/run.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { AgentsApiService } from \"@/client-sdk/services/agents/agents-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { formatFetchError } from \"../../utils/formatFetchError\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { buildAuthHeaders } from \"@/internal/api/auth\";\n\nimport { resolveControlPlaneUrl } from \"@/cli/utils/governance/resolveEndpoint\";\nexport const runAgentCommand = async (\n  id: string,\n  options: { input?: string; format?: string },\n): Promise<void> => {\n  checkApiKey();\n\n  const service = new AgentsApiService();\n\n  // First get the agent to determine its type\n  const resolveSpinner = ora(`Fetching agent \"${id}\"...`).start();\n\n  let agent;\n  try {\n    agent = await service.get(id);\n    resolveSpinner.succeed(`Found agent \"${agent.name}\" (type: ${agent.type})`);\n  } catch (error) {\n    failSpinner({\n      spinner: resolveSpinner,\n      error,\n      action: `fetch agent \"${id}\"`,\n    });\n    process.exit(1);\n  }\n\n  let input: Record<string, unknown> = {};\n  if (options.input) {\n    try {\n      input = JSON.parse(options.input) as Record<string, unknown>;\n    } catch {\n      console.error(chalk.red(\"Error: --input must be valid JSON\"));\n      process.exit(1);\n    }\n  }\n\n  const config = agent.config;\n\n  if (agent.type === \"http\") {\n    // HTTP agent — call the URL directly\n    const url = config?.url as string | undefined;\n    if (!url) {\n      console.error(chalk.red(\"Error: HTTP agent has no URL configured\"));\n      process.exit(1);\n    }\n\n    const runSpinner = ora(`Calling HTTP agent at ${url}...`).start();\n    try {\n      const response = await fetch(url, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(input),\n      });\n\n      const result = await response.json() as Record<string, unknown>;\n      runSpinner.succeed(`HTTP agent responded (${response.status})`);\n\n      if (options.format === \"json\") {\n        console.log(JSON.stringify(result, null, 2));\n      } else {\n        console.log();\n        console.log(chalk.bold(\"  Response:\"));\n        console.log(`    ${JSON.stringify(result, null, 2).split(\"\\n\").join(\"\\n    \")}`);\n        console.log();\n      }\n    } catch (error) {\n      failSpinner({ spinner: runSpinner, error, action: \"call HTTP agent\" });\n      process.exit(1);\n    }\n  } else {\n    // For signature/code/workflow agents, try to run via the workflow API\n    const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n    const endpoint = resolveControlPlaneUrl();\n\n    // Check if agent has a linked workflow\n    const workflowId = config?.workflowId as string | undefined;\n    if (!workflowId) {\n      console.error(chalk.yellow(\n        `Agent \"${agent.name}\" (type: ${agent.type}) cannot be executed directly from CLI.\\n` +\n        `Only HTTP agents and workflow-linked agents can be run.\\n` +\n        `To test this agent, use it within a workflow in the UI.`,\n      ));\n      process.exit(1);\n    }\n\n    const runSpinner = ora(`Running agent via workflow ${workflowId}...`).start();\n    try {\n      const response = await fetch(\n        `${endpoint}/api/workflows/${encodeURIComponent(workflowId)}/run`,\n        {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            ...buildAuthHeaders({ apiKey }),\n          },\n          body: JSON.stringify(input),\n        },\n      );\n\n      if (!response.ok) {\n        const message = await formatFetchError(response);\n        runSpinner.fail(`Agent execution failed: ${message}`);\n        process.exit(1);\n      }\n\n      const result = await response.json() as Record<string, unknown>;\n      runSpinner.succeed(`Agent \"${agent.name}\" executed successfully`);\n\n      if (options.format === \"json\") {\n        console.log(JSON.stringify(result, null, 2));\n      } else {\n        console.log();\n        if (result.output !== undefined) {\n          console.log(chalk.bold(\"  Output:\"));\n          const output = typeof result.output === \"string\"\n            ? result.output\n            : JSON.stringify(result.output, null, 2);\n          console.log(`    ${output.split(\"\\n\").join(\"\\n    \")}`);\n        } else {\n          console.log(chalk.bold(\"  Result:\"));\n          console.log(`    ${JSON.stringify(result, null, 2).split(\"\\n\").join(\"\\n    \")}`);\n        }\n        console.log();\n      }\n    } catch (error) {\n      failSpinner({\n        spinner: runSpinner,\n        error,\n        action: `run agent \"${agent.name}\"`,\n      });\n      process.exit(1);\n    }\n  }\n};\n"],"mappings":"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","names":[]}