wuying-agentbay-sdk 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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/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/browser/index.ts","../src/browser/browser.ts","../src/browser/browser_agent.ts","../src/agent/index.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 \"./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\";\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, 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 * 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}\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 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 hasPersistenceData = 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 hasPersistenceData = 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 hasPersistenceData = true;\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 if (resourceUrl) {\n session.resourceUrl = resourceUrl;\n }\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\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 (hasPersistenceData) {\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 = 2000; // 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 * 调用mcp工具\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 * 调用mcp工具\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 * 创建 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 * 创建 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 * 删除持久化上下文\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 * 删除持久化上下文\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 * 获取上下文\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 * 获取上下文\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 * 获取上下文信息\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 * 获取上下文信息\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 * 获取标签\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 * 获取标签\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 * 获取特定端口的转发链接\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 * 获取特定端口的转发链接\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 * 获取mcp资源信息\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 * 获取mcp资源信息\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 * 获取上下文列表\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 * 获取上下文列表\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 * 根据Lable查询Session列表\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 * 根据Lable查询Session列表\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 * 修改上下文\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 * 修改上下文\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 * 释放 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 * 释放 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 * 设置标签\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 * 设置标签\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 * 同步上下文\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 * 同步上下文\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 * 初始化浏览器\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 * 初始化浏览器\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 * 初始化浏览器(同步版本)\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 * 获取上传context文件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 * 获取上传context文件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 * 查询context特定目录文件\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 * 查询context特定目录文件\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 * 获取上传context文件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 * 获取上传context文件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 * 获取上传context文件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 * 获取上传context文件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 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 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 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/**\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\n const envPath = path.resolve(process.cwd(), \".env\");\n\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 // update config object to reflect values from .env file\n if (k === \"AGENTBAY_REGION_ID\") config.region_id = envConfig[k];\n else if (k === \"AGENTBAY_ENDPOINT\") config.endpoint = envConfig[k];\n else if (k === \"AGENTBAY_TIMEOUT_MS\") {\n const timeout = parseInt(envConfig[k], 10);\n if (!isNaN(timeout) && timeout > 0) {\n config.timeout_ms = timeout;\n }\n }\n }\n }\n log(`Loaded .env file at: ${envPath}`);\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 { Agent } from \"./agent/agent\";\nimport { AgentBay } from \"./agent-bay\";\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 { Code } from \"./code\";\nimport { Command } from \"./command\";\nimport { ContextManager, newContextManager } from \"./context-manager\";\nimport { APIError } from \"./exceptions\";\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\";\nimport { Browser } from \"./browser\";\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 public resourceUrl = \"\";\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\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 this.resourceUrl = \"\";\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 * 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 // Trigger file upload\n try {\n const syncResult = await this.context.sync();\n if (!syncResult.success) {\n log(\"Warning: Context sync operation returned failure status\");\n }\n } catch (error) {\n logError(\"Warning: Failed to trigger context sync:\", error);\n // Continue with deletion even if sync fails\n }\n\n // Wait for uploads to complete\n const maxRetries = 150; // Maximum number of retries\n const retryInterval = 2000; // 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 this.context.info();\n\n // Check if all upload context items have status \"Success\" or \"Failed\"\n let allCompleted = true;\n let hasFailure = false;\n let hasUploads = false;\n\n for (const item of infoResult.contextStatusData) {\n // We only care about upload tasks\n if (item.taskType !== \"upload\") {\n continue;\n }\n\n hasUploads = true;\n log(`Upload 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(`Upload failed for context ${item.contextId}: ${item.errorMessage}`);\n }\n }\n\n if (allCompleted || !hasUploads) {\n if (hasFailure) {\n log(\"Context upload completed with failures\");\n } else if (hasUploads) {\n log(\"Context upload completed successfully\");\n } else {\n log(\"No upload tasks found\");\n }\n break;\n }\n\n log(`Waiting for context upload to complete, 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 // 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 // Update the session's resource_url with the latest value\n this.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\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 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\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 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(\"apiKey\", this.getAPIKey());\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 };\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 { 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 { ApiResponse, extractRequestId } from \"./types/api-response\";\nimport { Client } from \"./api/client\";\nimport { GetContextInfoRequest, SyncContextRequest } from \"./api/models/model\";\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 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(): Promise<ContextSyncResult> {\n return this.syncWithParams();\n }\n\n async syncWithParams(\n contextId?: string,\n path?: string,\n mode?: string\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 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\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} from \"../types/api-response\";\n\n// Default chunk size for large file operations (60KB)\nconst DEFAULT_CHUNK_SIZE = 60 * 1024;\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 * Reads the content of a file.\n * Corresponds to Python's read_file() method\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 async readFile(\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 * Writes content to a file.\n * Corresponds to Python's write_file() method\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 async writeFile(\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 a large file in chunks to handle size limitations of the underlying API.\n * Corresponds to Python's read_large_file() method\n *\n * @param path - Path to the file to read.\n * @param chunkSize - Optional: Size of each chunk in bytes. Default is 60KB.\n * @returns FileContentResult with complete file content and requestId\n */\n async readLargeFile(\n path: string,\n chunkSize: number = DEFAULT_CHUNK_SIZE\n ): Promise<FileContentResult> {\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.readFile(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 a large file in chunks to handle size limitations of the underlying API.\n * Corresponds to Python's write_large_file() method\n *\n * @param path - Path to the file to write.\n * @param content - Content to write to the file.\n * @param chunkSize - Optional: Size of each chunk in bytes. Default is 60KB.\n * @returns BoolResult indicating success or failure with requestId\n */\n async writeLargeFile(\n path: string,\n content: string,\n chunkSize: number = DEFAULT_CHUNK_SIZE\n ): Promise<BoolResult> {\n try {\n const contentLen = content.length;\n\n // If content is small enough, use the regular WriteFile method\n if (contentLen <= chunkSize) {\n return await this.writeFile(path, content, \"overwrite\");\n }\n\n // Write the first chunk with \"overwrite\" mode to create/clear the file\n const firstChunkEnd = Math.min(chunkSize, contentLen);\n\n const firstResult = await this.writeFile(\n path,\n content.substring(0, firstChunkEnd),\n \"overwrite\"\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.writeFile(\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","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 { 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 proxies?: BrowserProxy[];\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 proxies?: BrowserProxy[];\n\n constructor(\n useStealth = false,\n userAgent?: string,\n viewport?: BrowserViewport,\n screen?: BrowserScreen,\n fingerprint?: BrowserFingerprint,\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.proxies = proxies;\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\n toMap(): Record<string, any> {\n const optionMap: Record<string, any> = {};\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.proxies !== undefined) {\n optionMap['proxies'] = this.proxies.map(proxy => proxy.toMap());\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.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 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 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 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} ","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(page: any, options: ActOptions): 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(page: any, options: ActOptions): Promise<ActResult> {\n return this.act(page, options);\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(page: any, options: ObserveOptions): 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(page: any, options: ObserveOptions): Promise<[boolean, ObserveResult[]]> {\n return this.observe(page, options);\n }\n\n /**\n * Extract information from the given Playwright Page object.\n */\n async extract<T>(page: any, options: ExtractOptions<T>): 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>(page: any, options: ExtractOptions<T>): Promise<[boolean, T[]]> {\n return this.extract<T>(page, options);\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 { Agent, ExecutionResult, QueryResult, McpToolResult, McpSession } from \"./agent\"; ","// 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// 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 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 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.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.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 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// 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 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 } from \"./context-sync\";\n\n/**\n * Browser context configuration for session.\n */\nexport interface 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}\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}\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 constructor() {\n this.labels = {};\n this.contextSync = [];\n this.isVpc = 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 * 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 return {\n labels: this.labels,\n imageId: this.imageId,\n contextSync: this.contextSync,\n browserContext: this.browserContext,\n isVpc: this.isVpc,\n mcpPolicyId: this.mcpPolicyId,\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 params.browserContext = config.browserContext;\n params.isVpc = config.isVpc || false;\n params.mcpPolicyId = config.mcpPolicyId;\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"],"mappings":"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","names":["fs","path","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","path","path","path","KeyCode","pageIndex","contextIndex","resolve","$OpenApiUtil","resolve","UploadStrategy","DownloadStrategy","path","path"]}
1
+ {"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/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/browser/index.ts","../src/browser/browser.ts","../src/browser/browser_agent.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 * 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}\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 hasPersistenceData = 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 hasPersistenceData = 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 hasPersistenceData = true;\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\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 (hasPersistenceData) {\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 = 2000; // 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 * 调用mcp工具\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 * 调用mcp工具\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 * 创建 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 * 创建 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 * 删除持久化上下文\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 * 删除持久化上下文\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 * 获取上下文\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 * 获取上下文\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 * 获取上下文信息\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 * 获取上下文信息\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 * 获取标签\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 * 获取标签\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 * 获取特定端口的转发链接\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 * 获取特定端口的转发链接\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 * 获取mcp资源信息\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 * 获取mcp资源信息\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 * 获取上下文列表\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 * 获取上下文列表\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 * 根据Lable查询Session列表\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 * 根据Lable查询Session列表\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 * 修改上下文\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 * 修改上下文\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 * 释放 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 * 释放 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 * 设置标签\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 * 设置标签\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 * 同步上下文\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 * 同步上下文\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 * 初始化浏览器\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 * 初始化浏览器\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 * 初始化浏览器(同步版本)\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 * 获取上传context文件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 * 获取上传context文件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 * 查询context特定目录文件\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 * 查询context特定目录文件\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 * 获取上传context文件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 * 获取上传context文件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 * 获取上传context文件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 * 获取上传context文件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 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 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 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 { Agent } from \"./agent/agent\";\nimport { AgentBay } from \"./agent-bay\";\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 { Code } from \"./code\";\nimport { Command } from \"./command\";\nimport { ContextManager, newContextManager } from \"./context-manager\";\nimport { APIError } from \"./exceptions\";\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\";\nimport { Browser } from \"./browser\";\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\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 * 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 // Trigger file upload\n try {\n const syncResult = await this.context.sync();\n if (!syncResult.success) {\n log(\"Warning: Context sync operation returned failure status\");\n }\n } catch (error) {\n logError(\"Warning: Failed to trigger context sync:\", error);\n // Continue with deletion even if sync fails\n }\n\n // Wait for uploads to complete\n const maxRetries = 150; // Maximum number of retries\n const retryInterval = 2000; // 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 this.context.info();\n\n // Check if all upload context items have status \"Success\" or \"Failed\"\n let allCompleted = true;\n let hasFailure = false;\n let hasUploads = false;\n\n for (const item of infoResult.contextStatusData) {\n // We only care about upload tasks\n if (item.taskType !== \"upload\") {\n continue;\n }\n\n hasUploads = true;\n log(`Upload 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(`Upload failed for context ${item.contextId}: ${item.errorMessage}`);\n }\n }\n\n if (allCompleted || !hasUploads) {\n if (hasFailure) {\n log(\"Context upload completed with failures\");\n } else if (hasUploads) {\n log(\"Context upload completed successfully\");\n } else {\n log(\"No upload tasks found\");\n }\n break;\n }\n\n log(`Waiting for context upload to complete, 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 // 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\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 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\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 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(\"apiKey\", this.getAPIKey());\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 };\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 { 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 { ApiResponse, extractRequestId } from \"./types/api-response\";\nimport { Client } from \"./api/client\";\nimport { GetContextInfoRequest, SyncContextRequest } from \"./api/models/model\";\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 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(): Promise<ContextSyncResult> {\n return this.syncWithParams();\n }\n\n async syncWithParams(\n contextId?: string,\n path?: string,\n mode?: string\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 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\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} from \"../types/api-response\";\n\n// Default chunk size for large file operations (60KB)\nconst DEFAULT_CHUNK_SIZE = 60 * 1024;\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","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 { 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 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 proxies?: BrowserProxy[];\n extensionPath?: string;\n\n constructor(\n useStealth = false,\n userAgent?: string,\n viewport?: BrowserViewport,\n screen?: BrowserScreen,\n fingerprint?: BrowserFingerprint,\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.proxies = proxies;\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\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.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.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 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 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} ","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(page: any, options: ActOptions): 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(page: any, options: ActOptions): Promise<ActResult> {\n return this.act(page, options);\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(page: any, options: ObserveOptions): 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(page: any, options: ObserveOptions): Promise<[boolean, ObserveResult[]]> {\n return this.observe(page, options);\n }\n\n /**\n * Extract information from the given Playwright Page object.\n */\n async extract<T>(page: any, options: ExtractOptions<T>): 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>(page: any, options: ExtractOptions<T>): Promise<[boolean, T[]]> {\n return this.extract<T>(page, options);\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 { 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}\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 constructor() {\n this.labels = {};\n this.contextSync = [];\n this.isVpc = 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 * 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 };\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 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","path","path","path","KeyCode","pageIndex","contextIndex","resolve","$OpenApiUtil","resolve","fs","path","fetch","fetch","UploadStrategy","DownloadStrategy","path","path"]}