wuying-agentbay-sdk 0.4.0 → 0.5.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/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/config.ts","../src/utils/logger.ts","../src/context.ts","../src/types/api-response.ts","../src/exceptions.ts","../src/session.ts","../src/application/application.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"],"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 } from \"./agent-bay\";\nexport * from \"./api\";\nexport * from \"./application\";\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\";\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 } from \"./api/models/model\";\nimport { Client } from \"./api/client\";\n\nimport { loadConfig, Config } from \"./config\";\nimport { ContextService } from \"./context\";\nimport { ContextSync } from \"./context-sync\";\nimport { APIError, AuthenticationError } from \"./exceptions\";\nimport { Session } from \"./session\";\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 contextId?: string;\n labels?: Record<string, string>;\n imageId?: string;\n contextSync?: ContextSync[];\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 if (!params) {\n params = {};\n }\n\n const request = new $_client.CreateMcpSessionRequest({\n authorization: \"Bearer \" + this.apiKey,\n });\n\n // Add context_id if provided\n if (params.contextId) {\n request.contextId = params.contextId;\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 context sync configurations if provided\n if (params.contextSync && params.contextSync.length > 0) {\n const persistenceDataList: any[] = [];\n for (const contextSync of params.contextSync) {\n const persistenceItem: any = {\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 }\n\n // Log API request\n log(\"API Call: CreateMcpSession\");\n let requestLog = \"Request: \";\n if (request.contextId) {\n requestLog += `ContextId=${request.contextId}, `;\n }\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: any, 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 log(\"response =\", response);\n\n // Extract request ID\n const requestId = extractRequestId(response) || \"\";\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 this.sessions.set(session.sessionId, session);\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 * @returns DeleteResult indicating success or failure and request ID\n */\n async delete(session: Session): Promise<DeleteResult> {\n try {\n // Delete the session and get the result\n const deleteResult = await session.delete();\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.persistenceDataListShrink)) {\n body[\"PersistenceDataList\"] = request.persistenceDataListShrink;\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: \"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","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 { 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","// 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 resourceId?: string;\n resourceUrl?: string;\n sessionId?: string;\n success?: boolean;\n static names(): { [key: string]: string } {\n return {\n appInstanceId: 'AppInstanceId',\n errMsg: 'ErrMsg',\n resourceId: 'ResourceId',\n resourceUrl: 'ResourceUrl',\n sessionId: 'SessionId',\n success: 'Success',\n };\n }\n\n static types(): { [key: string]: any } {\n return {\n appInstanceId: 'string',\n errMsg: 'string',\n resourceId: 'string',\n resourceUrl: 'string',\n sessionId: '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';\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 persistenceDataList?: CreateMcpSessionRequestPersistenceDataList[];\n sessionId?: string;\n static names(): { [key: string]: string } {\n return {\n authorization: 'Authorization',\n contextId: 'ContextId',\n externalUserId: 'ExternalUserId',\n imageId: 'ImageId',\n labels: 'Labels',\n persistenceDataList: 'PersistenceDataList',\n sessionId: 'SessionId',\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 persistenceDataList: { 'type': 'array', 'itemType': CreateMcpSessionRequestPersistenceDataList },\n sessionId: 'string',\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 persistenceDataListShrink?: string;\n sessionId?: string;\n static names(): { [key: string]: string } {\n return {\n authorization: 'Authorization',\n contextId: 'ContextId',\n externalUserId: 'ExternalUserId',\n imageId: 'ImageId',\n labels: 'Labels',\n persistenceDataListShrink: 'PersistenceDataList',\n sessionId: 'SessionId',\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 persistenceDataListShrink: '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 { 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\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","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 * 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} 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 * 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.\n * Corresponds to Python's list() method\n *\n * @returns ContextListResult with contexts list and requestId\n */\n async list(): Promise<ContextListResult> {\n try {\n const request = new $_client.ListContextsRequest({\n authorization: `Bearer ${this.agentBay.getAPIKey()}`,\n });\n\n // Log API request\n log(\"API Call: ListContexts\");\n log(\"Request: (no parameters)\");\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 };\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 * 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 /** 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","import { AgentBay } from \"./agent-bay\";\nimport { Client } from \"./api/client\";\nimport {\n GetLabelRequest,\n GetLinkRequest,\n GetMcpResourceRequest,\n ReleaseMcpSessionRequest,\n SetLabelRequest,\n} from \"./api/models/model\";\nimport { Application } from \"./application\";\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\";\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 // File, command, and oss handlers (matching Python naming)\n public fileSystem: FileSystem; // file_system in Python\n public command: Command;\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 // Context management (matching Go version)\n public context: ContextManager;\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 handlers (matching Python naming)\n this.fileSystem = new FileSystem(this);\n this.command = new Command(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 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 * Delete this session.\n *\n * @returns DeleteResult indicating success or failure and request ID\n */\n async delete(): Promise<DeleteResult> {\n try {\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 * 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 // 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 || \"\";\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 || \"\";\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","import { CallMcpToolRequest } from \"../api/models/CallMcpToolRequest\";\nimport { Client } from \"../api/client\";\nimport { log, logError } from \"../utils/logger\";\nimport { APIError } from \"../exceptions\";\nimport {\n extractRequestId,\n ProcessListResult,\n InstalledAppListResult,\n AppOperationResult,\n} from \"../types/api-response\";\n\n/**\n * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\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 management operations in the AgentBay cloud environment.\n */\nexport class Application {\n private session: {\n getAPIKey(): string;\n getClient(): Client;\n getSessionId(): string;\n };\n\n /**\n * Creates a new Application instance.\n * @param session The session object that provides access to the AgentBay API.\n */\n constructor(session: {\n getAPIKey(): string;\n getClient(): Client;\n getSessionId(): string;\n }) {\n this.session = session;\n }\n\n /**\n * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n const argsJSON = JSON.stringify(args);\n const request = new CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: argsJSON,\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(`Request: SessionId=${request.sessionId}, Args=${request.args}`);\n\n const client = this.session.getClient();\n const response = await client.callMcpTool(request);\n\n // Log API response\n if (response && response.body) {\n log(`Response from CallMcpTool - ${toolName}:`, response.body);\n }\n\n // Extract data from response\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call ${toolName}: ${error}`);\n }\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.callMcpTool(\n \"get_installed_apps\",\n args,\n \"Failed to get installed apps\"\n );\n\n let apps: InstalledApp[] = [];\n if (result.textContent) {\n apps = this.parseJSON<InstalledApp[]>(result.textContent);\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: any = {\n start_cmd: startCmd,\n };\n\n if (workDirectory) {\n args.work_directory = workDirectory;\n }\n\n if (activity) {\n args.activity = activity;\n }\n\n const result = await this.callMcpTool(\n \"start_app\",\n args,\n \"Failed to start app\"\n );\n\n let processes: Process[] = [];\n if (result.textContent) {\n processes = this.parseJSON<Process[]>(result.textContent);\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 name of the process to stop.\n * @returns AppOperationResult with requestId\n * @throws Error if the operation fails.\n */\n async stopAppByPName(pname: string): Promise<AppOperationResult> {\n try {\n const args = {\n pname,\n };\n\n const result = await this.callMcpTool(\n \"stop_app_by_pname\",\n args,\n \"Failed to stop app by pname\"\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 pname: ${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 ID of the process to stop.\n * @returns AppOperationResult with requestId\n * @throws Error if the operation fails.\n */\n async stopAppByPID(pid: number): Promise<AppOperationResult> {\n try {\n const args = {\n pid,\n };\n\n const result = await this.callMcpTool(\n \"stop_app_by_pid\",\n args,\n \"Failed to stop app by pid\"\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 pid: ${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 command to stop the application.\n * @returns AppOperationResult with requestId\n * @throws Error if the operation fails.\n */\n async stopAppByCmd(stopCmd: string): Promise<AppOperationResult> {\n try {\n const args = {\n stop_cmd: stopCmd,\n };\n\n const result = await this.callMcpTool(\n \"stop_app_by_cmd\",\n args,\n \"Failed to stop app by command\"\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 * Lists all currently visible applications.\n * Corresponds to Python's list_visible_apps() method\n *\n * @returns ProcessListResult with visible processes and requestId\n * @throws Error if the operation fails.\n */\n async listVisibleApps(): Promise<ProcessListResult> {\n try {\n const args = {};\n\n const result = await this.callMcpTool(\n \"list_visible_apps\",\n args,\n \"Failed to list visible apps\"\n );\n\n let processes: Process[] = [];\n if (result.textContent) {\n processes = this.parseJSON<Process[]>(result.textContent);\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","import { APIError } from \"../exceptions\";\nimport { Session } from \"../session\";\nimport { Client } from \"../api/client\";\nimport { CallMcpToolRequest } from \"../api/models/model\";\nimport { log, logError } from \"../utils/logger\";\nimport {\n extractRequestId,\n CommandResult,\n CodeExecutionResult,\n} from \"../types/api-response\";\n\nimport * as $_client from \"../api\";\n\n/**\n * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\n}\n\n/**\n * Handles command execution operations in the AgentBay cloud environment.\n */\nexport class Command {\n private session: Session;\n private client!: $_client.Client;\n private baseUrl!: string;\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 * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n const argsJSON = JSON.stringify(args);\n const callToolRequest = new CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: argsJSON,\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(\n `Request: SessionId=${this.session.getSessionId()}, Args=${argsJSON}`\n );\n\n const response = await this.session\n .getClient()\n .callMcpTool(callToolRequest);\n\n // Log API response\n log(`Response from CallMcpTool - ${toolName}:`, response.body);\n\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n // Extract data from response\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call ${toolName}: ${error}`);\n }\n }\n\n /**\n * Execute a command in the cloud environment with a specified timeout.\n * Corresponds to Python's execute_command() method\n *\n * @param command - The command to execute.\n * @param timeoutMs - The timeout for the command execution in milliseconds. Default is 1000ms.\n * @returns CommandResult with command output and requestId\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\n const result = await this.callMcpTool(\n \"shell\",\n args,\n \"Failed to execute command\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n output: result.textContent || \"\",\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 /**\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 result = await this.callMcpTool(\n \"run_code\",\n args,\n \"Failed to execute code\"\n );\n return {\n requestId: result.requestId || \"\",\n success: true,\n result: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n result: \"\",\n errorMessage: `Failed to run code: ${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 { APIError } from \"../exceptions\";\nimport { Session } from \"../session\";\nimport { CallMcpToolRequest } from \"../api/models/model\";\nimport * as $_client from \"../api\";\nimport { log, logError } from \"../utils/logger\";\nimport {\n extractRequestId,\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// File operations that might contain large content\nconst FILE_OPERATIONS: { [key: string]: boolean } = {\n read_file: true,\n write_file: true,\n read_multiple_files: true,\n};\n\n/**\n * Checks if the tool operation is file-related and might contain large content\n *\n * @param toolName - Name of the MCP tool\n * @returns True if the operation is file-related\n */\nfunction isFileOperation(toolName: string): boolean {\n return FILE_OPERATIONS[toolName] === true;\n}\n\n/**\n * Replaces large content with size information in JSON args for logging\n *\n * @param args - Arguments object to truncate\n * @returns Truncated arguments object for logging\n */\nfunction truncateContentForLogging(\n args: Record<string, any>\n): Record<string, any> {\n const truncatedArgs = { ...args };\n\n // Check for content field and replace with length info\n if (typeof truncatedArgs.content === \"string\") {\n const contentLength = truncatedArgs.content.length;\n truncatedArgs.content = `[Content length: ${contentLength} bytes]`;\n }\n\n // Check for paths array and log number of paths instead of all paths\n if (Array.isArray(truncatedArgs.paths) && truncatedArgs.paths.length > 3) {\n truncatedArgs.paths = `[${truncatedArgs.paths.length} paths, first few: ${truncatedArgs.paths[0]}, ${truncatedArgs.paths[1]}, ${truncatedArgs.paths[2]}, ...]`;\n }\n\n return truncatedArgs;\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 * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\n}\n\n/**\n * Handles file operations in the AgentBay cloud environment.\n */\nexport class FileSystem {\n private session: Session;\n private client!: $_client.Client;\n private baseUrl!: string;\n\n /**\n * Initialize a FileSystem object.\n *\n * @param session - The Session instance that this FileSystem belongs to.\n */\n constructor(session: Session) {\n this.session = session;\n }\n\n /**\n * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n // Handle logging differently based on operation type\n let loggableArgs = args;\n if (isFileOperation(toolName)) {\n // For file operations, truncate content for logging\n loggableArgs = truncateContentForLogging(args);\n }\n\n const argsJSON = JSON.stringify(args);\n const loggableArgsJSON = JSON.stringify(loggableArgs);\n\n const callToolRequest = new CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: argsJSON,\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(\n `Request: SessionId=${this.session.getSessionId()}, Args=${loggableArgsJSON}`\n );\n\n const response = await this.session\n .getClient()\n .callMcpTool(callToolRequest);\n\n // Log API response differently based on operation type\n if (isFileOperation(toolName)) {\n // Log content size for file operations instead of full content\n log(\n `Response from CallMcpTool - ${toolName} - status: ${response.statusCode}`\n );\n\n // Log only relevant response information without content\n if (response.body?.data) {\n const data = response.body.data as Record<string, any>;\n if (data.isError === true) {\n log(`Response contains error: ${data.isError}`);\n } else {\n // For successful responses, don't log the content at all\n log(\"Response successful, content length info provided separately\");\n\n // If there's content, log its size instead of the actual content\n if (Array.isArray(data.content) && data.content.length > 0) {\n let totalSize = 0;\n for (const item of data.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n totalSize += item.text.length;\n }\n }\n log(`Content size: ${totalSize} bytes`);\n }\n }\n }\n } else {\n // For non-file operations, create a sanitized version of the response body\n // that doesn't include large content fields\n const sanitizedBody = { ...response.body };\n if (sanitizedBody.data && typeof sanitizedBody.data === \"object\") {\n const sanitizedData = { ...sanitizedBody.data };\n if (Array.isArray(sanitizedData.content)) {\n sanitizedData.content = `[Array with ${sanitizedData.content.length} items]`;\n }\n sanitizedBody.data = sanitizedData;\n }\n log(`Response from CallMcpTool - ${toolName}:`, sanitizedBody);\n }\n\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n // Extract data from response\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call ${toolName}: ${error}`);\n }\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.callMcpTool(\n \"create_directory\",\n args,\n \"Failed to create directory\"\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.callMcpTool(\n \"edit_file\",\n args,\n \"Failed to edit file\"\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.callMcpTool(\n \"get_file_info\",\n args,\n \"Failed to get file info\"\n );\n\n // Parse and return the file info\n if (!result.textContent) {\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.textContent);\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.callMcpTool(\n \"list_directory\",\n args,\n \"Failed to list directory\"\n );\n\n // Parse the text content into directory entries\n const entries = result.textContent\n ? parseDirectoryListing(result.textContent)\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.callMcpTool(\n \"move_file\",\n args,\n \"Failed to move file\"\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: Line offset to start reading from.\n * @param length - Optional: Number of lines to read. If 0, reads the entire file.\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: Record<string, 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.callMcpTool(\n \"read_file\",\n args,\n \"Failed to read file\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n content: result.textContent || \"\",\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.callMcpTool(\n \"read_multiple_files\",\n args,\n \"Failed to read multiple files\"\n );\n\n const fileContents: Record<string, string> = {};\n\n if (result.textContent) {\n // Parse the response into a map of file paths to contents\n const lines = result.textContent.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: Record<string, any> = {\n path,\n pattern,\n };\n\n if (excludePatterns.length > 0) {\n args.exclude_patterns = excludePatterns;\n }\n\n const result = await this.callMcpTool(\n \"search_files\",\n args,\n \"Failed to search files\"\n );\n\n // Parse the text content into search results\n let searchResults: string[] = [];\n if (result.textContent) {\n // Split by newlines and filter out empty lines\n searchResults = result.textContent\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.callMcpTool(\n \"write_file\",\n args,\n \"Failed to write file\"\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 log(\n `ReadLargeFile: Starting chunked read of ${path} (total size: ${fileSize} bytes, chunk size: ${chunkSize} bytes)`\n );\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 log(\n `ReadLargeFile: Reading chunk ${\n chunkCount + 1\n } (${length} bytes at offset ${offset}/${fileSize})`\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 logError(`Error reading chunk at offset ${offset}: ${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 log(\n `ReadLargeFile: Successfully read ${path} in ${chunkCount} chunks (total: ${fileSize} bytes)`\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 log(\n `WriteLargeFile: Starting chunked write to ${path} (total size: ${contentLen} bytes, chunk size: ${chunkSize} bytes)`\n );\n\n // If content is small enough, use the regular WriteFile method\n if (contentLen <= chunkSize) {\n log(\n `WriteLargeFile: Content size (${contentLen} bytes) is smaller than chunk size, using normal WriteFile`\n );\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 log(\n `WriteLargeFile: Writing first chunk (0-${firstChunkEnd} bytes) with overwrite mode`\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 log(\n `WriteLargeFile: Writing chunk ${\n chunkCount + 1\n } (${offset}-${end} bytes) with append mode`\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 log(\n `WriteLargeFile: Successfully wrote ${path} in ${chunkCount} chunks (total: ${contentLen} bytes)`\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 { APIError } from \"../exceptions\";\nimport { Session } from \"../session\";\nimport { Client } from \"../api/client\";\nimport { CallMcpToolRequest } from \"../api/models/model\";\nimport { log, logError } from \"../utils/logger\";\nimport {\n extractRequestId,\n OSSClientResult,\n OSSUploadResult,\n OSSDownloadResult,\n} from \"../types/api-response\";\n\nimport * as $_client from \"../api\";\n\n/**\n * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\n}\n\n/**\n * Handles Object Storage Service operations in the AgentBay cloud environment.\n */\nexport class Oss {\n private session: Session;\n private client!: $_client.Client;\n private baseUrl!: string;\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 * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n const callToolRequest = new $_client.CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: JSON.stringify(args),\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(\n `Request: SessionId=${this.session.getSessionId()}, Args=${JSON.stringify(\n args\n )}`\n );\n\n const response = await this.session\n .getClient()\n .callMcpTool(callToolRequest);\n\n // Log API response\n log(`Response from CallMcpTool - ${toolName}:`, response.body);\n\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n // Extract data from response\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call MCP tool ${toolName}: ${error}`);\n }\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 for OSS authentication.\n * @param accessKeySecret - The Access Key Secret for OSS authentication.\n * @param securityToken - The security token for OSS authentication.\n * @param endpoint - The OSS service endpoint. If not specified, the default is used.\n * @param region - The OSS region. If not specified, the default is used.\n * @returns OSSClientResult with initialization result and requestId\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: Record<string, any> = {\n access_key_id: accessKeyId,\n access_key_secret: accessKeySecret,\n };\n\n // Add optional parameters if provided\n if (securityToken) {\n args.security_token = securityToken;\n }\n if (endpoint) {\n args.endpoint = endpoint;\n }\n if (region) {\n args.region = region;\n }\n\n const result = await this.callMcpTool(\n \"oss_env_init\",\n args,\n \"Failed to initialize OSS environment\"\n );\n\n let clientConfig: Record<string, any> = {};\n if (result.textContent) {\n try {\n clientConfig = JSON.parse(result.textContent);\n } catch (parseError) {\n // If parsing fails, treat as string data\n clientConfig = { data: result.textContent };\n }\n }\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n clientConfig,\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 local file or directory to OSS.\n * Corresponds to Python's upload() method\n *\n * @param bucket - OSS bucket name.\n * @param object - ObjectS.\n * @param path - Local file or directory path to upload.\n * @returns OSSUploadResult with upload result and requestId\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\n const result = await this.callMcpTool(\n \"oss_upload\",\n args,\n \"Failed to upload to OSS\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n content: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n content: \"\",\n errorMessage: `Failed to upload to OSS: ${error}`,\n };\n }\n }\n\n /**\n * Upload a local file or directory to OSS using a pre-signed URL.\n * Corresponds to Python's upload_anonymous() method\n *\n * @param url - Pre-signed URL for anonymous upload.\n * @param path - Local file or directory path to upload.\n * @returns OSSUploadResult with upload result and requestId\n */\n async uploadAnonymous(url: string, path: string): Promise<OSSUploadResult> {\n try {\n const args = {\n url,\n path,\n };\n\n const result = await this.callMcpTool(\n \"oss_upload_annon\",\n args,\n \"Failed to upload anonymously\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n content: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n content: \"\",\n errorMessage: `Failed to upload anonymously: ${error}`,\n };\n }\n }\n\n /**\n * Download an object from OSS to a local file or directory.\n * Corresponds to Python's download() method\n *\n * @param bucket - OSS bucket name.\n * @param object - Object key in OSS.\n * @param path - Local file or directory path to save the downloaded content.\n * @returns OSSDownloadResult with download result and requestId\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\n const result = await this.callMcpTool(\n \"oss_download\",\n args,\n \"Failed to download from OSS\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n content: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n content: \"\",\n errorMessage: `Failed to download from OSS: ${error}`,\n };\n }\n }\n\n /**\n * Download an object from OSS using a pre-signed URL.\n * Corresponds to Python's download_anonymous() method\n *\n * @param url - Pre-signed URL for anonymous download.\n * @param path - Local file or directory path to save the downloaded content.\n * @returns OSSDownloadResult with download result and requestId\n */\n async downloadAnonymous(\n url: string,\n path: string\n ): Promise<OSSDownloadResult> {\n try {\n const args = {\n url,\n path,\n };\n\n const result = await this.callMcpTool(\n \"oss_download_annon\",\n args,\n \"Failed to download anonymously\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n content: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n content: \"\",\n errorMessage: `Failed to download anonymously: ${error}`,\n };\n }\n }\n}\n","import { APIError } from \"../exceptions\";\nimport { Session } from \"../session\";\nimport { CallMcpToolRequest } from \"../api/models/model\";\nimport { log, logError } from \"../utils/logger\";\nimport {\n extractRequestId,\n UIElementListResult,\n BoolResult,\n OperationResult,\n} from \"../types/api-response\";\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 * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\n}\n\n/**\n * KeyCode constants for mobile device input\n */\nexport const 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 * UI 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: Session) {\n this.session = session;\n }\n\n /**\n * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n const argsJSON = JSON.stringify(args);\n const callToolRequest = new CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: argsJSON,\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(\n `Request: SessionId=${this.session.getSessionId()}, Args=${argsJSON}`\n );\n\n const response = await this.session\n .getClient()\n .callMcpTool(callToolRequest);\n\n // Log API response\n log(`Response from CallMcpTool - ${toolName}:`, response.body);\n\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n // Extract data from response\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call ${toolName}: ${error}`);\n }\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 */\n async getClickableUIElements(timeoutMs = 2000): Promise<UIElementListResult> {\n try {\n const args = {\n timeout_ms: timeoutMs,\n };\n\n const result = await this.callMcpTool(\n \"get_clickable_ui_elements\",\n args,\n \"Failed to get clickable UI elements\"\n );\n\n let elements: UIElement[] = [];\n if (result.textContent) {\n try {\n elements = JSON.parse(result.textContent) as UIElement[];\n } catch (error) {\n return {\n requestId: result.requestId || \"\",\n success: false,\n elements: [],\n errorMessage: `Failed to parse clickable UI elements: ${error}`,\n };\n }\n }\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n 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 within the specified timeout.\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 */\n async getAllUIElements(timeoutMs = 2000): Promise<UIElementListResult> {\n try {\n const args = {\n timeout_ms: timeoutMs,\n };\n\n const result = await this.callMcpTool(\n \"get_all_ui_elements\",\n args,\n \"Failed to get all UI elements\"\n );\n\n let elements: UIElement[] = [];\n if (result.textContent) {\n try {\n elements = JSON.parse(result.textContent) as UIElement[];\n } catch (error) {\n return {\n requestId: result.requestId || \"\",\n success: false,\n elements: [],\n errorMessage: `Failed to parse all UI elements: ${error}`,\n };\n }\n }\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n 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.\n * @returns BoolResult with key press result and requestId\n */\n async sendKey(key: number): Promise<BoolResult> {\n try {\n const args = {\n key,\n };\n\n const result = await this.callMcpTool(\n \"send_key\",\n args,\n \"Failed to send key\"\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 send key: ${error}`,\n };\n }\n }\n\n /**\n * Inputs text into the active field.\n * Corresponds to Python's input_text() method\n *\n * @param text - The text to input.\n * @returns BoolResult with input result and requestId\n */\n async inputText(text: string): Promise<BoolResult> {\n try {\n const args = {\n text,\n };\n\n const result = await this.callMcpTool(\n \"input_text\",\n args,\n \"Failed to input text\"\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 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 swipe result and requestId\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\n const result = await this.callMcpTool(\n \"swipe\",\n args,\n \"Failed to perform swipe\"\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 perform swipe: ${error}`,\n };\n }\n }\n\n /**\n * Performs a click 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 click. Default is 'left'.\n * @returns BoolResult with click result and requestId\n */\n async click(x: number, y: number, button = \"left\"): Promise<BoolResult> {\n try {\n const args = {\n x,\n y,\n button,\n };\n\n const result = await this.callMcpTool(\n \"click\",\n args,\n \"Failed to perform click\"\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 perform 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 screenshot data and requestId\n */\n async screenshot(): Promise<OperationResult> {\n try {\n const args = {};\n\n const result = await this.callMcpTool(\n \"system_screenshot\",\n args,\n \"Failed to take screenshot\"\n );\n\n return {\n requestId: result.requestId || \"\",\n success: true,\n data: result.textContent || \"\",\n };\n } catch (error) {\n return {\n requestId: \"\",\n success: false,\n errorMessage: `Failed to take screenshot: ${error}`,\n };\n }\n }\n}\n","import { CallMcpToolRequest } from \"../api/models/CallMcpToolRequest\";\nimport { log, logError } from \"../utils/logger\";\nimport { APIError } from \"../exceptions\";\nimport {\n extractRequestId,\n WindowListResult,\n WindowInfoResult,\n BoolResult,\n} from \"../types/api-response\";\n\n/**\n * Result object for a CallMcpTool operation\n */\ninterface CallMcpToolResult {\n data: Record<string, any>;\n content?: any[];\n textContent?: string;\n isError: boolean;\n errorMsg?: string;\n statusCode: number;\n requestId?: string;\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 getClient(): any;\n getSessionId(): string;\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 getClient(): any;\n getSessionId(): string;\n }) {\n this.session = session;\n }\n\n /**\n * Helper method to call MCP tools and handle common response processing\n *\n * @param toolName - Name of the MCP tool to call\n * @param args - Arguments to pass to the tool\n * @param defaultErrorMsg - Default error message if specific error details are not available\n * @returns A CallMcpToolResult with the response data\n * @throws APIError if the call fails\n */\n private async callMcpTool(\n toolName: string,\n args: Record<string, any>,\n defaultErrorMsg: string\n ): Promise<CallMcpToolResult> {\n try {\n const argsJSON = JSON.stringify(args);\n const request = new CallMcpToolRequest({\n authorization: `Bearer ${this.session.getAPIKey()}`,\n sessionId: this.session.getSessionId(),\n name: toolName,\n args: argsJSON,\n });\n\n // Log API request\n log(`API Call: CallMcpTool - ${toolName}`);\n log(`Request: SessionId=${request.sessionId}, Args=${request.args}`);\n\n const response = await this.session.getClient().callMcpTool(request);\n\n // Log API response\n if (response && response.body) {\n log(`Response from CallMcpTool - ${toolName}:`, response.body);\n }\n\n // Extract data from response\n if (!response.body?.data) {\n throw new Error(\"Invalid response data format\");\n }\n\n const data = response.body.data as Record<string, any>;\n\n // Create result object\n const result: CallMcpToolResult = {\n data,\n statusCode: response.statusCode || 0,\n isError: false,\n requestId: extractRequestId(response),\n };\n\n // Check if there's an error in the response\n if (data.isError === true) {\n result.isError = true;\n\n // Try to extract the error message from the content field\n const contentArray = data.content as any[] | undefined;\n if (contentArray && contentArray.length > 0) {\n result.content = contentArray;\n\n // Extract error message from the first content item\n if (contentArray[0]?.text) {\n result.errorMsg = contentArray[0].text;\n throw new Error(contentArray[0].text);\n }\n }\n throw new Error(defaultErrorMsg);\n }\n\n // Extract content array if it exists\n if (Array.isArray(data.content)) {\n result.content = data.content;\n\n // Extract textContent from content items\n if (result.content.length > 0) {\n const textParts: string[] = [];\n for (const item of result.content) {\n if (\n item &&\n typeof item === \"object\" &&\n item.text &&\n typeof item.text === \"string\"\n ) {\n textParts.push(item.text);\n }\n }\n result.textContent = textParts.join(\"\\n\");\n }\n }\n\n return result;\n } catch (error) {\n logError(`Error calling CallMcpTool - ${toolName}:`, error);\n throw new APIError(`Failed to call ${toolName}: ${error}`);\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 result = await this.callMcpTool(\n \"list_root_windows\",\n args,\n \"Failed to list root windows\"\n );\n\n const windows = result.textContent\n ? this.parseWindowsFromJSON(result.textContent)\n : [];\n\n return {\n requestId: result.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 result = await this.callMcpTool(\n \"get_active_window\",\n args,\n \"Failed to get active window\"\n );\n\n let activeWindow: Window | undefined = undefined;\n if (result.textContent) {\n const windows = this.parseWindowsFromJSON(result.textContent);\n activeWindow = windows.length > 0 ? windows[0] : undefined;\n }\n\n return {\n requestId: result.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 result = await this.callMcpTool(\n \"activate_window\",\n args,\n \"Failed to activate window\"\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 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 result = await this.callMcpTool(\n \"maximize_window\",\n args,\n \"Failed to maximize window\"\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 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 result = await this.callMcpTool(\n \"minimize_window\",\n args,\n \"Failed to minimize window\"\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 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 result = await this.callMcpTool(\n \"restore_window\",\n args,\n \"Failed to restore window\"\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 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 result = await this.callMcpTool(\n \"close_window\",\n args,\n \"Failed to close window\"\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 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 result = await this.callMcpTool(\n \"fullscreen_window\",\n args,\n \"Failed to set window to fullscreen\"\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 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 result = await this.callMcpTool(\n \"resize_window\",\n args,\n \"Failed to resize window\"\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 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 result = await this.callMcpTool(\n \"focus_mode\",\n args,\n \"Failed to set focus mode\"\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 toggle focus mode: ${error}`,\n };\n }\n }\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","path","context","path","data","path","path","$OpenApiUtil"]}
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/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 contextId?: string;\n labels?: Record<string, string>;\n imageId?: string;\n contextSync?: ContextSync[];\n browserContext?: BrowserContext;\n isVpc?: boolean;\n}\n\n/**\n * Main class for interacting with the AgentBay cloud runtime environment.\n */\nexport class AgentBay {\n private apiKey: string;\n private client: Client;\n private regionId: string;\n private endpoint: string;\n private sessions: Map<string, Session> = new Map();\n\n /**\n * Context service for managing persistent contexts.\n */\n context: ContextService;\n\n /**\n * Initialize the AgentBay client.\n *\n * @param options - Configuration options\n * @param options.apiKey - API key for authentication. If not provided, will look for AGENTBAY_API_KEY environment variable.\n * @param options.config - Custom configuration object. If not provided, will use environment-based configuration.\n */\n constructor(\n options: {\n apiKey?: string;\n config?: Config;\n } = {}\n ) {\n 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 context_id if provided\n if (params.contextId) {\n request.contextId = params.contextId;\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 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.contextId) {\n requestLog += `ContextId=${request.contextId}, `;\n }\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 log(\"response data =\", response.body?.data);\n\n // Extract request ID\n const requestId = extractRequestId(response) || \"\";\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.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 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 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","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","// 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 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 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 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 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 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 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 \n static names(): { [key: string]: string } {\n return {\n authorization: 'Authorization',\n persistentPath: 'PersistentPath',\n sessionId: 'SessionId',\n };\n }\n\n static types(): { [key: string]: any } {\n return {\n authorization: 'string',\n persistentPath: '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 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","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} 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 * 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 * 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, BrowserOption } from './browser';\nexport { \n BrowserAgent, \n ActOptions, \n ObserveOptions, \n ExtractOptions,\n ActResult,\n ObserveResult\n} 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 BrowserOption {\n persistentPath?: string;\n}\n\nexport class Browser {\n private session: Session;\n private _endpointUrl: string | null = null;\n private _initialized = false;\n private _option: BrowserOption | 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: 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 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 = option;\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: 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 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 = option;\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(): BrowserOption | 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} ","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 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] = this._getPageAndContextIndex(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] = this._getPageAndContextIndex(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] = this._getPageAndContextIndex(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 // Simplified implementation - in real scenario would need to work with Playwright CDP\n // For now, return default values\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 {\n // Simplified implementation - in real scenario would need to work with Playwright CDP\n // For now, return default values\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 _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 /**\n * @deprecated This field is deprecated and will be removed in a future version.\n * Please use contextSync instead for more flexible and powerful data persistence.\n */\n contextId?: 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}\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 /**\n * ID of the context to bind to the session.\n * The context can include various types of persistence like file system (volume) and cookies.\n *\n * @deprecated This field is deprecated and will be removed in a future version.\n * Please use contextSync instead for more flexible and powerful data persistence.\n *\n * Important Limitations:\n * 1. One session at a time: A context can only be used by one session at a time.\n * If you try to create a session with a context ID that is already in use by another active session,\n * the session creation will fail.\n *\n * 2. OS binding: A context is bound to the operating system of the first session that uses it.\n * When a context is first used with a session, it becomes bound to that session's OS.\n * Any attempt to use the context with a session running on a different OS will fail.\n * For example, if a context is first used with a Linux session, it cannot later be used\n * with a Windows or Android session.\n */\n public contextId?: 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 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 * WithContextID sets the context ID for the session parameters and returns the updated parameters.\n */\n withContextID(contextId: string): CreateSessionParams {\n this.contextId = contextId;\n return this;\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 * 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 contextId: this.contextId,\n imageId: this.imageId,\n contextSync: this.contextSync,\n browserContext: this.browserContext,\n isVpc: this.isVpc,\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.contextId = config.contextId;\n params.imageId = config.imageId;\n params.contextSync = config.contextSync || [];\n params.browserContext = config.browserContext;\n params.isVpc = config.isVpc || false;\n return params;\n }\n}\n\n/**\n * NewCreateSessionParams creates a new CreateSessionParams with default values.\n */\nexport function newCreateSessionParams(): CreateSessionParams {\n return new CreateSessionParams();\n}\n"],"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","path","context","resolve","path","path","path","KeyCode","resolve","$OpenApiUtil","resolve","UploadStrategy","DownloadStrategy","path","path"]}