{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../node_modules/dotenv/package.json","../node_modules/dotenv/lib/main.js","../node_modules/dotenv/lib/env-options.js","../node_modules/dotenv/lib/cli-options.js","../src/index.ts","../src/agent-bay.ts","../node_modules/dotenv/config.js","../src/api/index.ts","../src/api/client.ts","../src/api/models/model.ts","../src/api/models/ApplyMqttTokenResponseBodyData.ts","../src/api/models/CreateMcpSessionRequestPersistenceDataList.ts","../src/api/models/CreateMcpSessionResponseBodyData.ts","../src/api/models/GetContextResponseBodyData.ts","../src/api/models/GetContextInfoResponseBodyData.ts","../src/api/models/GetLabelResponseBodyData.ts","../src/api/models/GetLinkResponseBodyData.ts","../src/api/models/GetMcpResourceResponseBodyDataDesktopInfo.ts","../src/api/models/GetMcpResourceResponseBodyData.ts","../src/api/models/ListContextsResponseBodyData.ts","../src/api/models/ListSessionResponseBodyData.ts","../src/api/models/ApplyMqttTokenRequest.ts","../src/api/models/ApplyMqttTokenResponseBody.ts","../src/api/models/ApplyMqttTokenResponse.ts","../src/api/models/CallMcpToolRequest.ts","../src/api/models/CallMcpToolResponseBody.ts","../src/api/models/CallMcpToolResponse.ts","../src/api/models/CreateMcpSessionRequest.ts","../src/api/models/CreateMcpSessionShrinkRequest.ts","../src/api/models/CreateMcpSessionResponseBody.ts","../src/api/models/CreateMcpSessionResponse.ts","../src/api/models/DeleteContextRequest.ts","../src/api/models/DeleteContextResponseBody.ts","../src/api/models/DeleteContextResponse.ts","../src/api/models/GetContextRequest.ts","../src/api/models/GetContextResponseBody.ts","../src/api/models/GetContextResponse.ts","../src/api/models/GetContextInfoRequest.ts","../src/api/models/GetContextInfoResponseBody.ts","../src/api/models/GetContextInfoResponse.ts","../src/api/models/GetLabelRequest.ts","../src/api/models/GetLabelResponseBody.ts","../src/api/models/GetLabelResponse.ts","../src/api/models/GetLinkRequest.ts","../src/api/models/GetLinkResponseBody.ts","../src/api/models/GetLinkResponse.ts","../src/api/models/GetMcpResourceRequest.ts","../src/api/models/GetMcpResourceResponseBody.ts","../src/api/models/GetMcpResourceResponse.ts","../src/api/models/InitBrowserRequest.ts","../src/api/models/InitBrowserResponseBody.ts","../src/api/models/InitBrowserResponseBodyData.ts","../src/api/models/InitBrowserResponse.ts","../src/api/models/ListContextsRequest.ts","../src/api/models/ListContextsResponseBody.ts","../src/api/models/ListContextsResponse.ts","../src/api/models/ListMcpToolsRequest.ts","../src/api/models/ListMcpToolsResponseBody.ts","../src/api/models/ListMcpToolsResponse.ts","../src/api/models/ListSessionRequest.ts","../src/api/models/ListSessionResponseBody.ts","../src/api/models/ListSessionResponse.ts","../src/api/models/ModifyContextRequest.ts","../src/api/models/ModifyContextResponseBody.ts","../src/api/models/ModifyContextResponse.ts","../src/api/models/ReleaseMcpSessionRequest.ts","../src/api/models/ReleaseMcpSessionResponseBody.ts","../src/api/models/ReleaseMcpSessionResponse.ts","../src/api/models/SetLabelRequest.ts","../src/api/models/SetLabelResponseBody.ts","../src/api/models/SetLabelResponse.ts","../src/api/models/SyncContextRequest.ts","../src/api/models/SyncContextResponseBody.ts","../src/api/models/SyncContextResponse.ts","../src/api/models/DeleteContextFileRequest.ts","../src/api/models/DeleteContextFileResponseBody.ts","../src/api/models/DeleteContextFileResponse.ts","../src/api/models/DescribeContextFilesRequest.ts","../src/api/models/DescribeContextFilesResponseBody.ts","../src/api/models/DescribeContextFilesResponse.ts","../src/api/models/GetContextFileDownloadUrlRequest.ts","../src/api/models/GetContextFileDownloadUrlResponseBody.ts","../src/api/models/GetContextFileDownloadUrlResponse.ts","../src/api/models/GetContextFileUploadUrlRequest.ts","../src/api/models/GetContextFileUploadUrlResponseBody.ts","../src/api/models/GetContextFileUploadUrlResponse.ts","../src/config.ts","../src/utils/logger.ts","../src/context.ts","../src/types/api-response.ts","../src/exceptions.ts","../src/session.ts","../src/agent/agent.ts","../src/application/application.ts","../src/browser/index.ts","../src/browser/browser.ts","../src/browser/browser_agent.ts","../src/code/index.ts","../src/code/code.ts","../src/command/command.ts","../src/context-manager.ts","../src/filesystem/filesystem.ts","../src/oss/index.ts","../src/oss/oss.ts","../src/ui/ui.ts","../src/window/window.ts","../src/agent/index.ts","../src/extension.ts","../src/context-sync.ts","../src/session-params.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","{\n  \"name\": \"dotenv\",\n  \"version\": \"16.6.1\",\n  \"description\": \"Loads environment variables from .env file\",\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/main.d.ts\",\n      \"require\": \"./lib/main.js\",\n      \"default\": \"./lib/main.js\"\n    },\n    \"./config\": \"./config.js\",\n    \"./config.js\": \"./config.js\",\n    \"./lib/env-options\": \"./lib/env-options.js\",\n    \"./lib/env-options.js\": \"./lib/env-options.js\",\n    \"./lib/cli-options\": \"./lib/cli-options.js\",\n    \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n    \"lint\": \"standard\",\n    \"pretest\": \"npm run lint && npm run dts-check\",\n    \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n    \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n    \"prerelease\": \"npm test\",\n    \"release\": \"standard-version\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/motdotla/dotenv.git\"\n  },\n  \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n  \"funding\": \"https://dotenvx.com\",\n  \"keywords\": [\n    \"dotenv\",\n    \"env\",\n    \".env\",\n    \"environment\",\n    \"variables\",\n    \"config\",\n    \"settings\"\n  ],\n  \"readmeFilename\": \"README.md\",\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"@types/node\": \"^18.11.3\",\n    \"decache\": \"^4.6.2\",\n    \"sinon\": \"^14.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"standard-version\": \"^9.5.0\",\n    \"tap\": \"^19.2.0\",\n    \"typescript\": \"^4.8.4\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"browser\": {\n    \"fs\": false\n  }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (debug || !quiet) {\n    _log('Loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('No encoding is specified. UTF-8 is used by default')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`Failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsedAll, options)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(parsedAll).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`Failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","// ../config.js accepts options via environment variables\nconst options = {}\n\nif (process.env.DOTENV_CONFIG_ENCODING != null) {\n  options.encoding = process.env.DOTENV_CONFIG_ENCODING\n}\n\nif (process.env.DOTENV_CONFIG_PATH != null) {\n  options.path = process.env.DOTENV_CONFIG_PATH\n}\n\nif (process.env.DOTENV_CONFIG_QUIET != null) {\n  options.quiet = process.env.DOTENV_CONFIG_QUIET\n}\n\nif (process.env.DOTENV_CONFIG_DEBUG != null) {\n  options.debug = process.env.DOTENV_CONFIG_DEBUG\n}\n\nif (process.env.DOTENV_CONFIG_OVERRIDE != null) {\n  options.override = process.env.DOTENV_CONFIG_OVERRIDE\n}\n\nif (process.env.DOTENV_CONFIG_DOTENV_KEY != null) {\n  options.DOTENV_KEY = process.env.DOTENV_CONFIG_DOTENV_KEY\n}\n\nmodule.exports = options\n","const re = /^dotenv_config_(encoding|path|quiet|debug|override|DOTENV_KEY)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n  const options = args.reduce(function (acc, cur) {\n    const matches = cur.match(re)\n    if (matches) {\n      acc[matches[1]] = matches[2]\n    }\n    return acc\n  }, {})\n\n  if (!('quiet' in options)) {\n    options.quiet = 'true'\n  }\n\n  return options\n}\n","// Export all public classes and interfaces\nexport { AgentBay, type CreateSessionParams} from \"./agent-bay\";\nexport * from \"./agent\";\nexport * from \"./api\";\nexport * from \"./application\";\nexport * from \"./browser\";\nexport * from \"./command\";\nexport { Context, ContextService } from \"./context\";\nexport * from \"./exceptions\";\nexport * from \"./extension\";\nexport * from \"./filesystem\";\nexport * from \"./oss\";\nexport { Session } from \"./session\";\nexport { type ListSessionParams } from \"./types\";\nexport * from \"./ui\";\nexport * from './context-sync'\nexport * from './context-manager'\nexport * from './session-params'\n// Export utility functions\nexport { log, logError } from \"./utils/logger\";\nexport { loadConfig, loadDotEnv, type Config } from \"./config\";\n","import { $OpenApiUtil } from \"@alicloud/openapi-core\";\nimport \"dotenv/config\";\nimport * as $_client from \"./api\";\nimport { ListSessionRequest, CreateMcpSessionRequestPersistenceDataList } from \"./api/models/model\";\nimport { Client } from \"./api/client\";\n\nimport { loadConfig, loadDotEnv, Config, BROWSER_DATA_PATH } from \"./config\";\nimport { ContextService } from \"./context\";\nimport { ContextSync } from \"./context-sync\";\nimport { APIError, AuthenticationError } from \"./exceptions\";\nimport { Session } from \"./session\";\nimport { BrowserContext } from \"./session-params\";\n\nimport {\n  DeleteResult,\n  extractRequestId,\n  SessionResult,\n} from \"./types/api-response\";\nimport {\n  ListSessionParams,\n  SessionListResult,\n} from \"./types/list-session-params\";\nimport { log, logError } from \"./utils/logger\";\n\n/**\n * Generate a random context ID using alphanumeric characters with timestamp.\n * This function is similar to the Python version's generate_random_context_id.\n */\nfunction generateRandomContextId(length = 16, includeTimestamp = true): string {\n  const timestamp = new Date().toISOString().replace(/[-T:.Z]/g, '').slice(0, 14);\n\n  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n  let randomPart = '';\n  for (let i = 0; i < length; i++) {\n    randomPart += characters.charAt(Math.floor(Math.random() * characters.length));\n  }\n\n  return includeTimestamp ? `${timestamp}_${randomPart}` : randomPart;\n}\n\n/**\n * Parameters for creating a session.\n */\nexport interface CreateSessionParams {\n  labels?: Record<string, string>;\n  imageId?: string;\n  contextSync?: ContextSync[];\n  browserContext?: BrowserContext;\n  isVpc?: boolean;\n  mcpPolicyId?: string;\n  enableBrowserReplay?: boolean;\n}\n\n/**\n * Main class for interacting with the AgentBay cloud runtime environment.\n */\nexport class AgentBay {\n  private apiKey: string;\n  private client: Client;\n  private regionId: string;\n  private endpoint: string;\n  private sessions: Map<string, Session> = new Map();\n\n  /**\n   * Context service for managing persistent contexts.\n   */\n  context: ContextService;\n\n  /**\n   * Initialize the AgentBay client.\n   *\n   * @param options - Configuration options\n   * @param options.apiKey - API key for authentication. If not provided, will look for AGENTBAY_API_KEY environment variable.\n   * @param options.config - Custom configuration object. If not provided, will use environment-based configuration.\n   */\n  constructor(\n    options: {\n      apiKey?: string;\n      config?: Config;\n    } = {}\n  ) {\n    // Load .env file first to ensure AGENTBAY_API_KEY is available\n    loadDotEnv();\n\n    this.apiKey = options.apiKey || process.env.AGENTBAY_API_KEY || \"\";\n\n    if (!this.apiKey) {\n      throw new AuthenticationError(\n        \"API key is required. Provide it as a parameter or set the AGENTBAY_API_KEY environment variable.\"\n      );\n    }\n\n    // Load configuration using the enhanced loadConfig function\n    const configData = loadConfig(options.config);\n    this.regionId = configData.region_id;\n    this.endpoint = configData.endpoint;\n\n    const config = new $OpenApiUtil.Config({\n      regionId: this.regionId,\n      endpoint: this.endpoint,\n    });\n\n    config.readTimeout = configData.timeout_ms;\n    config.connectTimeout = configData.timeout_ms;\n\n    try {\n      this.client = new Client(config);\n\n      // Initialize context service\n      this.context = new ContextService(this);\n    } catch (error) {\n      logError(`Failed to constructor:`, error);\n      throw new AuthenticationError(`Failed to constructor: ${error}`);\n    }\n  }\n\n  /**\n   * Create a new session in the AgentBay cloud environment.\n   *\n   * @param params - Optional parameters for creating the session\n   * @returns SessionResult containing the created session and request ID\n   */\n  async create(params: CreateSessionParams = {}): Promise<SessionResult> {\n    try {\n      const request = new $_client.CreateMcpSessionRequest({\n        authorization: \"Bearer \" + this.apiKey,\n      });\n\n      // Add labels if provided\n      if (params.labels) {\n        request.labels = JSON.stringify(params.labels);\n      }\n\n      // Add image_id if provided\n      if (params.imageId) {\n        request.imageId = params.imageId;\n      }\n\n      // Add McpPolicyId if provided\n      if (params.mcpPolicyId) {\n        request.mcpPolicyId = params.mcpPolicyId;\n      }\n\n      // Add VPC resource if specified\n      request.vpcResource = params.isVpc || false;\n\n      // Flag to indicate if we need to wait for context synchronization\n      let needsContextSync = false;\n\n      // Add context sync configurations if provided\n      if (params.contextSync && params.contextSync.length > 0) {\n        const persistenceDataList: CreateMcpSessionRequestPersistenceDataList[] = [];\n        for (const contextSync of params.contextSync) {\n          const persistenceItem = new CreateMcpSessionRequestPersistenceDataList({\n            contextId: contextSync.contextId,\n            path: contextSync.path,\n          });\n\n          // Convert policy to JSON string if provided\n          if (contextSync.policy) {\n            persistenceItem.policy = JSON.stringify(contextSync.policy);\n          }\n\n          persistenceDataList.push(persistenceItem);\n        }\n        request.persistenceDataList = persistenceDataList;\n        needsContextSync = persistenceDataList.length > 0;\n      }\n\n      // Add BrowserContext as a ContextSync if provided\n      if (params.browserContext) {\n        // Create a simple sync policy for browser context\n        const syncPolicy = {\n          uploadPolicy: { autoUpload: params.browserContext.autoUpload },\n          downloadPolicy: null,\n          deletePolicy: null,\n          bwList: null\n        };\n\n        // Create browser context sync item\n        const browserContextSync = new CreateMcpSessionRequestPersistenceDataList({\n          contextId: params.browserContext.contextId,\n          path: BROWSER_DATA_PATH, // Using a constant path for browser data\n          policy: JSON.stringify(syncPolicy)\n        });\n\n        // Add to persistence data list or create new one if not exists\n        if (!request.persistenceDataList) {\n          request.persistenceDataList = [];\n        }\n        request.persistenceDataList.push(browserContextSync);\n        needsContextSync = true;\n      }\n\n      // Add browser recording persistence if enabled\n      if (params.enableBrowserReplay) {\n        // Create browser recording persistence configuration\n        const recordPath = \"/home/guest/record\";\n        const recordContextId = generateRandomContextId();\n        const recordPersistence = new CreateMcpSessionRequestPersistenceDataList({\n          contextId: recordContextId,\n          path: recordPath,\n        });\n\n        // Add to persistence data list or create new one if not exists\n        if (!request.persistenceDataList) {\n          request.persistenceDataList = [];\n        }\n        request.persistenceDataList.push(recordPersistence);\n      }\n\n      // Log API request\n      log(\"API Call: CreateMcpSession\");\n      let requestLog = \"Request: \";\n      if (request.imageId) {\n        requestLog += `ImageId=${request.imageId}, `;\n      }\n      if (request.labels) {\n        requestLog += `Labels=${request.labels}, `;\n      }\n      if (\n        request.persistenceDataList &&\n        request.persistenceDataList.length > 0\n      ) {\n        requestLog += `PersistenceDataList=${request.persistenceDataList.length} items, `;\n        request.persistenceDataList.forEach((pd: CreateMcpSessionRequestPersistenceDataList, i: number) => {\n          requestLog += `Item${i}[ContextId=${pd.contextId}, Path=${pd.path}`;\n          if (pd.policy) {\n            requestLog += `, Policy=${pd.policy}`;\n          }\n          requestLog += `], `;\n        });\n      }\n      log(requestLog);\n\n      const response = await this.client.createMcpSession(request);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      // Log response data with requestId\n      log(\"response data =\", response.body?.data);\n      if (requestId) {\n        log(`requestId = ${requestId}`);\n      }\n\n      const sessionData = response.body;\n\n      if (!sessionData || typeof sessionData !== \"object\") {\n        return {\n          requestId,\n          success: false,\n          errorMessage: \"Invalid response format: expected a dictionary\",\n        };\n      }\n\n      const data = sessionData.data;\n      if (!data || typeof data !== \"object\") {\n        return {\n          requestId,\n          success: false,\n          errorMessage:\n            \"Invalid response format: 'data' field is not a dictionary\",\n        };\n      }\n\n      const sessionId = data.sessionId;\n      if (!sessionId) {\n        return {\n          requestId,\n          success: false,\n          errorMessage: \"SessionId not found in response\",\n        };\n      }\n\n      // ResourceUrl is optional in CreateMcpSession response\n      const resourceUrl = data.resourceUrl;\n\n      log(\"session_id =\", sessionId);\n      log(\"resource_url =\", resourceUrl);\n\n      const session = new Session(this, sessionId);\n\n      // Set VPC-related information from response\n      session.isVpc = params.isVpc || false;\n      if (data.networkInterfaceIp) {\n        session.networkInterfaceIp = data.networkInterfaceIp;\n      }\n      if (data.httpPort) {\n        session.httpPort = data.httpPort;\n      }\n      if (data.token) {\n        session.token = data.token;\n      }\n\n      // Set browser recording state\n      session.enableBrowserReplay = params.enableBrowserReplay || false;\n\n      // Store imageId used for this session\n      (session as any).imageId = params.imageId;\n\n      this.sessions.set(session.sessionId, session);\n\n      // For VPC sessions, automatically fetch MCP tools information\n      if (params.isVpc) {\n        log(\"VPC session detected, automatically fetching MCP tools...\");\n        try {\n          const toolsResult = await session.listMcpTools();\n          log(`Successfully fetched ${toolsResult.tools.length} MCP tools for VPC session (RequestID: ${toolsResult.requestId})`);\n        } catch (error) {\n          logError(`Warning: Failed to fetch MCP tools for VPC session: ${error}`);\n          // Continue with session creation even if tools fetch fails\n        }\n      }\n\n      // If we have persistence data, wait for context synchronization\n      if (needsContextSync) {\n        log(\"Waiting for context synchronization to complete...\");\n\n        // Wait for context synchronization to complete\n        const maxRetries = 150; // Maximum number of retries\n        const retryInterval = 1500; // Milliseconds to wait between retries\n\n        for (let retry = 0; retry < maxRetries; retry++) {\n          try {\n            // Get context status data\n            const infoResult = await session.context.info();\n\n            // Check if all context items have status \"Success\" or \"Failed\"\n            let allCompleted = true;\n            let hasFailure = false;\n\n            for (const item of infoResult.contextStatusData) {\n              log(`Context ${item.contextId} status: ${item.status}, path: ${item.path}`);\n\n              if (item.status !== \"Success\" && item.status !== \"Failed\") {\n                allCompleted = false;\n                break;\n              }\n\n              if (item.status === \"Failed\") {\n                hasFailure = true;\n                logError(`Context synchronization failed for ${item.contextId}: ${item.errorMessage}`);\n              }\n            }\n\n            if (allCompleted || infoResult.contextStatusData.length === 0) {\n              if (hasFailure) {\n                log(\"Context synchronization completed with failures\");\n              } else {\n                log(\"Context synchronization completed successfully\");\n              }\n              break;\n            }\n\n            log(`Waiting for context synchronization, attempt ${retry+1}/${maxRetries}`);\n            await new Promise(resolve => setTimeout(resolve, retryInterval));\n          } catch (error) {\n            logError(`Error checking context status on attempt ${retry+1}: ${error}`);\n            await new Promise(resolve => setTimeout(resolve, retryInterval));\n          }\n        }\n      }\n\n      // Return SessionResult with request ID\n      return {\n        requestId,\n        success: true,\n        session,\n      };\n    } catch (error) {\n      logError(\"Error calling create_mcp_session:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to create session: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * List all available sessions.\n   *\n   * @returns A list of session objects.\n   */\n  list(): Session[] {\n    return Array.from(this.sessions.values());\n  }\n\n  /**\n   * List sessions filtered by the provided labels with pagination support.\n   * It returns sessions that match all the specified labels.\n   *\n   * **Breaking Change**: This method currently only accepts ListSessionParams parameters，\n   *\n   * @param params - Parameters including labels and pagination options (required)\n   * @returns API response with sessions list and pagination info\n   */\n  async listByLabels(params?: ListSessionParams): Promise<SessionListResult> {\n    if (!params) {\n      params = {\n        maxResults: 10,\n        labels: {},\n      };\n    }\n\n    try {\n      // Convert labels to JSON\n      const labelsJSON = JSON.stringify(params.labels);\n\n      //Build request object with support for pagination parameters\n      const listSessionRequest = new ListSessionRequest({\n        authorization: `Bearer ${this.apiKey}`,\n        labels: labelsJSON,\n        maxResults: params.maxResults || 10,\n        ...(params.nextToken && { nextToken: params.nextToken }),\n      });\n\n      log(\"API Call: ListSession\");\n      log(\n        `Request: Labels=${labelsJSON}, MaxResults=${params.maxResults || 10}${\n          params.nextToken ? `, NextToken=${params.nextToken}` : \"\"\n        }`\n      );\n\n      const response = await this.client.listSession(listSessionRequest);\n      const body = response.body;\n      const requestId = extractRequestId(body?.requestId) || \"\";\n\n      // Check for errors in the response\n      if (\n        body?.data &&\n        typeof body.data === \"object\" &&\n        body.success &&\n        body.success !== true\n      ) {\n        return {\n          requestId,\n          success: false,\n          errorMessage: \"Failed to list sessions by labels\",\n          data: [],\n          nextToken: \"\",\n          maxResults: params.maxResults || 10,\n          totalCount: 0,\n        };\n      }\n\n      const sessions: Session[] = [];\n      let nextToken = \"\";\n      let maxResults = params.maxResults || 10;\n      let totalCount = 0;\n\n      log(\"body =\", body);\n\n      // Extract pagination information\n      if (body && typeof body === \"object\") {\n        nextToken = body.nextToken || \"\";\n        maxResults = parseInt(String(body.maxResults || 0)) || maxResults;\n        totalCount = parseInt(String(body.totalCount || 0));\n      }\n\n      // Extract session data\n      const responseData = body?.data;\n\n      // Handle both list and dict responses\n      if (Array.isArray(responseData)) {\n        // Data is a list of session objects\n        for (const sessionData of responseData) {\n          if (sessionData && typeof sessionData === \"object\") {\n            const sessionId = (sessionData as any).sessionId; // Capital S and I to match Python\n            if (sessionId) {\n              // Check if we already have this session in our cache\n              let session = this.sessions.get(sessionId);\n              if (!session) {\n                // Create a new session object\n                session = new Session(this, sessionId);\n                this.sessions.set(sessionId, session);\n              }\n              sessions.push(session);\n            }\n          }\n        }\n      }\n\n      // Return SessionListResult with request ID and pagination info\n      return {\n        requestId,\n        success: true,\n        data: sessions,\n        nextToken,\n        maxResults,\n        totalCount,\n      };\n    } catch (error) {\n      logError(\"Error calling list_session:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        data: [],\n        errorMessage: `Failed to list sessions by labels: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Delete a session by session object.\n   *\n   * @param session - The session to delete.\n   * @param syncContext - Whether to sync context data (trigger file uploads) before deleting the session. Defaults to false.\n   * @returns DeleteResult indicating success or failure and request ID\n   */\n  async delete(session: Session, syncContext = false): Promise<DeleteResult> {\n    try {\n      // Delete the session and get the result\n      const deleteResult = await session.delete(syncContext);\n\n      this.sessions.delete(session.sessionId);\n\n      // Return the DeleteResult obtained from session.delete()\n      return deleteResult;\n    } catch (error) {\n      logError(\"Error deleting session:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to delete session ${session.sessionId}: ${error}`,\n      };\n    }\n  }\n\n  /**\n   *\n   * @param sessionId - The ID of the session to remove.\n   */\n  public removeSession(sessionId: string): void {\n    this.sessions.delete(sessionId);\n  }\n\n  // For internal use by the Session class\n  getClient(): Client {\n    return this.client;\n  }\n\n  getAPIKey(): string {\n    return this.apiKey;\n  }\n}\n\n/**\n * Creates a new AgentBay client using default configuration.\n * This is a convenience function that allows creating an AgentBay instance without a config parameter.\n *\n * @param apiKey - API key for authentication\n * @returns A new AgentBay instance with default configuration\n */\nexport function newAgentBayWithDefaults(apiKey: string): AgentBay {\n  return new AgentBay({ apiKey });\n}\n","(function () {\n  require('./lib/main').config(\n    Object.assign(\n      {},\n      require('./lib/env-options'),\n      require('./lib/cli-options')(process.argv)\n    )\n  )\n})()\n","// Export the client and models\nimport { Client } from \"./client\";\nexport { Client } from \"./client\";\nexport * from \"./models/model\";\n\nexport default Client;\n","// This file is auto-generated, don't edit it\nimport * as $dara from \"@darabonba/typescript\";\nimport OpenApi from \"@alicloud/openapi-core\";\nimport { OpenApiUtil, $OpenApiUtil } from \"@alicloud/openapi-core\";\n\nimport * as $_model from \"./models/model\";\nexport * from \"./models/model\";\n\nexport class Client extends OpenApi {\n  constructor(config: $OpenApiUtil.Config) {\n    super(config);\n    this._signatureAlgorithm = \"v2\";\n    this._endpointRule = \"\";\n    this.checkConfig(config);\n    this._endpoint = this.getEndpoint(\n      \"wuyingai\",\n      this._regionId,\n      this._endpointRule,\n      this._network,\n      this._suffix,\n      this._endpointMap,\n      this._endpoint\n    );\n  }\n\n  getEndpoint(\n    productId: string,\n    regionId: string,\n    endpointRule: string,\n    network: string,\n    suffix: string,\n    endpointMap: { [key: string]: string },\n    endpoint: string\n  ): string {\n    if (!$dara.isNull(endpoint)) {\n      return endpoint;\n    }\n\n    if (!$dara.isNull(endpointMap) && !$dara.isNull(endpointMap[regionId])) {\n      return endpointMap[regionId];\n    }\n\n    return OpenApiUtil.getEndpointRules(\n      productId,\n      regionId,\n      endpointRule,\n      network,\n      suffix\n    );\n  }\n\n  /**\n   * Call MCP tool\n   *\n   * @param request - CallMcpToolRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns CallMcpToolResponse\n   */\n  async callMcpToolWithOptions(\n    request: $_model.CallMcpToolRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.CallMcpToolResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.args)) {\n      body[\"Args\"] = request.args;\n    }\n\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.externalUserId)) {\n      body[\"ExternalUserId\"] = request.externalUserId;\n    }\n\n    if (!$dara.isNull(request.imageId)) {\n      body[\"ImageId\"] = request.imageId;\n    }\n\n    if (!$dara.isNull(request.name)) {\n      body[\"Name\"] = request.name;\n    }\n\n    if (!$dara.isNull(request.server)) {\n      body[\"Server\"] = request.server;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    if (!$dara.isNull(request.tool)) {\n      body[\"Tool\"] = request.tool;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"CallMcpTool\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.CallMcpToolResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.CallMcpToolResponse({})\n    );\n  }\n\n  /**\n   * Call MCP tool\n   *\n   * @param request - CallMcpToolRequest\n   * @returns CallMcpToolResponse\n   */\n  async callMcpTool(\n    request: $_model.CallMcpToolRequest\n  ): Promise<$_model.CallMcpToolResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.callMcpToolWithOptions(request, runtime);\n  }\n\n  /**\n   * Create MCP session\n   *\n   * @param tmpReq - CreateMcpSessionRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns CreateMcpSessionResponse\n   */\n  async createMcpSessionWithOptions(\n    tmpReq: $_model.CreateMcpSessionRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.CreateMcpSessionResponse> {\n    tmpReq.validate();\n    const request = new $_model.CreateMcpSessionShrinkRequest({});\n    OpenApiUtil.convert(tmpReq, request);\n    if (!$dara.isNull(tmpReq.persistenceDataList)) {\n      request.persistenceDataListShrink =\n        OpenApiUtil.arrayToStringWithSpecifiedStyle(\n          tmpReq.persistenceDataList,\n          \"PersistenceDataList\",\n          \"json\"\n        );\n    }\n\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.externalUserId)) {\n      body[\"ExternalUserId\"] = request.externalUserId;\n    }\n\n    if (!$dara.isNull(request.imageId)) {\n      body[\"ImageId\"] = request.imageId;\n    }\n\n    if (!$dara.isNull(request.labels)) {\n      body[\"Labels\"] = request.labels;\n    }\n\n    if (!$dara.isNull(request.mcpPolicyId)) {\n      body[\"McpPolicyId\"] = request.mcpPolicyId;\n    }\n\n    if (!$dara.isNull(request.persistenceDataListShrink)) {\n      body[\"PersistenceDataList\"] = request.persistenceDataListShrink;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    if (!$dara.isNull(request.vpcResource)) {\n      body[\"VpcResource\"] = request.vpcResource;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"CreateMcpSession\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.CreateMcpSessionResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.CreateMcpSessionResponse({})\n    );\n  }\n\n  /**\n   * Create MCP session\n   *\n   * @param request - CreateMcpSessionRequest\n   * @returns CreateMcpSessionResponse\n   */\n  async createMcpSession(\n    request: $_model.CreateMcpSessionRequest\n  ): Promise<$_model.CreateMcpSessionResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.createMcpSessionWithOptions(request, runtime);\n  }\n\n  /**\n   * Delete persistent context\n   *\n   * @param request - DeleteContextRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns DeleteContextResponse\n   */\n  async deleteContextWithOptions(\n    request: $_model.DeleteContextRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.DeleteContextResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.id)) {\n      body[\"Id\"] = request.id;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"DeleteContext\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.DeleteContextResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.DeleteContextResponse({})\n    );\n  }\n\n  /**\n   * Delete persistent context\n   *\n   * @param request - DeleteContextRequest\n   * @returns DeleteContextResponse\n   */\n  async deleteContext(\n    request: $_model.DeleteContextRequest\n  ): Promise<$_model.DeleteContextResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.deleteContextWithOptions(request, runtime);\n  }\n\n  /**\n   * Get context\n   *\n   * @param request - GetContextRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetContextResponse\n   */\n  async getContextWithOptions(\n    request: $_model.GetContextRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetContextResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.allowCreate)) {\n      body[\"AllowCreate\"] = request.allowCreate;\n    }\n\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.name)) {\n      body[\"Name\"] = request.name;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetContext\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetContextResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetContextResponse({})\n    );\n  }\n\n  /**\n   * Get context\n   *\n   * @param request - GetContextRequest\n   * @returns GetContextResponse\n   */\n  async getContext(\n    request: $_model.GetContextRequest\n  ): Promise<$_model.GetContextResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getContextWithOptions(request, runtime);\n  }\n\n  /**\n   * Get context information\n   *\n   * @param request - GetContextInfoRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetContextInfoResponse\n   */\n  async getContextInfoWithOptions(\n    request: $_model.GetContextInfoRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetContextInfoResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.path)) {\n      body[\"Path\"] = request.path;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    if (!$dara.isNull(request.taskType)) {\n      body[\"TaskType\"] = request.taskType;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetContextInfo\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetContextInfoResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetContextInfoResponse({})\n    );\n  }\n\n  /**\n   * Get context information\n   *\n   * @param request - GetContextInfoRequest\n   * @returns GetContextInfoResponse\n   */\n  async getContextInfo(\n    request: $_model.GetContextInfoRequest\n  ): Promise<$_model.GetContextInfoResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getContextInfoWithOptions(request, runtime);\n  }\n\n  /**\n   * Get labels\n   *\n   * @param request - GetLabelRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetLabelResponse\n   */\n  async getLabelWithOptions(\n    request: $_model.GetLabelRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetLabelResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.maxResults)) {\n      body[\"MaxResults\"] = request.maxResults;\n    }\n\n    if (!$dara.isNull(request.nextToken)) {\n      body[\"NextToken\"] = request.nextToken;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetLabel\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetLabelResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetLabelResponse({})\n    );\n  }\n\n  /**\n   * Get labels\n   *\n   * @param request - GetLabelRequest\n   * @returns GetLabelResponse\n   */\n  async getLabel(\n    request: $_model.GetLabelRequest\n  ): Promise<$_model.GetLabelResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getLabelWithOptions(request, runtime);\n  }\n\n  /**\n   * Get forwarding link for specific port\n   *\n   * @param request - GetLinkRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetLinkResponse\n   */\n  async getLinkWithOptions(\n    request: $_model.GetLinkRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetLinkResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.port)) {\n      body[\"Port\"] = request.port;\n    }\n\n    if (!$dara.isNull(request.protocolType)) {\n      body[\"ProtocolType\"] = request.protocolType;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetLink\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetLinkResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetLinkResponse({})\n    );\n  }\n\n  /**\n   * Get forwarding link for specific port\n   *\n   * @param request - GetLinkRequest\n   * @returns GetLinkResponse\n   */\n  async getLink(\n    request: $_model.GetLinkRequest\n  ): Promise<$_model.GetLinkResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getLinkWithOptions(request, runtime);\n  }\n\n  /**\n   * Get MCP resource information\n   *\n   * @param request - GetMcpResourceRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetMcpResourceResponse\n   */\n  async getMcpResourceWithOptions(\n    request: $_model.GetMcpResourceRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetMcpResourceResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetMcpResource\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetMcpResourceResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetMcpResourceResponse({})\n    );\n  }\n\n  /**\n   * Get MCP resource information\n   *\n   * @param request - GetMcpResourceRequest\n   * @returns GetMcpResourceResponse\n   */\n  async getMcpResource(\n    request: $_model.GetMcpResourceRequest\n  ): Promise<$_model.GetMcpResourceResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getMcpResourceWithOptions(request, runtime);\n  }\n\n  /**\n   * Get context list\n   *\n   * @param request - ListContextsRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns ListContextsResponse\n   */\n  async listContextsWithOptions(\n    request: $_model.ListContextsRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.ListContextsResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.maxResults)) {\n      body[\"MaxResults\"] = request.maxResults;\n    }\n\n    if (!$dara.isNull(request.nextToken)) {\n      body[\"NextToken\"] = request.nextToken;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"ListContexts\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.ListContextsResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.ListContextsResponse({})\n    );\n  }\n\n  /**\n   * Get context list\n   *\n   * @param request - ListContextsRequest\n   * @returns ListContextsResponse\n   */\n  async listContexts(\n    request: $_model.ListContextsRequest\n  ): Promise<$_model.ListContextsResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.listContextsWithOptions(request, runtime);\n  }\n\n  /**\n   * ListMcpTools\n   *\n   * @param request - ListMcpToolsRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns ListMcpToolsResponse\n   */\n  async listMcpToolsWithOptions(\n    request: $_model.ListMcpToolsRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.ListMcpToolsResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.imageId)) {\n      body[\"ImageId\"] = request.imageId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"ListMcpTools\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.ListMcpToolsResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.ListMcpToolsResponse({})\n    );\n  }\n\n  /**\n   * ListMcpTools\n   *\n   * @param request - ListMcpToolsRequest\n   * @returns ListMcpToolsResponse\n   */\n  async listMcpTools(\n    request: $_model.ListMcpToolsRequest\n  ): Promise<$_model.ListMcpToolsResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.listMcpToolsWithOptions(request, runtime);\n  }\n\n  /**\n   * Query session list by label\n   *\n   * @param request - ListSessionRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns ListSessionResponse\n   */\n  async listSessionWithOptions(\n    request: $_model.ListSessionRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.ListSessionResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.labels)) {\n      body[\"Labels\"] = request.labels;\n    }\n\n    if (!$dara.isNull(request.maxResults)) {\n      body[\"MaxResults\"] = request.maxResults;\n    }\n\n    if (!$dara.isNull(request.nextToken)) {\n      body[\"NextToken\"] = request.nextToken;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"ListSession\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.ListSessionResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.ListSessionResponse({})\n    );\n  }\n\n  /**\n   * Query session list by label\n   *\n   * @param request - ListSessionRequest\n   * @returns ListSessionResponse\n   */\n  async listSession(\n    request: $_model.ListSessionRequest\n  ): Promise<$_model.ListSessionResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.listSessionWithOptions(request, runtime);\n  }\n\n  /**\n   * Modify context\n   *\n   * @param request - ModifyContextRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns ModifyContextResponse\n   */\n  async modifyContextWithOptions(\n    request: $_model.ModifyContextRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.ModifyContextResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.id)) {\n      body[\"Id\"] = request.id;\n    }\n\n    if (!$dara.isNull(request.name)) {\n      body[\"Name\"] = request.name;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"ModifyContext\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.ModifyContextResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.ModifyContextResponse({})\n    );\n  }\n\n  /**\n   * Modify context\n   *\n   * @param request - ModifyContextRequest\n   * @returns ModifyContextResponse\n   */\n  async modifyContext(\n    request: $_model.ModifyContextRequest\n  ): Promise<$_model.ModifyContextResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.modifyContextWithOptions(request, runtime);\n  }\n\n  /**\n   * Release MCP session\n   *\n   * @param request - ReleaseMcpSessionRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns ReleaseMcpSessionResponse\n   */\n  async releaseMcpSessionWithOptions(\n    request: $_model.ReleaseMcpSessionRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.ReleaseMcpSessionResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"ReleaseMcpSession\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.ReleaseMcpSessionResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.ReleaseMcpSessionResponse({})\n    );\n  }\n\n  /**\n   * Release MCP session\n   *\n   * @param request - ReleaseMcpSessionRequest\n   * @returns ReleaseMcpSessionResponse\n   */\n  async releaseMcpSession(\n    request: $_model.ReleaseMcpSessionRequest\n  ): Promise<$_model.ReleaseMcpSessionResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.releaseMcpSessionWithOptions(request, runtime);\n  }\n\n  /**\n   * Set labels\n   *\n   * @param request - SetLabelRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns SetLabelResponse\n   */\n  async setLabelWithOptions(\n    request: $_model.SetLabelRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.SetLabelResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.labels)) {\n      body[\"Labels\"] = request.labels;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"SetLabel\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.SetLabelResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.SetLabelResponse({})\n    );\n  }\n\n  /**\n   * Set labels\n   *\n   * @param request - SetLabelRequest\n   * @returns SetLabelResponse\n   */\n  async setLabel(\n    request: $_model.SetLabelRequest\n  ): Promise<$_model.SetLabelResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.setLabelWithOptions(request, runtime);\n  }\n\n  /**\n   * Sync context\n   *\n   * @param request - SyncContextRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns SyncContextResponse\n   */\n  async syncContextWithOptions(\n    request: $_model.SyncContextRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.SyncContextResponse> {\n    request.validate();\n    const query: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      query[\"Authorization\"] = request.authorization;\n    }\n\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.mode)) {\n      body[\"Mode\"] = request.mode;\n    }\n\n    if (!$dara.isNull(request.path)) {\n      body[\"Path\"] = request.path;\n    }\n\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      query: OpenApiUtil.query(query),\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"SyncContext\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.SyncContextResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.SyncContextResponse({})\n    );\n  }\n\n  /**\n   * Sync context\n   *\n   * @param request - SyncContextRequest\n   * @returns SyncContextResponse\n   */\n  async syncContext(\n    request: $_model.SyncContextRequest\n  ): Promise<$_model.SyncContextResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.syncContextWithOptions(request, runtime);\n  }\n\n  /**\n   * Initialize browser\n   *\n   * @param tmpReq - InitBrowserRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns InitBrowserResponse\n   */\n  async initBrowserWithOptions(\n    request: $_model.InitBrowserRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.InitBrowserResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n    if (!$dara.isNull(request.persistentPath)) {\n      body[\"PersistentPath\"] = request.persistentPath;\n    }\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n    if (!$dara.isNull(request.browserOption)) {\n      body[\"BrowserOption\"] = JSON.stringify(request.browserOption);\n    }\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"InitBrowser\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.InitBrowserResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.InitBrowserResponse({})\n    );\n  }\n\n  /**\n   * Initialize browser\n   *\n   * @param request - InitBrowserRequest\n   * @returns InitBrowserResponse\n   */\n  async initBrowser(\n    request: $_model.InitBrowserRequest\n  ): Promise<$_model.InitBrowserResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.initBrowserWithOptions(request, runtime);\n  }\n\n  /**\n   * Initialize browser (sync version)\n   *\n   * @param request - InitBrowserRequest\n   * @returns InitBrowserResponse\n   */\n  initBrowserSync(\n    request: $_model.InitBrowserRequest\n  ): $_model.InitBrowserResponse {\n    const runtime = new $dara.RuntimeOptions({});\n    \n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n    if (!$dara.isNull(request.persistentPath)) {\n      body[\"PersistentPath\"] = request.persistentPath;\n    }\n    if (!$dara.isNull(request.sessionId)) {\n      body[\"SessionId\"] = request.sessionId;\n    }\n    if (!$dara.isNull(request.browserOption)) {\n      body[\"BrowserOption\"] = JSON.stringify(request.browserOption);\n    }\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"InitBrowser\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.InitBrowserResponse>(\n      this.callApi(params, req, runtime),\n      new $_model.InitBrowserResponse({})\n    );\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - DeleteContextFileRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns DeleteContextFileResponse\n   */\n  async deleteContextFileWithOptions(\n    request: $_model.DeleteContextFileRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.DeleteContextFileResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.filePath)) {\n      body[\"FilePath\"] = request.filePath;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"DeleteContextFile\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.DeleteContextFileResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.DeleteContextFileResponse({})\n    );\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - DeleteContextFileRequest\n   * @returns DeleteContextFileResponse\n   */\n  async deleteContextFile(\n    request: $_model.DeleteContextFileRequest\n  ): Promise<$_model.DeleteContextFileResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.deleteContextFileWithOptions(request, runtime);\n  }\n\n  /**\n   * Query context specific directory files\n   *\n   * @param request - DescribeContextFilesRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns DescribeContextFilesResponse\n   */\n  async describeContextFilesWithOptions(\n    request: $_model.DescribeContextFilesRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.DescribeContextFilesResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.pageNumber)) {\n      body[\"PageNumber\"] = request.pageNumber;\n    }\n\n    if (!$dara.isNull(request.pageSize)) {\n      body[\"PageSize\"] = request.pageSize;\n    }\n\n    if (!$dara.isNull(request.parentFolderPath)) {\n      body[\"ParentFolderPath\"] = request.parentFolderPath;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"DescribeContextFiles\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.DescribeContextFilesResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.DescribeContextFilesResponse({})\n    );\n  }\n\n  /**\n   * Query context specific directory files\n   *\n   * @param request - DescribeContextFilesRequest\n   * @returns DescribeContextFilesResponse\n   */\n  async describeContextFiles(\n    request: $_model.DescribeContextFilesRequest\n  ): Promise<$_model.DescribeContextFilesResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.describeContextFilesWithOptions(request, runtime);\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - GetContextFileDownloadUrlRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetContextFileDownloadUrlResponse\n   */\n  async getContextFileDownloadUrlWithOptions(\n    request: $_model.GetContextFileDownloadUrlRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetContextFileDownloadUrlResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.filePath)) {\n      body[\"FilePath\"] = request.filePath;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetContextFileDownloadUrl\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetContextFileDownloadUrlResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetContextFileDownloadUrlResponse({})\n    );\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - GetContextFileDownloadUrlRequest\n   * @returns GetContextFileDownloadUrlResponse\n   */\n  async getContextFileDownloadUrl(\n    request: $_model.GetContextFileDownloadUrlRequest\n  ): Promise<$_model.GetContextFileDownloadUrlResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getContextFileDownloadUrlWithOptions(request, runtime);\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - GetContextFileUploadUrlRequest\n   * @param runtime - runtime options for this request RuntimeOptions\n   * @returns GetContextFileUploadUrlResponse\n   */\n  async getContextFileUploadUrlWithOptions(\n    request: $_model.GetContextFileUploadUrlRequest,\n    runtime: $dara.RuntimeOptions\n  ): Promise<$_model.GetContextFileUploadUrlResponse> {\n    request.validate();\n    const body: { [key: string]: any } = {};\n    if (!$dara.isNull(request.authorization)) {\n      body[\"Authorization\"] = request.authorization;\n    }\n\n    if (!$dara.isNull(request.contextId)) {\n      body[\"ContextId\"] = request.contextId;\n    }\n\n    if (!$dara.isNull(request.filePath)) {\n      body[\"FilePath\"] = request.filePath;\n    }\n\n    const req = new $OpenApiUtil.OpenApiRequest({\n      body: OpenApiUtil.parseToMap(body),\n    });\n    const params = new $OpenApiUtil.Params({\n      action: \"GetContextFileUploadUrl\",\n      version: \"2025-05-06\",\n      protocol: \"HTTPS\",\n      pathname: \"/\",\n      method: \"POST\",\n      authType: \"Anonymous\",\n      style: \"RPC\",\n      reqBodyType: \"formData\",\n      bodyType: \"json\",\n    });\n    return $dara.cast<$_model.GetContextFileUploadUrlResponse>(\n      await this.callApi(params, req, runtime),\n      new $_model.GetContextFileUploadUrlResponse({})\n    );\n  }\n\n  /**\n   * Get context file upload URL\n   *\n   * @param request - GetContextFileUploadUrlRequest\n   * @returns GetContextFileUploadUrlResponse\n   */\n  async getContextFileUploadUrl(\n    request: $_model.GetContextFileUploadUrlRequest\n  ): Promise<$_model.GetContextFileUploadUrlResponse> {\n    const runtime = new $dara.RuntimeOptions({});\n    return await this.getContextFileUploadUrlWithOptions(request, runtime);\n  }\n}\n","export { ApplyMqttTokenResponseBodyData } from './ApplyMqttTokenResponseBodyData';\nexport { CreateMcpSessionRequestPersistenceDataList } from './CreateMcpSessionRequestPersistenceDataList';\nexport { CreateMcpSessionResponseBodyData } from './CreateMcpSessionResponseBodyData';\nexport { GetContextResponseBodyData } from './GetContextResponseBodyData';\nexport { GetContextInfoResponseBodyData } from './GetContextInfoResponseBodyData';\nexport { GetLabelResponseBodyData } from './GetLabelResponseBodyData';\nexport { GetLinkResponseBodyData } from './GetLinkResponseBodyData';\nexport { GetMcpResourceResponseBodyDataDesktopInfo } from './GetMcpResourceResponseBodyDataDesktopInfo';\nexport { GetMcpResourceResponseBodyData } from './GetMcpResourceResponseBodyData';\nexport { ListContextsResponseBodyData } from './ListContextsResponseBodyData';\nexport { ListSessionResponseBodyData } from './ListSessionResponseBodyData';\nexport { ApplyMqttTokenRequest } from './ApplyMqttTokenRequest';\nexport { ApplyMqttTokenResponseBody } from './ApplyMqttTokenResponseBody';\nexport { ApplyMqttTokenResponse } from './ApplyMqttTokenResponse';\nexport { CallMcpToolRequest } from './CallMcpToolRequest';\nexport { CallMcpToolResponseBody } from './CallMcpToolResponseBody';\nexport { CallMcpToolResponse } from './CallMcpToolResponse';\nexport { CreateMcpSessionRequest } from './CreateMcpSessionRequest';\nexport { CreateMcpSessionShrinkRequest } from './CreateMcpSessionShrinkRequest';\nexport { CreateMcpSessionResponseBody } from './CreateMcpSessionResponseBody';\nexport { CreateMcpSessionResponse } from './CreateMcpSessionResponse';\nexport { DeleteContextRequest } from './DeleteContextRequest';\nexport { DeleteContextResponseBody } from './DeleteContextResponseBody';\nexport { DeleteContextResponse } from './DeleteContextResponse';\nexport { GetContextRequest } from './GetContextRequest';\nexport { GetContextResponseBody } from './GetContextResponseBody';\nexport { GetContextResponse } from './GetContextResponse';\nexport { GetContextInfoRequest } from './GetContextInfoRequest';\nexport { GetContextInfoResponseBody } from './GetContextInfoResponseBody';\nexport { GetContextInfoResponse } from './GetContextInfoResponse';\nexport { GetLabelRequest } from './GetLabelRequest';\nexport { GetLabelResponseBody } from './GetLabelResponseBody';\nexport { GetLabelResponse } from './GetLabelResponse';\nexport { GetLinkRequest } from './GetLinkRequest';\nexport { GetLinkResponseBody } from './GetLinkResponseBody';\nexport { GetLinkResponse } from './GetLinkResponse';\nexport { GetMcpResourceRequest } from './GetMcpResourceRequest';\nexport { GetMcpResourceResponseBody } from './GetMcpResourceResponseBody';\nexport { GetMcpResourceResponse } from './GetMcpResourceResponse';\nexport { InitBrowserRequest } from './InitBrowserRequest';\nexport { InitBrowserResponseBody } from './InitBrowserResponseBody';\nexport { InitBrowserResponseBodyData } from './InitBrowserResponseBodyData';\nexport { InitBrowserResponse } from './InitBrowserResponse';\nexport { ListContextsRequest } from './ListContextsRequest';\nexport { ListContextsResponseBody } from './ListContextsResponseBody';\nexport { ListContextsResponse } from './ListContextsResponse';\nexport { ListMcpToolsRequest } from './ListMcpToolsRequest';\nexport { ListMcpToolsResponseBody } from './ListMcpToolsResponseBody';\nexport { ListMcpToolsResponse } from './ListMcpToolsResponse';\nexport { ListSessionRequest } from './ListSessionRequest';\nexport { ListSessionResponseBody } from './ListSessionResponseBody';\nexport { ListSessionResponse } from './ListSessionResponse';\nexport { ModifyContextRequest } from './ModifyContextRequest';\nexport { ModifyContextResponseBody } from './ModifyContextResponseBody';\nexport { ModifyContextResponse } from './ModifyContextResponse';\nexport { ReleaseMcpSessionRequest } from './ReleaseMcpSessionRequest';\nexport { ReleaseMcpSessionResponseBody } from './ReleaseMcpSessionResponseBody';\nexport { ReleaseMcpSessionResponse } from './ReleaseMcpSessionResponse';\nexport { SetLabelRequest } from './SetLabelRequest';\nexport { SetLabelResponseBody } from './SetLabelResponseBody';\nexport { SetLabelResponse } from './SetLabelResponse';\nexport { SyncContextRequest } from './SyncContextRequest';\nexport { SyncContextResponseBody } from './SyncContextResponseBody';\nexport { SyncContextResponse } from './SyncContextResponse';\n// New context file operations\nexport { DeleteContextFileRequest } from './DeleteContextFileRequest';\nexport { DeleteContextFileResponseBody } from './DeleteContextFileResponseBody';\nexport { DeleteContextFileResponse } from './DeleteContextFileResponse';\nexport { DescribeContextFilesRequest } from './DescribeContextFilesRequest';\nexport { DescribeContextFilesResponseBody } from './DescribeContextFilesResponseBody';\nexport { DescribeContextFilesResponse } from './DescribeContextFilesResponse';\nexport { GetContextFileDownloadUrlRequest } from './GetContextFileDownloadUrlRequest';\nexport { GetContextFileDownloadUrlResponseBody } from './GetContextFileDownloadUrlResponseBody';\nexport { GetContextFileDownloadUrlResponse } from './GetContextFileDownloadUrlResponse';\nexport { GetContextFileUploadUrlRequest } from './GetContextFileUploadUrlRequest';\nexport { GetContextFileUploadUrlResponseBody } from './GetContextFileUploadUrlResponseBody';\nexport { GetContextFileUploadUrlResponse } from './GetContextFileUploadUrlResponse';\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\n/**\n */\nexport class ApplyMqttTokenResponseBodyData extends $dara.Model {\n  accessKeyId?: string;\n  clientId?: string;\n  expiration?: string;\n  instanceId?: string;\n  regionId?: string;\n  securityToken?: string;\n  static names(): { [key: string]: string } {\n    return {\n      accessKeyId: 'AccessKeyId',\n      clientId: 'ClientId',\n      expiration: 'Expiration',\n      instanceId: 'InstanceId',\n      regionId: 'RegionId',\n      securityToken: 'SecurityToken',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      accessKeyId: 'string',\n      clientId: 'string',\n      expiration: 'string',\n      instanceId: 'string',\n      regionId: 'string',\n      securityToken: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class CreateMcpSessionRequestPersistenceDataList extends $dara.Model {\n  contextId?: string;\n  path?: string;\n  policy?: string;\n  static names(): { [key: string]: string } {\n    return {\n      contextId: 'ContextId',\n      path: 'Path',\n      policy: 'Policy',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      contextId: 'string',\n      path: 'string',\n      policy: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class CreateMcpSessionResponseBodyData extends $dara.Model {\n  appInstanceId?: string;\n  errMsg?: string;\n  httpPort?: string;\n  networkInterfaceIp?: string;\n  resourceId?: string;\n  resourceUrl?: string;\n  sessionId?: string;\n  success?: boolean;\n  token?: string;\n  vpcResource?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      appInstanceId: 'AppInstanceId',\n      errMsg: 'ErrMsg',\n      httpPort: 'HttpPort',\n      networkInterfaceIp: 'NetworkInterfaceIp',\n      resourceId: 'ResourceId',\n      resourceUrl: 'ResourceUrl',\n      sessionId: 'SessionId',\n      success: 'Success',\n      token: 'Token',\n      vpcResource: 'VpcResource',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      appInstanceId: 'string',\n      errMsg: 'string',\n      httpPort: 'string',\n      networkInterfaceIp: 'string',\n      resourceId: 'string',\n      resourceUrl: 'string',\n      sessionId: 'string',\n      success: 'boolean',\n      token: 'string',\n      vpcResource: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetContextResponseBodyData extends $dara.Model {\n  createTime?: string;\n  id?: string;\n  lastUsedTime?: string;\n  name?: string;\n  osType?: string;\n  state?: string;\n  static names(): { [key: string]: string } {\n    return {\n      createTime: 'CreateTime',\n      id: 'Id',\n      lastUsedTime: 'LastUsedTime',\n      name: 'Name',\n      osType: 'OsType',\n      state: 'State',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      createTime: 'string',\n      id: 'string',\n      lastUsedTime: 'string',\n      name: 'string',\n      osType: 'string',\n      state: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetContextInfoResponseBodyData extends $dara.Model {\n  contextStatus?: string;\n  static names(): { [key: string]: string } {\n    return {\n      contextStatus: 'ContextStatus',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      contextStatus: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetLabelResponseBodyData extends $dara.Model {\n  labels?: string;\n  static names(): { [key: string]: string } {\n    return {\n      labels: 'Labels',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      labels: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetLinkResponseBodyData extends $dara.Model {\n  url?: string;\n  static names(): { [key: string]: string } {\n    return {\n      url: 'Url',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      url: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetMcpResourceResponseBodyDataDesktopInfo extends $dara.Model {\n  appId?: string;\n  authCode?: string;\n  connectionProperties?: string;\n  resourceId?: string;\n  resourceType?: string;\n  ticket?: string;\n  static names(): { [key: string]: string } {\n    return {\n      appId: 'AppId',\n      authCode: 'AuthCode',\n      connectionProperties: 'ConnectionProperties',\n      resourceId: 'ResourceId',\n      resourceType: 'ResourceType',\n      ticket: 'Ticket',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      appId: 'string',\n      authCode: 'string',\n      connectionProperties: 'string',\n      resourceId: 'string',\n      resourceType: 'string',\n      ticket: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetMcpResourceResponseBodyDataDesktopInfo } from \"./GetMcpResourceResponseBodyDataDesktopInfo\";\n\n\nexport class GetMcpResourceResponseBodyData extends $dara.Model {\n  desktopInfo?: GetMcpResourceResponseBodyDataDesktopInfo;\n  resourceUrl?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      desktopInfo: 'DesktopInfo',\n      resourceUrl: 'ResourceUrl',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      desktopInfo: GetMcpResourceResponseBodyDataDesktopInfo,\n      resourceUrl: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    if(this.desktopInfo && typeof (this.desktopInfo as any).validate === 'function') {\n      (this.desktopInfo as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListContextsResponseBodyData extends $dara.Model {\n  createTime?: string;\n  id?: string;\n  lastUsedTime?: string;\n  name?: string;\n  osType?: string;\n  state?: string;\n  static names(): { [key: string]: string } {\n    return {\n      createTime: 'CreateTime',\n      id: 'Id',\n      lastUsedTime: 'LastUsedTime',\n      name: 'Name',\n      osType: 'OsType',\n      state: 'State',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      createTime: 'string',\n      id: 'string',\n      lastUsedTime: 'string',\n      name: 'string',\n      osType: 'string',\n      state: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListSessionResponseBodyData extends $dara.Model {\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ApplyMqttTokenRequest extends $dara.Model {\n  desktopId?: string;\n  sessionToken?: string;\n  static names(): { [key: string]: string } {\n    return {\n      desktopId: 'DesktopId',\n      sessionToken: 'SessionToken',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      desktopId: 'string',\n      sessionToken: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ApplyMqttTokenResponseBodyData } from \"./ApplyMqttTokenResponseBodyData\";\n\n\nexport class ApplyMqttTokenResponseBody extends $dara.Model {\n  code?: string;\n  data?: ApplyMqttTokenResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: ApplyMqttTokenResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ApplyMqttTokenResponseBody } from \"./ApplyMqttTokenResponseBody\";\n\n\nexport class ApplyMqttTokenResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ApplyMqttTokenResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ApplyMqttTokenResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class CallMcpToolRequest extends $dara.Model {\n  args?: string;\n  authorization?: string;\n  externalUserId?: string;\n  imageId?: string;\n  name?: string;\n  server?: string;\n  sessionId?: string;\n  tool?: string;\n  static names(): { [key: string]: string } {\n    return {\n      args: 'Args',\n      authorization: 'Authorization',\n      externalUserId: 'ExternalUserId',\n      imageId: 'ImageId',\n      name: 'Name',\n      server: 'Server',\n      sessionId: 'SessionId',\n      tool: 'Tool',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      args: 'string',\n      authorization: 'string',\n      externalUserId: 'string',\n      imageId: 'string',\n      name: 'string',\n      server: 'string',\n      sessionId: 'string',\n      tool: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class CallMcpToolResponseBody extends $dara.Model {\n  code?: string;\n  data?: any;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: 'any',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { CallMcpToolResponseBody } from \"./CallMcpToolResponseBody\";\n\n\nexport class CallMcpToolResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: CallMcpToolResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: CallMcpToolResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { CreateMcpSessionRequestPersistenceDataList } from \"./CreateMcpSessionRequestPersistenceDataList\";\n\n\nexport class CreateMcpSessionRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  externalUserId?: string;\n  imageId?: string;\n  labels?: string;\n  mcpPolicyId?: string;\n  persistenceDataList?: CreateMcpSessionRequestPersistenceDataList[];\n  sessionId?: string;\n  vpcResource?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      externalUserId: 'ExternalUserId',\n      imageId: 'ImageId',\n      labels: 'Labels',\n      mcpPolicyId: 'McpPolicyId',\n      persistenceDataList: 'PersistenceDataList',\n      sessionId: 'SessionId',\n      vpcResource: 'VpcResource',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      externalUserId: 'string',\n      imageId: 'string',\n      labels: 'string',\n      mcpPolicyId: 'string',\n      persistenceDataList: { 'type': 'array', 'itemType': CreateMcpSessionRequestPersistenceDataList },\n      sessionId: 'string',\n      vpcResource: 'boolean',\n    };\n  }\n\n  validate() {\n    if(Array.isArray(this.persistenceDataList)) {\n      $dara.Model.validateArray(this.persistenceDataList);\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class CreateMcpSessionShrinkRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  externalUserId?: string;\n  imageId?: string;\n  labels?: string;\n  mcpPolicyId?: string;\n  persistenceDataListShrink?: string;\n  sessionId?: string;\n  vpcResource?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      externalUserId: 'ExternalUserId',\n      imageId: 'ImageId',\n      labels: 'Labels',\n      mcpPolicyId: 'McpPolicyId',\n      persistenceDataListShrink: 'PersistenceDataList',\n      sessionId: 'SessionId',\n      vpcResource: 'VpcResource',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      externalUserId: 'string',\n      imageId: 'string',\n      labels: 'string',\n      mcpPolicyId: 'string',\n      persistenceDataListShrink: 'string',\n      sessionId: 'string',\n      vpcResource: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { CreateMcpSessionResponseBodyData } from \"./CreateMcpSessionResponseBodyData\";\n\n\nexport class CreateMcpSessionResponseBody extends $dara.Model {\n  code?: string;\n  data?: CreateMcpSessionResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: CreateMcpSessionResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { CreateMcpSessionResponseBody } from \"./CreateMcpSessionResponseBody\";\n\n\nexport class CreateMcpSessionResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: CreateMcpSessionResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: CreateMcpSessionResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class DeleteContextRequest extends $dara.Model {\n  authorization?: string;\n  id?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      id: 'Id',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      id: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class DeleteContextResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { DeleteContextResponseBody } from \"./DeleteContextResponseBody\";\n\n\nexport class DeleteContextResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: DeleteContextResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: DeleteContextResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetContextRequest extends $dara.Model {\n  allowCreate?: boolean;\n  authorization?: string;\n  name?: string;\n  static names(): { [key: string]: string } {\n    return {\n      allowCreate: 'AllowCreate',\n      authorization: 'Authorization',\n      name: 'Name',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      allowCreate: 'boolean',\n      authorization: 'string',\n      name: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextResponseBodyData } from \"./GetContextResponseBodyData\";\n\n\nexport class GetContextResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetContextResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetContextResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextResponseBody } from \"./GetContextResponseBody\";\n\n\nexport class GetContextResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetContextResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: GetContextResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetContextInfoRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  path?: string;\n  sessionId?: string;\n  taskType?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      path: 'Path',\n      sessionId: 'SessionId',\n      taskType: 'TaskType',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      path: 'string',\n      sessionId: 'string',\n      taskType: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextInfoResponseBodyData } from \"./GetContextInfoResponseBodyData\";\n\n\nexport class GetContextInfoResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetContextInfoResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetContextInfoResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextInfoResponseBody } from \"./GetContextInfoResponseBody\";\n\n\nexport class GetContextInfoResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetContextInfoResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: GetContextInfoResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetLabelRequest extends $dara.Model {\n  authorization?: string;\n  maxResults?: number;\n  nextToken?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      maxResults: 'MaxResults',\n      nextToken: 'NextToken',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      maxResults: 'number',\n      nextToken: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetLabelResponseBodyData } from \"./GetLabelResponseBodyData\";\n\n\nexport class GetLabelResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetLabelResponseBodyData;\n  httpStatusCode?: number;\n  maxResults?: number;\n  message?: string;\n  nextToken?: string;\n  requestId?: string;\n  success?: boolean;\n  totalCount?: number;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      maxResults: 'MaxResults',\n      message: 'Message',\n      nextToken: 'NextToken',\n      requestId: 'RequestId',\n      success: 'Success',\n      totalCount: 'TotalCount',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetLabelResponseBodyData,\n      httpStatusCode: 'number',\n      maxResults: 'number',\n      message: 'string',\n      nextToken: 'string',\n      requestId: 'string',\n      success: 'boolean',\n      totalCount: 'number',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetLabelResponseBody } from \"./GetLabelResponseBody\";\n\n\nexport class GetLabelResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetLabelResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: GetLabelResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetLinkRequest extends $dara.Model {\n  authorization?: string;\n  port?: number;\n  protocolType?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      port: 'Port',\n      protocolType: 'ProtocolType',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      port: 'number',\n      protocolType: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetLinkResponseBodyData } from \"./GetLinkResponseBodyData\";\n\n\nexport class GetLinkResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetLinkResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetLinkResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetLinkResponseBody } from \"./GetLinkResponseBody\";\n\n\nexport class GetLinkResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetLinkResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: GetLinkResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class GetMcpResourceRequest extends $dara.Model {\n  authorization?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetMcpResourceResponseBodyData } from \"./GetMcpResourceResponseBodyData\";\n\n\nexport class GetMcpResourceResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetMcpResourceResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetMcpResourceResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetMcpResourceResponseBody } from \"./GetMcpResourceResponseBody\";\n\n\nexport class GetMcpResourceResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetMcpResourceResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: GetMcpResourceResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class InitBrowserRequest extends $dara.Model {\n  authorization?: string;\n  persistentPath?: string;\n  sessionId?: string;\n  browserOption?: { [key: string]: any };\n  \n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      persistentPath: 'PersistentPath',\n      sessionId: 'SessionId',\n      browserOption: 'BrowserOption',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      persistentPath: 'string',\n      sessionId: 'string',\n      browserOption: { 'type': 'map', 'keyType': 'string', 'valueType': 'any' },\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n\n  static fromMap(m: { [key: string]: any }): InitBrowserRequest {\n    return $dara.cast<InitBrowserRequest>(m, new InitBrowserRequest());\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { InitBrowserResponseBodyData } from './InitBrowserResponseBodyData';\n\nexport class InitBrowserResponseBody extends $dara.Model {\n  code?: string;\n  data?: InitBrowserResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  \n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: InitBrowserResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    if(this.data && typeof (this.data as any).validate === 'function') {\n      (this.data as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n\n  static fromMap(m: { [key: string]: any }): InitBrowserResponseBody {\n    return $dara.cast<InitBrowserResponseBody>(m, new InitBrowserResponseBody());\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class InitBrowserResponseBodyData extends $dara.Model {\n  port?: number;\n  \n  static names(): { [key: string]: string } {\n    return {\n      port: 'Port',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      port: 'number',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n\n  static fromMap(m: { [key: string]: any }): InitBrowserResponseBodyData {\n    return $dara.cast<InitBrowserResponseBodyData>(m, new InitBrowserResponseBodyData());\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { InitBrowserResponseBody } from './InitBrowserResponseBody';\n\nexport class InitBrowserResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: InitBrowserResponseBody;\n  \n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: InitBrowserResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n\n  static fromMap(m: { [key: string]: any }): InitBrowserResponse {\n    return $dara.cast<InitBrowserResponse>(m, new InitBrowserResponse());\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListContextsRequest extends $dara.Model {\n  authorization?: string;\n  maxResults?: number;\n  nextToken?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      maxResults: 'MaxResults',\n      nextToken: 'NextToken',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      maxResults: 'number',\n      nextToken: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ListContextsResponseBodyData } from \"./ListContextsResponseBodyData\";\n\n\nexport class ListContextsResponseBody extends $dara.Model {\n  code?: string;\n  data?: ListContextsResponseBodyData[];\n  httpStatusCode?: number;\n  maxResults?: number;\n  message?: string;\n  nextToken?: string;\n  requestId?: string;\n  success?: boolean;\n  totalCount?: number;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      maxResults: 'MaxResults',\n      message: 'Message',\n      nextToken: 'NextToken',\n      requestId: 'RequestId',\n      success: 'Success',\n      totalCount: 'TotalCount',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: { 'type': 'array', 'itemType': ListContextsResponseBodyData },\n      httpStatusCode: 'number',\n      maxResults: 'number',\n      message: 'string',\n      nextToken: 'string',\n      requestId: 'string',\n      success: 'boolean',\n      totalCount: 'number',\n    };\n  }\n\n  validate() {\n    if(Array.isArray(this.data)) {\n      $dara.Model.validateArray(this.data);\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ListContextsResponseBody } from \"./ListContextsResponseBody\";\n\n\nexport class ListContextsResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ListContextsResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ListContextsResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListMcpToolsRequest extends $dara.Model {\n  authorization?: string;\n  imageId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      imageId: 'ImageId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      imageId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListMcpToolsResponseBody extends $dara.Model {\n  code?: string;\n  data?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ListMcpToolsResponseBody } from \"./ListMcpToolsResponseBody\";\n\n\nexport class ListMcpToolsResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ListMcpToolsResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ListMcpToolsResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ListSessionRequest extends $dara.Model {\n  authorization?: string;\n  labels?: string;\n  maxResults?: number;\n  nextToken?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      labels: 'Labels',\n      maxResults: 'MaxResults',\n      nextToken: 'NextToken',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      labels: 'string',\n      maxResults: 'number',\n      nextToken: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ListSessionResponseBodyData } from \"./ListSessionResponseBodyData\";\n\n\nexport class ListSessionResponseBody extends $dara.Model {\n  code?: string;\n  data?: ListSessionResponseBodyData[];\n  httpStatusCode?: number;\n  maxResults?: number;\n  message?: string;\n  nextToken?: string;\n  requestId?: string;\n  success?: boolean;\n  totalCount?: number;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      maxResults: 'MaxResults',\n      message: 'Message',\n      nextToken: 'NextToken',\n      requestId: 'RequestId',\n      success: 'Success',\n      totalCount: 'TotalCount',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: { 'type': 'array', 'itemType': ListSessionResponseBodyData },\n      httpStatusCode: 'number',\n      maxResults: 'number',\n      message: 'string',\n      nextToken: 'string',\n      requestId: 'string',\n      success: 'boolean',\n      totalCount: 'number',\n    };\n  }\n\n  validate() {\n    if(Array.isArray(this.data)) {\n      $dara.Model.validateArray(this.data);\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ListSessionResponseBody } from \"./ListSessionResponseBody\";\n\n\nexport class ListSessionResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ListSessionResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ListSessionResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ModifyContextRequest extends $dara.Model {\n  authorization?: string;\n  id?: string;\n  name?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      id: 'Id',\n      name: 'Name',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      id: 'string',\n      name: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ModifyContextResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ModifyContextResponseBody } from \"./ModifyContextResponseBody\";\n\n\nexport class ModifyContextResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ModifyContextResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ModifyContextResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ReleaseMcpSessionRequest extends $dara.Model {\n  authorization?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class ReleaseMcpSessionResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { ReleaseMcpSessionResponseBody } from \"./ReleaseMcpSessionResponseBody\";\n\n\nexport class ReleaseMcpSessionResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: ReleaseMcpSessionResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: ReleaseMcpSessionResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class SetLabelRequest extends $dara.Model {\n  authorization?: string;\n  labels?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      labels: 'Labels',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      labels: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class SetLabelResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { SetLabelResponseBody } from \"./SetLabelResponseBody\";\n\n\nexport class SetLabelResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: SetLabelResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: SetLabelResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class SyncContextRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  mode?: string;\n  path?: string;\n  sessionId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      mode: 'Mode',\n      path: 'Path',\n      sessionId: 'SessionId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      mode: 'string',\n      path: 'string',\n      sessionId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\n\nexport class SyncContextResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { SyncContextResponseBody } from \"./SyncContextResponseBody\";\n\n\nexport class SyncContextResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: SyncContextResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { 'type': 'map', 'keyType': 'string', 'valueType': 'string' },\n      statusCode: 'number',\n      body: SyncContextResponseBody,\n    };\n  }\n\n  validate() {\n    if(this.headers) {\n      $dara.Model.validateMap(this.headers);\n    }\n    if(this.body && typeof (this.body as any).validate === 'function') {\n      (this.body as any).validate();\n    }\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\n","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class DeleteContextFileRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  filePath?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      filePath: 'FilePath',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      filePath: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class DeleteContextFileResponseBody extends $dara.Model {\n  code?: string;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { DeleteContextFileResponseBody } from './DeleteContextFileResponseBody';\n\nexport class DeleteContextFileResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: DeleteContextFileResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { type: 'map', keyType: 'string', valueType: 'string' },\n      statusCode: 'number',\n      body: DeleteContextFileResponseBody,\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class DescribeContextFilesRequest extends $dara.Model {\n  authorization?: string;\n  pageNumber?: number;\n  pageSize?: number;\n  parentFolderPath?: string;\n  contextId?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      pageNumber: 'PageNumber',\n      pageSize: 'PageSize',\n      parentFolderPath: 'ParentFolderPath',\n      contextId: 'ContextId',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      pageNumber: 'number',\n      pageSize: 'number',\n      parentFolderPath: 'string',\n      contextId: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class DescribeContextFilesResponseBodyData extends $dara.Model {\n  fileId?: string;\n  fileName?: string;\n  filePath?: string;\n  fileType?: string;\n  gmtCreate?: string;\n  gmtModified?: string;\n  size?: number;\n  status?: string;\n  static names(): { [key: string]: string } {\n    return {\n      fileId: 'FileId',\n      fileName: 'FileName',\n      filePath: 'FilePath',\n      fileType: 'FileType',\n      gmtCreate: 'GmtCreate',\n      gmtModified: 'GmtModified',\n      size: 'Size',\n      status: 'Status',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      fileId: 'string',\n      fileName: 'string',\n      filePath: 'string',\n      fileType: 'string',\n      gmtCreate: 'string',\n      gmtModified: 'string',\n      size: 'number',\n      status: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\nexport class DescribeContextFilesResponseBody extends $dara.Model {\n  code?: string;\n  count?: number;\n  data?: DescribeContextFilesResponseBodyData[];\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      count: 'Count',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      count: 'number',\n      data: { type: 'array', itemType: DescribeContextFilesResponseBodyData },\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { DescribeContextFilesResponseBody } from './DescribeContextFilesResponseBody';\n\nexport class DescribeContextFilesResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: DescribeContextFilesResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { type: 'map', keyType: 'string', valueType: 'string' },\n      statusCode: 'number',\n      body: DescribeContextFilesResponseBody,\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class GetContextFileDownloadUrlRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  filePath?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      filePath: 'FilePath',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      filePath: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class GetContextFileDownloadUrlResponseBodyData extends $dara.Model {\n  expireTime?: number;\n  url?: string;\n  static names(): { [key: string]: string } {\n    return {\n      expireTime: 'ExpireTime',\n      url: 'Url',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      expireTime: 'number',\n      url: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\nexport class GetContextFileDownloadUrlResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetContextFileDownloadUrlResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetContextFileDownloadUrlResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextFileDownloadUrlResponseBody } from './GetContextFileDownloadUrlResponseBody';\n\nexport class GetContextFileDownloadUrlResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetContextFileDownloadUrlResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { type: 'map', keyType: 'string', valueType: 'string' },\n      statusCode: 'number',\n      body: GetContextFileDownloadUrlResponseBody,\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class GetContextFileUploadUrlRequest extends $dara.Model {\n  authorization?: string;\n  contextId?: string;\n  filePath?: string;\n  static names(): { [key: string]: string } {\n    return {\n      authorization: 'Authorization',\n      contextId: 'ContextId',\n      filePath: 'FilePath',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      authorization: 'string',\n      contextId: 'string',\n      filePath: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\n\nexport class GetContextFileUploadUrlResponseBodyData extends $dara.Model {\n  expireTime?: number;\n  url?: string;\n  static names(): { [key: string]: string } {\n    return {\n      expireTime: 'ExpireTime',\n      url: 'Url',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      expireTime: 'number',\n      url: 'string',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n}\n\nexport class GetContextFileUploadUrlResponseBody extends $dara.Model {\n  code?: string;\n  data?: GetContextFileUploadUrlResponseBodyData;\n  httpStatusCode?: number;\n  message?: string;\n  requestId?: string;\n  success?: boolean;\n  static names(): { [key: string]: string } {\n    return {\n      code: 'Code',\n      data: 'Data',\n      httpStatusCode: 'HttpStatusCode',\n      message: 'Message',\n      requestId: 'RequestId',\n      success: 'Success',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      code: 'string',\n      data: GetContextFileUploadUrlResponseBodyData,\n      httpStatusCode: 'number',\n      message: 'string',\n      requestId: 'string',\n      success: 'boolean',\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","// This file is auto-generated, don't edit it\nimport * as $dara from '@darabonba/typescript';\nimport { GetContextFileUploadUrlResponseBody } from './GetContextFileUploadUrlResponseBody';\n\nexport class GetContextFileUploadUrlResponse extends $dara.Model {\n  headers?: { [key: string]: string };\n  statusCode?: number;\n  body?: GetContextFileUploadUrlResponseBody;\n  static names(): { [key: string]: string } {\n    return {\n      headers: 'headers',\n      statusCode: 'statusCode',\n      body: 'body',\n    };\n  }\n\n  static types(): { [key: string]: any } {\n    return {\n      headers: { type: 'map', keyType: 'string', valueType: 'string' },\n      statusCode: 'number',\n      body: GetContextFileUploadUrlResponseBody,\n    };\n  }\n\n  validate() {\n    super.validate();\n  }\n\n  constructor(map?: { [key: string]: any }) {\n    super(map);\n  }\n} ","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as dotenv from \"dotenv\";\nimport { log } from \"./utils/logger\";\ninterface Config {\n  region_id: string;\n  endpoint: string;\n  timeout_ms: number;\n}\n\n/**\n * Browser data path constant\n */\nexport const BROWSER_DATA_PATH = \"/tmp/agentbay_browser\";\n\n/**\n * Returns the default configuration\n */\nexport function defaultConfig(): Config {\n  return {\n    region_id: \"cn-shanghai\",\n    endpoint: \"wuyingai.cn-shanghai.aliyuncs.com\",\n    timeout_ms: 60000,\n  };\n}\n\n// Track if .env file has been loaded to avoid duplicate loading\nlet dotEnvLoaded = false;\n\n/**\n * Load .env file into process.env if it exists\n * This function should be called early to ensure .env variables are available\n */\nexport function loadDotEnv(): void {\n  if (dotEnvLoaded) {\n    return; // Already loaded, skip\n  }\n\n  try {\n    const envPath = path.resolve(process.cwd(), \".env\");\n    if (fs.existsSync(envPath)) {\n      const envConfig = dotenv.parse(fs.readFileSync(envPath));\n      for (const k in envConfig) {\n        // only load env variables that are not already set in process.env\n        if (!process.env.hasOwnProperty(k)) {\n          process.env[k] = envConfig[k];\n        }\n      }\n      log(`Loaded .env file at: ${envPath}`);\n      dotEnvLoaded = true;\n    }\n  } catch (error) {\n    log(`Warning: Failed to load .env file: ${error}`);\n  }\n}\n\n/**\n * The SDK uses the following precedence order for configuration (highest to lowest):\n * 1. Explicitly passed configuration in code.\n * 2. Environment variables.\n * 3. .env file.\n * 4. Default configuration.\n */\nexport function loadConfig(customConfig?: Config): Config {\n  // If custom config is provided, use it directly\n  if (customConfig) {\n    return customConfig;\n  }\n\n  // Create base config from default values\n  const config = defaultConfig();\n\n  // Override with environment variables if they exist\n  if (process.env.AGENTBAY_REGION_ID) {\n    config.region_id = process.env.AGENTBAY_REGION_ID;\n  }\n\n  if (process.env.AGENTBAY_ENDPOINT) {\n    config.endpoint = process.env.AGENTBAY_ENDPOINT;\n  }\n\n  if (process.env.AGENTBAY_TIMEOUT_MS) {\n    const timeout = parseInt(process.env.AGENTBAY_TIMEOUT_MS, 10);\n    if (!isNaN(timeout) && timeout > 0) {\n      config.timeout_ms = timeout;\n    }\n  }\n\n  // Try to load .env file for values not set by environment variables\n  // This ensures backward compatibility for direct loadConfig() calls\n  const envPath = path.resolve(process.cwd(), \".env\");\n\n  if (fs.existsSync(envPath)) {\n    const envConfig = dotenv.parse(fs.readFileSync(envPath));\n    \n    // Only use .env values if corresponding environment variables are not set\n    // This maintains the correct precedence: env vars > .env file > defaults\n    if (!process.env.AGENTBAY_REGION_ID && envConfig.AGENTBAY_REGION_ID) {\n      config.region_id = envConfig.AGENTBAY_REGION_ID;\n    }\n    \n    if (!process.env.AGENTBAY_ENDPOINT && envConfig.AGENTBAY_ENDPOINT) {\n      config.endpoint = envConfig.AGENTBAY_ENDPOINT;\n    }\n    \n    if (!process.env.AGENTBAY_TIMEOUT_MS && envConfig.AGENTBAY_TIMEOUT_MS) {\n      const timeout = parseInt(envConfig.AGENTBAY_TIMEOUT_MS, 10);\n      if (!isNaN(timeout) && timeout > 0) {\n        config.timeout_ms = timeout;\n      }\n    }\n    \n    log(`Loaded .env file at: ${envPath}`);\n  }\n\n  return config;\n}\n\nexport { Config };\n","/**\n * Utility functions for logging in a clean format\n */\n\n/**\n * Log a message without the log prefix and file location\n * @param message The message to log\n * @param args Optional arguments to log\n */\nexport function log(message: string, ...args: any[]): void {\n  // Use process.stdout.write instead of log to avoid the prefix and newline\n  process.stdout.write(message + \"\\n\");\n\n  // If there are additional arguments, print them on new lines with proper formatting\n  if (args.length > 0) {\n    for (const arg of args) {\n      if (typeof arg === \"object\") {\n        // For objects, format them as JSON with indentation\n        process.stdout.write(JSON.stringify(arg, null, 2) + \"\\n\");\n      } else {\n        // For other types, just convert to string\n        process.stdout.write(String(arg) + \"\\n\");\n      }\n    }\n  }\n}\n\n/**\n * Log an error message\n * @param message The error message to log\n * @param error Optional error object\n */\nexport function logError(message: string, error?: any): void {\n  process.stderr.write(`ERROR: ${message}\\n`);\n  if (error) {\n    if (error instanceof Error) {\n      process.stderr.write(`${error.message}\\n`);\n    } else if (typeof error === \"object\") {\n      process.stderr.write(JSON.stringify(error, null, 2) + \"\\n\");\n    } else {\n      process.stderr.write(String(error) + \"\\n\");\n    }\n  }\n}\n","import { AgentBay } from \"./agent-bay\";\nimport { APIError } from \"./exceptions\";\nimport * as $_client from \"./api\";\nimport { log, logError } from \"./utils/logger\";\nimport {\n  extractRequestId,\n  ContextResult,\n  ContextListResult,\n  OperationResult,\n  FileUrlResult,\n  ContextFileListResult,\n  ContextFileEntry,\n} from \"./types/api-response\";\n\n/**\n * Represents a persistent storage context in the AgentBay cloud environment.\n */\nexport class Context {\n  /**\n   * The unique identifier of the context.\n   */\n  id: string;\n\n  /**\n   * The name of the context.\n   */\n  name: string;\n\n  /**\n   * The current state of the context (e.g., \"available\", \"in-use\").\n   */\n  state: string;\n\n  /**\n   * Date and time when the Context was created.\n   */\n  createdAt?: string;\n\n  /**\n   * Date and time when the Context was last used.\n   */\n  lastUsedAt?: string;\n\n  /**\n   * The operating system type this context is bound to.\n   */\n  osType?: string;\n\n  /**\n   * Initialize a Context object.\n   *\n   * @param id - The unique identifier of the context.\n   * @param name - The name of the context.\n   * @param state - The current state of the context.\n   * @param createdAt - Date and time when the Context was created.\n   * @param lastUsedAt - Date and time when the Context was last used.\n   * @param osType - The operating system type this context is bound to.\n   */\n  constructor(\n    id: string,\n    name: string,\n    state = \"available\",\n    createdAt?: string,\n    lastUsedAt?: string,\n    osType?: string\n  ) {\n    this.id = id;\n    this.name = name;\n    this.state = state;\n    this.createdAt = createdAt;\n    this.lastUsedAt = lastUsedAt;\n    this.osType = osType;\n  }\n}\n\n/**\n * Parameters for listing contexts with pagination support.\n */\nexport interface ContextListParams {\n  /**\n   * Maximum number of results per page.\n   * Defaults to 10 if not specified.\n   */\n  maxResults?: number;\n\n  /**\n   * Token for the next page of results.\n   */\n  nextToken?: string;\n}\n\n/**\n * Provides methods to manage persistent contexts in the AgentBay cloud environment.\n */\nexport class ContextService {\n  private agentBay: AgentBay;\n\n  /**\n   * Initialize the ContextService.\n   *\n   * @param agentBay - The AgentBay instance.\n   */\n  constructor(agentBay: AgentBay) {\n    this.agentBay = agentBay;\n  }\n\n  /**\n   * Lists all available contexts with pagination support.\n   * Corresponds to Python's list() method\n   *\n   * @param params - Optional parameters for listing contexts.\n   * @returns ContextListResult with contexts list and pagination information\n   */\n  async list(params?: ContextListParams): Promise<ContextListResult> {\n    try {\n      // Set default maxResults if not specified\n      const maxResults = params?.maxResults !== undefined ? params.maxResults : 10;\n\n      const request = new $_client.ListContextsRequest({\n        authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n        maxResults: maxResults,\n        nextToken: params?.nextToken,\n      });\n\n      // Log API request\n      log(\"API Call: ListContexts\");\n      log(`Request: MaxResults=${maxResults}`, params?.nextToken ? `, NextToken=${params.nextToken}` : \"\");\n\n      const response = await this.agentBay.getClient().listContexts(request);\n\n      // Log API response\n      log(`Response from ListContexts:`, response.body);\n\n      const contexts: Context[] = [];\n      if (response.body?.data) {\n        for (const contextData of response.body.data) {\n          contexts.push(\n            new Context(\n              contextData.id || \"\",\n              contextData.name || \"\",\n              contextData.state || \"available\",\n              contextData.createTime,\n              contextData.lastUsedTime,\n              contextData.osType\n            )\n          );\n        }\n      }\n\n      return {\n        requestId: extractRequestId(response) || \"\",\n        success: true,\n        contexts,\n        nextToken: response.body?.nextToken,\n        maxResults: response.body?.maxResults || maxResults,\n        totalCount: response.body?.totalCount,\n      };\n    } catch (error) {\n      logError(\"Error calling ListContexts:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        contexts: [],\n      };\n    }\n  }\n\n  /**\n   * Gets a context by name. Optionally creates it if it doesn't exist.\n   * Corresponds to Python's get() method\n   *\n   * @param name - The name of the context to get.\n   * @param create - Whether to create the context if it doesn't exist.\n   * @returns ContextResult with context data and requestId\n   */\n  async get(name: string, create = false): Promise<ContextResult> {\n    try {\n      const request = new $_client.GetContextRequest({\n        name: name,\n        allowCreate: create ? \"true\" : \"false\",\n        authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      });\n\n      // Log API request\n      log(\"API Call: GetContext\");\n      log(`Request: Name=${name}, AllowCreate=${create}`);\n\n      const response = await this.agentBay.getClient().getContext(request);\n\n      // Log API response\n      log(`Response from GetContext:`, response.body);\n\n      const contextId = response.body?.data?.id || \"\";\n      if (!contextId) {\n        return {\n          requestId: extractRequestId(response) || \"\",\n          success: false,\n          contextId: \"\",\n          context: undefined,\n        };\n      }\n\n      // Get the full context details\n      const contextsResponse = await this.list();\n      for (const context of contextsResponse.contexts) {\n        if (context.id === contextId) {\n          return {\n            requestId: extractRequestId(response) || \"\",\n            success: true,\n            contextId,\n            context,\n          };\n        }\n      }\n\n      // If we couldn't find the context in the list, create a basic one\n      const context = new Context(contextId, name);\n      return {\n        requestId: extractRequestId(response) || \"\",\n        success: true,\n        contextId,\n        context,\n      };\n    } catch (error) {\n      logError(\"Error calling GetContext:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        contextId: \"\",\n        context: undefined,\n      };\n    }\n  }\n\n  /**\n   * Creates a new context with the given name.\n   * Corresponds to Python's create() method\n   *\n   * @param name - The name for the new context.\n   * @returns ContextResult with created context data and requestId\n   */\n  async create(name: string): Promise<ContextResult> {\n    return await this.get(name, true);\n  }\n\n  /**\n   * Updates the specified context.\n   * Corresponds to Python's update() method\n   *\n   * @param context - The Context object to update.\n   * @returns OperationResult with updated context data and requestId\n   */\n  async update(context: Context): Promise<OperationResult> {\n    try {\n      const request = new $_client.ModifyContextRequest({\n        id: context.id,\n        name: context.name,\n        authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      });\n\n      // Log API request\n      log(\"API Call: ModifyContext\");\n      log(`Request: Id=${context.id}, Name=${context.name}`);\n\n      const response = await this.agentBay.getClient().modifyContext(request);\n\n      // Log API response\n      log(`Response from ModifyContext:`, response.body);\n\n      // Check for success (matching Python logic)\n      const success = response.body?.success !== false;\n      const errorMessage = success\n        ? \"\"\n        : `Update failed: ${response.body?.code}`;\n\n      return {\n        requestId: extractRequestId(response) || \"\",\n        success,\n        data: success,\n        errorMessage,\n      };\n    } catch (error) {\n      logError(\"Error calling ModifyContext:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to update context ${context.id}: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Deletes the specified context.\n   * Corresponds to Python's delete() method\n   *\n   * @param context - The Context object to delete.\n   * @returns OperationResult with requestId\n   */\n  async delete(context: Context): Promise<OperationResult> {\n    try {\n      const request = new $_client.DeleteContextRequest({\n        id: context.id,\n        authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      });\n\n      // Log API request\n      log(\"API Call: DeleteContext\");\n      log(`Request: Id=${context.id}`);\n\n      const response = await this.agentBay.getClient().deleteContext(request);\n\n      // Log API response\n      log(`Response from DeleteContext:`, response.body);\n\n      // Check for success (matching Python logic)\n      const success = response.body?.success !== false;\n      const errorMessage = success\n        ? \"\"\n        : `Delete failed: ${response.body?.code}`;\n\n      return {\n        requestId: extractRequestId(response) || \"\",\n        success,\n        data: success,\n        errorMessage,\n      };\n    } catch (error) {\n      logError(\"Error calling DeleteContext:\", error);\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to delete context ${context.id}: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Get a presigned upload URL for a file in a context.\n   */\n  async getFileUploadUrl(contextId: string, filePath: string): Promise<FileUrlResult> {\n    log(\"API Call: GetContextFileUploadUrl\");\n    log(`Request: ContextId=${contextId}, FilePath=${filePath}`);\n    const req = new $_client.GetContextFileUploadUrlRequest({\n      authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      contextId,\n      filePath,\n    });\n    const resp = await this.agentBay.getClient().getContextFileUploadUrl(req);\n    log(\"Response from GetContextFileUploadUrl:\", resp.body);\n    const requestId = extractRequestId(resp) || \"\";\n    const body = resp.body;\n    const data = body?.data;\n    return {\n      requestId,\n      success: !!(body && body.success),\n      url: data?.url || \"\",\n      expireTime: data?.expireTime,\n    };\n  }\n\n  /**\n   * Get a presigned download URL for a file in a context.\n   */\n  async getFileDownloadUrl(contextId: string, filePath: string): Promise<FileUrlResult> {\n    log(\"API Call: GetContextFileDownloadUrl\");\n    log(`Request: ContextId=${contextId}, FilePath=${filePath}`);\n    const req = new $_client.GetContextFileDownloadUrlRequest({\n      authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      contextId,\n      filePath,\n    });\n    const resp = await this.agentBay.getClient().getContextFileDownloadUrl(req);\n    log(\"Response from GetContextFileDownloadUrl:\", resp.body);\n    const requestId = extractRequestId(resp) || \"\";\n    const body = resp.body;\n    const data = body?.data;\n    return {\n      requestId,\n      success: !!(body && body.success),\n      url: data?.url || \"\",\n      expireTime: data?.expireTime,\n    };\n  }\n\n  /**\n   * Delete a file in a context.\n   */\n  async deleteFile(contextId: string, filePath: string): Promise<OperationResult> {\n    log(\"API Call: DeleteContextFile\");\n    log(`Request: ContextId=${contextId}, FilePath=${filePath}`);\n    const req = new $_client.DeleteContextFileRequest({\n      authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      contextId,\n      filePath,\n    });\n    const resp = await this.agentBay.getClient().deleteContextFile(req);\n    log(\"Response from DeleteContextFile:\", resp.body);\n    const requestId = extractRequestId(resp) || \"\";\n    const body = resp.body;\n    const success = !!(body && body.success);\n    return {\n      requestId,\n      success,\n      data: success,\n      errorMessage: success ? \"\" : `Delete failed: ${body?.code || \"\"}`,\n    };\n  }\n\n  /**\n   * List files under a specific folder path in a context.\n   */\n  async listFiles(\n    contextId: string,\n    parentFolderPath: string,\n    pageNumber = 1,\n    pageSize = 50\n  ): Promise<ContextFileListResult> {\n    log(\"API Call: DescribeContextFiles\");\n    log(\n      `Request: ContextId=${contextId}, ParentFolderPath=${parentFolderPath}, PageNumber=${pageNumber}, PageSize=${pageSize}`\n    );\n    const req = new $_client.DescribeContextFilesRequest({\n      authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n      pageNumber,\n      pageSize,\n      parentFolderPath,\n      contextId,\n    });\n    const resp = await this.agentBay.getClient().describeContextFiles(req);\n    log(\"Response from DescribeContextFiles:\", resp.body);\n    const requestId = extractRequestId(resp) || \"\";\n    const body = resp.body;\n    const rawList = body?.data || [];\n    const entries: ContextFileEntry[] = rawList.map((it: any) => ({\n      fileId: it.fileId,\n      fileName: it.fileName,\n      filePath: it.filePath || \"\",\n      fileType: it.fileType,\n      gmtCreate: it.gmtCreate,\n      gmtModified: it.gmtModified,\n      size: it.size,\n      status: it.status,\n    }));\n    return {\n      requestId,\n      success: !!(body && body.success),\n      entries,\n      count: body?.count,\n    };\n  }\n}\n","/**\n * Base interface for API responses\n */\nexport interface ApiResponse {\n  /** Optional request identifier for tracking API calls */\n  requestId?: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n  /** Optional status code if the operation failed */\n  success?: boolean;\n}\n\n/**\n * Generic interface for API responses that include data payload\n * @template T The type of the data being returned\n */\nexport interface ApiResponseWithData<T> extends ApiResponse {\n  /** The actual data payload returned by the API */\n  session?: T;\n  data?: T;\n}\n\n/**\n * Interface for delete operation responses\n */\nexport interface DeleteResult extends ApiResponse {\n  /** Whether the delete operation was successful */\n  success: boolean;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for session creation operation responses\n * Corresponds to Python's SessionResult type\n */\nexport interface SessionResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the session creation was successful */\n  success: boolean;\n  /** The created session object (only present if successful) */\n  session?: any; // Will be Session type, avoiding circular import\n  /** Error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for operation results\n * Corresponds to Python's OperationResult type\n */\nexport interface OperationResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Optional data payload */\n  data?: any;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for session info operation responses\n * Corresponds to Go's InfoResult type\n */\nexport interface InfoResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Session information object */\n  info?: any; // Will be SessionInfo type, avoiding circular import\n}\n\n/**\n * Interface for label operation responses\n * Corresponds to Go's LabelResult type\n */\nexport interface LabelResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Labels string (JSON format) */\n  labels: string;\n}\n\n/**\n * Interface for link operation responses\n * Corresponds to Go's LinkResult type\n */\nexport interface LinkResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Link string */\n  link: string;\n}\n\n/**\n * Interface for process list operation responses\n * Corresponds to Python's ProcessListResult type\n */\nexport interface ProcessListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** The list of process objects */\n  data: any[]; // Will be Process[] type, avoiding circular import\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for installed app list operation responses\n * Corresponds to Python's InstalledAppListResult type\n */\nexport interface InstalledAppListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** The list of installed app objects */\n  data: any[]; // Will be InstalledApp[] type, avoiding circular import\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for application operation responses\n * Corresponds to Python's AppOperationResult type\n */\nexport interface AppOperationResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for application info operation responses\n * Corresponds to Python's AppInfoResult type\n */\nexport interface AppInfoResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Application information */\n  appInfo: Record<string, any>;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for application list operation responses\n * Corresponds to Python's AppListResult type\n */\nexport interface AppListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** List of applications */\n  apps: Record<string, any>[];\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for application installation responses\n * Corresponds to Python's AppInstallResult type\n */\nexport interface AppInstallResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the installation was successful */\n  success: boolean;\n  /** Result description or error message */\n  message: string;\n}\n\n/**\n * Interface for command execution operation responses\n * Corresponds to Python's CommandResult type\n */\nexport interface CommandResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the command execution was successful */\n  success: boolean;\n  /** The command output */\n  output: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for code execution operation responses\n * Corresponds to Python's CodeExecutionResult type\n */\nexport interface CodeExecutionResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the code execution was successful */\n  success: boolean;\n  /** The execution result */\n  result: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for boolean operation responses\n * Corresponds to Python's BoolResult type\n */\nexport interface BoolResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Boolean data result */\n  data?: boolean;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for file info operation responses\n * Corresponds to Python's FileInfoResult type\n */\nexport interface FileInfoResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** File information object */\n  fileInfo?: Record<string, any>;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for directory list operation responses\n * Corresponds to Python's DirectoryListResult type\n */\nexport interface DirectoryListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Directory entries */\n  entries: Record<string, any>[];\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for file content operation responses\n * Corresponds to Python's FileContentResult type\n */\nexport interface FileContentResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** File content */\n  content: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for multiple file content operation responses\n * Corresponds to Python's MultipleFileContentResult type\n */\nexport interface MultipleFileContentResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Multiple file contents */\n  contents: Record<string, string>;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for file search operation responses\n * Corresponds to Python's FileSearchResult type\n */\nexport interface FileSearchResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Matching file paths */\n  matches: string[];\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for OSS client creation operation responses\n * Corresponds to Python's OSSClientResult type\n */\nexport interface OSSClientResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** OSS client configuration */\n  clientConfig: Record<string, any>;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for OSS upload operation responses\n * Corresponds to Python's OSSUploadResult type\n */\nexport interface OSSUploadResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Result of the upload operation */\n  content: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for OSS download operation responses\n * Corresponds to Python's OSSDownloadResult type\n */\nexport interface OSSDownloadResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Result of the download operation */\n  content: string;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for UI element list operation responses\n * Corresponds to Python's UIElementListResult type\n */\nexport interface UIElementListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** UI elements */\n  elements: Record<string, any>[];\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for window list operation responses\n * Corresponds to Python's WindowListResult type\n */\nexport interface WindowListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** List of windows */\n  windows: any[]; // Will be Window[] type, avoiding circular import\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for window info operation responses\n * Corresponds to Python's WindowInfoResult type\n */\nexport interface WindowInfoResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** Window object */\n  window?: any; // Will be Window type, avoiding circular import\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for context operation responses\n * Corresponds to Python's ContextResult type\n */\nexport interface ContextResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** The context ID */\n  contextId: string;\n  /** The context object (only present if successful) */\n  context?: any; // Will be Context type, avoiding circular import\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Interface for context list operation responses\n * Corresponds to Python's ContextListResult type\n */\nexport interface ContextListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** List of contexts */\n  contexts: any[]; // Will be Context[] type, avoiding circular import\n  /** Token for the next page of results */\n  nextToken?: string;\n  /** Maximum number of results per page */\n  maxResults?: number;\n  /** Total number of contexts available */\n  totalCount?: number;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Result of a presigned URL request\n */\nexport interface FileUrlResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** The presigned URL */\n  url: string;\n  /** Optional expire time (epoch seconds) */\n  expireTime?: number;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Represents a file item in a context\n */\nexport interface ContextFileEntry {\n  fileId?: string;\n  fileName?: string;\n  filePath: string;\n  fileType?: string;\n  gmtCreate?: string;\n  gmtModified?: string;\n  size?: number;\n  status?: string;\n}\n\n/**\n * Result of context file listing\n */\nexport interface ContextFileListResult extends ApiResponse {\n  /** Request identifier for tracking API calls */\n  requestId: string;\n  /** Whether the operation was successful */\n  success: boolean;\n  /** File entries under a folder */\n  entries: ContextFileEntry[];\n  /** Optional total count returned by backend */\n  count?: number;\n  /** Optional error message if the operation failed */\n  errorMessage?: string;\n}\n\n/**\n * Helper function to extract request ID from API responses\n */\nexport function extractRequestId(response: any): string | undefined {\n  if (!response) return undefined;\n\n  // If response is a string (like body?.requestId), return it directly\n  if (typeof response === \"string\" && response.length > 0) {\n    return response;\n  }\n\n  // Check for requestId in response.body first\n  if (response.body && response.body.requestId) {\n    return response.body.requestId;\n  }\n  // Check for requestId directly on response\n  if (response.requestId) {\n    return response.requestId;\n  }\n\n  return undefined;\n}\n","/**\n * Base exception for all AgentBay SDK errors.\n */\nexport class AgentBayError extends Error {\n  extra: Record<string, any>;\n\n  constructor(message?: string, extra: Record<string, any> = {}) {\n    const errorMessage = message || \"AgentBayError\";\n    super(errorMessage);\n    this.name = \"AgentBayError\";\n    this.extra = extra;\n    Object.setPrototypeOf(this, AgentBayError.prototype);\n  }\n}\n\n/**\n * Raised when there is an authentication error.\n */\nexport class AuthenticationError extends AgentBayError {\n  constructor(\n    message = \"Authentication failed\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"AuthenticationError\";\n    Object.setPrototypeOf(this, AuthenticationError.prototype);\n  }\n}\n\n/**\n * Raised when there is an error with the API.\n */\nexport class APIError extends AgentBayError {\n  statusCode?: number;\n\n  constructor(\n    message = \"API error\",\n    statusCode?: number,\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"APIError\";\n    this.statusCode = statusCode;\n    Object.setPrototypeOf(this, APIError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to file operations.\n */\nexport class FileError extends AgentBayError {\n  constructor(\n    message = \"File operation error\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"FileError\";\n    Object.setPrototypeOf(this, FileError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to command execution.\n */\nexport class CommandError extends AgentBayError {\n  constructor(\n    message = \"Command execution error\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"CommandError\";\n    Object.setPrototypeOf(this, CommandError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to session operations.\n */\nexport class SessionError extends AgentBayError {\n  constructor(message = \"Session error\", extra: Record<string, any> = {}) {\n    super(message, extra);\n    this.name = \"SessionError\";\n    Object.setPrototypeOf(this, SessionError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to OSS operations.\n */\nexport class OssError extends AgentBayError {\n  constructor(\n    message = \"OSS operation error\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"OssError\";\n    Object.setPrototypeOf(this, OssError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to application operations.\n */\nexport class ApplicationError extends AgentBayError {\n  constructor(\n    message = \"Application operation error\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"ApplicationError\";\n    Object.setPrototypeOf(this, ApplicationError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to UI operations.\n */\nexport class UIError extends AgentBayError {\n  constructor(message = \"UI operation error\", extra: Record<string, any> = {}) {\n    super(message, extra);\n    this.name = \"UIError\";\n    Object.setPrototypeOf(this, UIError.prototype);\n  }\n}\n\n/**\n * Raised for errors related to browser operations.\n */\nexport class BrowserError extends AgentBayError {\n  constructor(\n    message = \"Browser operation error\",\n    extra: Record<string, any> = {}\n  ) {\n    super(message, extra);\n    this.name = \"BrowserError\";\n    Object.setPrototypeOf(this, BrowserError.prototype);\n  }\n}\n","import { AgentBay } from \"./agent-bay\";\nimport { Agent } from \"./agent/agent\";\nimport { Client } from \"./api/client\";\nimport {\n  CallMcpToolRequest,\n  GetLabelRequest,\n  GetLinkRequest,\n  GetMcpResourceRequest,\n  ListMcpToolsRequest,\n  ReleaseMcpSessionRequest,\n  SetLabelRequest,\n} from \"./api/models/model\";\nimport { Application } from \"./application\";\nimport { Browser } from \"./browser\";\nimport { Code } from \"./code\";\nimport { Command } from \"./command\";\nimport { ContextManager, newContextManager } from \"./context-manager\";\nimport { FileSystem } from \"./filesystem\";\nimport { Oss } from \"./oss\";\nimport {\n  DeleteResult,\n  extractRequestId,\n  OperationResult,\n} from \"./types/api-response\";\nimport { UI } from \"./ui\";\nimport { log, logError } from \"./utils/logger\";\nimport { WindowManager } from \"./window\";\n\n/**\n * Represents an MCP tool with complete information.\n */\nexport interface McpTool {\n  name: string;\n  description: string;\n  inputSchema: Record<string, any>;\n  server: string;\n  tool: string;\n}\n\n/**\n * Result containing MCP tools list and request ID.\n */\nexport interface McpToolsResult extends OperationResult {\n  tools: McpTool[];\n}\n\n/**\n * Contains information about a session.\n */\nexport interface SessionInfo {\n  sessionId: string;\n  resourceUrl: string;\n  appId?: string;\n  authCode?: string;\n  connectionProperties?: string;\n  resourceId?: string;\n  resourceType?: string;\n  ticket?: string;\n}\n\n/**\n * SessionInfo class to match Python version structure\n */\nexport class SessionInfoClass {\n  sessionId: string;\n  resourceUrl: string;\n  appId: string;\n  authCode: string;\n  connectionProperties: string;\n  resourceId: string;\n  resourceType: string;\n  ticket: string;\n\n  constructor(\n    sessionId = \"\",\n    resourceUrl = \"\",\n    appId = \"\",\n    authCode = \"\",\n    connectionProperties = \"\",\n    resourceId = \"\",\n    resourceType = \"\",\n    ticket = \"\"\n  ) {\n    this.sessionId = sessionId;\n    this.resourceUrl = resourceUrl;\n    this.appId = appId;\n    this.authCode = authCode;\n    this.connectionProperties = connectionProperties;\n    this.resourceId = resourceId;\n    this.resourceType = resourceType;\n    this.ticket = ticket;\n  }\n}\n\n/**\n * Represents a session in the AgentBay cloud environment.\n */\nexport class Session {\n  private agentBay: AgentBay;\n  public sessionId: string;\n\n\n  // VPC-related information\n  public isVpc = false; // Whether this session uses VPC resources\n  public networkInterfaceIp = \"\"; // Network interface IP for VPC sessions\n  public httpPort = \"\"; // HTTP port for VPC sessions\n  public token = \"\"; // Token for VPC sessions\n\n  // Recording functionality\n  public enableBrowserReplay = false; // Whether browser recording is enabled for this session\n\n  // File, command, code, and oss handlers (matching Python naming)\n  public fileSystem: FileSystem; // file_system in Python\n  public command: Command;\n  public code: Code;\n  public oss: Oss;\n\n  // Application, window, and UI management (matching Python naming)\n  public application: Application; // application in Python (ApplicationManager)\n  public window: WindowManager;\n  public ui: UI;\n\n  // Agent for task execution\n  public agent: Agent;\n\n  // Browser for web automation\n  public browser: Browser;\n\n  // Context management (matching Go version)\n  public context: ContextManager;\n\n  // MCP tools available for this session\n  public mcpTools: McpTool[] = [];\n\n  /**\n   * Initialize a Session object.\n   *\n   * @param agentBay - The AgentBay instance that created this session.\n   * @param sessionId - The ID of this session.\n   */\n  constructor(agentBay: AgentBay, sessionId: string) {\n    this.agentBay = agentBay;\n    this.sessionId = sessionId;\n\n    // Initialize file system, command and code handlers (matching Python naming)\n    this.fileSystem = new FileSystem(this);\n    this.command = new Command(this);\n    this.code = new Code(this);\n    this.oss = new Oss(this);\n\n    // Initialize application and window managers (matching Python naming)\n    this.application = new Application(this);\n    this.window = new WindowManager(this);\n    this.ui = new UI(this);\n\n    // Initialize Agent\n    this.agent = new Agent(this);\n\n    // Initialize Browser\n    this.browser = new Browser(this);\n\n    // Initialize context manager (matching Go version)\n    this.context = newContextManager(this);\n  }\n\n  /**\n   * Return the API key for this session.\n   */\n  getAPIKey(): string {\n    return this.agentBay.getAPIKey();\n  }\n\n  /**\n   * Return the HTTP client for this session.\n   */\n  getClient(): Client {\n    return this.agentBay.getClient();\n  }\n\n  /**\n   * Return the session_id for this session.\n   */\n  getSessionId(): string {\n    return this.sessionId;\n  }\n\n  /**\n   * Return whether this session uses VPC resources.\n   */\n  isVpcEnabled(): boolean {\n    return this.isVpc;\n  }\n\n  /**\n   * Return the network interface IP for VPC sessions.\n   */\n  getNetworkInterfaceIp(): string {\n    return this.networkInterfaceIp;\n  }\n\n  /**\n   * Return the HTTP port for VPC sessions.\n   */\n  getHttpPort(): string {\n    return this.httpPort;\n  }\n\n  /**\n   * Return the token for VPC sessions.\n   */\n  getToken(): string {\n    return this.token;\n  }\n\n  /**\n   * Find the server that provides the given tool.\n   */\n  findServerForTool(toolName: string): string {\n    for (const tool of this.mcpTools) {\n      if (tool.name === toolName) {\n        return tool.server;\n      }\n    }\n    return \"\";\n  }\n\n  /**\n   * Delete this session.\n   *\n   * @param syncContext - Whether to sync context data (trigger file uploads) before deleting the session. Defaults to false.\n   * @returns DeleteResult indicating success or failure and request ID\n   */\n  async delete(syncContext = false): Promise<DeleteResult> {\n    try {\n      // If syncContext is true, trigger file uploads first\n      if (syncContext) {\n        log(\"Triggering context synchronization before session deletion...\");\n\n        // Use the new sync method without callback (sync mode)\n        const syncStartTime = Date.now();\n\n        try {\n          const syncResult = await this.context.sync();\n\n          const syncDuration = Date.now() - syncStartTime;\n\n          if (syncResult.success) {\n            log(`Context sync completed in ${syncDuration}ms`);\n          } else {\n            log(`Context sync completed with failures after ${syncDuration}ms`);\n          }\n        } catch (error) {\n          const syncDuration = Date.now() - syncStartTime;\n          logError(`Failed to trigger context sync after ${syncDuration}ms:`, error);\n          // Continue with deletion even if sync fails\n        }\n      }\n\n      // Proceed with session deletion\n      const request = new ReleaseMcpSessionRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.sessionId,\n      });\n\n      const response = await this.getClient().releaseMcpSession(request);\n      log(`Response from release_mcp_session: ${JSON.stringify(response)}`);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      // Check if the response is success (matching Python logic)\n      const responseBody = response.body;\n      const success = responseBody?.success !== false; // Note: capital S to match Python\n\n      if (!success) {\n        return {\n          requestId,\n          success: false,\n          errorMessage: \"Failed to delete session\",\n        };\n      }\n\n      // Return success result with request ID\n      return {\n        requestId,\n        success: true,\n      };\n    } catch (error) {\n      logError(\"Error calling release_mcp_session:\", error);\n      // In case of error, return failure result with error message (matching Python)\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to delete session ${this.sessionId}: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Validates labels parameter for label operations.\n   *\n   * @param labels - The labels to validate\n   * @returns null if validation passes, or OperationResult with error if validation fails\n   */\n  private validateLabels(labels: Record<string, string>): OperationResult | null {\n    // Check if labels is null, undefined, or invalid type\n    if (!labels || typeof labels !== 'object') {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: \"Labels cannot be null, undefined, or invalid type. Please provide a valid labels object.\",\n      };\n    }\n\n    // Check if labels is an array or other non-plain object\n    if (Array.isArray(labels)) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: \"Labels cannot be an array. Please provide a valid labels object.\",\n      };\n    }\n\n    // Check if labels is a Date, RegExp, or other built-in object types\n    if (labels instanceof Date || labels instanceof RegExp || labels instanceof Error ||\n        labels instanceof Map || labels instanceof Set || labels instanceof WeakMap ||\n        labels instanceof WeakSet || labels instanceof Promise) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: \"Labels must be a plain object. Built-in object types are not allowed.\",\n      };\n    }\n\n    // Check if labels object is empty\n    if (Object.keys(labels).length === 0) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: \"Labels cannot be empty. Please provide at least one label.\",\n      };\n    }\n\n    for (const [key, value] of Object.entries(labels)) {\n      // Check key validity\n      if (!key || key.trim() === \"\") {\n        return {\n          requestId: \"\",\n          success: false,\n          errorMessage: \"Label keys cannot be empty Please provide valid keys.\",\n        };\n      }\n\n      // Check value is not null or undefined\n      if (!value || value.trim() === \"\") {\n        return {\n          requestId: \"\",\n          success: false,\n          errorMessage: \"Label values cannot be empty Please provide valid values.\",\n        };\n      }\n    }\n\n    // Validation passed\n    return null;\n  }\n\n  /**\n   * Sets the labels for this session.\n   *\n   * @param labels - The labels to set for the session.\n   * @returns OperationResult indicating success or failure with request ID\n   * @throws Error if the operation fails (matching Python SessionError)\n   */\n  async setLabels(labels: Record<string, string>): Promise<OperationResult> {\n    try {\n      // Validate labels using the extracted validation function\n      const validationResult = this.validateLabels(labels);\n      if (validationResult !== null) {\n        return validationResult;\n      }\n\n      // Convert labels to JSON string\n      const labelsJSON = JSON.stringify(labels);\n\n      const request = new SetLabelRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.sessionId,\n        labels: labelsJSON,\n      });\n\n      const response = await this.getClient().setLabel(request);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      return {\n        requestId,\n        success: true,\n      };\n    } catch (error) {\n      logError(\"Error calling set_label:\", error);\n      throw new Error(\n        `Failed to set labels for session ${this.sessionId}: ${error}`\n      );\n    }\n  }\n\n  /**\n   * Gets the labels for this session.\n   *\n   * @returns OperationResult containing the labels as data and request ID\n   * @throws Error if the operation fails (matching Python SessionError)\n   */\n  async getLabels(): Promise<OperationResult> {\n    try {\n      const request = new GetLabelRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.sessionId,\n      });\n\n      const response = await this.getClient().getLabel(request);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      // Extract labels from response (matching Python structure)\n      const responseBody = response?.body;\n      const data = responseBody?.data; // Capital D to match Python\n      const labelsJSON = data?.labels; // Capital L to match Python\n\n      let labels = {};\n      if (labelsJSON) {\n        labels = JSON.parse(labelsJSON);\n      }\n\n      return {\n        requestId,\n        success: true,\n        data: labels,\n      };\n    } catch (error) {\n      logError(\"Error calling get_label:\", error);\n      throw new Error(\n        `Failed to get labels for session ${this.sessionId}: ${error}`\n      );\n    }\n  }\n\n  /**\n   * Gets information about this session.\n   *\n   * @returns OperationResult containing the session information as data and request ID\n   * @throws Error if the operation fails (matching Python SessionError)\n   */\n  async info(): Promise<OperationResult> {\n    try {\n      const request = new GetMcpResourceRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.sessionId,\n      });\n\n      log(\"API Call: GetMcpResource\");\n      log(`Request: SessionId=${this.sessionId}`);\n\n      const response = await this.getClient().getMcpResource(request);\n      log(`Response from GetMcpResource: ${JSON.stringify(response)}`);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      // Extract session info from response (matching Python structure)\n      const responseBody = response.body;\n      const data = responseBody?.data; // Capital D to match Python\n\n      const sessionInfo = new SessionInfoClass();\n\n      if (data?.sessionId) {\n        // Capital S and I to match Python\n        sessionInfo.sessionId = data.sessionId;\n      }\n\n      if (data?.resourceUrl) {\n        // Capital R and U to match Python\n        sessionInfo.resourceUrl = data.resourceUrl;\n      }\n\n      // Transfer DesktopInfo fields to SessionInfo (matching Python structure)\n      if (data?.desktopInfo) {\n        // Capital D and I to match Python\n        const desktopInfo = data.desktopInfo;\n        if (desktopInfo.appId) {\n          sessionInfo.appId = desktopInfo.appId;\n        }\n        if (desktopInfo.authCode) {\n          sessionInfo.authCode = desktopInfo.authCode;\n        }\n        if (desktopInfo.connectionProperties) {\n          sessionInfo.connectionProperties = desktopInfo.connectionProperties;\n        }\n        if (desktopInfo.resourceId) {\n          sessionInfo.resourceId = desktopInfo.resourceId;\n        }\n        if (desktopInfo.resourceType) {\n          sessionInfo.resourceType = desktopInfo.resourceType;\n        }\n        if (desktopInfo.ticket) {\n          sessionInfo.ticket = desktopInfo.ticket;\n        }\n      }\n\n      return {\n        requestId,\n        success: true,\n        data: sessionInfo,\n      };\n    } catch (error) {\n      logError(\"Error calling GetMcpResource:\", error);\n      throw new Error(\n        `Failed to get session info for session ${this.sessionId}: ${error}`\n      );\n    }\n  }\n\n  /**\n   * Get a link associated with the current session.\n   *\n   * @param protocolType - Optional protocol type to use for the link\n   * @param port - Optional port to use for the link (must be in range [30100, 30199])\n   * @returns OperationResult containing the link as data and request ID\n   * @throws Error if the operation fails (matching Python SessionError)\n   */\n  async getLink(\n    protocolType?: string,\n    port?: number\n  ): Promise<OperationResult> {\n    try {\n      // Validate port range if port is provided\n      if (port) {\n        if (!Number.isInteger(port) || port < 30100 || port > 30199) {\n          throw new Error(\n            `Invalid port value: ${port}. Port must be an integer in the range [30100, 30199].`\n          );\n        }\n      }\n\n      const request = new GetLinkRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.getSessionId(),\n        protocolType,\n        port,\n      });\n\n      const response = await this.agentBay.getClient().getLink(request);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      const responseBody = response.body;\n\n      if (typeof responseBody !== \"object\") {\n        throw new Error(\n          \"Invalid response format: expected a dictionary from response body\"\n        );\n      }\n\n      let data = responseBody.data || {}; // Capital D to match Python\n      log(`Data: ${JSON.stringify(data)}`);\n\n      if (typeof data !== \"object\") {\n        try {\n          data = typeof data === \"string\" ? JSON.parse(data) : {};\n        } catch (jsonError) {\n          data = {};\n        }\n      }\n\n      const url = (data as any).Url || (data as any).url;\n\n      return {\n        requestId,\n        success: true,\n        data: url,\n      };\n    } catch (error) {\n      if (\n        error instanceof Error &&\n        error.message.includes(\"Invalid response format\")\n      ) {\n        throw error;\n      }\n      throw new Error(`Failed to get link: ${error}`);\n    }\n  }\n\n  /**\n   * Asynchronously get a link associated with the current session.\n   *\n   * @param protocolType - Optional protocol type to use for the link\n   * @param port - Optional port to use for the link (must be in range [30100, 30199])\n   * @returns OperationResult containing the link as data and request ID\n   * @throws Error if the operation fails (matching Python SessionError)\n   */\n  async getLinkAsync(\n    protocolType?: string,\n    port?: number\n  ): Promise<OperationResult> {\n    try {\n      // Validate port range if port is provided\n      if (port !== undefined) {\n        if (!Number.isInteger(port) || port < 30100 || port > 30199) {\n          throw new Error(\n            `Invalid port value: ${port}. Port must be an integer in the range [30100, 30199].`\n          );\n        }\n      }\n\n      const request = new GetLinkRequest({\n        authorization: `Bearer ${this.getAPIKey()}`,\n        sessionId: this.getSessionId(),\n        protocolType,\n        port,\n      });\n\n      // Note: In TypeScript, async is the default, but keeping this method for API compatibility\n      const response = await this.agentBay.getClient().getLink(request);\n\n      // Extract request ID\n      const requestId = extractRequestId(response) || \"\";\n\n      const responseBody = response?.body;\n\n      if (typeof responseBody !== \"object\") {\n        throw new Error(\n          \"Invalid response format: expected a dictionary from response body\"\n        );\n      }\n\n      let data = responseBody?.data || {}; // Capital D to match Python\n      log(`Data: ${JSON.stringify(data)}`);\n\n      if (typeof data !== \"object\") {\n        try {\n          data = typeof data === \"string\" ? JSON.parse(data) : {};\n        } catch (jsonError) {\n          data = {};\n        }\n      }\n\n      const url = (data as any).Url || (data as any).url;\n\n      return {\n        requestId,\n        success: true,\n        data: url,\n      };\n    } catch (error) {\n      if (\n        error instanceof Error &&\n        error.message.includes(\"Invalid response format\")\n      ) {\n        throw error;\n      }\n      throw new Error(`Failed to get link asynchronously: ${error}`);\n    }\n  }\n\n  /**\n   * List MCP tools available for this session.\n   *\n   * @param imageId Optional image ID, defaults to session's imageId or \"linux_latest\"\n   * @returns McpToolsResult containing tools list and request ID\n   */\n  async listMcpTools(imageId?: string): Promise<McpToolsResult> {\n    // Use provided imageId, session's imageId, or default\n    if (!imageId) {\n      imageId = (this as any).imageId || \"linux_latest\";\n    }\n\n    const request = new ListMcpToolsRequest({\n      authorization: `Bearer ${this.getAPIKey()}`,\n      imageId: imageId,\n    });\n\n    log(\"API Call: ListMcpTools\");\n    log(`Request: ImageId=${imageId}`);\n\n    const response = await this.getClient().listMcpTools(request);\n\n    // Extract request ID\n    const requestId = extractRequestId(response) || \"\";\n\n    if (response && response.body) {\n      log(\"Response from ListMcpTools:\", response.body);\n    }\n\n    // Parse the response data\n    const tools: McpTool[] = [];\n    if (response && response.body && response.body.data) {\n      try {\n        const toolsData = JSON.parse(response.body.data as string);\n        for (const toolData of toolsData) {\n          const tool: McpTool = {\n            name: toolData.name || \"\",\n            description: toolData.description || \"\",\n            inputSchema: toolData.inputSchema || {},\n            server: toolData.server || \"\",\n            tool: toolData.tool || \"\",\n          };\n          tools.push(tool);\n        }\n      } catch (error) {\n        logError(`Error unmarshaling tools data: ${error}`);\n      }\n    }\n\n    this.mcpTools = tools; // Update the session's mcpTools field\n\n    return {\n      requestId,\n      success: true,\n      tools,\n    };\n  }\n\n  /**\n   * Call an MCP tool and return the result in a format compatible with Agent.\n   *\n   * @param toolName - Name of the MCP tool to call\n   * @param args - Arguments to pass to the tool\n   * @returns McpToolResult containing the response data\n   */\n  async callMcpTool(toolName: string, args: any): Promise<import(\"./agent/agent\").McpToolResult> {\n    try {\n      const argsJSON = JSON.stringify(args);\n\n      // Check if this is a VPC session\n      if (this.isVpcEnabled()) {\n        // VPC mode: Use HTTP request to the VPC endpoint\n        const server = this.findServerForTool(toolName);\n        if (!server) {\n          return {\n            success: false,\n            data: \"\",\n            errorMessage: `Server not found for tool: ${toolName}`,\n            requestId: \"\",\n          };\n        }\n\n        if (!this.networkInterfaceIp || !this.httpPort) {\n          return {\n            success: false,\n            data: \"\",\n            errorMessage: `VPC network configuration incomplete: networkInterfaceIp=${this.networkInterfaceIp}, httpPort=${this.httpPort}. This may indicate the VPC session was not properly configured with network parameters.`,\n            requestId: \"\",\n          };\n        }\n\n        const baseURL = `http://${this.networkInterfaceIp}:${this.httpPort}/callTool`;\n        const url = new URL(baseURL);\n        url.searchParams.append(\"server\", server);\n        url.searchParams.append(\"tool\", toolName);\n        url.searchParams.append(\"args\", argsJSON);\n        url.searchParams.append(\"token\", this.getToken());\n        // Add requestId for debugging purposes\n        const requestId = `vpc-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n        url.searchParams.append(\"requestId\", requestId);\n\n        const response = await fetch(url.toString(), {\n          method: \"GET\",\n          headers: {\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n          },\n        });\n\n        if (!response.ok) {\n          return {\n            success: false,\n            data: \"\",\n            errorMessage: `VPC request failed: ${response.statusText}`,\n            requestId: \"\",\n          };\n        }\n\n                 const responseData = await response.json() as any;\n\n         // Extract the actual result from the nested VPC response structure\n         let actualResult: any = responseData;\n         if (typeof responseData.data === \"string\") {\n           try {\n             const dataMap = JSON.parse(responseData.data);\n             if (dataMap.result) {\n               actualResult = dataMap.result;\n             }\n           } catch (err) {\n             // Keep original response if parsing fails\n           }\n         } else if (responseData.data && responseData.data.result) {\n           actualResult = responseData.data.result;\n         }\n\n         // Extract text content from the result\n         let textContent = \"\";\n         if (actualResult.content && Array.isArray(actualResult.content) && actualResult.content.length > 0) {\n           const contentItem = actualResult.content[0];\n           if (contentItem && contentItem.text) {\n             textContent = contentItem.text;\n           }\n         }\n\n        return {\n          success: true,\n          data: textContent || JSON.stringify(actualResult),\n          errorMessage: \"\",\n          requestId: \"\",\n        };\n      } else {\n        // Non-VPC mode: use traditional API call\n        const callToolRequest = new CallMcpToolRequest({\n          authorization: `Bearer ${this.getAPIKey()}`,\n          sessionId: this.getSessionId(),\n          name: toolName,\n          args: argsJSON,\n        });\n\n        const response = await this.getClient().callMcpTool(callToolRequest);\n\n        if (!response.body?.data) {\n          return {\n            success: false,\n            data: \"\",\n            errorMessage: \"Invalid response data format\",\n            requestId: extractRequestId(response) || \"\",\n          };\n        }\n\n        const data = response.body.data as Record<string, any>;\n\n        // Check if there's an error in the response\n        if (data.isError) {\n          const errorContent = data.content || [];\n          const errorMessage = errorContent\n            .map((item: any) => item.text || \"Unknown error\")\n            .join(\"; \");\n\n          return {\n            success: false,\n            data: \"\",\n            errorMessage,\n            requestId: extractRequestId(response) || \"\",\n          };\n        }\n\n        // Extract text content from content array\n        const content = data.content || [];\n        let textContent = \"\";\n        if (content.length > 0 && content[0].text !== undefined) {\n          textContent = content[0].text;\n        }\n\n        return {\n          success: true,\n          data: textContent,\n          errorMessage: \"\",\n          requestId: extractRequestId(response) || \"\",\n        };\n      }\n    } catch (error) {\n      return {\n        success: false,\n        data: \"\",\n        errorMessage: error instanceof Error ? error.message : String(error),\n        requestId: \"\",\n      };\n    }\n  }\n}\n","import { ApiResponse } from \"../types/api-response\";\nimport { log } from \"../utils/logger\";\n\n/**\n * Result of task execution.\n */\nexport interface ExecutionResult extends ApiResponse {\n  success: boolean;\n  errorMessage: string;\n  taskId: string;\n  taskStatus: string;\n}\n\n/**\n * Result of query operations.\n */\nexport interface QueryResult extends ApiResponse {\n  success: boolean;\n  output: string;\n  errorMessage: string;\n}\n\n/**\n * Result of an MCP tool call.\n */\nexport interface McpToolResult {\n  success: boolean;\n  data: string;\n  errorMessage: string;\n  requestId: string;\n}\n\n/**\n * Interface defining the methods needed by Agent from Session.\n */\nexport interface McpSession {\n  getAPIKey(): string;\n  getSessionId(): string;\n  callMcpTool(toolName: string, args: any): Promise<McpToolResult>;\n}\n\n/**\n * An Agent to manipulate applications to complete specific tasks.\n */\nexport class Agent {\n  private session: McpSession;\n\n  /**\n   * Initialize an Agent object.\n   *\n   * @param session - The Session instance that this Agent belongs to.\n   */\n  constructor(session: McpSession) {\n    this.session = session;\n  }\n\n  /**\n   * Execute a specific task described in human language.\n   *\n   * @param task - Task description in human language.\n   * @param maxTryTimes - Maximum number of retry attempts.\n   * @returns ExecutionResult containing success status, task output, and error message if any.\n   */\n  async executeTask(task: string, maxTryTimes: number): Promise<ExecutionResult> {\n    try {\n      const args = { task, max_try_times: maxTryTimes };\n      const result = await this.session.callMcpTool(\"flux_execute_task\", args);\n      \n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n          taskStatus: \"failed\",\n          taskId: \"\",\n        };\n      }\n\n      // Parse task ID from response\n      let content: any;\n      try {\n        content = JSON.parse(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: `Failed to parse response: ${err}`,\n          taskStatus: \"failed\",\n          taskId: \"\",\n        };\n      }\n\n      const taskId = content.task_id;\n      if (!taskId) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: \"Task ID not found in response\",\n          taskStatus: \"failed\",\n          taskId: \"\",\n        };\n      }\n\n      // Poll for task completion\n      let triedTime = 0;\n      while (triedTime < maxTryTimes) {\n        const query = await this.getTaskStatus(taskId);\n        if (!query.success) {\n          return {\n            requestId: result.requestId,\n            success: false,\n            errorMessage: query.errorMessage,\n            taskStatus: \"failed\",\n            taskId,\n          };\n        }\n\n        let statusContent: any;\n        try {\n          statusContent = JSON.parse(query.output);\n        } catch (err) {\n          return {\n            requestId: result.requestId,\n            success: false,\n            errorMessage: `Failed to parse status response: ${err}`,\n            taskStatus: \"failed\",\n            taskId,\n          };\n        }\n\n        const taskStatus = statusContent.status;\n        if (!taskStatus) {\n          return {\n            requestId: result.requestId,\n            success: false,\n            errorMessage: \"Task status not found in response\",\n            taskStatus: \"failed\",\n            taskId,\n          };\n        }\n\n        switch (taskStatus) {\n          case \"finished\":\n            return {\n              requestId: result.requestId,\n              success: true,\n              errorMessage: \"\",\n              taskId,\n              taskStatus,\n            };\n          case \"failed\":\n            return {\n              requestId: result.requestId,\n              success: false,\n              errorMessage: \"Failed to execute task.\",\n              taskId,\n              taskStatus,\n            };\n          case \"unsupported\":\n            return {\n              requestId: result.requestId,\n              success: false,\n              errorMessage: \"Unsupported task.\",\n              taskId,\n              taskStatus,\n            };\n        }\n\n        log(`Task ${taskId} is still running, please wait for a while.`);\n        await new Promise(resolve => setTimeout(resolve, 3000));\n        triedTime++;\n      }\n\n      return {\n        requestId: result.requestId,\n        success: false,\n        errorMessage: \"Task execution timed out\",\n        taskStatus: \"timeout\",\n        taskId,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to execute: ${error}`,\n        taskStatus: \"failed\",\n        taskId: \"\",\n      };\n    }\n  }\n\n  /**\n   * Get the status of the task with the given task ID.\n   *\n   * @param taskId - Task ID\n   * @returns QueryResult containing the task status\n   */\n  async getTaskStatus(taskId: string): Promise<QueryResult> {\n    try {\n      const args = { task_id: taskId };\n      const result = await this.session.callMcpTool(\"flux_get_task_status\", args);\n      \n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n          output: \"\",\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        output: result.data,\n        errorMessage: \"\",\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to get task status: ${error}`,\n        output: \"\",\n      };\n    }\n  }\n\n  /**\n   * Terminate a task with a specified task ID.\n   *\n   * @param taskId - The ID of the running task.\n   * @returns ExecutionResult containing success status, task output, and error message if any.\n   */\n  async terminateTask(taskId: string): Promise<ExecutionResult> {\n            log(\"Terminating task\");\n    \n    try {\n      const args = { task_id: taskId };\n      const result = await this.session.callMcpTool(\"flux_terminate_task\", args);\n\n      let content: any;\n      try {\n        content = JSON.parse(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: `Failed to parse response: ${err}`,\n          taskId,\n          taskStatus: \"failed\",\n        };\n      }\n\n      const terminatedTaskId = content.task_id || taskId;\n      const status = content.status || \"unknown\";\n\n      if (result.success) {\n        return {\n          requestId: result.requestId,\n          success: true,\n          errorMessage: \"\",\n          taskId: terminatedTaskId,\n          taskStatus: status,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: false,\n        errorMessage: result.errorMessage,\n        taskId: terminatedTaskId,\n        taskStatus: status,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to terminate: ${error}`,\n        taskId,\n        taskStatus: \"failed\",\n      };\n    }\n  }\n} ","import { Client } from \"../api/client\";\nimport {\n  InstalledAppListResult,\n  ProcessListResult,\n  AppOperationResult,\n} from \"../types/api-response\";\n\n\n/**\n * Represents an installed application\n */\nexport interface InstalledApp {\n  name: string;\n  start_cmd: string;\n  stop_cmd?: string;\n  work_directory?: string;\n}\n\n/**\n * Represents a running process\n */\nexport interface Process {\n  pname: string;\n  pid: number;\n  cmdline?: string;\n  path?: string;\n}\n\n/**\n * Handles application operations in the AgentBay cloud environment.\n */\nexport class Application {\n  private session: {\n    getAPIKey(): string;\n    getClient(): Client;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  };\n\n  /**\n   * Initialize an Application object.\n   *\n   * @param session - The Session instance that this Application belongs to.\n   */\n  constructor(session: {\n    getAPIKey(): string;\n    getClient(): Client;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  }) {\n    this.session = session;\n  }\n\n  /**\n   * Sanitizes error messages to remove sensitive information like API keys.\n   *\n   * @param error - The error to sanitize\n   * @returns The sanitized error\n   */\n  private sanitizeError(error: any): any {\n    if (!error) {\n      return error;\n    }\n\n    const errorString = String(error);\n    return errorString.replace(/Bearer\\s+[^\\s]+/g, \"Bearer [REDACTED]\");\n  }\n\n  /**\n   * Helper method to parse JSON string into objects\n   */\n  private parseJSON<T>(jsonString: string): T {\n    try {\n      return JSON.parse(jsonString);\n    } catch (error) {\n      throw new Error(`Failed to parse JSON: ${error}`);\n    }\n  }\n\n  /**\n   * Retrieves a list of installed applications.\n   * Corresponds to Python's get_installed_apps() method\n   *\n   * @param startMenu - Whether to include applications from the start menu. Defaults to true.\n   * @param desktop - Whether to include applications from the desktop. Defaults to true.\n   * @param ignoreSystemApps - Whether to ignore system applications. Defaults to true.\n   * @returns InstalledAppListResult with installed apps and requestId\n   * @throws Error if the operation fails.\n   */\n  async getInstalledApps(\n    startMenu = true,\n    desktop = true,\n    ignoreSystemApps = true\n  ): Promise<InstalledAppListResult> {\n    try {\n      const args = {\n        start_menu: startMenu,\n        desktop,\n        ignore_system_apps: ignoreSystemApps,\n      };\n\n      const result = await this.session.callMcpTool(\"get_installed_apps\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let apps: InstalledApp[] = [];\n      try {\n        apps = this.parseJSON<InstalledApp[]>(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: `Failed to parse installed apps: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: apps,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: [],\n        errorMessage: `Failed to get installed apps: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Starts an application with the given command and optional working directory.\n   * Corresponds to Python's start_app() method\n   *\n   * @param startCmd - The command to start the application.\n   * @param workDirectory - The working directory for the application. Defaults to an empty string.\n   * @param activity - Activity name to launch (e.g. \".SettingsActivity\" or \"com.package/.Activity\"). Defaults to an empty string.\n   * @returns ProcessListResult with started processes and requestId\n   * @throws Error if the operation fails.\n   */\n  async startApp(\n    startCmd: string,\n    workDirectory = \"\",\n    activity = \"\"\n  ): Promise<ProcessListResult> {\n    try {\n      const args = {\n        start_cmd: startCmd,\n        work_directory: workDirectory,\n        activity,\n      };\n\n      const result = await this.session.callMcpTool(\"start_app\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let processes: Process[] = [];\n      try {\n        processes = this.parseJSON<Process[]>(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: `Failed to parse processes: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: processes,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: [],\n        errorMessage: `Failed to start app: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Stops an application by process name.\n   * Corresponds to Python's stop_app_by_pname() method\n   *\n   * @param pname - The process name to stop.\n   * @returns AppOperationResult with operation result and requestId\n   * @throws Error if the operation fails.\n   */\n  async stopAppByPName(pname: string): Promise<AppOperationResult> {\n    try {\n      const args = { pname };\n      const result = await this.session.callMcpTool(\"stop_app_by_pname\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to stop app by process name: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Stops an application by process ID.\n   * Corresponds to Python's stop_app_by_pid() method\n   *\n   * @param pid - The process ID to stop.\n   * @returns AppOperationResult with operation result and requestId\n   * @throws Error if the operation fails.\n   */\n  async stopAppByPID(pid: number): Promise<AppOperationResult> {\n    try {\n      const args = { pid };\n      const result = await this.session.callMcpTool(\"stop_app_by_pid\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to stop app by process ID: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Stops an application by stop command.\n   * Corresponds to Python's stop_app_by_cmd() method\n   *\n   * @param stopCmd - The stop command to execute.\n   * @returns AppOperationResult with operation result and requestId\n   * @throws Error if the operation fails.\n   */\n  async stopAppByCmd(stopCmd: string): Promise<AppOperationResult> {\n    try {\n      const args = { stop_cmd: stopCmd };\n      const result = await this.session.callMcpTool(\"stop_app_by_cmd\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to stop app by command: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Returns a list of currently visible applications.\n   * Corresponds to Python's list_visible_apps() method\n   *\n   * @returns ProcessListResult with visible apps and requestId\n   * @throws Error if the operation fails.\n   */\n  async listVisibleApps(): Promise<ProcessListResult> {\n    try {\n      const result = await this.session.callMcpTool(\"list_visible_apps\", {});\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let processes: Process[] = [];\n      try {\n        processes = this.parseJSON<Process[]>(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: [],\n          errorMessage: `Failed to parse visible apps: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: processes,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: [],\n        errorMessage: `Failed to list visible apps: ${error}`,\n      };\n    }\n  }\n}\n","export { Browser, BrowserViewport, BrowserScreen, BrowserFingerprint, BrowserProxy, BrowserProxyClass, BrowserOption, BrowserOptionClass } from './browser';\nexport { BrowserAgent } from './browser_agent';\nexport type { ActOptions, ActResult, ObserveOptions, ObserveResult, ExtractOptions } from './browser_agent'; ","import { Session } from '../session';\nimport { BrowserAgent } from './browser_agent';\nimport { BrowserError } from '../exceptions';\nimport { BROWSER_DATA_PATH } from '../config';\nimport { InitBrowserRequest } from '../api/models/InitBrowserRequest';\nimport { log } from '../utils/logger';\n\nexport interface BrowserViewport {\n  width: number;\n  height: number;\n}\n\nexport interface BrowserScreen {\n  width: number;\n  height: number;\n}\n\nexport interface BrowserFingerprint {\n  devices?: Array<'desktop' | 'mobile'>;\n  operatingSystems?: Array<'windows' | 'macos' | 'linux' | 'android' | 'ios'>;\n  locales?: string[];\n}\n\nexport interface BrowserProxy {\n  type: 'custom' | 'wuying';\n  server?: string;\n  username?: string;\n  password?: string;\n  strategy?: 'restricted' | 'polling';\n  pollsize?: number;\n  toMap(): Record<string, any>;\n}\n\nexport class BrowserProxyClass implements BrowserProxy {\n  type: 'custom' | 'wuying';\n  server?: string;\n  username?: string;\n  password?: string;\n  strategy?: 'restricted' | 'polling';\n  pollsize?: number;\n\n  constructor(\n    proxyType: 'custom' | 'wuying',\n    server?: string,\n    username?: string,\n    password?: string,\n    strategy?: 'restricted' | 'polling',\n    pollsize?: number\n  ) {\n    this.type = proxyType;\n    this.server = server;\n    this.username = username;\n    this.password = password;\n    this.strategy = strategy;\n    this.pollsize = pollsize;\n\n    // Validation\n    if (proxyType !== 'custom' && proxyType !== 'wuying') {\n      throw new Error('proxy_type must be custom or wuying');\n    }\n\n    if (proxyType === 'custom' && !server) {\n      throw new Error('server is required for custom proxy type');\n    }\n\n    if (proxyType === 'wuying' && !strategy) {\n      throw new Error('strategy is required for wuying proxy type');\n    }\n\n    if (proxyType === 'wuying' && strategy !== 'restricted' && strategy !== 'polling') {\n      throw new Error('strategy must be restricted or polling for wuying proxy type');\n    }\n\n    if (proxyType === 'wuying' && strategy === 'polling' && pollsize !== undefined && pollsize <= 0) {\n      throw new Error('pollsize must be greater than 0 for polling strategy');\n    }\n  }\n\n  toMap(): Record<string, any> {\n    const proxyMap: Record<string, any> = {\n      type: this.type\n    };\n\n    if (this.type === 'custom') {\n      proxyMap.server = this.server;\n      if (this.username) {\n        proxyMap.username = this.username;\n      }\n      if (this.password) {\n        proxyMap.password = this.password;\n      }\n    } else if (this.type === 'wuying') {\n      proxyMap.strategy = this.strategy;\n      if (this.strategy === 'polling') {\n        proxyMap.pollsize = this.pollsize;\n      }\n    }\n\n    return proxyMap;\n  }\n\n  static fromMap(m: Record<string, any> | null | undefined): BrowserProxyClass | null {\n    if (!m || typeof m !== 'object') {\n      return null;\n    }\n\n    const proxyType = m.type;\n    if (!proxyType) {\n      return null;\n    }\n\n    if (proxyType === 'custom') {\n      return new BrowserProxyClass(\n        proxyType,\n        m.server,\n        m.username,\n        m.password\n      );\n    } else if (proxyType === 'wuying') {\n      return new BrowserProxyClass(\n        proxyType,\n        undefined,\n        undefined,\n        undefined,\n        m.strategy,\n        m.pollsize || 10\n      );\n    } else {\n      throw new Error(`Unsupported proxy type: ${proxyType}`);\n    }\n  }\n}\n\nexport interface BrowserOption {\n  persistentPath?: string;\n  useStealth?: boolean;\n  userAgent?: string;\n  viewport?: BrowserViewport;\n  screen?: BrowserScreen;\n  fingerprint?: BrowserFingerprint;\n  solveCaptchas?: boolean;\n  proxies?: BrowserProxy[];\n  /** Path to the extensions directory. Defaults to \"/tmp/extensions/\" */\n  extensionPath?: string;\n}\n\nexport class BrowserOptionClass implements BrowserOption {\n  persistentPath?: string;\n  useStealth?: boolean;\n  userAgent?: string;\n  viewport?: BrowserViewport;\n  screen?: BrowserScreen;\n  fingerprint?: BrowserFingerprint;\n  solveCaptchas?: boolean;\n  proxies?: BrowserProxy[];\n  extensionPath?: string;\n\n  constructor(\n    useStealth = false,\n    userAgent?: string,\n    viewport?: BrowserViewport,\n    screen?: BrowserScreen,\n    fingerprint?: BrowserFingerprint,\n    solveCaptchas = false,\n    proxies?: BrowserProxy[],\n  ) {\n    this.useStealth = useStealth;\n    this.userAgent = userAgent;\n    this.viewport = viewport;\n    this.screen = screen;\n    this.fingerprint = fingerprint;\n    this.solveCaptchas = solveCaptchas;\n    this.extensionPath = \"/tmp/extensions/\";\n\n    // Validate proxies list items\n    if (proxies !== undefined) {\n      if (!Array.isArray(proxies)) {\n        throw new Error('proxies must be a list');\n      }\n      if (proxies.length > 1) {\n        throw new Error('proxies list length must be limited to 1');\n      }\n    }\n\n    // Set proxies after validation\n    this.proxies = proxies;\n  }\n\n  toMap(): Record<string, any> {\n    const optionMap: Record<string, any> = {};\n    if (process.env.AGENTBAY_BROWSER_BEHAVIOR_SIMULATE) {\n      optionMap['behaviorSimulate'] = (process.env.AGENTBAY_BROWSER_BEHAVIOR_SIMULATE !== \"0\") as boolean;\n    }\n    if (this.useStealth !== undefined) {\n      optionMap['useStealth'] = this.useStealth;\n    }\n    if (this.userAgent !== undefined) {\n      optionMap['userAgent'] = this.userAgent;\n    }\n    if (this.viewport !== undefined) {\n      optionMap['viewport'] = { width: this.viewport.width, height: this.viewport.height };\n    }\n    if (this.screen !== undefined) {\n      optionMap['screen'] = { width: this.screen.width, height: this.screen.height };\n    }\n    if (this.fingerprint !== undefined) {\n      const fp: Record<string, any> = {};\n      if (this.fingerprint.devices) fp['devices'] = this.fingerprint.devices;\n      if (this.fingerprint.operatingSystems) fp['operatingSystems'] = this.fingerprint.operatingSystems;\n      if (this.fingerprint.locales) fp['locales'] = this.fingerprint.locales;\n      optionMap['fingerprint'] = fp;\n    }\n    if (this.solveCaptchas !== undefined) {\n      optionMap['solveCaptchas'] = this.solveCaptchas;\n    }\n    if (this.proxies !== undefined) {\n      optionMap['proxies'] = this.proxies.map(proxy => proxy.toMap());\n    }\n    if (this.extensionPath !== undefined) {\n      optionMap['extensionPath'] = this.extensionPath;\n    }\n    return optionMap;\n  }\n\n  fromMap(m: Record<string, any> | null | undefined): BrowserOptionClass {\n    const map = m || {};\n    if (map.useStealth !== undefined) {\n      this.useStealth = map.useStealth;\n    } else {\n      this.useStealth = false;\n    }\n    if (map.userAgent !== undefined) {\n      this.userAgent = map.userAgent;\n    }\n    if (map.viewport !== undefined) {\n      this.viewport = { width: map.viewport.width, height: map.viewport.height };\n    }\n    if (map.screen !== undefined) {\n      this.screen = { width: map.screen.width, height: map.screen.height };\n    }\n    if (map.fingerprint !== undefined) {\n      const fp: BrowserFingerprint = {};\n      if (map.fingerprint.devices) fp.devices = map.fingerprint.devices;\n      if (map.fingerprint.operatingSystems) fp.operatingSystems = map.fingerprint.operatingSystems;\n      if (map.fingerprint.locales) fp.locales = map.fingerprint.locales;\n      this.fingerprint = fp;\n    }\n    if (map.solveCaptchas !== undefined) {\n      this.solveCaptchas = map.solveCaptchas;\n    }\n    if (map.proxies !== undefined) {\n      const proxyList = map.proxies;\n      if (proxyList.length > 1) {\n        throw new Error('proxies list length must be limited to 1');\n      }\n      this.proxies = proxyList.map((proxyData: any) => {\n        // If it's already a BrowserProxyClass instance, return it\n        if (proxyData instanceof BrowserProxyClass) {\n          return proxyData;\n        }\n        // Otherwise, convert from map\n        return BrowserProxyClass.fromMap(proxyData);\n      }).filter(Boolean) as BrowserProxy[];\n    }\n    if (map.extensionPath !== undefined) {\n      this.extensionPath = map.extensionPath;\n    }\n    return this;\n  }\n}\n\nexport class Browser {\n  private session: Session;\n  private _endpointUrl: string | null = null;\n  private _initialized = false;\n  private _option: BrowserOptionClass | null = null;\n  public agent: BrowserAgent;\n\n  constructor(session: Session) {\n    this.session = session;\n    this.agent = new BrowserAgent(this.session, this);\n  }\n\n  /**\n   * Initialize the browser instance with the given options.\n   * Returns true if successful, false otherwise.\n   */\n  initialize(option: BrowserOptionClass | BrowserOption): boolean {\n    if (this.isInitialized()) {\n      return true;\n    }\n\n    try {\n      // Use direct API call to initialize browser\n      const request = new InitBrowserRequest();\n      request.authorization = `Bearer ${this.session.getAPIKey()}`;\n      request.persistentPath = BROWSER_DATA_PATH;\n      request.sessionId = this.session.getSessionId();\n\n      // Ensure option is a BrowserOptionClass instance\n      let browserOption: BrowserOptionClass;\n      if (option instanceof BrowserOptionClass) {\n        browserOption = option;\n      } else {\n        // Convert plain object to BrowserOptionClass instance\n        browserOption = new BrowserOptionClass();\n        browserOption.fromMap(option as Record<string, any>);\n      }\n\n      // Map BrowserOption to API BrowserOption payload\n      const browserOptionMap = browserOption.toMap();\n\n      // Enable record if session.enableBrowserReplay is true\n      if (this.session.enableBrowserReplay) {\n        browserOptionMap['enableRecord'] = true;\n      }\n\n      if (Object.keys(browserOptionMap).length > 0) {\n        request.browserOption = browserOptionMap;\n      }\n\n      const response = this.session.getClient().initBrowserSync(request);\n      log(`Response from init_browser data:`, response.body?.data);\n\n      const success = response.body?.data?.port !== null && response.body?.data?.port !== undefined;\n      if (success) {\n        this._initialized = true;\n        this._option = browserOption;\n        log(\"Browser instance was successfully initialized.\");\n      }\n\n      return success;\n    } catch (error) {\n      console.error(\"Failed to initialize browser instance:\", error);\n      this._initialized = false;\n      this._endpointUrl = null;\n      this._option = null;\n      return false;\n    }\n  }\n\n  /**\n   * Initialize the browser instance with the given options asynchronously.\n   * Returns true if successful, false otherwise.\n   */\n  async initializeAsync(option: BrowserOptionClass | BrowserOption): Promise<boolean> {\n    if (this.isInitialized()) {\n      return true;\n    }\n\n    try {\n      // Use direct API call to initialize browser\n      const request = new InitBrowserRequest();\n      request.authorization = `Bearer ${this.session.getAPIKey()}`;\n      request.persistentPath = BROWSER_DATA_PATH;\n      request.sessionId = this.session.getSessionId();\n\n      // Ensure option is a BrowserOptionClass instance\n      let browserOption: BrowserOptionClass;\n      if (option instanceof BrowserOptionClass) {\n        browserOption = option;\n      } else {\n        // Convert plain object to BrowserOptionClass instance\n        browserOption = new BrowserOptionClass();\n        browserOption.fromMap(option as Record<string, any>);\n      }\n\n      // Map BrowserOption to API BrowserOption payload\n      const browserOptionMap = browserOption.toMap();\n\n      // Enable record if session.enableBrowserReplay is true\n      if (this.session.enableBrowserReplay) {\n        browserOptionMap['enableRecord'] = true;\n      }\n\n      if (Object.keys(browserOptionMap).length > 0) {\n        request.browserOption = browserOptionMap;\n      }\n\n      const response = await this.session.getClient().initBrowser(request);\n      log(`Response from init_browser data:`, response.body?.data);\n\n      const success = response.body?.data?.port !== null && response.body?.data?.port !== undefined;\n      if (success) {\n        this._initialized = true;\n        this._option = browserOption;\n        log(\"Browser instance successfully initialized\");\n      }\n\n      return success;\n    } catch (error) {\n      console.error(\"Failed to initialize browser instance:\", error);\n      this._initialized = false;\n      this._endpointUrl = null;\n      this._option = null;\n      return false;\n    }\n  }\n\n  /**\n   * Returns the endpoint URL if the browser is initialized, otherwise throws an exception.\n   * When initialized, always fetches the latest CDP url from session.getLink().\n   */\n  async getEndpointUrl(): Promise<string> {\n    if (!this.isInitialized()) {\n      throw new BrowserError(\"Browser is not initialized. Cannot access endpoint URL.\");\n    }\n\n    try {\n      const linkResult = await this.session.getLink();\n      this._endpointUrl = linkResult.data;\n      return this._endpointUrl!;\n    } catch (error) {\n      throw new BrowserError(`Failed to get endpoint URL from session: ${error}`);\n    }\n  }\n\n  /**\n   * Returns the current BrowserOption used to initialize the browser, or null if not set.\n   */\n  getOption(): BrowserOptionClass | null {\n    return this._option;\n  }\n\n  /**\n   * Returns true if the browser was initialized, false otherwise.\n   */\n  isInitialized(): boolean {\n    return this._initialized;\n  }\n\n  /**\n   * Stop the browser instance, internal use only.\n   */\n  private _stopBrowser(): void {\n    if (this.isInitialized()) {\n      this.session.callMcpTool(\"stopChrome\", {});\n    } else {\n      throw new BrowserError(\"Browser is not initialized. Cannot stop browser.\");\n    }\n  }\n}\n","import { Session } from '../session';\nimport { Browser } from './browser';\nimport { BrowserError } from '../exceptions';\nimport { log } from '../utils/logger';\n\n// Options interfaces\nexport interface ActOptions {\n  action: string;\n  timeoutMS?: number;\n  iframes?: boolean;\n  domSettleTimeoutMS?: number;\n}\n\nexport interface ObserveOptions {\n  instruction: string;\n  returnActions?: number;\n  iframes?: boolean;\n  domSettleTimeoutMS?: number;\n}\n\nexport interface ExtractOptions<T = any> {\n  instruction: string;\n  schema: new (...args: any[]) => T;\n  use_text_extract: boolean;\n  selector?: string;\n  iframe?: boolean;\n  domSettleTimeoutsMS?: number;\n}\n\n// Result classes\nexport class ActResult {\n  success: boolean;\n  message: string;\n  action: string;\n\n  constructor(success: boolean, message: string, action: string) {\n    this.success = success;\n    this.message = message;\n    this.action = action;\n  }\n}\n\nexport class ObserveResult {\n  selector: string;\n  description: string;\n  method: string;\n  args: Record<string, any>;\n\n  constructor(selector: string, description: string, method: string, args: Record<string, any>) {\n    this.selector = selector;\n    this.description = description;\n    this.method = method;\n    this.args = args;\n  }\n}\n\nexport class BrowserAgent {\n  private session: Session;\n  private browser: Browser;\n\n  constructor(session: Session, browser: Browser) {\n    this.session = session;\n    this.browser = browser;\n  }\n\n  /**\n   * Perform an action on the given Playwright Page object, using ActOptions to configure behavior.\n   * Returns the result of the action.\n   */\n  async act(options: ActOptions, page: any): Promise<ActResult> {\n    if (!this.browser.isInitialized()) {\n      throw new BrowserError(\"Browser must be initialized before calling act.\");\n    }\n\n    try {\n      const [pageIndex, contextIndex] = await this._getPageAndContextIndexAsync(page);\n      log(`Acting on page: ${page}, pageIndex: ${pageIndex}, contextIndex: ${contextIndex}`);\n\n      const args: Record<string, any> = {\n        context_id: contextIndex,\n        page_id: pageIndex,\n        action: options.action,\n      };\n\n      if (options.timeoutMS !== undefined) {\n        args.timeout_ms = options.timeoutMS;\n      }\n      if (options.iframes !== undefined) {\n        args.iframes = options.iframes;\n      }\n      if (options.domSettleTimeoutMS !== undefined) {\n        args.dom_settle_timeout_ms = options.domSettleTimeoutMS;\n      }\n\n      const response = await this._callMcpTool(\"page_use_act\", args);\n      \n      if (response.success) {\n        log(`Response from CallMcpTool - page_use_act:`, response.data);\n        \n        let data: any;\n        if (typeof response.data === 'string') {\n          data = JSON.parse(response.data);\n        } else {\n          data = response.data;\n        }\n\n        const success = data.success || false;\n        const message = data.message || \"\";\n        const action = data.action || \"\";\n\n        return new ActResult(success, message, action);\n      } else {\n        return new ActResult(false, response.errorMessage, \"\");\n      }\n    } catch (error) {\n      throw new BrowserError(`Failed to get page/context index: ${error}`);\n    }\n  }\n\n  /**\n   * Async version of act method for performing actions on the given Playwright Page object.\n   */\n  async actAsync(options: ActOptions, page: any): Promise<ActResult> {\n    return this.act(options, page);\n  }\n\n  /**\n   * Observe elements or state on the given Playwright Page object.\n   * Returns a tuple containing (success, results).\n   */\n  async observe(options: ObserveOptions, page: any): Promise<[boolean, ObserveResult[]]> {\n    if (!this.browser.isInitialized()) {\n      throw new BrowserError(\"Browser must be initialized before calling observe.\");\n    }\n\n    try {\n      const [pageIndex, contextIndex] = await this._getPageAndContextIndexAsync(page);\n      log(`Observing page: ${page}, pageIndex: ${pageIndex}, contextIndex: ${contextIndex}`);\n\n      const args: Record<string, any> = {\n        context_id: contextIndex,\n        page_id: pageIndex,\n        instruction: options.instruction,\n      };\n\n      if (options.returnActions !== undefined) {\n        args.return_actions = options.returnActions;\n      }\n      if (options.iframes !== undefined) {\n        args.iframes = options.iframes;\n      }\n      if (options.domSettleTimeoutMS !== undefined) {\n        args.dom_settle_timeout_ms = options.domSettleTimeoutMS;\n      }\n\n      const response = await this._callMcpTool(\"page_use_observe\", args);\n      log(\"Response from CallMcpTool - page_use_observe data:\", response.data);\n\n      if (response.success) {\n        log(`Response from CallMcpTool - page_use_observe:`, response.data);\n        \n        let data: any;\n        if (typeof response.data === 'string') {\n          data = JSON.parse(response.data);\n        } else {\n          throw new BrowserError(\"Observe response data is not a json!!!\");\n        }\n\n        const success = data.success || false;\n        if (!success) {\n          return [false, []];\n        }\n\n        const results: ObserveResult[] = [];\n        const observeResults = JSON.parse(data.observe_result || \"\");\n        log(\"observeResults =\", observeResults);\n\n        for (const item of observeResults) {\n          const selector = item.selector || \"\";\n          const description = item.description || \"\";\n          const method = item.method || \"\";\n          const itemArgs = item.arguments || {};\n          results.push(new ObserveResult(selector, description, method, itemArgs));\n        }\n\n        return [success, results];\n      } else {\n        log(`Response from CallMcpTool - page_use_observe:`, response.errorMessage);\n        return [false, []];\n      }\n    } catch (error) {\n      throw new BrowserError(`Failed to get page/context index: ${error}`);\n    }\n  }\n\n  /**\n   * Async version of observe method.\n   */\n  async observeAsync(options: ObserveOptions, page: any): Promise<[boolean, ObserveResult[]]> {\n    return this.observe(options, page);\n  }\n\n  /**\n   * Extract information from the given Playwright Page object.\n   */\n  async extract<T>(options: ExtractOptions<T>, page: any): Promise<[boolean, T[]]> {\n    if (!this.browser.isInitialized()) {\n      throw new BrowserError(\"Browser must be initialized before calling extract.\");\n    }\n\n    try {\n      const [pageIndex, contextIndex] = await this._getPageAndContextIndexAsync(page);\n      \n      // Create a temporary instance to get the schema\n      const tempInstance = new options.schema();\n      const schema = (tempInstance as any).constructor.name; // This is a simplified approach\n\n      const args: Record<string, any> = {\n        context_id: contextIndex,\n        page_id: pageIndex,\n        instruction: options.instruction,\n        schema: `schema: ${JSON.stringify(schema)}` // Simplified schema handling\n      };\n\n      log(`Extracting from page: ${page}, pageIndex: ${pageIndex}, contextIndex: ${contextIndex}, args:`, args);\n\n      if (options.selector !== undefined) {\n        args.selector = options.selector;\n      }\n      if (options.iframe !== undefined) {\n        args.iframe = options.iframe;\n      }\n      if (options.domSettleTimeoutsMS !== undefined) {\n        args.dom_settle_timeouts_ms = options.domSettleTimeoutsMS;\n      }\n\n      const response = await this._callMcpTool(\"page_use_extract\", args);\n      log(\"Response from CallMcpTool - page_use_extract data:\", response.data);\n\n      if (response.success) {\n        log(`Response from CallMcpTool - page_use_extract:`, response.data);\n        \n        let data: any;\n        if (typeof response.data === 'string') {\n          data = JSON.parse(response.data);\n        } else {\n          data = response.data;\n        }\n\n        log(\"extract data =\", data);\n        const success = data.success || false;\n        const extractObjs: T[] = [];\n\n        if (success) {\n          const extractResults = JSON.parse(data.extract_result || \"\");\n          for (const extractResult of extractResults) {\n            log(\"extractResult =\", extractResult);\n            // Create instance from the constructor - simplified approach\n            const instance = extractResult as T;\n            extractObjs.push(instance);\n          }\n        } else {\n          const extractResults = data.extract_result || \"\";\n          log(\"Extract failed due to:\", extractResults);\n        }\n\n        return [success, extractObjs];\n      } else {\n        log(`Response from CallMcpTool - page_use_extract:`, response.errorMessage);\n        return [false, []];\n      }\n    } catch (error) {\n      throw new BrowserError(`Failed to get page/context index: ${error}`);\n    }\n  }\n\n  /**\n   * Async version of extract method.\n   */\n  async extractAsync<T>(options: ExtractOptions<T>, page: any): Promise<[boolean, T[]]> {\n    return this.extract<T>(options, page);\n  }\n\n  private _getPageAndContextIndex(page: any): [string, number] {\n    if (!page) {\n      throw new BrowserError(\"Page is null\");\n    }\n\n    try {\n      // Fallback implementation - prefer async version where CDP is available\n      const pageIndex = \"default-page-id\";\n      const contextIndex = 0;\n      return [pageIndex, contextIndex];\n    } catch (error) {\n      throw new BrowserError(`Failed to get page/context index: ${error}`);\n    }\n  }\n\n  private async _getPageAndContextIndexAsync(page: any): Promise<[string, number]> {\n    if (!page) {\n      throw new BrowserError(\"Page is null\");\n    }\n\n    // Try to use Playwright CDP if available\n    try {\n      if (page.context && typeof page.context === 'function') {\n        const context = page.context();\n        if (context && typeof context.newCDPSession === 'function') {\n          const cdpSession = await context.newCDPSession(page);\n          const targetInfo = await cdpSession.send('Target.getTargetInfo');\n          const pageIndex = (targetInfo && targetInfo.targetInfo && targetInfo.targetInfo.targetId) ? targetInfo.targetInfo.targetId : 'default-page-id';\n          if (typeof cdpSession.detach === 'function') {\n            await cdpSession.detach();\n          }\n\n          let contextIndex = 0;\n          if (typeof context.browser === 'function') {\n            const browserObj = context.browser();\n            if (browserObj && typeof browserObj.contexts === 'function') {\n              const contexts = browserObj.contexts();\n              const idx = contexts.indexOf(context);\n              if (idx >= 0) {\n                contextIndex = idx;\n              }\n            }\n          }\n          return [pageIndex, contextIndex];\n        }\n      }\n    } catch (error) {\n      log(`CDP targetId retrieval failed, fallback to defaults: ${error}`);\n    }\n\n    // Fallback to defaults if CDP is not available\n    const pageIndex = \"default-page-id\";\n    const contextIndex = 0;\n    return [pageIndex, contextIndex];\n  }\n\n  private async _callMcpTool(toolName: string, args: Record<string, any>) {\n    return this.session.callMcpTool(toolName, args);\n  }\n} ","export { Code } from \"./code\";\nexport type { CodeExecutionResult } from \"../types/api-response\"; ","import {\n  CodeExecutionResult,\n} from \"../types/api-response\";\n\n/**\n * Handles code execution operations in the AgentBay cloud environment.\n */\nexport class Code {\n  private session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  };\n\n  /**\n   * Initialize a Code object.\n   *\n   * @param session - The Session instance that this Code belongs to.\n   */\n  constructor(session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  }) {\n    this.session = session;\n  }\n\n  /**\n   * Execute code in the specified language with a timeout.\n   * Corresponds to Python's run_code() method\n   *\n   * @param code - The code to execute.\n   * @param language - The programming language of the code. Must be either 'python' or 'javascript'.\n   * @param timeoutS - The timeout for the code execution in seconds. Default is 300s.\n   * @returns CodeExecutionResult with code execution output and requestId\n   * @throws Error if an unsupported language is specified.\n   */\n  async runCode(\n    code: string,\n    language: string,\n    timeoutS = 300\n  ): Promise<CodeExecutionResult> {\n    try {\n      // Validate language\n      if (language !== \"python\" && language !== \"javascript\") {\n        return {\n          requestId: \"\",\n          success: false,\n          result: \"\",\n          errorMessage: `Unsupported language: ${language}. Supported languages are 'python' and 'javascript'`,\n        };\n      }\n\n      const args = {\n        code,\n        language,\n        timeout_s: timeoutS,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"run_code\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          result: \"\",\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        result: response.data || \"\",\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        result: \"\",\n        errorMessage: `Failed to run code: ${error}`,\n      };\n    }\n  }\n} ","import { Session } from \"../session\";\nimport {\n  CommandResult,\n} from \"../types/api-response\";\n\n\n/**\n * Handles command execution operations in the AgentBay cloud environment.\n */\nexport class Command {\n  private session: Session;\n\n  /**\n   * Initialize a Command object.\n   *\n   * @param session - The Session instance that this Command belongs to.\n   */\n  constructor(session: Session) {\n    this.session = session;\n  }\n\n  /**\n   * Sanitizes error messages to remove sensitive information like API keys.\n   *\n   * @param error - The error to sanitize\n   * @returns The sanitized error\n   */\n  private sanitizeError(error: any): any {\n    if (!error) {\n      return error;\n    }\n\n    const errorString = String(error);\n    return errorString.replace(/Bearer\\s+[^\\s]+/g, \"Bearer [REDACTED]\");\n  }\n\n  /**\n   * Execute a command in the session environment.\n   * Corresponds to Python's execute_command() method\n   *\n   * @param command - The command to execute\n   * @param timeoutMs - The timeout in milliseconds. Default is 1000ms.\n   * @returns CommandResult with command output and requestId\n   * @throws APIError if the operation fails.\n   */\n  async executeCommand(\n    command: string,\n    timeoutMs = 1000\n  ): Promise<CommandResult> {\n    try {\n      const args = {\n        command,\n        timeout_ms: timeoutMs,\n      };\n      const result = await this.session.callMcpTool(\"shell\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        output: result.data,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        output: \"\",\n        errorMessage: `Failed to execute command: ${error}`,\n      };\n    }\n  }\n}\n","import { Client } from \"./api/client\";\nimport { GetContextInfoRequest, SyncContextRequest } from \"./api/models/model\";\nimport { ApiResponse, extractRequestId } from \"./types/api-response\";\nimport { log, logError } from \"./utils/logger\";\n\nexport interface ContextStatusData {\n  contextId: string;\n  path: string;\n  errorMessage: string;\n  status: string;\n  startTime: number;\n  finishTime: number;\n  taskType: string;\n}\n\nexport interface ContextStatusItem {\n  type: string;\n  data: string;\n}\n\nexport interface ContextInfoResult extends ApiResponse {\n  contextStatusData: ContextStatusData[];\n}\n\nexport interface ContextSyncResult extends ApiResponse {\n  success: boolean;\n}\n\nexport type SyncCallback = (success: boolean) => void;\n\nexport interface SessionInterface {\n  getAPIKey(): string;\n  getClient(): Client;\n  getSessionId(): string;\n}\n\nexport class ContextManager {\n  private session: SessionInterface;\n\n  constructor(session: SessionInterface) {\n    this.session = session;\n  }\n\n  async info(): Promise<ContextInfoResult> {\n    return this.infoWithParams();\n  }\n\n  async infoWithParams(\n    contextId?: string,\n    path?: string,\n    taskType?: string\n  ): Promise<ContextInfoResult> {\n    const request = new GetContextInfoRequest({\n      authorization: `Bearer ${this.session.getAPIKey()}`,\n      sessionId: this.session.getSessionId(),\n    });\n\n    // Set optional parameters if provided\n    if (contextId) {\n      request.contextId = contextId;\n    }\n    if (path) {\n      request.path = path;\n    }\n    if (taskType) {\n      request.taskType = taskType;\n    }\n\n    // Log API request (matching Go version format)\n    log(\"API Call: GetContextInfo\");\n    let requestLog = `Request: SessionId=${request.sessionId}`;\n    if (request.contextId) {\n      requestLog += `, ContextId=${request.contextId}`;\n    }\n    if (request.path) {\n      requestLog += `, Path=${request.path}`;\n    }\n    if (request.taskType) {\n      requestLog += `, TaskType=${request.taskType}`;\n    }\n    log(requestLog);\n\n    try {\n      const response = await this.session.getClient().getContextInfo(request);\n\n      // Extract RequestID\n      const requestId = extractRequestId(response) || \"\";\n\n      if (response?.body) {\n        log(\"Response from GetContextInfo:\", response.body);\n      }\n\n      // Parse the context status data\n      const contextStatusData: ContextStatusData[] = [];\n      if (response?.body?.data?.contextStatus) {\n        try {\n          // First, parse the outer array\n          const contextStatusStr = response.body.data.contextStatus;\n          const statusItems: ContextStatusItem[] = JSON.parse(contextStatusStr);\n          \n          // Process each item in the array\n          for (const item of statusItems) {\n            if (item.type === \"data\") {\n              // Parse the inner data string\n              const dataItems: ContextStatusData[] = JSON.parse(item.data);\n              contextStatusData.push(...dataItems);\n            }\n          }\n        } catch (error) {\n          logError(\"Error parsing context status:\", error);\n        }\n      }\n\n      return {\n        requestId,\n        contextStatusData,\n      };\n    } catch (error) {\n      logError(\"Error calling GetContextInfo:\", error);\n      throw new Error(`Failed to get context info: ${error}`);\n    }\n  }\n\n  async sync(\n    contextId?: string,\n    path?: string,\n    mode?: string,\n    callback?: SyncCallback,\n    maxRetries: number = 150,\n    retryInterval: number = 1500\n  ): Promise<ContextSyncResult> {\n    const request = new SyncContextRequest({\n      authorization: `Bearer ${this.session.getAPIKey()}`,\n      sessionId: this.session.getSessionId(),\n    });\n\n    // Set optional parameters if provided\n    if (contextId) {\n      request.contextId = contextId;\n    }\n    if (path) {\n      request.path = path;\n    }\n    if (mode) {\n      request.mode = mode;\n    }\n\n    // Log API request (matching Go version format)\n    log(\"API Call: SyncContext\");\n    let requestLog = `Request: SessionId=${request.sessionId}`;\n    if (request.contextId) {\n      requestLog += `, ContextId=${request.contextId}`;\n    }\n    if (request.path) {\n      requestLog += `, Path=${request.path}`;\n    }\n    if (request.mode) {\n      requestLog += `, Mode=${request.mode}`;\n    }\n    log(requestLog);\n\n    try {\n      const response = await this.session.getClient().syncContext(request);\n\n      // Extract RequestID\n      const requestId = extractRequestId(response) || \"\";\n\n      if (response?.body) {\n        log(\"Response from SyncContext:\", response.body);\n      }\n\n      let success = false;\n      if (response?.body?.success !== undefined) {\n        success = response.body.success;\n      }\n\n      // If callback is provided, start polling in background (async mode)\n      if (callback && success) {\n        // Start polling in background without blocking\n        this.pollForCompletion(callback, contextId, path, maxRetries, retryInterval)\n          .catch((error) => {\n            logError(\"Error in background polling:\", error);\n            callback(false);\n          });\n        return {\n          requestId,\n          success,\n        };\n      }\n\n      // If no callback, wait for completion (sync mode)\n      if (success) {\n        const finalSuccess = await this.pollForCompletionAsync(\n          contextId,\n          path,\n          maxRetries,\n          retryInterval\n        );\n        return {\n          requestId,\n          success: finalSuccess,\n        };\n      }\n\n      return {\n        requestId,\n        success,\n      };\n    } catch (error) {\n      logError(\"Error calling SyncContext:\", error);\n      throw new Error(`Failed to sync context: ${error}`);\n    }\n  }\n\n  /**\n   * Polls the info interface to check if sync is completed and calls callback.\n   */\n  private async pollForCompletion(\n    callback: SyncCallback,\n    contextId?: string,\n    path?: string,\n    maxRetries: number = 150,\n    retryInterval: number = 1500\n  ): Promise<void> {\n    for (let retry = 0; retry < maxRetries; retry++) {\n      try {\n        // Get context status data\n        const infoResult = await this.infoWithParams(contextId, path);\n\n        // Check if all sync tasks are completed\n        let allCompleted = true;\n        let hasFailure = false;\n        let hasSyncTasks = false;\n\n        for (const item of infoResult.contextStatusData) {\n          // We only care about sync tasks (upload/download)\n          if (item.taskType !== \"upload\" && item.taskType !== \"download\") {\n            continue;\n          }\n\n          hasSyncTasks = true;\n          log(`Sync task ${item.contextId} status: ${item.status}, path: ${item.path}`);\n\n          if (item.status !== \"Success\" && item.status !== \"Failed\") {\n            allCompleted = false;\n            break;\n          }\n\n          if (item.status === \"Failed\") {\n            hasFailure = true;\n            logError(`Sync failed for context ${item.contextId}: ${item.errorMessage}`);\n          }\n        }\n\n        if (allCompleted || !hasSyncTasks) {\n          // All tasks completed or no sync tasks found\n          if (hasFailure) {\n            log(\"Context sync completed with failures\");\n            callback(false);\n          } else if (hasSyncTasks) {\n            log(\"Context sync completed successfully\");\n            callback(true);\n          } else {\n            log(\"No sync tasks found\");\n            callback(true);\n          }\n          return; // Exit the function immediately after calling callback\n        }\n\n        log(`Waiting for context sync to complete, attempt ${retry + 1}/${maxRetries}`);\n        await this.sleep(retryInterval);\n      } catch (error) {\n        logError(`Error checking context status on attempt ${retry + 1}:`, error);\n        await this.sleep(retryInterval);\n      }\n    }\n\n    // If we've exhausted all retries, call callback with failure\n    logError(`Context sync polling timed out after ${maxRetries} attempts`);\n    callback(false);\n  }\n\n  /**\n   * Async version of polling for sync completion.\n   */\n  private async pollForCompletionAsync(\n    contextId?: string,\n    path?: string,\n    maxRetries: number = 150,\n    retryInterval: number = 1500\n  ): Promise<boolean> {\n    for (let retry = 0; retry < maxRetries; retry++) {\n      try {\n        // Get context status data\n        const infoResult = await this.infoWithParams(contextId, path);\n\n        // Check if all sync tasks are completed\n        let allCompleted = true;\n        let hasFailure = false;\n        let hasSyncTasks = false;\n\n        for (const item of infoResult.contextStatusData) {\n          // We only care about sync tasks (upload/download)\n          if (item.taskType !== \"upload\" && item.taskType !== \"download\") {\n            continue;\n          }\n\n          hasSyncTasks = true;\n          log(`Sync task ${item.contextId} status: ${item.status}, path: ${item.path}`);\n\n          if (item.status !== \"Success\" && item.status !== \"Failed\") {\n            allCompleted = false;\n            break;\n          }\n\n          if (item.status === \"Failed\") {\n            hasFailure = true;\n            logError(`Sync failed for context ${item.contextId}: ${item.errorMessage}`);\n          }\n        }\n\n        if (allCompleted || !hasSyncTasks) {\n          // All tasks completed or no sync tasks found\n          if (hasFailure) {\n            log(\"Context sync completed with failures\");\n            return false;\n          } else if (hasSyncTasks) {\n            log(\"Context sync completed successfully\");\n            return true;\n          } else {\n            log(\"No sync tasks found\");\n            return true;\n          }\n        }\n\n        log(`Waiting for context sync to complete, attempt ${retry + 1}/${maxRetries}`);\n        await this.sleep(retryInterval);\n      } catch (error) {\n        logError(`Error checking context status on attempt ${retry + 1}:`, error);\n        await this.sleep(retryInterval);\n      }\n    }\n\n    // If we've exhausted all retries, return failure\n    logError(`Context sync polling timed out after ${maxRetries} attempts`);\n    return false;\n  }\n\n  /**\n   * Sleep utility function for TypeScript\n   */\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n}\n\nexport function newContextManager(session: SessionInterface): ContextManager {\n  return new ContextManager(session);\n}\n","import {\n  BoolResult,\n  FileInfoResult,\n  DirectoryListResult,\n  FileContentResult,\n  MultipleFileContentResult,\n  FileSearchResult,\n  ApiResponse,\n} from \"../types/api-response\";\n\n// Default chunk size for large file operations (60KB)\nconst DEFAULT_CHUNK_SIZE = 60 * 1024;\n\n/**\n * Represents a single file change event\n */\nexport interface FileChangeEvent {\n  eventType: string; // \"create\", \"modify\", \"delete\"\n  path: string;\n  pathType: string;  // \"file\", \"directory\"\n}\n\n/**\n * Result of file change detection operations\n */\nexport interface FileChangeResult extends ApiResponse {\n  events: FileChangeEvent[];\n  rawData: string;\n}\n\n/**\n * Helper functions for FileChangeEvent\n */\nexport class FileChangeEventHelper {\n  static toString(event: FileChangeEvent): string {\n    return `FileChangeEvent(eventType='${event.eventType}', path='${event.path}', pathType='${event.pathType}')`;\n  }\n\n  static toDict(event: FileChangeEvent): Record<string, string> {\n    return {\n      eventType: event.eventType,\n      path: event.path,\n      pathType: event.pathType,\n    };\n  }\n\n  static fromDict(data: Record<string, any>): FileChangeEvent {\n    return {\n      eventType: data.eventType || \"\",\n      path: data.path || \"\",\n      pathType: data.pathType || \"\",\n    };\n  }\n}\n\n/**\n * Helper functions for FileChangeResult\n */\nexport class FileChangeResultHelper {\n  static hasChanges(result: FileChangeResult): boolean {\n    return result.events.length > 0;\n  }\n\n  static getModifiedFiles(result: FileChangeResult): string[] {\n    return result.events\n      .filter(event => event.eventType === \"modify\" && event.pathType === \"file\")\n      .map(event => event.path);\n  }\n\n  static getCreatedFiles(result: FileChangeResult): string[] {\n    return result.events\n      .filter(event => event.eventType === \"create\" && event.pathType === \"file\")\n      .map(event => event.path);\n  }\n\n  static getDeletedFiles(result: FileChangeResult): string[] {\n    return result.events\n      .filter(event => event.eventType === \"delete\" && event.pathType === \"file\")\n      .map(event => event.path);\n  }\n}\n\n/**\n * FileInfo represents information about a file or directory\n */\nexport interface FileInfo {\n  name: string;\n  path: string;\n  size: number;\n  isDirectory: boolean;\n  modTime: string;\n  mode: string;\n  owner?: string;\n  group?: string;\n}\n\n/**\n * DirectoryEntry represents an entry in a directory listing\n */\nexport interface DirectoryEntry {\n  name: string;\n  isDirectory: boolean;\n}\n\n/**\n * Parse a file info string into a FileInfo object\n *\n * @param fileInfoStr - The file info string to parse\n * @returns A FileInfo object\n */\nfunction parseFileInfo(fileInfoStr: string): FileInfo {\n  const result: FileInfo = {\n    name: \"\",\n    path: \"\",\n    size: 0,\n    isDirectory: false,\n    modTime: \"\",\n    mode: \"\",\n  };\n\n  const lines = fileInfoStr.split(\"\\n\");\n  for (const line of lines) {\n    if (line.includes(\":\")) {\n      const [key, value] = line.split(\":\", 2).map((part) => part.trim());\n\n      switch (key) {\n        case \"name\":\n          result.name = value;\n          break;\n        case \"path\":\n          result.path = value;\n          break;\n        case \"size\":\n          result.size = parseInt(value, 10);\n          break;\n        case \"isDirectory\":\n          result.isDirectory = value === \"true\";\n          break;\n        case \"modTime\":\n          result.modTime = value;\n          break;\n        case \"mode\":\n          result.mode = value;\n          break;\n        case \"owner\":\n          result.owner = value;\n          break;\n        case \"group\":\n          result.group = value;\n          break;\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Parse a directory listing string into an array of DirectoryEntry objects\n *\n * @param text - The directory listing text to parse\n * @returns An array of DirectoryEntry objects\n */\nfunction parseDirectoryListing(text: string): DirectoryEntry[] {\n  const result: DirectoryEntry[] = [];\n  const lines = text.split(\"\\n\");\n\n  for (const line of lines) {\n    const trimmedLine = line.trim();\n    if (trimmedLine === \"\") {\n      continue;\n    }\n\n    if (trimmedLine.startsWith(\"[DIR]\")) {\n      result.push({\n        isDirectory: true,\n        name: trimmedLine.replace(\"[DIR]\", \"\").trim(),\n      });\n    } else if (trimmedLine.startsWith(\"[FILE]\")) {\n      result.push({\n        isDirectory: false,\n        name: trimmedLine.replace(\"[FILE]\", \"\").trim(),\n      });\n    }\n  }\n\n  return result;\n}\n\n/**\n * Handles file operations in the AgentBay cloud environment.\n */\nexport class FileSystem {\n  private session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  };\n\n  /**\n   * Initialize a FileSystem object.\n   *\n   * @param session - The Session instance that this FileSystem belongs to.\n   */\n  constructor(session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  }) {\n    this.session = session;\n  }\n\n  /**\n   * Creates a new directory at the specified path.\n   * Corresponds to Python's create_directory() method\n   *\n   * @param path - Path to the directory to create.\n   * @returns BoolResult with creation result and requestId\n   */\n  async createDirectory(path: string): Promise<BoolResult> {\n    try {\n      const args = {\n        path,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"create_directory\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to create directory: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Edits a file by replacing occurrences of oldText with newText.\n   * Corresponds to Python's edit_file() method\n   *\n   * @param path - Path to the file to edit.\n   * @param edits - Array of edit operations, each containing oldText and newText.\n   * @param dryRun - Optional: If true, preview changes without applying them.\n   * @returns BoolResult with edit result and requestId\n   */\n  async editFile(\n    path: string,\n    edits: Array<{ oldText: string; newText: string }>,\n    dryRun = false\n  ): Promise<BoolResult> {\n    try {\n      const args = {\n        path,\n        edits,\n        dryRun,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"edit_file\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to edit file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Gets information about a file or directory.\n   * Corresponds to Python's get_file_info() method\n   *\n   * @param path - Path to the file or directory to inspect.\n   * @returns FileInfoResult with file info and requestId\n   */\n  async getFileInfo(path: string): Promise<FileInfoResult> {\n    try {\n      const args = {\n        path,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"get_file_info\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          fileInfo: {},\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      // Parse and return the file info\n      if (!result.data) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          fileInfo: {},\n          errorMessage: \"Empty response from get_file_info\",\n        };\n      }\n\n      const fileInfo = parseFileInfo(result.data);\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        fileInfo,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to get file info: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Lists the contents of a directory.\n   * Corresponds to Python's list_directory() method\n   *\n   * @param path - Path to the directory to list.\n   * @returns DirectoryListResult with directory entries and requestId\n   */\n  async listDirectory(path: string): Promise<DirectoryListResult> {\n    try {\n      const args = {\n        path,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"list_directory\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          entries: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      // Parse the text content into directory entries\n      const entries = result.data\n        ? parseDirectoryListing(result.data)\n        : [];\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        entries,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        entries: [],\n        errorMessage: `Failed to list directory: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Moves a file or directory from source to destination.\n   * Corresponds to Python's move_file() method\n   *\n   * @param source - Path to the source file or directory.\n   * @param destination - Path to the destination file or directory.\n   * @returns BoolResult with move result and requestId\n   */\n  async moveFile(source: string, destination: string): Promise<BoolResult> {\n    try {\n      const args = {\n        source,\n        destination,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"move_file\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to move file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Internal method to read a file chunk. Used for chunked file operations.\n   *\n   * @param path - Path to the file to read.\n   * @param offset - Optional: Byte offset to start reading from (0-based).\n   * @param length - Optional: Number of bytes to read. If 0, reads the entire file from offset.\n   * @returns FileContentResult with file content and requestId\n   */\n  private async readFileChunk(\n    path: string,\n    offset = 0,\n    length = 0\n  ): Promise<FileContentResult> {\n    try {\n      const args: any = {\n        path,\n      };\n\n      if (offset > 0) {\n        args.offset = offset;\n      }\n\n      if (length > 0) {\n        args.length = length;\n      }\n\n      const result = await this.session.callMcpTool(\n        \"read_file\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          content: \"\",\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        content: result.data || \"\",\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to read file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Reads the content of multiple files.\n   * Corresponds to Python's read_multiple_files() method\n   *\n   * @param paths - Array of file paths to read.\n   * @returns MultipleFileContentResult with file contents and requestId\n   */\n  async readMultipleFiles(paths: string[]): Promise<MultipleFileContentResult> {\n    try {\n      const args = {\n        paths,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"read_multiple_files\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          contents: {},\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      const fileContents: Record<string, string> = {};\n\n      if (result.data) {\n        // Parse the response into a map of file paths to contents\n        const lines = result.data.split(\"\\n\");\n        let currentPath = \"\";\n        let currentContent: string[] = [];\n\n        for (const line of lines) {\n          // Check if this line contains a file path (ends with a colon)\n          const colonIndex = line.indexOf(\":\");\n          if (\n            colonIndex > 0 &&\n            currentPath === \"\" &&\n            !line.substring(0, colonIndex).includes(\" \")\n          ) {\n            // Extract path (everything before the first colon)\n            const path = line.substring(0, colonIndex).trim();\n\n            // Start collecting content (everything after the colon)\n            currentPath = path;\n\n            // If there's content on the same line after the colon, add it\n            if (line.length > colonIndex + 1) {\n              const contentStart = line.substring(colonIndex + 1).trim();\n              if (contentStart) {\n                currentContent.push(contentStart);\n              }\n            }\n          } else if (line === \"---\") {\n            // Save the current file content\n            if (currentPath) {\n              fileContents[currentPath] = currentContent.join(\"\\n\");\n              currentPath = \"\";\n              currentContent = [];\n            }\n          } else if (currentPath) {\n            // If we're collecting content for a path, add this line\n            currentContent.push(line);\n          }\n        }\n\n        // Save the last file content if exists\n        if (currentPath) {\n          fileContents[currentPath] = currentContent.join(\"\\n\");\n        }\n\n        // Trim trailing newlines from file contents to match expected test values\n        for (const path in fileContents) {\n          fileContents[path] = fileContents[path].replace(/\\n+$/, \"\");\n        }\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        contents: fileContents,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        contents: {},\n        errorMessage: `Failed to read multiple files: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Searches for files in a directory that match a pattern.\n   * Corresponds to Python's search_files() method\n   *\n   * @param path - Path to the directory to search in.\n   * @param pattern - Pattern to search for. Supports glob patterns.\n   * @param excludePatterns - Optional: Array of patterns to exclude.\n   * @returns FileSearchResult with search results and requestId\n   */\n  async searchFiles(\n    path: string,\n    pattern: string,\n    excludePatterns: string[] = []\n  ): Promise<FileSearchResult> {\n    try {\n      const args: any = {\n        path,\n        pattern,\n      };\n\n      if (excludePatterns.length > 0) {\n        args.excludePatterns = excludePatterns;\n      }\n\n      const result = await this.session.callMcpTool(\n        \"search_files\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          matches: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      // Parse the text content into search results\n      let searchResults: string[] = [];\n      if (result.data) {\n        // Split by newlines and filter out empty lines\n        searchResults = result.data\n          .split(\"\\n\")\n          .map((line) => line.trim())\n          .filter((line) => line !== \"\");\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        matches: searchResults,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        matches: [],\n        errorMessage: `Failed to search files: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Internal method to write a file chunk. Used for chunked file operations.\n   *\n   * @param path - Path to the file to write.\n   * @param content - Content to write to the file.\n   * @param mode - Optional: Write mode. One of \"overwrite\", \"append\", or \"create_new\". Default is \"overwrite\".\n   * @returns BoolResult with write result and requestId\n   */\n  private async writeFileChunk(\n    path: string,\n    content: string,\n    mode = \"overwrite\"\n  ): Promise<BoolResult> {\n    try {\n      // Validate mode\n      const validModes = [\"overwrite\", \"append\", \"create_new\"];\n      if (!validModes.includes(mode)) {\n        return {\n          requestId: \"\",\n          success: false,\n          errorMessage: `Invalid mode: ${mode}. Must be one of ${validModes.join(\n            \", \"\n          )}`,\n        };\n      }\n\n      const args = {\n        path,\n        content,\n        mode,\n      };\n\n      const result = await this.session.callMcpTool(\n        \"write_file\",\n        args\n      );\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to write file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Reads the contents of a file. Automatically handles large files by chunking.\n   *\n   * @param path - Path to the file to read.\n   * @returns FileContentResult with complete file content and requestId\n   */\n  async readFile(\n    path: string\n  ): Promise<FileContentResult> {\n    const chunkSize = DEFAULT_CHUNK_SIZE;\n    try {\n      // First get the file info\n      const fileInfoResult = await this.getFileInfo(path);\n\n      if (!fileInfoResult.success) {\n        return {\n          requestId: fileInfoResult.requestId,\n          success: false,\n          content: \"\",\n          errorMessage: fileInfoResult.errorMessage,\n        };\n      }\n\n      // Check if file exists and is a file (not a directory)\n      if (!fileInfoResult.fileInfo || fileInfoResult.fileInfo.isDirectory) {\n        return {\n          requestId: fileInfoResult.requestId,\n          success: false,\n          content: \"\",\n          errorMessage: `Path does not exist or is a directory: ${path}`,\n        };\n      }\n\n      // Get size from the fileInfo object\n      const fileSize = fileInfoResult.fileInfo.size || 0;\n\n      if (fileSize === 0) {\n        return {\n          requestId: fileInfoResult.requestId,\n          success: true,\n          content: \"\",\n        };\n      }\n\n      // Read the file in chunks\n      let result = \"\";\n      let offset = 0;\n      let chunkCount = 0;\n\n      while (offset < fileSize) {\n        // Calculate how much to read in this chunk\n        let length = chunkSize;\n        if (offset + length > fileSize) {\n          length = fileSize - offset;\n        }\n\n        try {\n          // Read the chunk\n          const chunkResult = await this.readFileChunk(path, offset, length);\n\n          if (!chunkResult.success) {\n            return chunkResult; // Return the error\n          }\n\n          // Extract the actual content from the response\n          result += chunkResult.content;\n\n          // Move to the next chunk\n          offset += length;\n          chunkCount++;\n        } catch (error) {\n          return {\n            requestId: fileInfoResult.requestId,\n            success: false,\n            content: \"\",\n            errorMessage: `Error reading chunk at offset ${offset}: ${error}`,\n          };\n        }\n      }\n\n      return {\n        requestId: fileInfoResult.requestId,\n        success: true,\n        content: result,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to read large file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Writes content to a file. Automatically handles large files by chunking.\n   *\n   * @param path - Path to the file to write.\n   * @param content - Content to write to the file.\n   * @param mode - Optional: Write mode. One of \"overwrite\", \"append\", or \"create_new\". Default is \"overwrite\".\n   * @returns BoolResult indicating success or failure with requestId\n   */\n  async writeFile(\n    path: string,\n    content: string,\n    mode = \"overwrite\"\n  ): Promise<BoolResult> {\n    const chunkSize = DEFAULT_CHUNK_SIZE;\n    try {\n      const contentLen = content.length;\n\n      // If content is small enough, use the regular writeFileChunk method\n      if (contentLen <= chunkSize) {\n        return await this.writeFileChunk(path, content, mode);\n      }\n\n      // Write the first chunk with the specified mode\n      const firstChunkEnd = Math.min(chunkSize, contentLen);\n\n      const firstResult = await this.writeFileChunk(\n        path,\n        content.substring(0, firstChunkEnd),\n        mode\n      );\n\n      if (!firstResult.success) {\n        return firstResult;\n      }\n\n      // Write the remaining chunks with \"append\" mode\n      let chunkCount = 1; // Already wrote first chunk\n      for (let offset = firstChunkEnd; offset < contentLen; ) {\n        const end = Math.min(offset + chunkSize, contentLen);\n\n        const chunkResult = await this.writeFileChunk(\n          path,\n          content.substring(offset, end),\n          \"append\"\n        );\n\n        if (!chunkResult.success) {\n          return chunkResult;\n        }\n\n        offset = end;\n        chunkCount++;\n      }\n\n      return {\n        requestId: firstResult.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to write large file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Get file change information for the specified directory path\n   */\n  async getFileChange(path: string): Promise<FileChangeResult> {\n    try {\n      const args = { path };\n      const result = await this.session.callMcpTool(\"get_file_change\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          events: [],\n          rawData: result.data || \"\",\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      // Parse the file change events\n      const events = this.parseFileChangeData(result.data);\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        events,\n        rawData: result.data,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        events: [],\n        rawData: \"\",\n        errorMessage: `Failed to get file change: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Parse raw JSON data into FileChangeEvent array\n   */\n  private parseFileChangeData(rawData: string): FileChangeEvent[] {\n    const events: FileChangeEvent[] = [];\n    \n    try {\n      const changeData = JSON.parse(rawData);\n      if (Array.isArray(changeData)) {\n        for (const eventDict of changeData) {\n          if (typeof eventDict === \"object\" && eventDict !== null) {\n            const event = FileChangeEventHelper.fromDict(eventDict);\n            events.push(event);\n          }\n        }\n      }\n    } catch (error) {\n      console.warn(`Failed to parse JSON data: ${error}`);\n    }\n    \n    return events;\n  }\n\n  /**\n   * Watch a directory for file changes and call the callback function when changes occur\n   */\n  async watchDirectory(\n    path: string,\n    callback: (events: FileChangeEvent[]) => void,\n    interval = 500,\n    signal?: AbortSignal\n  ): Promise<void> {\n    console.log(`Starting directory monitoring for: ${path}`);\n    console.log(`Polling interval: ${interval} ms`);\n\n    const monitor = async () => {\n      while (!signal?.aborted) {\n        try {\n          const result = await this.getFileChange(path);\n\n          if (result.success && result.events.length > 0) {\n            console.log(`Detected ${result.events.length} file changes:`);\n            for (const event of result.events) {\n              console.log(`  - ${FileChangeEventHelper.toString(event)}`);\n            }\n\n            try {\n              callback(result.events);\n            } catch (error) {\n              console.error(`Error in callback function: ${error}`);\n            }\n          } else if (!result.success) {\n            console.error(`Error monitoring directory: ${result.errorMessage}`);\n          }\n\n          // Wait for next poll\n          await new Promise((resolve) => {\n            const timeoutId = setTimeout(resolve, interval);\n            signal?.addEventListener(\"abort\", () => {\n              clearTimeout(timeoutId);\n              resolve(void 0);\n            });\n          });\n        } catch (error) {\n          console.error(`Unexpected error in directory monitoring: ${error}`);\n          await new Promise((resolve) => setTimeout(resolve, interval));\n        }\n      }\n\n      console.log(`Stopped monitoring directory: ${path}`);\n    };\n\n    return monitor();\n  }\n}\n","export { Oss } from \"./oss\";\n","import { Session } from \"../session\";\nimport {\n  OSSClientResult,\n  OSSUploadResult,\n  OSSDownloadResult,\n} from \"../types/api-response\";\n\n\n/**\n * Handles OSS operations in the AgentBay cloud environment.\n */\nexport class Oss {\n  private session: Session;\n\n  /**\n   * Initialize an Oss object.\n   *\n   * @param session - The Session instance that this Oss belongs to.\n   */\n  constructor(session: Session) {\n    this.session = session;\n  }\n\n  /**\n   * Sanitizes error messages to remove sensitive information like API keys.\n   *\n   * @param error - The error to sanitize\n   * @returns The sanitized error\n   */\n  private sanitizeError(error: any): any {\n    if (!error) {\n      return error;\n    }\n\n    const errorString = String(error);\n    return errorString.replace(/Bearer\\s+[^\\s]+/g, \"Bearer [REDACTED]\");\n  }\n\n  /**\n   * Initialize OSS environment variables with the specified credentials.\n   * Corresponds to Python's env_init() method\n   *\n   * @param accessKeyId - The access key ID\n   * @param accessKeySecret - The access key secret\n   * @param securityToken - The security token (optional)\n   * @param endpoint - The OSS endpoint (optional)\n   * @param region - The OSS region (optional)\n   * @returns OSSClientResult with client configuration and requestId\n   * @throws APIError if the operation fails.\n   */\n  async envInit(\n    accessKeyId: string,\n    accessKeySecret: string,\n    securityToken?: string,\n    endpoint?: string,\n    region?: string\n  ): Promise<OSSClientResult> {\n    try {\n      const args = {\n        access_key_id: accessKeyId,\n        access_key_secret: accessKeySecret,\n        security_token: securityToken || \"\",\n        endpoint: endpoint || \"\",\n        region: region || \"\",\n      };\n      const result = await this.session.callMcpTool(\"oss_env_init\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          clientConfig: {},\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let clientConfig: Record<string, any> = {};\n      try {\n        clientConfig = JSON.parse(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          clientConfig: {},\n          errorMessage: `Failed to parse client config: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        clientConfig,\n        errorMessage: \"\",\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        clientConfig: {},\n        errorMessage: `Failed to initialize OSS environment: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Upload a file to OSS.\n   * Corresponds to Python's upload() method\n   *\n   * @param bucket - The OSS bucket name\n   * @param object - The OSS object key\n   * @param path - The local file path to upload\n   * @returns OSSUploadResult with upload result and requestId\n   * @throws APIError if the operation fails.\n   */\n  async upload(\n    bucket: string,\n    object: string,\n    path: string\n  ): Promise<OSSUploadResult> {\n    try {\n      const args = {\n        bucket,\n        object,\n        path,\n      };\n      const result = await this.session.callMcpTool(\"oss_upload\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        content: result.data,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to upload file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Upload a file to OSS using an anonymous URL.\n   * Corresponds to Python's upload_anonymous() method\n   *\n   * @param url - The anonymous upload URL\n   * @param path - The local file path to upload\n   * @returns OSSUploadResult with upload result and requestId\n   * @throws APIError if the operation fails.\n   */\n  async uploadAnonymous(url: string, path: string): Promise<OSSUploadResult> {\n    try {\n      const args = {\n        url,\n        path,\n      };\n      const result = await this.session.callMcpTool(\"oss_upload_anonymous\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        content: result.data,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to upload file anonymously: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Download a file from OSS.\n   * Corresponds to Python's download() method\n   *\n   * @param bucket - The OSS bucket name\n   * @param object - The OSS object key\n   * @param path - The local file path to save the downloaded file\n   * @returns OSSDownloadResult with download result and requestId\n   * @throws APIError if the operation fails.\n   */\n  async download(\n    bucket: string,\n    object: string,\n    path: string\n  ): Promise<OSSDownloadResult> {\n    try {\n      const args = {\n        bucket,\n        object,\n        path,\n      };\n      const result = await this.session.callMcpTool(\"oss_download\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        content: result.data,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to download file: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Download a file from OSS using an anonymous URL.\n   * Corresponds to Python's download_anonymous() method\n   *\n   * @param url - The anonymous download URL\n   * @param path - The local file path to save the downloaded file\n   * @returns OSSDownloadResult with download result and requestId\n   * @throws APIError if the operation fails.\n   */\n  async downloadAnonymous(\n    url: string,\n    path: string\n  ): Promise<OSSDownloadResult> {\n    try {\n      const args = {\n        url,\n        path,\n      };\n      const result = await this.session.callMcpTool(\"oss_download_anonymous\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        content: result.data,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        content: \"\",\n        errorMessage: `Failed to download file anonymously: ${error}`,\n      };\n    }\n  }\n}\n","import { Session } from \"../session\";\nimport {\n  UIElementListResult,\n  BoolResult,\n  OperationResult,\n} from \"../types/api-response\";\n\n/**\n * Key codes for UI operations\n */\nexport enum KeyCode {\n  HOME = 3,\n  BACK = 4,\n  VOLUME_UP = 24,\n  VOLUME_DOWN = 25,\n  POWER = 26,\n  MENU = 82\n}\n\n/**\n * Interface representing a UI element in the UI hierarchy\n */\nexport interface UIElement {\n  bounds: string;\n  className: string;\n  text: string;\n  type: string;\n  resourceId: string;\n  index: number;\n  isParent: boolean;\n  children?: UIElement[];\n}\n\n\n\n/**\n * Handles UI operations in the AgentBay cloud environment.\n */\nexport class UI {\n  private session: Session;\n\n  /**\n   * Initialize a UI object.\n   *\n   * @param session - The Session instance that this UI belongs to.\n   */\n  constructor(session: {\n    getAPIKey(): string;\n    getClient(): any;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  }) {\n    this.session = session as Session;\n  }\n\n  /**\n   * Sanitizes error messages to remove sensitive information like API keys.\n   *\n   * @param error - The error to sanitize\n   * @returns The sanitized error\n   */\n  private sanitizeError(error: any): any {\n    if (!error) {\n      return error;\n    }\n\n    const errorString = String(error);\n    return errorString.replace(/Bearer\\s+[^\\s]+/g, \"Bearer [REDACTED]\");\n  }\n\n  /**\n   * Retrieves all clickable UI elements within the specified timeout.\n   * Corresponds to Python's get_clickable_ui_elements() method\n   *\n   * @param timeoutMs - The timeout in milliseconds. Default is 2000ms.\n   * @returns UIElementListResult with clickable UI elements and requestId\n   * @throws APIError if the operation fails.\n   */\n  async getClickableUIElements(timeoutMs = 2000): Promise<UIElementListResult> {\n    try {\n      const args = { timeout_ms: timeoutMs };\n      const result = await this.session.callMcpTool(\"get_clickable_ui_elements\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          elements: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let elements: UIElement[] = [];\n      try {\n        elements = JSON.parse(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          elements: [],\n          errorMessage: `Failed to parse UI elements: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        elements: elements,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        elements: [],\n        errorMessage: `Failed to get clickable UI elements: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Retrieves all UI elements regardless of their clickable status.\n   * Corresponds to Python's get_all_ui_elements() method\n   *\n   * @param timeoutMs - The timeout in milliseconds. Default is 2000ms.\n   * @returns UIElementListResult with all UI elements and requestId\n   * @throws APIError if the operation fails.\n   */\n  async getAllUIElements(timeoutMs = 2000): Promise<UIElementListResult> {\n    try {\n      const args = { timeout_ms: timeoutMs };\n      const result = await this.session.callMcpTool(\"get_all_ui_elements\", args);\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          elements: [],\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      let elements: UIElement[] = [];\n      try {\n        elements = JSON.parse(result.data);\n      } catch (err) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          elements: [],\n          errorMessage: `Failed to parse UI elements: ${err}`,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        elements: elements,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        elements: [],\n        errorMessage: `Failed to get all UI elements: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Sends a key press event.\n   * Corresponds to Python's send_key() method\n   *\n   * @param key - The key code to send. Supported key codes are:\n   *   - 3 : HOME\n   *   - 4 : BACK\n   *   - 24 : VOLUME UP\n   *   - 25 : VOLUME DOWN\n   *   - 26 : POWER\n   *   - 82 : MENU\n   * @returns BoolResult with success status and requestId\n   * @throws APIError if the operation fails.\n   */\n  async sendKey(key: number): Promise<BoolResult> {\n    try {\n      const args = { key };\n      const result = await this.session.callMcpTool(\"send_key\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        data: result.success,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: false,\n        errorMessage: `Failed to send key: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Inputs text into the currently focused UI element.\n   * Corresponds to Python's input_text() method\n   *\n   * @param text - The text to input\n   * @returns BoolResult with success status and requestId\n   * @throws APIError if the operation fails.\n   */\n  async inputText(text: string): Promise<BoolResult> {\n    try {\n      const args = { text };\n      const result = await this.session.callMcpTool(\"input_text\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        data: result.success,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: false,\n        errorMessage: `Failed to input text: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Performs a swipe gesture on the screen.\n   * Corresponds to Python's swipe() method\n   *\n   * @param startX - The starting X coordinate\n   * @param startY - The starting Y coordinate\n   * @param endX - The ending X coordinate\n   * @param endY - The ending Y coordinate\n   * @param durationMs - The duration of the swipe in milliseconds. Default is 300ms.\n   * @returns BoolResult with success status and requestId\n   * @throws APIError if the operation fails.\n   */\n  async swipe(\n    startX: number,\n    startY: number,\n    endX: number,\n    endY: number,\n    durationMs = 300\n  ): Promise<BoolResult> {\n    try {\n      const args = {\n        start_x: startX,\n        start_y: startY,\n        end_x: endX,\n        end_y: endY,\n        duration_ms: durationMs,\n      };\n      const result = await this.session.callMcpTool(\"swipe\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        data: result.success,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: false,\n        errorMessage: `Failed to perform swipe: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Clicks on the screen at the specified coordinates.\n   * Corresponds to Python's click() method\n   *\n   * @param x - The X coordinate\n   * @param y - The Y coordinate\n   * @param button - The mouse button to use. Default is 'left'\n   * @returns BoolResult with success status and requestId\n   * @throws APIError if the operation fails.\n   */\n  async click(x: number, y: number, button = \"left\"): Promise<BoolResult> {\n    try {\n      const args = { x, y, button };\n      const result = await this.session.callMcpTool(\"click\", args);\n\n      return {\n        requestId: result.requestId,\n        success: result.success,\n        data: result.success,\n        errorMessage: result.errorMessage,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: false,\n        errorMessage: `Failed to click: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Takes a screenshot of the current screen.\n   * Corresponds to Python's screenshot() method\n   *\n   * @returns OperationResult with success status and requestId\n   * @throws APIError if the operation fails.\n   */\n  async screenshot(): Promise<OperationResult> {\n    try {\n      const result = await this.session.callMcpTool(\"system_screenshot\", {});\n\n      if (!result.success) {\n        return {\n          requestId: result.requestId,\n          success: false,\n          data: \"\",\n          errorMessage: result.errorMessage,\n        };\n      }\n\n      return {\n        requestId: result.requestId,\n        success: true,\n        data: result.data,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        data: \"\",\n        errorMessage: `Failed to take screenshot: ${error}`,\n      };\n    }\n  }\n}\n","\nimport {\n  WindowListResult,\n  WindowInfoResult,\n  BoolResult,\n} from \"../types/api-response\";\n\n\n\n/**\n * Represents a window in the system.\n */\nexport interface Window {\n  window_id: number;\n  title: string;\n  absolute_upper_left_x?: number;\n  absolute_upper_left_y?: number;\n  width?: number;\n  height?: number;\n  pid?: number;\n  pname?: string;\n  child_windows?: Window[];\n}\n\n/**\n * Handles window management operations in the AgentBay cloud environment.\n */\nexport class WindowManager {\n  private session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  };\n\n  /**\n   * Creates a new WindowManager instance.\n   * @param session The session object that provides access to the AgentBay API.\n   */\n  constructor(session: {\n    getAPIKey(): string;\n    getSessionId(): string;\n    callMcpTool(toolName: string, args: any): Promise<{\n      success: boolean;\n      data: string;\n      errorMessage: string;\n      requestId: string;\n    }>;\n  }) {\n    this.session = session;\n  }\n\n\n\n  /**\n   * Helper method to parse JSON string into Window objects\n   * @param jsonStr - JSON string to parse\n   * @returns Array of Window objects or single Window object\n   */\n  private parseWindowsFromJSON(jsonStr: string): Window[] {\n    try {\n      const parsed = JSON.parse(jsonStr);\n      return Array.isArray(parsed) ? parsed : [parsed];\n    } catch (error) {\n      throw new Error(`Failed to parse window data: ${error}`);\n    }\n  }\n\n  /**\n   * Lists all root windows in the system.\n   * Corresponds to Python's list_root_windows() method\n   *\n   * @param timeoutMs - The timeout in milliseconds. Default is 3000ms.\n   * @returns WindowListResult with windows array and requestId\n   */\n  async listRootWindows(timeoutMs = 3000): Promise<WindowListResult> {\n    try {\n      const args = {\n        timeout_ms: timeoutMs,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"list_root_windows\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          windows: [],\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      const windows = response.data\n        ? this.parseWindowsFromJSON(response.data)\n        : [];\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        windows,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        windows: [],\n        errorMessage: `Failed to list root windows: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Gets the currently active window.\n   * Corresponds to Python's get_active_window() method\n   *\n   * @param timeoutMs - The timeout in milliseconds. Default is 3000ms.\n   * @returns WindowInfoResult with active window data and requestId\n   */\n  async getActiveWindow(timeoutMs = 3000): Promise<WindowInfoResult> {\n    try {\n      const args = {\n        timeout_ms: timeoutMs,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"get_active_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      let activeWindow: Window | undefined = undefined;\n      if (response.data) {\n        const windows = this.parseWindowsFromJSON(response.data);\n        activeWindow = windows.length > 0 ? windows[0] : undefined;\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        window: activeWindow,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to get active window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Activates a window by ID.\n   * Corresponds to Python's activate_window() method\n   *\n   * @param windowId The ID of the window to activate.\n   * @returns BoolResult with requestId\n   */\n  async activateWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"activate_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to activate window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Maximizes a window by ID.\n   * Corresponds to Python's maximize_window() method\n   *\n   * @param windowId The ID of the window to maximize.\n   * @returns BoolResult with requestId\n   */\n  async maximizeWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"maximize_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to maximize window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Minimizes a window by ID.\n   * Corresponds to Python's minimize_window() method\n   *\n   * @param windowId The ID of the window to minimize.\n   * @returns BoolResult with requestId\n   */\n  async minimizeWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"minimize_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to minimize window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Restores a window by ID.\n   * Corresponds to Python's restore_window() method\n   *\n   * @param windowId The ID of the window to restore.\n   * @returns BoolResult with requestId\n   */\n  async restoreWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"restore_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to restore window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Closes a window by ID.\n   * Corresponds to Python's close_window() method\n   *\n   * @param windowId The ID of the window to close.\n   * @returns BoolResult with requestId\n   */\n  async closeWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"close_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to close window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Sets a window to fullscreen by ID.\n   * Corresponds to Python's fullscreen_window() method\n   *\n   * @param windowId The ID of the window to set to fullscreen.\n   * @returns BoolResult with requestId\n   */\n  async fullscreenWindow(windowId: number): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"fullscreen_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to make window fullscreen: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Resizes a window by ID.\n   * Corresponds to Python's resize_window() method\n   *\n   * @param windowId The ID of the window to resize.\n   * @param width The new width of the window.\n   * @param height The new height of the window.\n   * @returns BoolResult with requestId\n   */\n  async resizeWindow(\n    windowId: number,\n    width: number,\n    height: number\n  ): Promise<BoolResult> {\n    try {\n      const args = {\n        window_id: windowId,\n        width,\n        height,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"resize_window\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to resize window: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * Enables or disables focus mode.\n   * Corresponds to Python's focus_mode() method\n   *\n   * @param on Whether to enable focus mode.\n   * @returns BoolResult with requestId\n   */\n  async focusMode(on: boolean): Promise<BoolResult> {\n    try {\n      const args = {\n        on,\n      };\n\n      const response = await this.session.callMcpTool(\n        \"focus_mode\",\n        args\n      );\n\n      if (!response.success) {\n        return {\n          requestId: response.requestId,\n          success: false,\n          errorMessage: response.errorMessage,\n        };\n      }\n\n      return {\n        requestId: response.requestId,\n        success: true,\n        data: true,\n      };\n    } catch (error) {\n      return {\n        requestId: \"\",\n        success: false,\n        errorMessage: `Failed to toggle focus mode: ${error}`,\n      };\n    }\n  }\n}\n","export { Agent, ExecutionResult, QueryResult, McpToolResult, McpSession } from \"./agent\"; ","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport fetch from \"node-fetch\";\nimport { AgentBay } from \"./agent-bay\";\nimport { ContextService, Context } from \"./context\";\nimport { AgentBayError } from \"./exceptions\";\nimport { OperationResult, ContextFileListResult, FileUrlResult } from \"./types/api-response\";\nimport { log, logError } from \"./utils/logger\";\n\n// ==============================================================================\n// Constants\n// ==============================================================================\nconst EXTENSIONS_BASE_PATH = \"/tmp/extensions\";\n\n// ==============================================================================\n// 1. Data Models\n// ==============================================================================\n\n/**\n * Represents a browser extension as a cloud resource.\n */\nexport class Extension {\n  /**\n   * The unique identifier of the extension.\n   */\n  id: string;\n\n  /**\n   * The name of the extension.\n   */\n  name: string;\n\n  /**\n   * Date and time when the extension was created.\n   */\n  createdAt?: string;\n\n  /**\n   * Initialize an Extension object.\n   *\n   * @param id - The unique identifier of the extension.\n   * @param name - The name of the extension.\n   * @param createdAt - Date and time when the extension was created.\n   */\n  constructor(id: string, name: string, createdAt?: string) {\n    this.id = id;\n    this.name = name;\n    this.createdAt = createdAt;\n  }\n}\n\n/**\n * Configuration options for browser extension integration.\n * \n * This class encapsulates the necessary parameters for setting up\n * browser extension synchronization and context management.\n */\nexport class ExtensionOption {\n  /**\n   * ID of the extension context for browser extensions.\n   */\n  contextId: string;\n\n  /**\n   * List of extension IDs to be loaded/synchronized.\n   */\n  extensionIds: string[];\n\n  /**\n   * Initialize ExtensionOption with context and extension configuration.\n   * \n   * @param contextId - ID of the extension context for browser extensions.\n   *                   This should match the context where extensions are stored.\n   * @param extensionIds - List of extension IDs to be loaded in the browser session.\n   *                      Each ID should correspond to a valid extension in the context.\n   * \n   * @throws {Error} If contextId is empty or extensionIds is empty.\n   */\n  constructor(contextId: string, extensionIds: string[]) {\n    if (!contextId || !contextId.trim()) {\n      throw new Error(\"contextId cannot be empty\");\n    }\n\n    if (!extensionIds || extensionIds.length === 0) {\n      throw new Error(\"extensionIds cannot be empty\");\n    }\n\n    this.contextId = contextId;\n    this.extensionIds = extensionIds;\n  }\n\n  /**\n   * String representation of ExtensionOption.\n   */\n  toString(): string {\n    return `ExtensionOption(contextId='${this.contextId}', extensionIds=${JSON.stringify(this.extensionIds)})`;\n  }\n\n  /**\n   * Human-readable string representation.\n   */\n  toDisplayString(): string {\n    return `Extension Config: ${this.extensionIds.length} extension(s) in context '${this.contextId}'`;\n  }\n\n  /**\n   * Validate the extension option configuration.\n   * \n   * @returns True if configuration is valid, false otherwise.\n   */\n  validate(): boolean {\n    try {\n      // Check contextId\n      if (!this.contextId || !this.contextId.trim()) {\n        return false;\n      }\n\n      // Check extensionIds\n      if (!this.extensionIds || this.extensionIds.length === 0) {\n        return false;\n      }\n\n      // Check that all extension IDs are non-empty strings\n      for (const extId of this.extensionIds) {\n        if (typeof extId !== 'string' || !extId.trim()) {\n          return false;\n        }\n      }\n\n      return true;\n    } catch (error) {\n      return false;\n    }\n  }\n}\n\n// ==============================================================================\n// 2. Core Service Class (Scoped Stateless Model)\n// ==============================================================================\n\n/**\n * Provides methods to manage user browser extensions.\n * This service integrates with the existing context functionality for file operations.\n * \n * **Usage** (Simplified - Auto-detection):\n * ```typescript\n * // Service automatically detects if context exists and creates if needed\n * const extensionsService = new ExtensionsService(agentBay, \"browser_extensions\");\n * \n * // Or use with empty contextId to auto-generate context name\n * const extensionsService = new ExtensionsService(agentBay);  // Uses default generated name\n * \n * // Use the service immediately - initialization happens automatically\n * const extension = await extensionsService.create(\"/path/to/plugin.zip\");\n * ```\n * \n * **Integration with ExtensionOption (Simplified)**:\n * ```typescript\n * // Create extensions and configure for browser sessions\n * const extensionsService = new ExtensionsService(agentBay, \"my_extensions\");\n * const ext1 = await extensionsService.create(\"/path/to/ext1.zip\");\n * const ext2 = await extensionsService.create(\"/path/to/ext2.zip\");\n * \n * // Create extension option for browser integration (no contextId needed!)\n * const extOption = extensionsService.createExtensionOption([ext1.id, ext2.id]);\n * \n * // Use with BrowserContext for session creation\n * const browserContext = new BrowserContext({\n *   contextId: \"browser_session\",\n *   autoUpload: true,\n *   extensionOption: extOption  // All extension config encapsulated\n * });\n * ```\n * \n * **Context Management**:\n * - If contextId provided and exists: Uses the existing context\n * - If contextId provided but doesn't exist: Creates context with provided name\n * - If contextId empty or not provided: Generates default name and creates context\n * - No need to manually manage context creation or call initialize()\n * - Context initialization happens automatically on first method call\n */\nexport class ExtensionsService {\n  private agentBay: AgentBay;\n  private contextService: ContextService;\n  private extensionContext!: Context;\n  private contextId!: string;\n  private contextName: string;\n  private autoCreated: boolean;\n  private _initializationPromise: Promise<void> | null = null;\n\n  /**\n   * Initializes the ExtensionsService with a context.\n   *\n   * @param agentBay - The AgentBay client instance.\n   * @param contextId - The context ID or name. If empty or not provided,\n   *                   a default context name will be generated automatically.\n   *                   If the context doesn't exist, it will be automatically created.\n   *                   \n   * Note:\n   *   The service automatically detects if the context exists. If not,\n   *   it creates a new context with the provided name or a generated default name.\n   *   Context initialization is handled lazily on first use.\n   */\n  constructor(agentBay: AgentBay, contextId: string = \"\") {\n    if (!agentBay) {\n      throw new AgentBayError(\"AgentBay instance is required\");\n    }\n    if (!agentBay.context) {\n      throw new AgentBayError(\"AgentBay instance must have a context service\");\n    }\n    \n    this.agentBay = agentBay;\n    this.contextService = agentBay.context;\n    this.autoCreated = true;\n\n    // Generate default context name if contextId is empty\n    if (!contextId || contextId.trim() === \"\") {\n      contextId = `extensions-${Math.floor(Date.now() / 1000)}`;\n      log(`Generated default context name: ${contextId}`);\n    }\n\n    this.contextName = contextId;\n    \n    // Initialize context lazily - will be set on first method call\n    this._initializationPromise = this._initializeContext();\n  }\n\n  /**\n   * Internal method to initialize the context.\n   * This ensures the context is ready before any operations.\n   */\n  private async _initializeContext(): Promise<void> {\n    try {\n      // Context doesn't exist, create it\n      const contextResult = await this.contextService.get(this.contextName, true);\n      if (!contextResult.success || !contextResult.context) {\n        throw new AgentBayError(`Failed to create extension repository context: ${this.contextName}`);\n      }\n\n      this.extensionContext = contextResult.context;\n      this.contextId = this.extensionContext.id;\n    } catch (error) {\n      throw new AgentBayError(`Failed to initialize ExtensionsService: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Ensures the service is initialized before performing operations.\n   */\n  private async _ensureInitialized(): Promise<void> {\n    if (this._initializationPromise) {\n      await this._initializationPromise;\n      this._initializationPromise = null;\n    }\n  }\n\n  /**\n   * An internal helper method that encapsulates the flow of \"get upload URL for a specific path and upload\".\n   * Uses the existing context service for file operations.\n   *\n   * @param localPath - The path to the local file.\n   * @param remotePath - The path of the file in context storage.\n   * \n   * @throws {AgentBayError} If getting the credential or uploading fails.\n   */\n  private async _uploadToCloud(localPath: string, remotePath: string): Promise<void> {\n    try {\n      // 1. Get upload URL using context service\n      const urlResult = await this.contextService.getFileUploadUrl(this.contextId, remotePath);\n      if (!urlResult.success || !urlResult.url) {\n        throw new AgentBayError(`Failed to get upload URL: ${urlResult.url || 'No URL returned'}`);\n      }\n\n      const preSignedUrl = urlResult.url;\n\n      // 2. Use the presigned URL to upload the file directly\n      const fileBuffer = fs.readFileSync(localPath);\n      \n      const response = await fetch(preSignedUrl, {\n        method: 'PUT',\n        body: fileBuffer,\n      });\n\n      if (!response.ok) {\n        throw new AgentBayError(`HTTP error uploading file: ${response.status} ${response.statusText}`);\n      }\n    } catch (error) {\n      if (error instanceof AgentBayError) {\n        throw error;\n      }\n      throw new AgentBayError(`An error occurred while uploading the file: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Lists all available browser extensions within this context from the cloud.\n   * Uses the context service to list files under the extensions directory.\n   * \n   * @returns Promise that resolves to an array of Extension objects.\n   * @throws {AgentBayError} If listing extensions fails.\n   */\n  async list(): Promise<Extension[]> {\n    await this._ensureInitialized();\n    \n    try {\n      // Use context service to list files in the extensions directory\n      const fileListResult = await this.contextService.listFiles(\n        this.contextId,\n        EXTENSIONS_BASE_PATH,\n        1, // pageNumber\n        100 // pageSize - reasonable limit for extensions\n      );\n\n      if (!fileListResult.success) {\n        throw new AgentBayError(\"Failed to list extensions: Context file listing failed.\");\n      }\n\n      const extensions: Extension[] = [];\n      for (const fileEntry of fileListResult.entries) {\n        // Extract the extension ID from the file name\n        const extensionId = fileEntry.fileName || fileEntry.filePath;\n        extensions.push(new Extension(\n          extensionId,\n          fileEntry.fileName || extensionId,\n          fileEntry.gmtCreate\n        ));\n      }\n      return extensions;\n    } catch (error) {\n      if (error instanceof AgentBayError) {\n        throw error;\n      }\n      throw new AgentBayError(`An error occurred while listing browser extensions: ${error instanceof Error ? error.message : String(error)}`);\n    }\n  }\n\n  /**\n   * Uploads a new browser extension from a local path into the current context.\n   * \n   * @param localPath - Path to the local extension file (must be a .zip file).\n   * @returns Promise that resolves to an Extension object.\n   * @throws {Error} If the local file doesn't exist.\n   * @throws {Error} If the file format is not supported (only .zip is supported).\n   * @throws {AgentBayError} If upload fails.\n   */\n  async create(localPath: string): Promise<Extension> {\n    await this._ensureInitialized();\n    \n    if (!fs.existsSync(localPath)) {\n      throw new Error(`The specified local file was not found: ${localPath}`);\n    }\n\n    // Determine the ID and cloud path before uploading\n    // Validate file type - only ZIP format is supported\n    const fileExtension = path.extname(localPath).toLowerCase();\n    if (fileExtension !== '.zip') {\n      throw new Error(`Unsupported plugin format '${fileExtension}'. Only ZIP format (.zip) is supported.`);\n    }\n\n    const extensionId = `ext_${crypto.randomBytes(16).toString('hex')}${fileExtension}`;\n    const extensionName = path.basename(localPath);\n    const remotePath = `${EXTENSIONS_BASE_PATH}/${extensionId}`;\n\n    // Use the helper method to perform the cloud upload\n    await this._uploadToCloud(localPath, remotePath);\n\n    // Upload implies creation. Return a locally constructed object with basic info.\n    return new Extension(extensionId, extensionName);\n  }\n\n  /**\n   * Updates an existing browser extension in the current context with a new file.\n   * \n   * @param extensionId - ID of the extension to update.\n   * @param newLocalPath - Path to the new local extension file.\n   * @returns Promise that resolves to an Extension object.\n   * @throws {Error} If the new local file doesn't exist.\n   * @throws {Error} If the extension doesn't exist in the context.\n   * @throws {AgentBayError} If update fails.\n   */\n  async update(extensionId: string, newLocalPath: string): Promise<Extension> {\n    await this._ensureInitialized();\n    \n    if (!fs.existsSync(newLocalPath)) {\n      throw new Error(`The specified new local file was not found: ${newLocalPath}`);\n    }\n\n    // Validate that the extension exists by checking the file list\n    const existingExtensions = await this.list();\n    const extensionExists = existingExtensions.some(ext => ext.id === extensionId);\n    \n    if (!extensionExists) {\n      throw new Error(`Browser extension with ID '${extensionId}' not found in the context. Cannot update.`);\n    }\n\n    const remotePath = `${EXTENSIONS_BASE_PATH}/${extensionId}`;\n\n    // Use the helper method to perform the cloud upload (overwrite)\n    await this._uploadToCloud(newLocalPath, remotePath);\n\n    return new Extension(extensionId, path.basename(newLocalPath));\n  }\n\n  /**\n   * Gets detailed information about a specific browser extension.\n   * \n   * @param extensionId - The ID of the extension to get info for.\n   * @returns Promise that resolves to an Extension object if found, undefined otherwise.\n   */\n  private async _getExtensionInfo(extensionId: string): Promise<Extension | undefined> {\n    await this._ensureInitialized();\n    \n    try {\n      const extensions = await this.list();\n      return extensions.find(ext => ext.id === extensionId);\n    } catch (error) {\n      logError(`An error occurred while getting extension info for '${extensionId}':`, error);\n      return undefined;\n    }\n  }\n\n  /**\n   * Cleans up the auto-created context if it was created by this service.\n   * \n   * @returns Promise that resolves to true if cleanup was successful or not needed, false if cleanup failed.\n   * \n   * Note:\n   *   This method only works if the context was auto-created by this service.\n   *   For existing contexts, no cleanup is performed.\n   */\n  async cleanup(): Promise<boolean> {\n    await this._ensureInitialized();\n    \n    if (!this.autoCreated) {\n      // Context was not auto-created by this service, no cleanup needed\n      return true;\n    }\n\n    try {\n      const deleteResult = await this.contextService.delete(this.extensionContext);\n      if (deleteResult) {\n        log(`Extension context deleted: ${this.contextName} (ID: ${this.contextId})`);\n        return true;\n      } else {\n        logError(`Warning: Failed to delete extension context: ${this.contextName}`, new Error('Delete operation returned false'));\n        return false;\n      }\n    } catch (error) {\n      logError(`Warning: Failed to delete extension context:`, error);\n      return false;\n    }\n  }\n\n  /**\n   * Deletes a browser extension from the current context.\n   * \n   * @param extensionId - ID of the extension to delete.\n   * @returns Promise that resolves to true if deletion was successful, false otherwise.\n   */\n  async delete(extensionId: string): Promise<boolean> {\n    await this._ensureInitialized();\n    \n    const remotePath = `${EXTENSIONS_BASE_PATH}/${extensionId}`;\n    try {\n      // Use context service to delete the file\n      const deleteResult = await this.contextService.deleteFile(this.contextId, remotePath);\n\n      return deleteResult.success;\n    } catch (error) {\n      logError(`An error occurred while deleting browser extension '${extensionId}':`, error);\n      return false;\n    }\n  }\n\n  /**\n   * Create an ExtensionOption for the current context with specified extension IDs.\n   * \n   * This is a convenience method that creates an ExtensionOption using the current\n   * service's contextId and the provided extension IDs. This option can then be\n   * used with BrowserContext for browser session creation.\n   * \n   * @param extensionIds - List of extension IDs to include in the option.\n   *                      These should be extensions that exist in the current context.\n   * @returns ExtensionOption configuration object for browser extension integration.\n   * @throws {Error} If extensionIds is empty or invalid.\n   * \n   * @example\n   * ```typescript\n   * // Create extensions\n   * const ext1 = await extensionsService.create(\"/path/to/ext1.zip\");\n   * const ext2 = await extensionsService.create(\"/path/to/ext2.zip\");\n   * \n   * // Create extension option for browser integration\n   * const extOption = extensionsService.createExtensionOption([ext1.id, ext2.id]);\n   * \n   * // Use with BrowserContext\n   * const browserContext = new BrowserContext({\n   *   contextId: \"browser_session\",\n   *   autoUpload: true,\n   *   extensionContextId: extOption.contextId,\n   *   extensionIds: extOption.extensionIds\n   * });\n   * ```\n   */\n  createExtensionOption(extensionIds: string[]): ExtensionOption {\n    // Note: This method is synchronous like in Python, but contextId might not be available yet\n    // In practice, this should be called after the service has been used at least once\n    if (!this.contextId) {\n      throw new Error(\"Service not initialized. Please call an async method first or ensure context is created.\");\n    }\n    \n    return new ExtensionOption(\n      this.contextId,\n      extensionIds\n    );\n  }\n}","// UploadStrategy defines the upload strategy for context synchronization\nexport enum UploadStrategy {\n  UploadBeforeResourceRelease = \"UploadBeforeResourceRelease\",\n}\n\n// DownloadStrategy defines the download strategy for context synchronization\nexport enum DownloadStrategy {\n  DownloadAsync = \"DownloadAsync\",\n}\n\n// UploadPolicy defines the upload policy for context synchronization\nexport interface UploadPolicy {\n  autoUpload: boolean;\n  uploadStrategy: UploadStrategy;\n  period?: number;\n}\n\n// DownloadPolicy defines the download policy for context synchronization\nexport interface DownloadPolicy {\n  autoDownload: boolean;\n  downloadStrategy: DownloadStrategy;\n}\n\n// DeletePolicy defines the delete policy for context synchronization\nexport interface DeletePolicy {\n  syncLocalFile: boolean;\n}\n\n// ExtractPolicy defines the extract policy for context synchronization\nexport interface ExtractPolicy {\n  extract: boolean;\n  deleteSrcFile: boolean;\n  extractToCurrentFolder: boolean;\n}\n\n// ExtractPolicyClass provides a class-based implementation with default values\nexport class ExtractPolicyClass implements ExtractPolicy {\n  extract: boolean = true;\n  deleteSrcFile: boolean = true;\n  extractToCurrentFolder: boolean = false;\n\n  constructor(extract: boolean = true, deleteSrcFile: boolean = true, extractToCurrentFolder: boolean = false) {\n    this.extract = extract;\n    this.deleteSrcFile = deleteSrcFile;\n    this.extractToCurrentFolder = extractToCurrentFolder;\n  }\n\n  /**\n   * Creates a new extract policy with default values\n   */\n  static default(): ExtractPolicyClass {\n    return new ExtractPolicyClass();\n  }\n\n  /**\n   * Converts to plain object for JSON serialization\n   */\n  toDict(): Record<string, any> {\n    return {\n      extract: this.extract,\n      deleteSrcFile: this.deleteSrcFile,\n      extractToCurrentFolder: this.extractToCurrentFolder\n    };\n  }\n}\n\n// WhiteList defines the white list configuration\nexport interface WhiteList {\n  path: string;\n  excludePaths?: string[];\n}\n\n// BWList defines the black and white list configuration\nexport interface BWList {\n  whiteLists?: WhiteList[];\n}\n\n// SyncPolicy defines the synchronization policy\nexport interface SyncPolicy {\n  uploadPolicy?: UploadPolicy;\n  downloadPolicy?: DownloadPolicy;\n  deletePolicy?: DeletePolicy;\n  extractPolicy?: ExtractPolicy;\n  bwList?: BWList;\n}\n\n// SyncPolicyImpl provides a class-based implementation with default value handling\nexport class SyncPolicyImpl implements SyncPolicy {\n  uploadPolicy?: UploadPolicy;\n  downloadPolicy?: DownloadPolicy;\n  deletePolicy?: DeletePolicy;\n  extractPolicy?: ExtractPolicy;\n  bwList?: BWList;\n\n  constructor(policy?: Partial<SyncPolicy>) {\n    if (policy) {\n      this.uploadPolicy = policy.uploadPolicy;\n      this.downloadPolicy = policy.downloadPolicy;\n      this.deletePolicy = policy.deletePolicy;\n      this.extractPolicy = policy.extractPolicy;\n      this.bwList = policy.bwList;\n    }\n    this.ensureDefaults();\n  }\n\n  private ensureDefaults(): void {\n    if (!this.uploadPolicy) {\n      this.uploadPolicy = newUploadPolicy();\n    }\n    if (!this.downloadPolicy) {\n      this.downloadPolicy = newDownloadPolicy();\n    }\n    if (!this.deletePolicy) {\n      this.deletePolicy = newDeletePolicy();\n    }\n    if (!this.extractPolicy) {\n      this.extractPolicy = newExtractPolicy();\n    }\n    if (!this.bwList) {\n      this.bwList = {\n        whiteLists: [\n          {\n            path: \"\",\n            excludePaths: [],\n          },\n        ],\n      };\n    }\n  }\n\n  toJSON(): SyncPolicy {\n    this.ensureDefaults();\n    return {\n      uploadPolicy: this.uploadPolicy,\n      downloadPolicy: this.downloadPolicy,\n      deletePolicy: this.deletePolicy,\n      extractPolicy: this.extractPolicy,\n      bwList: this.bwList,\n    };\n  }\n}\n\n// ContextSync defines the context synchronization configuration\nexport class ContextSync {\n  contextId: string;\n  path: string;\n  policy?: SyncPolicy;\n\n  constructor(contextId: string, path: string, policy?: SyncPolicy) {\n    this.contextId = contextId;\n    this.path = path;\n    this.policy = policy;\n  }\n\n  // WithPolicy sets the policy and returns the context sync for chaining\n  withPolicy(policy: SyncPolicy): ContextSync {\n    this.policy = policy;\n    return this;\n  }\n}\n\n// NewUploadPolicy creates a new upload policy with default values\nexport function newUploadPolicy(): UploadPolicy {\n  return {\n    autoUpload: true,\n    uploadStrategy: UploadStrategy.UploadBeforeResourceRelease,\n    period: 30, // Default to 30 minutes\n  };\n}\n\n// NewDownloadPolicy creates a new download policy with default values\nexport function newDownloadPolicy(): DownloadPolicy {\n  return {\n    autoDownload: true,\n    downloadStrategy: DownloadStrategy.DownloadAsync,\n  };\n}\n\n// NewDeletePolicy creates a new delete policy with default values\nexport function newDeletePolicy(): DeletePolicy {\n  return {\n    syncLocalFile: true,\n  };\n}\n\n// NewExtractPolicy creates a new extract policy with default values\nexport function newExtractPolicy(): ExtractPolicy {\n  return {\n    extract: true,\n    deleteSrcFile: true,\n    extractToCurrentFolder: false,\n  };\n}\n\n// NewSyncPolicy creates a new sync policy with default values\nexport function newSyncPolicy(): SyncPolicy {\n  return {\n    uploadPolicy: newUploadPolicy(),\n    downloadPolicy: newDownloadPolicy(),\n    deletePolicy: newDeletePolicy(),\n    extractPolicy: newExtractPolicy(),\n    bwList: {\n      whiteLists: [\n        {\n          path: \"\",\n          excludePaths: [],\n        },\n      ],\n    },\n  };\n}\n\n// NewSyncPolicyWithDefaults creates a new sync policy with partial parameters and fills defaults\nexport function newSyncPolicyWithDefaults(policy?: Partial<SyncPolicy>): SyncPolicy {\n  return new SyncPolicyImpl(policy).toJSON();\n}\n\n// NewContextSync creates a new context sync configuration\nexport function newContextSync(contextId: string, path: string, policy?: SyncPolicy): ContextSync {\n  return new ContextSync(contextId, path, policy);\n}\n","import { ContextSync, SyncPolicy, newUploadPolicy, newExtractPolicy, WhiteList, BWList } from \"./context-sync\";\nimport { ExtensionOption } from \"./extension\";\n\n/**\n * Browser context configuration for session with optional extension support.\n *\n * This class provides browser context configuration for cloud sessions and supports\n * automatic extension synchronization when ExtensionOption is provided.\n *\n * Key Features:\n * - Browser context binding for sessions\n * - Automatic browser data upload on session end\n * - Optional extension integration with automatic context sync generation\n * - Clean API with ExtensionOption encapsulation\n *\n * Extension Configuration:\n * - **ExtensionOption**: Pass an ExtensionOption object with contextId and extensionIds\n * - **No Extensions**: Don't provide extensionOption parameter (extensionContextSyncs will be undefined)\n *\n * Usage Examples:\n * ```typescript\n * // With extensions using ExtensionOption\n * import { ExtensionOption } from \"./extension\";\n *\n * const extOption = new ExtensionOption(\n *   \"my_extensions\",\n *   [\"ext1\", \"ext2\"]\n * );\n *\n * const browserContext = new BrowserContext(\n *   \"browser_session\",\n *   true,\n *   extOption\n * );\n *\n * // Without extensions (minimal configuration)\n * const browserContext = new BrowserContext(\n *   \"browser_session\",\n *   true\n * );\n * // extensionContextSyncs will be undefined\n * ```\n */\nexport class BrowserContext {\n  /** ID of the browser context to bind to the session */\n  contextId: string;\n  /** Whether to automatically upload browser data when the session ends */\n  autoUpload: boolean;\n  /** Optional extension configuration object containing context_id and extension_ids */\n  extensionOption?: ExtensionOption;\n  /** ID of the extension context for browser extensions. Set automatically from extension_option. */\n  extensionContextId?: string;\n  /** List of extension IDs to synchronize. Set automatically from extension_option. */\n  extensionIds?: string[];\n  /** Auto-generated context syncs for extensions. None if no extension configuration provided. */\n  extensionContextSyncs?: ContextSync[];\n\n  /**\n   * Initialize BrowserContextImpl with optional extension support.\n   *\n   * @param contextId - ID of the browser context to bind to the session.\n   *                   This identifies the browser instance for the session.\n   * @param autoUpload - Whether to automatically upload browser data\n   *                    when the session ends. Defaults to true.\n   * @param extensionOption - Extension configuration object containing\n   *                         contextId and extensionIds. This encapsulates\n   *                         all extension-related configuration.\n   *                         Defaults to undefined.\n   *\n   * Extension Configuration:\n   * - **ExtensionOption**: Use extensionOption parameter with an ExtensionOption object\n   * - **No Extensions**: Don't provide extensionOption parameter\n   *\n   * Auto-generation:\n   * - extensionContextSyncs is automatically generated when extensionOption is provided\n   * - extensionContextSyncs will be undefined if no extensionOption is provided\n   * - extensionContextSyncs will be a ContextSync[] if extensionOption is valid\n   */\n  constructor(\n    contextId: string,\n    autoUpload: boolean = true,\n    extensionOption?: ExtensionOption\n  ) {\n    this.contextId = contextId;\n    this.autoUpload = autoUpload;\n    this.extensionOption = extensionOption;\n\n    // Handle extension configuration from ExtensionOption\n    if (extensionOption) {\n      // Extract extension information from ExtensionOption\n      this.extensionContextId = extensionOption.contextId;\n      this.extensionIds = extensionOption.extensionIds;\n      // Auto-generate extension context syncs\n      this.extensionContextSyncs = this._createExtensionContextSyncs();\n    } else {\n      // No extension configuration provided\n      this.extensionContextId = undefined;\n      this.extensionIds = [];\n      this.extensionContextSyncs = undefined;\n    }\n  }\n\n  /**\n   * Create ContextSync configurations for browser extensions.\n   *\n   * This method is called only when extensionOption is provided and contains\n   * valid extension configuration (contextId and extensionIds).\n   *\n   * @returns ContextSync[] - List of context sync configurations for extensions.\n   *                         Returns empty list if extension configuration is invalid.\n   */\n  private _createExtensionContextSyncs(): ContextSync[] {\n    if (!this.extensionIds || this.extensionIds.length === 0 || !this.extensionContextId) {\n      return [];\n    }\n\n    // Create whitelist for each extension ID\n    const whiteLists: WhiteList[] = this.extensionIds.map(extId => ({\n      path: extId,\n      excludePaths: []\n    }));\n\n    // Create sync policy for extensions\n    const syncPolicy: SyncPolicy = {\n      uploadPolicy: {\n        ...newUploadPolicy(),\n        autoUpload: false\n      },\n      extractPolicy: {\n        ...newExtractPolicy(),\n        extract: true,\n        deleteSrcFile: true\n      },\n      bwList: {\n        whiteLists: whiteLists\n      }\n    };\n\n    // Create context sync for extensions\n    const extensionSync = new ContextSync(\n      this.extensionContextId,\n      \"/tmp/extensions/\",\n      syncPolicy\n    );\n\n    return [extensionSync];\n  }\n\n  /**\n   * Get all context syncs including extension syncs.\n   *\n   * @returns ContextSync[] - All context sync configurations. Returns empty list if no extensions configured.\n   */\n  getAllContextSyncs(): ContextSync[] {\n    return this.extensionContextSyncs || [];\n  }\n}\n\n/**\n * Configuration interface for CreateSessionParams\n */\nexport interface CreateSessionParamsConfig {\n  labels: Record<string, string>;\n  imageId?: string;\n  contextSync: ContextSync[];\n  /** Optional configuration for browser data synchronization */\n  browserContext?: BrowserContext;\n  /** Whether to create a VPC-based session. Defaults to false. */\n  isVpc?: boolean;\n  /** MCP policy id to apply when creating the session. */\n  mcpPolicyId?: string;\n  /** Whether to enable browser recording for the session. Defaults to false. */\n  enableBrowserReplay?: boolean;\n}\n\n/**\n * CreateSessionParams provides a way to configure the parameters for creating a new session\n * in the AgentBay cloud environment.\n */\nexport class CreateSessionParams implements CreateSessionParamsConfig {\n  /** Custom labels for the Session. These can be used for organizing and filtering sessions. */\n  public labels: Record<string, string>;\n\n  /** Image ID to use for the session. */\n  public imageId?: string;\n\n  /**\n   * List of context synchronization configurations.\n   * These configurations define how contexts should be synchronized and mounted.\n   */\n  public contextSync: ContextSync[];\n\n  /** Optional configuration for browser data synchronization. */\n  public browserContext?: BrowserContext;\n\n  /** Whether to create a VPC-based session. Defaults to false. */\n  public isVpc: boolean;\n\n  /** MCP policy id to apply when creating the session. */\n  public mcpPolicyId?: string;\n\n  /** Whether to enable browser recording for the session. Defaults to false. */\n  public enableBrowserReplay: boolean;\n\n  constructor() {\n    this.labels = {};\n    this.contextSync = [];\n    this.isVpc = false;\n    this.enableBrowserReplay = false;\n  }\n\n  /**\n   * WithLabels sets the labels for the session parameters and returns the updated parameters.\n   */\n  withLabels(labels: Record<string, string>): CreateSessionParams {\n    this.labels = labels;\n    return this;\n  }\n\n\n  /**\n   * WithImageId sets the image ID for the session parameters and returns the updated parameters.\n   */\n  withImageId(imageId: string): CreateSessionParams {\n    this.imageId = imageId;\n    return this;\n  }\n\n  /**\n   * WithBrowserContext sets the browser context for the session parameters and returns the updated parameters.\n   */\n  withBrowserContext(browserContext: BrowserContext): CreateSessionParams {\n    this.browserContext = browserContext;\n    return this;\n  }\n\n  /**\n   * WithIsVpc sets the VPC flag for the session parameters and returns the updated parameters.\n   */\n  withIsVpc(isVpc: boolean): CreateSessionParams {\n    this.isVpc = isVpc;\n    return this;\n  }\n\n  /**\n   * WithMcpPolicyId sets the MCP policy id for the session parameters and returns the updated parameters.\n   */\n  withMcpPolicyId(mcpPolicyId: string): CreateSessionParams {\n    this.mcpPolicyId = mcpPolicyId;\n    return this;\n  }\n\n  /**\n   * WithenableBrowserReplay sets the browser recording flag for the session parameters and returns the updated parameters.\n   */\n  withEnableBrowserReplay(enableBrowserReplay: boolean): CreateSessionParams {\n    this.enableBrowserReplay = enableBrowserReplay;\n    return this;\n  }\n\n  /**\n   * GetLabelsJSON returns the labels as a JSON string.\n   * Returns an object with success status and result/error message to match Go version behavior.\n   */\n  getLabelsJSON(): { result: string; error?: string } {\n    if (Object.keys(this.labels).length === 0) {\n      return { result: \"\" };\n    }\n\n    try {\n      const labelsJSON = JSON.stringify(this.labels);\n      return { result: labelsJSON };\n    } catch (error) {\n      return {\n        result: \"\",\n        error: `Failed to marshal labels to JSON: ${error}`,\n      };\n    }\n  }\n\n  /**\n   * AddContextSync adds a context sync configuration to the session parameters.\n   */\n  addContextSync(\n    contextId: string,\n    path: string,\n    policy?: SyncPolicy\n  ): CreateSessionParams {\n    const contextSync = new ContextSync(contextId, path, policy);\n    this.contextSync.push(contextSync);\n    return this;\n  }\n\n  /**\n   * AddContextSyncConfig adds a pre-configured context sync to the session parameters.\n   */\n  addContextSyncConfig(contextSync: ContextSync): CreateSessionParams {\n    this.contextSync.push(contextSync);\n    return this;\n  }\n\n  /**\n   * WithContextSync sets the context sync configurations for the session parameters.\n   */\n  withContextSync(contextSyncs: ContextSync[]): CreateSessionParams {\n    this.contextSync = contextSyncs;\n    return this;\n  }\n\n  /**\n   * Convert to plain object for JSON serialization\n   */\n  toJSON(): CreateSessionParamsConfig {\n    // Get base context syncs\n    let allContextSyncs = [...this.contextSync];\n\n    // Add extension context syncs if browser context has them\n    if (this.browserContext && 'getAllContextSyncs' in this.browserContext) {\n      const extensionSyncs = this.browserContext.getAllContextSyncs();\n      allContextSyncs = allContextSyncs.concat(extensionSyncs);\n    }\n\n    return {\n      labels: this.labels,\n      imageId: this.imageId,\n      contextSync: allContextSyncs,\n      browserContext: this.browserContext,\n      isVpc: this.isVpc,\n      mcpPolicyId: this.mcpPolicyId,\n      enableBrowserReplay: this.enableBrowserReplay,\n    };\n  }\n\n  /**\n   * Create from plain object\n   */\n  static fromJSON(config: CreateSessionParamsConfig): CreateSessionParams {\n    const params = new CreateSessionParams();\n    params.labels = config.labels || {};\n    params.imageId = config.imageId;\n    params.contextSync = config.contextSync || [];\n\n    // Handle browser context - convert to BrowserContext class if needed\n    if (config.browserContext) {\n      if ('getAllContextSyncs' in config.browserContext) {\n        // It's already a BrowserContext instance\n        params.browserContext = config.browserContext;\n      } else {\n        // It's a plain object, convert to BrowserContext class\n        const bc = config.browserContext as any; // Type assertion for plain object\n        params.browserContext = new BrowserContext(\n          bc.contextId,\n          bc.autoUpload,\n          bc.extensionOption\n        );\n      }\n    }\n\n    params.isVpc = config.isVpc || false;\n    params.mcpPolicyId = config.mcpPolicyId;\n    params.enableBrowserReplay = config.enableBrowserReplay || false;\n    return params;\n  }\n}\n\n/**\n * NewCreateSessionParams creates a new CreateSessionParams with default values.\n */\nexport function newCreateSessionParams(): CreateSessionParams {\n  return new CreateSessionParams();\n}\n\n\n"],"mappings":"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","names":["fs","path","crypto","parse","$OpenApiUtil","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","$dara","path","context","resolve","pageIndex","contextIndex","path","resolve","path","resolve","path","KeyCode","$OpenApiUtil","resolve","fs","path","fetch","fetch","UploadStrategy","DownloadStrategy","path","path"]}