{"version":3,"sources":["jsdelivr-header.js","/npm/make-agent@0.4.1/dist/index.js"],"names":[],"mappings":"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","file":"/npm/make-agent@0.4.1/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/make-agent@0.4.1/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\n\n// src/index.ts\nimport { program } from \"commander\";\nimport dotenv4 from \"dotenv\";\n\n// package.json\nvar package_default = {\n  name: \"make-agent\",\n  type: \"module\",\n  version: \"0.4.1\",\n  main: \"dist/index.js\",\n  module: \"dist/index.mjs\",\n  types: \"dist/index.d.ts\",\n  bin: {\n    \"make-agent\": \"./dist/index.js\"\n  },\n  repository: {\n    type: \"git\",\n    url: \"git+https://github.com/bitteprotocol/make-agent\"\n  },\n  bugs: {\n    url: \"https://github.com/bitteprotocol/make-agent/issues\"\n  },\n  homepage: \"https://docs.bitte.ai/agents/make-agent\",\n  scripts: {\n    dev: \"tsx ./src/index.ts dev\",\n    build: \"tsup ./src/index.ts --format cjs,esm --dts --clean && cd ../playground && turbo build --filter=playground\",\n    typecheck: \"tsc --noEmit\",\n    check: \"biome check\",\n    \"check:fix\": \"biome check --write\",\n    clean: \"rm -rf dist\",\n    \"clean:all\": \"rm -rf dist node_modules .turbo\",\n    test: \"vitest\"\n  },\n  keywords: [\n    \"ai\",\n    \"agent\",\n    \"cli\"\n  ],\n  author: \"Bitte Team\",\n  license: \"MIT\",\n  dependencies: {\n    \"@apidevtools/swagger-parser\": \"^12.0.0\",\n    ajv: \"^8.17.1\",\n    \"ajv-draft-04\": \"^1.0.0\",\n    borsh: \"^2.0.0\",\n    commander: \"^12.1.0\",\n    dotenv: \"^16.4.7\",\n    express: \"^4.21.2\",\n    inquirer: \"^12.5.0\",\n    \"is-port-reachable\": \"^4.0.0\",\n    \"js-sha256\": \"^0.11.0\",\n    \"near-api-js\": \"^6\",\n    open: \"^10.1.0\"\n  },\n  devDependencies: {\n    \"@types/express\": \"^5.0.1\",\n    \"@types/inquirer\": \"^9.0.7\",\n    \"@types/node\": \"^22.13.14\",\n    \"@vitest/coverage-v8\": \"^3.0.9\",\n    tsup: \"^8.4.0\",\n    tsx: \"^4.19.3\",\n    typescript: \"^5.8.2\",\n    vitest: \"^3.0.9\"\n  }\n};\n\n// src/commands/contract.ts\nimport { exec, spawn } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { Command } from \"commander\";\nimport inquirer from \"inquirer\";\nvar execAsync = promisify(exec);\nvar contractCommand = new Command().name(\"contract\").description(\"Generate an AI agent from a Near Protocol contract\").action(async () => {\n  try {\n    const answers = await promptQuestions();\n    const outputDir = path.resolve(answers.output);\n    await fs.mkdir(outputDir, { recursive: true });\n    await generateTypes(outputDir, answers.contract);\n    const code = await generateAIAgent(answers, outputDir);\n    await writeFiles(outputDir, code, answers.contract);\n    await setupAndRunAgent(outputDir);\n    console.log(\"AI agent execution completed successfully.\");\n    console.log(`AI agent generated successfully in ${answers.output}`);\n  } catch (error) {\n    console.error(\"Error generating AI agent\");\n    console.error(\"Error details:\", error);\n  }\n});\nfunction showLoadingMessage(message) {\n  console.log(`${message}...`);\n}\nasync function promptQuestions() {\n  const questions = [\n    {\n      type: \"input\",\n      name: \"contract\",\n      message: \"Enter the Near Protocol contract name:\",\n      validate: (input) => input.length > 0 || \"Contract name is required\"\n    },\n    {\n      type: \"input\",\n      name: \"description\",\n      message: \"Enter the contract description (agent instructions):\",\n      validate: (input) => input.length > 0 || \"Contract description is required\"\n    },\n    {\n      type: \"input\",\n      name: \"output\",\n      message: \"Enter the output directory (press Enter for current directory):\",\n      default: \".\"\n    },\n    {\n      type: \"input\",\n      name: \"accountId\",\n      message: \"Enter your near account ID to generate an API key:\",\n      validate: (input) => input.length > 0 || \"Near account ID is required\"\n    }\n  ];\n  return await inquirer.prompt(questions);\n}\nasync function generateTypes(outputDir, contract) {\n  process.chdir(outputDir);\n  showLoadingMessage(\"Generating types\");\n  await execAsync(`npx near2ts ${contract}`);\n}\nasync function generateAIAgent(answers, outputDir) {\n  const apiUrl = \"https://contract-to-agent.vercel.app/api/generate\";\n  showLoadingMessage(\"Generating AI agent\");\n  const typesContent = await fs.readFile(\n    path.join(outputDir, \"contract_types.ts\"),\n    \"utf-8\"\n  );\n  const postData = {\n    contract: answers.contract,\n    contractDescription: answers.description,\n    accountId: answers.accountId,\n    types: typesContent\n  };\n  const response = await fetch(apiUrl, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\"\n    },\n    body: JSON.stringify(postData)\n  });\n  if (response.status === 429) {\n    throw new Error(\n      \"You have reached the daily prompt limit. Please try again tomorrow.\"\n    );\n  }\n  if (!response.ok) {\n    console.error(\"Failed to generate AI agent\");\n    throw new Error(`HTTP error! status: ${response.status}`);\n  }\n  const result = await response.json();\n  return result.code;\n}\nasync function writeFiles(outputDir, code, contract) {\n  await fs.mkdir(outputDir, { recursive: true });\n  await fs.writeFile(path.join(outputDir, \"index.ts\"), code);\n  const tsConfig = {\n    compilerOptions: {\n      target: \"es2018\",\n      module: \"commonjs\",\n      strict: true,\n      esModuleInterop: true,\n      skipLibCheck: true,\n      forceConsistentCasingInFileNames: true,\n      outDir: \"./dist\"\n    },\n    include: [\"*.ts\"],\n    exclude: [\"node_modules\"]\n  };\n  await fs.writeFile(\n    path.join(outputDir, \"tsconfig.json\"),\n    JSON.stringify(tsConfig, null, 2)\n  );\n  const packageJson = {\n    name: `near-contract-agent-${contract}`,\n    version: \"1.0.0\",\n    description: `AI agent for Near Protocol contract: ${contract}`,\n    main: \"dist/index.js\",\n    scripts: {\n      build: \"npx tsc ./index.ts\",\n      start: \"node dist/index.js\"\n    },\n    dependencies: {\n      express: \"^4.17.1\",\n      \"@types/express\": \"^4.17.13\",\n      \"make-agent\": \"latest\",\n      dotenv: \"^10.0.0\"\n    },\n    devDependencies: {\n      typescript: \"^4.5.4\"\n    }\n  };\n  await fs.writeFile(\n    path.join(outputDir, \"package.json\"),\n    JSON.stringify(packageJson, null, 2)\n  );\n}\nasync function setupAndRunAgent(outputDir) {\n  process.chdir(outputDir);\n  showLoadingMessage(\"Installing dependencies with npm install\");\n  await execAsync(\"npm install --legacy-peer-deps\");\n  showLoadingMessage(\"Running server\");\n  const serverProcess = spawn(\"npx\", [\"tsx\", \"./index.ts\"]);\n  serverProcess.stdout.on(\"data\", (data) => {\n    console.log(`Server: ${data}`);\n  });\n  serverProcess.stderr.on(\"data\", (data) => {\n    console.error(`Server error: ${data}`);\n  });\n  await new Promise((resolve) => {\n    serverProcess.stdout.on(\"data\", (data) => {\n      if (data.toString().includes(\"Server is running\")) {\n        resolve(true);\n      }\n    });\n  });\n  showLoadingMessage(\"Running agent\");\n  const agentProcess = spawn(\"npx\", [\"make-agent\", \"dev\", \"-p\", \"8080\"]);\n  agentProcess.stdout.on(\"data\", (data) => {\n    console.log(`Agent: ${data}`);\n  });\n  agentProcess.stderr.on(\"data\", (data) => {\n    console.error(`Agent error: ${data}`);\n  });\n  agentProcess.on(\"close\", (code) => {\n    console.log(`make-agent process exited with code ${code}`);\n    serverProcess.kill();\n  });\n  await new Promise(() => {\n  });\n}\n\n// src/commands/delete.ts\nimport { Command as Command2 } from \"commander\";\n\n// src/config/constants.ts\nimport os from \"node:os\";\nimport { join } from \"node:path\";\nvar getWalletUrl = (isTestnet = false) => isTestnet ? \"https://testnet.wallet.bitte.ai\" : \"https://wallet.bitte.ai\";\nvar REGISTRY_URL = \"https://registry.bitte.ai\";\nvar getBitteUrls = (isTestnet = false) => {\n  const BITTE_WALLET_URL = getWalletUrl(isTestnet);\n  return {\n    BITTE_WALLET_URL,\n    BASE_URL: `${REGISTRY_URL}/api/plugins`,\n    PLAYGROUND_URL: `${BITTE_WALLET_URL}/smart-actions/prompt/what%20can%20you%20help%20me%20with%3F?mode=debug&agentId=`,\n    SIGN_MESSAGE_URL: `${BITTE_WALLET_URL}/sign-message`,\n    SIGN_MESSAGE_SUCCESS_URL: `${BITTE_WALLET_URL}/success`\n  };\n};\nvar CONFIG_DIR = join(os.homedir(), \".ai-agent-cli\");\nvar CONFIG_FILE = join(CONFIG_DIR, \"config.json\");\nvar AI_PLUGIN_PATH = \".well-known/ai-plugin.json\";\nvar SIGN_MESSAGE_PORT = 6969;\nvar SIGN_MESSAGE = \"Register Bitte Agent!\";\nvar BITTE_KEY_ENV_KEY = \"BITTE_KEY\";\nvar BITTE_HISTORY_API_URL = \"https://api.bitte.ai/v1/history\";\nvar DEFAULT_PORT = 3e3;\n\n// src/services/authentication.ts\nimport { randomBytes } from \"node:crypto\";\nimport {\n  createServer\n} from \"node:http\";\nimport dotenv2 from \"dotenv\";\nimport open from \"open\";\n\n// src/utils/file.ts\nimport {\n  appendFileSync,\n  existsSync,\n  mkdirSync,\n  readFileSync,\n  writeFileSync\n} from \"node:fs\";\nimport dotenv from \"dotenv\";\nvar ENV_FILES = [\".env\", \".env.local\", \".env.development\", \".env.production\"];\nasync function appendToEnv(key, value) {\n  removeFromEnv(key);\n  const formattedValue = value.replace(/\\n/g, \"\");\n  const envEntry = `${key}=${formattedValue}`;\n  let envPath = ENV_FILES.find((file) => existsSync(file));\n  if (envPath) {\n    appendFileSync(envPath, `\n${envEntry}`);\n  } else {\n    envPath = \".env\";\n    writeFileSync(envPath, envEntry);\n  }\n  dotenv.config();\n  dotenv.config({ path: \".env.local\", override: true });\n}\nasync function removeFromEnv(key) {\n  for (const envPath of ENV_FILES) {\n    if (existsSync(envPath)) {\n      const envContent = readFileSync(envPath, \"utf-8\");\n      const regex = new RegExp(`^${key}=.*\n?`, \"gm\");\n      let updatedContent = envContent.replace(regex, \"\");\n      updatedContent = updatedContent.replace(/^\\s*[\\r\\n]|[\\r\\n]+$/gm, \"\");\n      if (updatedContent !== envContent) {\n        writeFileSync(envPath, updatedContent);\n        console.log(`Removed ${key} from ${envPath}`);\n      }\n    }\n  }\n  dotenv.config();\n  dotenv.config({ path: \".env.local\", override: true });\n}\n\n// src/utils/verify-message.ts\nimport { serialize } from \"borsh\";\nimport { sha256 } from \"js-sha256\";\nimport { utils } from \"near-api-js\";\nvar verifyMessage = ({\n  params,\n  accountIdToVerify\n}) => {\n  const {\n    message,\n    nonce,\n    publicKey,\n    recipient,\n    signature,\n    callbackUrl,\n    accountId\n  } = params;\n  if (accountIdToVerify && accountIdToVerify !== accountId) {\n    console.error(\n      `Account mismatch: signed message has account ${accountId}, but provided account was ${accountIdToVerify}`\n    );\n    return false;\n  }\n  const payload = new Payload({\n    message,\n    nonce,\n    recipient,\n    callbackUrl\n  });\n  return utils.PublicKey.from(publicKey).verify(\n    payload.hash(),\n    Buffer.from(signature, \"base64\")\n  );\n};\nvar getNonceBuffer = (nonce) => {\n  const nonceLength = 32;\n  const buffer = Buffer.from(nonce, \"base64\");\n  if (buffer.length > nonceLength) {\n    throw Error(\"Expected nonce to be a 32 bytes buffer\");\n  }\n  const padding = Buffer.alloc(nonceLength - buffer.length);\n  return Buffer.concat([buffer, padding], nonceLength);\n};\nvar Payload = class {\n  message;\n  nonce;\n  recipient;\n  callbackUrl;\n  schema = {\n    struct: {\n      message: \"string\",\n      nonce: { array: { type: \"u8\", len: 32 } },\n      recipient: \"string\",\n      callbackUrl: { option: \"string\" }\n    }\n  };\n  constructor(args) {\n    this.message = args.message;\n    this.nonce = getNonceBuffer(args.nonce);\n    this.recipient = args.recipient;\n    if (args.callbackUrl) {\n      this.callbackUrl = args.callbackUrl;\n    }\n  }\n  hash() {\n    const borshPayload = serialize(this.schema, this);\n    const prefixNumber = 413 + 2 ** 31;\n    const prefixBuffer = new Uint8Array([\n      prefixNumber & 255,\n      prefixNumber >> 8 & 255,\n      prefixNumber >> 16 & 255,\n      prefixNumber >> 24 & 255\n    ]);\n    const message = new Uint8Array(4 + borshPayload.length);\n    message.set(prefixBuffer, 0);\n    message.set(borshPayload, 4);\n    return Uint8Array.from(sha256.array(message));\n  }\n};\n\n// src/services/authentication.ts\ndotenv2.config();\ndotenv2.config({ path: \".env.local\", override: true });\nvar AuthenticationService = class {\n  bitteUrls;\n  apiKey;\n  constructor(bitteUrls) {\n    this.bitteUrls = bitteUrls;\n    this.apiKey = (() => {\n      if (process?.env?.BITTE_KEY) {\n        console.error(\n          \"BITTE_KEY is now deprecated. Please use BITTE_API_KEY instead. You can get an api key here: https://key.bitte.ai\"\n        );\n      }\n      if (!process?.env?.BITTE_API_KEY) {\n        throw new Error(\n          \"Missing api key. Please define BITTE_API_KEY in your environment variables. You can get an api key here: https://key.bitte.ai\"\n        );\n      }\n      return process.env.BITTE_API_KEY;\n    })();\n  }\n  async getAuthentication() {\n    return this.apiKey;\n  }\n  async authenticateOrCreateKey() {\n    const authentication = await this.getAuthentication();\n    if (authentication) {\n      console.log(\"Already authenticated.\");\n      return authentication;\n    }\n    console.log(\n      \"Not authenticated. Redirecting to Bitte wallet for signing...\"\n    );\n    const newKey = await this.createAndStoreKey();\n    if (newKey) {\n      console.log(\"New key created and stored successfully.\");\n      return JSON.stringify(newKey);\n    } else {\n      console.log(\"Failed to create and store new key.\");\n      return null;\n    }\n  }\n  async getSignedMessage() {\n    return new Promise((resolve, reject) => {\n      const server = createServer(\n        (req, res) => this.handleRequest(req, res, resolve, reject, server)\n      );\n      server.listen(SIGN_MESSAGE_PORT, () => {\n        const postEndpoint = `http://localhost:${SIGN_MESSAGE_PORT}`;\n        const nonce = randomBytes(16).toString(\"hex\");\n        const signUrl = `${this.bitteUrls.SIGN_MESSAGE_URL}?message=${encodeURIComponent(\n          SIGN_MESSAGE\n        )}&callbackUrl=${encodeURIComponent(\n          this.bitteUrls.SIGN_MESSAGE_SUCCESS_URL\n        )}&nonce=${encodeURIComponent(nonce)}&postEndpoint=${encodeURIComponent(\n          postEndpoint\n        )}`;\n        open(signUrl).catch((error) => {\n          console.error(\"Failed to open the browser:\", error);\n          server.close();\n          reject(error);\n        });\n      });\n    });\n  }\n  async createAndStoreKey() {\n    try {\n      const signedMessage = await this.getSignedMessage();\n      if (!signedMessage) {\n        console.error(\"Failed to get signed message\");\n        return null;\n      }\n      const isVerified = verifyMessage({ params: signedMessage });\n      if (!isVerified) {\n        console.warn(\"Message verification failed\");\n      }\n      await appendToEnv(BITTE_KEY_ENV_KEY, JSON.stringify(signedMessage));\n      return signedMessage;\n    } catch (error) {\n      console.error(\"Error creating and storing key:\", error);\n      return null;\n    }\n  }\n  handleRequest(req, res, resolve, reject, server) {\n    this.setCORSHeaders(res);\n    if (req.method === \"OPTIONS\") {\n      this.handlePreflight(res);\n      return;\n    }\n    if (req.method === \"POST\") {\n      let body = \"\";\n      req.on(\"data\", (chunk) => {\n        body += chunk.toString();\n      });\n      req.on(\"end\", () => {\n        try {\n          const jsonBody = JSON.parse(body);\n          res.writeHead(200, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ message: \"Signed message received\" }));\n          resolve(jsonBody);\n          server.close(() => console.log(\"Temporary server closed\"));\n        } catch (error) {\n          console.error(\"Error parsing JSON:\", error);\n          res.writeHead(400, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ error: \"Invalid JSON\" }));\n          reject(error);\n        }\n      });\n    } else {\n      this.handleInvalidMethod(res, reject);\n    }\n  }\n  setCORSHeaders(res) {\n    res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n    res.setHeader(\"Access-Control-Allow-Methods\", \"POST, OPTIONS\");\n    res.setHeader(\"Access-Control-Allow-Headers\", \"Content-Type\");\n  }\n  handlePreflight(res) {\n    res.writeHead(204);\n    res.end();\n  }\n  handleInvalidMethod(res, reject) {\n    res.writeHead(405, { \"Content-Type\": \"application/json\" });\n    res.end(JSON.stringify({ error: \"Method Not Allowed\" }));\n    reject(new Error(\"Method Not Allowed\"));\n  }\n};\n\n// src/services/plugin.ts\nvar PluginService = class {\n  bitteUrls;\n  auth;\n  constructor(testnet = false) {\n    this.bitteUrls = getBitteUrls(testnet);\n    this.auth = new AuthenticationService(this.bitteUrls);\n  }\n  async register({ pluginId }) {\n    const apiKey = await this.auth.getAuthentication();\n    try {\n      const response = await fetch(`${this.bitteUrls.BASE_URL}/${pluginId}`, {\n        method: \"POST\",\n        headers: { authorization: apiKey }\n      });\n      if (response.ok) {\n        await response.json();\n        console.log(\"Plugin registered successfully\");\n        return pluginId;\n      } else {\n        const errorMessage = `Failed to register plugin (ID: ${pluginId}). HTTP Status: ${response.status} - ${response.statusText}.`;\n        console.error(errorMessage);\n        const errorData = await response.text();\n        console.error(`Server response: ${errorData}`);\n        return null;\n      }\n    } catch (error) {\n      console.error(`Network error during plugin registration: ${error}`);\n      return null;\n    }\n  }\n  async update(pluginId) {\n    const apiKey = await this.auth.getAuthentication();\n    if (!apiKey) {\n      console.warn(`No API key found for plugin ${pluginId}.`);\n      return null;\n    }\n    const response = await fetch(`${this.bitteUrls.BASE_URL}/${pluginId}`, {\n      method: \"PUT\",\n      headers: { authorization: apiKey }\n    });\n    if (!response.ok) {\n      const responseText = await response.text();\n      if (responseText.includes(\"Plugin not found\")) {\n        console.warn(`Plugin with ID ${pluginId} not found/registered.`);\n      } else {\n        console.error(\"Failed to update plugin\", responseText);\n      }\n      return null;\n    }\n    console.log(\"Plugin updated successfully.\");\n    return pluginId;\n  }\n  async delete(pluginId) {\n    const apiKey = await this.auth.getAuthentication();\n    if (!apiKey) {\n      console.error(\"No API key found. Unable to delete plugin.\");\n      return;\n    }\n    const response = await fetch(`${this.bitteUrls.BASE_URL}/${pluginId}`, {\n      method: \"DELETE\",\n      headers: { authorization: apiKey }\n    });\n    if (!response.ok) {\n      const error = await response.text() || response.statusText;\n      console.error(`Error deleting plugin: ${error}`);\n      throw new Error(error);\n    }\n  }\n  async verify({\n    pluginId,\n    email,\n    repo,\n    version,\n    categories,\n    chains\n  }) {\n    const apiKey = await this.auth.getAuthentication();\n    if (!apiKey) {\n      console.error(\"No API key found. Unable to request plugin verification.\");\n      return;\n    }\n    try {\n      const res = await fetch(`${this.bitteUrls.BASE_URL}/verify/${pluginId}`, {\n        method: \"POST\",\n        headers: { authorization: apiKey },\n        body: JSON.stringify({\n          repo,\n          email,\n          version,\n          categories,\n          chains\n        })\n      });\n      if (res.ok) {\n        console.log(\n          \"Your verification request has been uploaded and will be processed in the following days.\"\n        );\n      } else {\n        console.error(\n          `Failed to upload verification request: ${JSON.stringify(\n            await res.json()\n          )} \nStatus: ${res.status}`\n        );\n      }\n    } catch (error) {\n      const msg = error instanceof Error ? error.message : JSON.stringify(error);\n      console.error(`Failed to request plugin verification: ${msg}`);\n    }\n  }\n};\n\n// src/utils/deployed-url.ts\nfunction getVercelDeploymentUrl() {\n  switch (process.env.VERCEL_ENV) {\n    case \"production\":\n      return `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}`;\n    case \"preview\":\n      return `https://${process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL}`;\n    default:\n      console.warn(\n        `Unrecognized VERCEL_ENV=${process.env.VERCEL_ENV} using fallback url (localhost)`\n      );\n      return `http://localhost:${process.env.PORT || DEFAULT_PORT}`;\n  }\n}\nvar getDeployedUrl = (port) => {\n  if (process.env.VERCEL_ENV) {\n    return getVercelDeploymentUrl();\n  }\n  if (process.env.URL) {\n    return process.env.URL;\n  }\n  if (process.env.HEROKU_APP_NAME) {\n    return `https://${process.env.HEROKU_APP_NAME}.herokuapp.com`;\n  }\n  if (process.env.EB_ENVIRONMENT_URL) {\n    return process.env.EB_ENVIRONMENT_URL;\n  }\n  if (process.env.K_SERVICE && process.env.K_REVISION) {\n    return `https://${process.env.K_SERVICE}-${process.env.K_REVISION}.a.run.app`;\n  }\n  if (process.env.WEBSITE_HOSTNAME) {\n    return `https://${process.env.WEBSITE_HOSTNAME}`;\n  }\n  if (process.env.DIGITALOCEAN_APP_URL) {\n    return process.env.DIGITALOCEAN_APP_URL;\n  }\n  if (process.env.RENDER_EXTERNAL_URL) {\n    return process.env.RENDER_EXTERNAL_URL;\n  }\n  if (process.env.BITTE_AGENT_URL) {\n    return process.env.BITTE_AGENT_URL;\n  }\n  return `http://localhost:${port || DEFAULT_PORT}`;\n};\nvar deployedUrl = getDeployedUrl();\n\n// src/utils/openapi.ts\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\n\n// src/config/types.ts\nfunction validateXMbSpecHelper(xMbSpec) {\n  if (!xMbSpec || typeof xMbSpec !== \"object\") {\n    return { valid: false, error: \"x-mb spec must be an object\" };\n  }\n  const spec = xMbSpec;\n  if (!spec.assistant || typeof spec.assistant !== \"object\") {\n    return { valid: false, error: \"x-mb spec must contain assistant object\" };\n  }\n  const assistant = spec.assistant;\n  const requiredStringFields = [\"name\", \"description\", \"instructions\"];\n  for (const field of requiredStringFields) {\n    if (!assistant[field] || typeof assistant[field] !== \"string\") {\n      return {\n        valid: false,\n        error: `assistant must contain ${field} as string`\n      };\n    }\n  }\n  if (assistant.tools !== void 0) {\n    if (!Array.isArray(assistant.tools)) {\n      return { valid: false, error: \"tools must be an array\" };\n    }\n    for (const tool of assistant.tools) {\n      if (!tool || typeof tool !== \"object\") {\n        return { valid: false, error: \"each tool must be an object\" };\n      }\n      if (!(\"type\" in tool) || typeof tool.type !== \"string\") {\n        return { valid: false, error: \"each tool must have a type string\" };\n      }\n    }\n  }\n  if (assistant.chainIds !== void 0) {\n    if (!Array.isArray(assistant.chainIds) || !assistant.chainIds.every(\n      (id) => typeof id === \"number\" && Number.isFinite(id) || typeof id === \"string\"\n    )) {\n      return {\n        valid: false,\n        error: \"chainIds must be an array of number or string\"\n      };\n    }\n  }\n  if (assistant.categories !== void 0) {\n    if (!Array.isArray(assistant.categories) || !assistant.categories.every((cat) => typeof cat === \"string\")) {\n      return { valid: false, error: \"categories must be an array of strings\" };\n    }\n  }\n  const optionalStringFields = [\"version\", \"repo\"];\n  for (const field of optionalStringFields) {\n    if (assistant[field] !== void 0 && typeof assistant[field] !== \"string\") {\n      return { valid: false, error: `${field} must be a string` };\n    }\n  }\n  if (spec.email !== void 0 && typeof spec.email !== \"string\") {\n    return { valid: false, error: \"email must be a string\" };\n  }\n  return { valid: true };\n}\nfunction isXMbSpec(xMbSpec) {\n  return validateXMbSpecHelper(xMbSpec).valid;\n}\nfunction getXMbSpecValidationError(xMbSpec) {\n  const result = validateXMbSpecHelper(xMbSpec);\n  return result.valid ? null : result.error;\n}\n\n// src/utils/openapi.ts\nvar MAX_RETRIES = 3;\nvar RETRY_DELAY = 1e3;\nasync function validateAndParseOpenApiSpec(url) {\n  try {\n    const specUrl = url.toString();\n    const specContent = await fetchWithRetry(specUrl);\n    let apiResponse;\n    try {\n      apiResponse = JSON.parse(specContent);\n    } catch (error) {\n      console.error(\n        \"Failed to parse OpenAPI spec JSON:\",\n        error instanceof Error ? error.message : \"Unknown error\"\n      );\n      return void 0;\n    }\n    try {\n      await SwaggerParser.validate(apiResponse);\n      console.log(\"OpenAPI specification is valid.\");\n    } catch (error) {\n      if (error instanceof Error) {\n        console.error(\"OpenAPI validation failed:\", error.message);\n        if (\"details\" in error) {\n          const details = error.details;\n          console.error(\n            \"Validation details:\",\n            details.map((detail) => ({\n              path: detail.instancePath,\n              error: detail.message,\n              params: detail.params\n            }))\n          );\n        }\n      }\n      return void 0;\n    }\n    const xMbSpec = apiResponse[\"x-mb\"];\n    if (isXMbSpec(xMbSpec)) {\n      return xMbSpec;\n    }\n    console.error(\"Invalid x-mb spec: \", getXMbSpecValidationError(xMbSpec));\n    return void 0;\n  } catch (error) {\n    console.error(\n      \"Unexpected error:\",\n      error instanceof Error ? error.message : \"Unknown error\"\n    );\n    return void 0;\n  }\n}\nasync function fetchWithRetry(url, retries = MAX_RETRIES) {\n  try {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(`HTTP error! status: ${response.status}`);\n    }\n    const text = await response.text();\n    JSON.parse(text);\n    return text;\n  } catch (error) {\n    if (retries > 0) {\n      console.log(\"Retrying...\");\n      await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY));\n      return fetchWithRetry(url, retries - 1);\n    }\n    throw error;\n  }\n}\n\n// src/utils/url.ts\nfunction getHostname(url) {\n  return new URL(url).hostname;\n}\nfunction getSpecUrl(baseUrl) {\n  const normalised = new URL(baseUrl);\n  return new URL(`${normalised.origin}/${AI_PLUGIN_PATH}`);\n}\n\n// src/commands/setup.ts\nasync function setup(optionsUrl) {\n  const url = optionsUrl || deployedUrl;\n  if (!url) {\n    throw new Error(\"Deployed URL could not be determined.\");\n  }\n  const pluginId = getHostname(url);\n  const specUrl = getSpecUrl(url);\n  const xMbSpec = await validateAndParseOpenApiSpec(specUrl);\n  if (!xMbSpec) {\n    throw new Error(\"OpenAPI specification validation failed.\");\n  }\n  return { pluginId, xMbSpec };\n}\n\n// src/commands/delete.ts\nvar deleteCommand = new Command2().name(\"delete\").description(\"Delete your AI agent plugin\").option(\"-u, --url <url>\", \"Specify the deployment URL\").action(async (options) => {\n  const pluginService = new PluginService();\n  const [{ pluginId }, authentication] = await Promise.all([\n    setup(options.url),\n    pluginService.auth.getAuthentication()\n  ]);\n  if (!authentication) {\n    console.error(\"Authentication failed. Unable to delete the plugin.\");\n    return;\n  }\n  try {\n    await pluginService.delete(pluginId);\n    console.log(`Plugin ${pluginId} deleted successfully.`);\n  } catch (error) {\n    console.error(\"Failed to delete the plugin:\", error);\n  }\n});\n\n// src/commands/deploy.ts\nimport { Command as Command3 } from \"commander\";\nvar deployCommand = new Command3().name(\"deploy\").description(\n  \"Deploy your AI agent, making it discoverable and registering it as a plugin\"\n).option(\"-u, --url <url>\", \"Specify the deployment URL\").action(async (options) => {\n  const { pluginId } = await setup(options.url);\n  const pluginService = new PluginService();\n  try {\n    const updateRes = await pluginService.update(pluginId);\n    if (!updateRes) {\n      console.log(\"Attempting to register plugin...\");\n      await pluginService.register({ pluginId });\n    }\n  } catch (error) {\n    console.error(`Failed to deploy plugin ${pluginId}. Error: ${error}`);\n  }\n});\n\n// src/commands/dev.ts\nimport { Command as Command4 } from \"commander\";\nimport dotenv3 from \"dotenv\";\nimport isPortReachable from \"is-port-reachable\";\nimport open2 from \"open\";\n\n// src/services/server.ts\nimport { promises as fs2 } from \"node:fs\";\nimport path2 from \"node:path\";\nimport express from \"express\";\nasync function startUIServer(apiConfig, agentSpec) {\n  const app = express();\n  app.use(\n    express.json({\n      limit: \"2mb\"\n    })\n  );\n  const possiblePaths = [\n    // When running in development mode\n    path2.resolve(process.cwd(), \"dist\", \"playground\"),\n    // When installed as a node module\n    path2.resolve(\n      process.cwd(),\n      \"node_modules\",\n      \"make-agent\",\n      \"dist\",\n      \"playground\"\n    ),\n    // When running from the node_modules/.bin directory\n    path2.resolve(process.cwd(), \"..\", \"make-agent\", \"dist\", \"playground\")\n  ];\n  let staticPath;\n  for (const testPath of possiblePaths) {\n    try {\n      await fs2.access(testPath);\n      const indexExists = await fs2.access(path2.join(testPath, \"index.html\")).then(() => true).catch(() => false);\n      if (indexExists) {\n        staticPath = testPath;\n        break;\n      }\n    } catch (error) {\n      console.error(\n        `[Server] Could not find static files directory with index.html in ${testPath}: ${error}`\n      );\n    }\n  }\n  if (!staticPath) {\n    throw new Error(\"Could not find static files directory with index.html\");\n  }\n  app.use(\n    express.static(staticPath, {\n      setHeaders: (res, path3) => {\n        if (path3.endsWith(\".css\")) {\n          res.setHeader(\"Content-Type\", \"text/css\");\n        }\n      }\n    })\n  );\n  app.get(\"/api/config\", async (req, res) => {\n    try {\n      const serverConfig = {\n        serverStartTime: (/* @__PURE__ */ new Date()).toISOString(),\n        environment: \"make-agent\",\n        localAgent: {\n          pluginId: req.hostname,\n          accountId: \"anon\",\n          spec: agentSpec\n        },\n        bitteApiKey: apiConfig.key,\n        bitteApiUrl: `${apiConfig.url}/chat`\n      };\n      res.json(serverConfig);\n    } catch (error) {\n      res.status(500).json({ error: \"Failed to fetch AI plugin spec\" });\n    }\n  });\n  app.get(\"/api/history\", async (req, res) => {\n    try {\n      const id = req.query.id;\n      if (!id) {\n        throw new Error(\"No history id on request.\");\n      }\n      const url = `${BITTE_HISTORY_API_URL}?id=${id}`;\n      const response = await fetch(url, {\n        headers: {\n          Authorization: `Bearer ${apiConfig.key}`\n        }\n      });\n      const result = await response.json();\n      res.json(result);\n    } catch (err) {\n      res.status(500).json({ error: `Failed to fetch chat history: ${err}` });\n    }\n  });\n  app.get(\"*\", async (req, res) => {\n    console.log(req.path);\n    const indexPath = path2.join(staticPath, \"index.html\");\n    try {\n      const html = await fs2.readFile(indexPath, \"utf8\");\n      res.setHeader(\"Content-Type\", \"text/html\");\n      res.send(html);\n    } catch (err) {\n      res.status(404).send(\"Not found\");\n    }\n  });\n  return new Promise((resolve, reject) => {\n    try {\n      const server = app.listen(apiConfig.serverPort, () => {\n        console.log(\n          `[Server] UI server listening http://localhost:${apiConfig.serverPort}`\n        );\n        console.log(\"[Server] Ready to handle requests\");\n        resolve(server);\n      });\n    } catch (error) {\n      reject(error);\n    }\n  });\n}\n\n// src/utils/env.ts\nfunction validateEnv() {\n  const requiredEnvVars = [\"BITTE_API_KEY\"];\n  const missingVars = requiredEnvVars.filter(\n    (varName) => !process.env[varName]\n  );\n  if (missingVars.length > 0) {\n    throw new Error(\n      `Missing required environment variables: ${missingVars.join(\", \")}\nPlease ensure these are set in your .env file`\n    );\n  }\n}\n\n// src/utils/port-detector.ts\nimport { exec as exec2 } from \"node:child_process\";\nimport { promisify as promisify2 } from \"node:util\";\nvar execAsync2 = promisify2(exec2);\nasync function detectPort() {\n  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n  const maxAttempts = 5;\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    const result = await tryDetectPort(attempt);\n    if (result !== null) return result;\n    if (attempt < maxAttempts) {\n      await sleep(1e3);\n    }\n  }\n  return null;\n}\nasync function tryDetectPort(attempt) {\n  if (process.platform === \"darwin\") {\n    return detectPortMacOS(attempt);\n  } else if (process.platform === \"linux\") {\n    return detectPortLinux(attempt);\n  } else if (process.platform === \"win32\") {\n    return detectPortWindows(attempt);\n  }\n  return null;\n}\nasync function detectPortMacOS(attempt) {\n  try {\n    const { stdout: pidOutput } = await execAsync2(\n      `lsof -n | grep '${process.cwd()}' | grep node | awk '{print $2}' | uniq`\n    );\n    const pids = pidOutput.trim().split(\"\\n\");\n    if (pids.length === 0) {\n      console.log(\n        `Attempt ${attempt}/5: No Node.js processes found running in the current directory.`\n      );\n      return null;\n    }\n    const { stdout: portOutput } = await execAsync2(\n      \"lsof -n -i -P | grep LISTEN | grep node\"\n    );\n    const portLines = portOutput.trim().split(\"\\n\");\n    const ports = portLines.filter((line) => pids.some((pid) => line.includes(pid))).map((line) => {\n      const match = line.match(/:(\\d+)/);\n      return match?.[1] ? Number.parseInt(match[1], 10) : null;\n    }).filter((port) => port !== null);\n    if (ports.length === 0) {\n      console.log(\n        `Attempt ${attempt}/5: No ports found for Node.js processes in the current directory.`\n      );\n      return null;\n    }\n    if (ports.length > 1) {\n      console.log(\n        `Multiple ports found: ${ports.join(\", \")}. Using the first one.`\n      );\n    }\n    return ports[0] ?? null;\n  } catch (error) {\n    console.log(\n      `Attempt ${attempt}/5: lsof failed on macOS:`,\n      error.message\n    );\n    return null;\n  }\n}\nasync function detectPortLinux(attempt) {\n  try {\n    const { stdout } = await execAsync2(\n      'ss -tulpn | grep -E \"(node|next-server)\"'\n    );\n    const match = stdout.match(/:(\\d+)/);\n    if (match && match[1]) {\n      return Number.parseInt(match[1], 10);\n    }\n    console.log(\n      `Attempt ${attempt}/5: No listening ports found for node/next-server processes`\n    );\n    return null;\n  } catch (error) {\n    console.log(\n      `Attempt ${attempt}/5: ss failed on Linux:`,\n      error.message\n    );\n    return null;\n  }\n}\nasync function detectPortWindows(attempt) {\n  try {\n    const { stdout } = await execAsync2(\n      \"netstat -ano | findstr :LISTENING | findstr node.exe\"\n    );\n    const match = stdout.match(/:(\\d+)/);\n    if (match && match[1]) {\n      return Number.parseInt(match[1], 10);\n    }\n    console.log(`Attempt ${attempt}/5: No listening ports found for node.exe`);\n    return null;\n  } catch (error) {\n    console.log(\n      `Attempt ${attempt}/5: netstat failed on Windows:`,\n      error.message\n    );\n    return null;\n  }\n}\n\n// src/commands/dev.ts\ndotenv3.config();\nvalidateEnv();\nasync function findAvailablePort(startPort) {\n  let port = startPort;\n  while (await isPortReachable(port, { host: \"localhost\" })) {\n    port++;\n  }\n  return port;\n}\nvar API_CONFIG = {\n  key: process.env.BITTE_API_KEY,\n  url: process.env.BITTE_API_URL || \"https://ai-runtime-446257178793.europe-west1.run.app\",\n  serverPort: DEFAULT_PORT\n};\nasync function fetchAndValidateSpec(url) {\n  console.log(\"[Dev] Getting plugin ID and spec URL\");\n  const pluginId = getHostname(url);\n  const specUrl = getSpecUrl(url);\n  console.log(\"[Dev] Plugin ID:\", pluginId);\n  console.log(\"[Dev] Spec URL:\", specUrl.href);\n  let isValid, accountId;\n  try {\n    console.log(\"[Dev] Validating OpenAPI spec...\");\n    const validation = await validateAndParseOpenApiSpec(specUrl);\n    if (!validation) {\n      throw new Error(\"Invalid OpenAPI spec\");\n    }\n    isValid = true;\n    accountId = validation[\"account-id\"];\n    console.log(\"[Dev] Validation result:\", { isValid, accountId });\n  } catch (error) {\n    console.error(\n      \"Failed to validate OpenAPI spec:\",\n      error instanceof Error ? error.message : \"Unknown error\"\n    );\n    isValid = false;\n    accountId = void 0;\n  }\n  console.log(\"[Dev] Fetching spec content...\");\n  const specContent = await fetch(specUrl).then((res) => res.text());\n  let spec = JSON.parse(specContent);\n  console.log(\"[Dev] Successfully parsed spec content\");\n  console.log(\"[Dev] Spec validation status:\", isValid);\n  console.log(\"[Dev] Updating spec with server URL and account ID\");\n  spec = {\n    ...spec,\n    servers: [{ url }],\n    \"x-mb\": {\n      ...spec[\"x-mb\"],\n      \"account-id\": accountId || \"anon\"\n    }\n  };\n  console.log(\"[Dev] Updated spec servers URL:\", spec.servers[0].url);\n  return {\n    pluginId,\n    accountId: accountId || \"anon\",\n    spec\n  };\n}\nasync function setupPorts(options) {\n  let port = Number.parseInt(options.port || \"\") || 0;\n  if (port === 0) {\n    const detectedPort = await detectPort();\n    if (detectedPort) {\n      port = detectedPort;\n    } else {\n      port = await findAvailablePort(DEFAULT_PORT);\n    }\n  }\n  const serverPort = await findAvailablePort(DEFAULT_PORT);\n  return { port, serverPort };\n}\nvar devCommand = new Command4().name(\"dev\").description(\"Start a local playground for your AI agent\").option(\"-p, --port <port>\", \"Port to run playground on\").option(\"-t, --testnet\", \"Use Testnet instead of Mainnet\", false).action(async (options) => {\n  try {\n    const { port, serverPort } = await setupPorts(options);\n    API_CONFIG.serverPort = serverPort;\n    API_CONFIG.localAgentUrl = `http://localhost:${port}`;\n    const deployedUrl2 = getDeployedUrl(port);\n    if (!deployedUrl2) {\n      throw new Error(\"Deployed URL could not be determined.\");\n    }\n    let agentSpec;\n    try {\n      console.log(\n        \"[Dev] Fetching and validating OpenAPI spec from:\",\n        deployedUrl2\n      );\n      const { spec } = await fetchAndValidateSpec(deployedUrl2);\n      console.log(\"[Dev] OpenAPI spec validation successful\");\n      agentSpec = spec;\n    } catch (error) {\n      console.error(\"[Dev] Error validating OpenAPI spec:\", error);\n      throw error;\n    }\n    const server = await startUIServer(API_CONFIG, agentSpec);\n    await open2(`http://localhost:${serverPort}`);\n    process.on(\"SIGINT\", async () => {\n      server.close();\n      process.exit(0);\n    });\n  } catch (error) {\n    process.exit(1);\n  }\n});\n\n// src/commands/register.ts\nimport { Command as Command5 } from \"commander\";\nvar registerCommand = new Command5().name(\"register\").description(\"(Deprecated)\").action(async () => {\n  console.log(\n    \"The 'register' command has been deprecated. Use 'deploy' instead.\"\n  );\n});\n\n// src/commands/update.ts\nimport { Command as Command6 } from \"commander\";\nvar updateCommand = new Command6().name(\"update\").description(\"(Deprecated)\").action(async () => {\n  console.log(\n    \"The 'update' command has been deprecated. Use 'deploy' instead.\"\n  );\n});\n\n// src/commands/validate.ts\nimport { Command as Command7 } from \"commander\";\nvar validateCommand = new Command7().name(\"validate\").description(\"Validate your AI agent API spec\").option(\"-u, --url <url>\", \"Specify the deployment URL\").action(async (options) => {\n  await setup(options.url);\n});\n\n// src/commands/verify.ts\nimport { Command as Command8 } from \"commander\";\nvar verifyCommand = new Command8().name(\"verify\").description(\"Request verification of your deployed AI agent plugin\").option(\"-u, --url <url>\", \"Specify the url of the deployed plugin\").option(\n  \"-e, --email <email>\",\n  \"Provide an email so we can contact you regarding the verification process\"\n).option(\n  \"-r, --repo <repoUrl>\",\n  \"To verify a plugin we need the url for a public repository containing the plugin's code\"\n).option(\n  \"-v, --version [versionNumber]\",\n  \"Specify the version of the plugin in case of an update\"\n).option(\n  \"-c, --categories [categories]\",\n  \"List some categories that describe the type of plugin you're verifying. Example: -c DeFi,Investing\",\n  (categories) => categories && typeof categories === \"string\" && categories.length > 0 ? categories.split(\",\") : null\n).option(\n  \"-x, --chains [chainIds]\",\n  \"If your plugin works on specific evm chains, you can specify them so your plugin is easier to find. If your plugin does not work on evm you can ignore this flag. Example: -x 1,8453\",\n  (str) => {\n    if (!str || typeof str !== \"string\" || str.length === 0) {\n      return null;\n    }\n    const strArray = str.split(\",\");\n    return strArray.map((num) => Number.parseInt(num));\n  }\n).action(async (options) => {\n  const { pluginId, xMbSpec } = await setup(options.url);\n  try {\n    if (!xMbSpec[\"account-id\"]) {\n      throw new Error(\"Account ID is required\");\n    }\n    const agentData = formVerifyData(\n      options,\n      xMbSpec\n    );\n    await new PluginService().verify({\n      pluginId,\n      ...agentData\n    });\n  } catch (error) {\n    console.error(`Failed to send verification request: ${error}`);\n  }\n});\nfunction formVerifyData(options, spec) {\n  return {\n    accountId: spec[\"account-id\"],\n    email: (options.email ?? spec.email) || (() => {\n      throw new Error(\"Email is required\");\n    })(),\n    repo: (options.repo ?? spec.assistant.repo) || (() => {\n      throw new Error(\"Repository URL is required\");\n    })(),\n    version: options.version ?? spec.assistant.version,\n    categories: options.categories ?? spec.assistant.categories,\n    chainIds: options.chains ?? spec.assistant.chainIds\n  };\n}\n\n// src/index.ts\ndotenv4.config();\nprogram.name(\"make-agent\").description(\"CLI tool for managing AI agents\").version(package_default.version);\nprogram.addCommand(devCommand).addCommand(deployCommand).addCommand(contractCommand).addCommand(deleteCommand).addCommand(verifyCommand).addCommand(registerCommand).addCommand(updateCommand).addCommand(validateCommand);\nprogram.parse();\n"]}