wuying-agentbay-sdk 0.1.0 → 0.3.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.
- package/README.md +24 -4
- package/dist/index.cjs +4534 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +1837 -0
- package/dist/index.d.ts +1837 -0
- package/dist/index.mjs +4550 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +16 -8
- package/dist/src/adb/adb.d.ts +0 -20
- package/dist/src/adb/adb.js +0 -57
- package/dist/src/adb/index.d.ts +0 -1
- package/dist/src/adb/index.js +0 -17
- package/dist/src/agent-bay.d.ts +0 -68
- package/dist/src/agent-bay.js +0 -213
- package/dist/src/api/client.d.ts +0 -191
- package/dist/src/api/client.js +0 -629
- package/dist/src/api/index.d.ts +0 -4
- package/dist/src/api/index.js +0 -26
- package/dist/src/api/models/CallMcpToolRequest.d.ts +0 -21
- package/dist/src/api/models/CallMcpToolRequest.js +0 -71
- package/dist/src/api/models/CallMcpToolResponse.d.ts +0 -19
- package/dist/src/api/models/CallMcpToolResponse.js +0 -68
- package/dist/src/api/models/CallMcpToolResponseBody.d.ts +0 -19
- package/dist/src/api/models/CallMcpToolResponseBody.js +0 -67
- package/dist/src/api/models/CreateMcpSessionRequest.d.ts +0 -19
- package/dist/src/api/models/CreateMcpSessionRequest.js +0 -67
- package/dist/src/api/models/CreateMcpSessionResponse.d.ts +0 -19
- package/dist/src/api/models/CreateMcpSessionResponse.js +0 -68
- package/dist/src/api/models/CreateMcpSessionResponseBody.d.ts +0 -20
- package/dist/src/api/models/CreateMcpSessionResponseBody.js +0 -71
- package/dist/src/api/models/CreateMcpSessionResponseBodyData.d.ts +0 -19
- package/dist/src/api/models/CreateMcpSessionResponseBodyData.js +0 -67
- package/dist/src/api/models/DeleteContextRequest.d.ts +0 -15
- package/dist/src/api/models/DeleteContextRequest.js +0 -59
- package/dist/src/api/models/DeleteContextResponse.d.ts +0 -19
- package/dist/src/api/models/DeleteContextResponse.js +0 -68
- package/dist/src/api/models/DeleteContextResponseBody.d.ts +0 -18
- package/dist/src/api/models/DeleteContextResponseBody.js +0 -65
- package/dist/src/api/models/GetContextRequest.d.ts +0 -16
- package/dist/src/api/models/GetContextRequest.js +0 -61
- package/dist/src/api/models/GetContextResponse.d.ts +0 -19
- package/dist/src/api/models/GetContextResponse.js +0 -68
- package/dist/src/api/models/GetContextResponseBody.d.ts +0 -20
- package/dist/src/api/models/GetContextResponseBody.js +0 -71
- package/dist/src/api/models/GetContextResponseBodyData.d.ts +0 -19
- package/dist/src/api/models/GetContextResponseBodyData.js +0 -67
- package/dist/src/api/models/GetLabelRequest.d.ts +0 -17
- package/dist/src/api/models/GetLabelRequest.js +0 -63
- package/dist/src/api/models/GetLabelResponse.d.ts +0 -19
- package/dist/src/api/models/GetLabelResponse.js +0 -68
- package/dist/src/api/models/GetLabelResponseBody.d.ts +0 -23
- package/dist/src/api/models/GetLabelResponseBody.js +0 -77
- package/dist/src/api/models/GetLabelResponseBodyData.d.ts +0 -14
- package/dist/src/api/models/GetLabelResponseBodyData.js +0 -57
- package/dist/src/api/models/GetLinkRequest.d.ts +0 -15
- package/dist/src/api/models/GetLinkRequest.js +0 -59
- package/dist/src/api/models/GetLinkResponse.d.ts +0 -19
- package/dist/src/api/models/GetLinkResponse.js +0 -68
- package/dist/src/api/models/GetLinkResponseBody.d.ts +0 -19
- package/dist/src/api/models/GetLinkResponseBody.js +0 -67
- package/dist/src/api/models/GetMcpResourceRequest.d.ts +0 -15
- package/dist/src/api/models/GetMcpResourceRequest.js +0 -59
- package/dist/src/api/models/GetMcpResourceResponse.d.ts +0 -19
- package/dist/src/api/models/GetMcpResourceResponse.js +0 -68
- package/dist/src/api/models/GetMcpResourceResponseBody.d.ts +0 -20
- package/dist/src/api/models/GetMcpResourceResponseBody.js +0 -71
- package/dist/src/api/models/GetMcpResourceResponseBodyData.d.ts +0 -17
- package/dist/src/api/models/GetMcpResourceResponseBodyData.js +0 -65
- package/dist/src/api/models/GetMcpResourceResponseBodyDataDesktopInfo.d.ts +0 -18
- package/dist/src/api/models/GetMcpResourceResponseBodyDataDesktopInfo.js +0 -65
- package/dist/src/api/models/ListContextsRequest.d.ts +0 -16
- package/dist/src/api/models/ListContextsRequest.js +0 -61
- package/dist/src/api/models/ListContextsResponse.d.ts +0 -19
- package/dist/src/api/models/ListContextsResponse.js +0 -68
- package/dist/src/api/models/ListContextsResponseBody.d.ts +0 -23
- package/dist/src/api/models/ListContextsResponseBody.js +0 -77
- package/dist/src/api/models/ListContextsResponseBodyData.d.ts +0 -19
- package/dist/src/api/models/ListContextsResponseBodyData.js +0 -67
- package/dist/src/api/models/ListSessionRequest.d.ts +0 -17
- package/dist/src/api/models/ListSessionRequest.js +0 -63
- package/dist/src/api/models/ListSessionResponse.d.ts +0 -19
- package/dist/src/api/models/ListSessionResponse.js +0 -68
- package/dist/src/api/models/ListSessionResponseBody.d.ts +0 -23
- package/dist/src/api/models/ListSessionResponseBody.js +0 -77
- package/dist/src/api/models/ListSessionResponseBodyData.d.ts +0 -14
- package/dist/src/api/models/ListSessionResponseBodyData.js +0 -57
- package/dist/src/api/models/ModifyContextRequest.d.ts +0 -16
- package/dist/src/api/models/ModifyContextRequest.js +0 -61
- package/dist/src/api/models/ModifyContextResponse.d.ts +0 -19
- package/dist/src/api/models/ModifyContextResponse.js +0 -68
- package/dist/src/api/models/ModifyContextResponseBody.d.ts +0 -18
- package/dist/src/api/models/ModifyContextResponseBody.js +0 -65
- package/dist/src/api/models/ReleaseMcpSessionRequest.d.ts +0 -15
- package/dist/src/api/models/ReleaseMcpSessionRequest.js +0 -59
- package/dist/src/api/models/ReleaseMcpSessionResponse.d.ts +0 -19
- package/dist/src/api/models/ReleaseMcpSessionResponse.js +0 -68
- package/dist/src/api/models/ReleaseMcpSessionResponseBody.d.ts +0 -18
- package/dist/src/api/models/ReleaseMcpSessionResponseBody.js +0 -65
- package/dist/src/api/models/SetLabelRequest.d.ts +0 -16
- package/dist/src/api/models/SetLabelRequest.js +0 -61
- package/dist/src/api/models/SetLabelResponse.d.ts +0 -19
- package/dist/src/api/models/SetLabelResponse.js +0 -68
- package/dist/src/api/models/SetLabelResponseBody.d.ts +0 -18
- package/dist/src/api/models/SetLabelResponseBody.js +0 -65
- package/dist/src/api/models/model.d.ts +0 -43
- package/dist/src/api/models/model.js +0 -89
- package/dist/src/application/application.d.ts +0 -88
- package/dist/src/application/application.js +0 -172
- package/dist/src/application/index.d.ts +0 -1
- package/dist/src/application/index.js +0 -17
- package/dist/src/command/command.d.ts +0 -43
- package/dist/src/command/command.js +0 -120
- package/dist/src/command/index.d.ts +0 -1
- package/dist/src/command/index.js +0 -17
- package/dist/src/config.d.ts +0 -15
- package/dist/src/config.js +0 -114
- package/dist/src/context.d.ts +0 -87
- package/dist/src/context.js +0 -208
- package/dist/src/exceptions.d.ts +0 -30
- package/dist/src/exceptions.js +0 -58
- package/dist/src/filesystem/filesystem.d.ts +0 -109
- package/dist/src/filesystem/filesystem.js +0 -245
- package/dist/src/filesystem/index.d.ts +0 -1
- package/dist/src/filesystem/index.js +0 -17
- package/dist/src/index.d.ts +0 -10
- package/dist/src/index.js +0 -32
- package/dist/src/oss/index.d.ts +0 -1
- package/dist/src/oss/index.js +0 -5
- package/dist/src/oss/oss.d.ts +0 -80
- package/dist/src/oss/oss.js +0 -233
- package/dist/src/session.d.ts +0 -99
- package/dist/src/session.js +0 -226
- package/dist/src/ui/index.d.ts +0 -1
- package/dist/src/ui/index.js +0 -17
- package/dist/src/ui/ui.d.ts +0 -95
- package/dist/src/ui/ui.js +0 -206
- package/dist/src/utils/logger.d.ts +0 -15
- package/dist/src/utils/logger.js +0 -48
- package/dist/src/window/index.d.ts +0 -1
- package/dist/src/window/index.js +0 -17
- package/dist/src/window/window.d.ts +0 -109
- package/dist/src/window/window.js +0 -220
- package/dist/tests/agent-bay.test.d.ts +0 -1
- package/dist/tests/agent-bay.test.js +0 -366
- package/dist/tests/integration/context-persistence.test.d.ts +0 -1
- package/dist/tests/integration/context-persistence.test.js +0 -226
- package/dist/tests/integration/context-session.test.d.ts +0 -1
- package/dist/tests/integration/context-session.test.js +0 -223
- package/dist/tests/integration/window-operations.test.d.ts +0 -1
- package/dist/tests/integration/window-operations.test.js +0 -228
- package/dist/tests/unit/adb.test.d.ts +0 -1
- package/dist/tests/unit/adb.test.js +0 -60
- package/dist/tests/unit/agent-bay.test.d.ts +0 -1
- package/dist/tests/unit/agent-bay.test.js +0 -182
- package/dist/tests/unit/application.test.d.ts +0 -1
- package/dist/tests/unit/application.test.js +0 -260
- package/dist/tests/unit/command.test.d.ts +0 -1
- package/dist/tests/unit/command.test.js +0 -252
- package/dist/tests/unit/context.test.d.ts +0 -1
- package/dist/tests/unit/context.test.js +0 -199
- package/dist/tests/unit/filesystem.test.d.ts +0 -1
- package/dist/tests/unit/filesystem.test.js +0 -493
- package/dist/tests/unit/oss.test.d.ts +0 -1
- package/dist/tests/unit/oss.test.js +0 -243
- package/dist/tests/unit/session-labels.test.d.ts +0 -1
- package/dist/tests/unit/session-labels.test.js +0 -138
- package/dist/tests/unit/session-params.test.d.ts +0 -1
- package/dist/tests/unit/session-params.test.js +0 -78
- package/dist/tests/unit/session.test.d.ts +0 -1
- package/dist/tests/unit/session.test.js +0 -204
- package/dist/tests/unit/ui.test.d.ts +0 -1
- package/dist/tests/unit/ui.test.js +0 -158
- package/dist/tests/unit/window.test.d.ts +0 -1
- package/dist/tests/unit/window.test.js +0 -331
- package/dist/tests/utils/test-helpers.d.ts +0 -35
- package/dist/tests/utils/test-helpers.js +0 -79
|
@@ -0,0 +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","../src/session.ts","../src/exceptions.ts","../src/filesystem/filesystem.ts","../src/api/models/model.ts","../src/api/models/CreateMcpSessionResponseBodyData.ts","../src/api/models/GetContextResponseBodyData.ts","../src/api/models/GetLabelResponseBodyData.ts","../src/api/models/GetMcpResourceResponseBodyDataDesktopInfo.ts","../src/api/models/GetMcpResourceResponseBodyData.ts","../src/api/models/ListContextsResponseBodyData.ts","../src/api/models/ListSessionResponseBodyData.ts","../src/api/models/CallMcpToolRequest.ts","../src/api/models/CallMcpToolResponseBody.ts","../src/api/models/CallMcpToolResponse.ts","../src/api/models/CreateMcpSessionRequest.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/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/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/utils/logger.ts","../src/command/command.ts","../src/oss/index.ts","../src/oss/oss.ts","../src/api/index.ts","../src/api/client.ts","../src/application/application.ts","../src/window/window.ts","../src/ui/ui.ts","../src/context.ts","../src/config.ts","../node_modules/dotenv/config.js"],"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.5.0\",\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=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 const vaultPath = _vaultPath(options)\n\n // Parse .env.vault\n const result = DotenvModule.configDotenv({ path: vaultPath })\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 _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 if (debug) {\n _debug('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\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 (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_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|debug|override|DOTENV_KEY)=(.+)$/\n\nmodule.exports = function optionMatcher (args) {\n return 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","// Export all public classes and interfaces\nexport { AgentBay } from './agent-bay';\nexport { Session } from './session';\nexport { Context, ContextService } from './context';\nexport * from './exceptions';\nexport * from './filesystem';\nexport * from './command';\nexport * from './oss';\nexport * from './api';\nexport * from './application';\nexport * from './ui';\n","import axios, { AxiosInstance } from 'axios';\nimport { Session } from './session';\nimport { ContextService } from './context';\nimport { AuthenticationError, APIError } from './exceptions';\nimport * as $_client from './api';\nimport OpenApi from '@alicloud/openapi-core';\nimport { OpenApiUtil, $OpenApiUtil }from '@alicloud/openapi-core';\nimport { Client } from './api/client';\nimport { CreateMcpSessionRequest, CreateMcpSessionResponse, ListSessionRequest } from './api/models/model';\nimport { loadConfig } from './config';\nimport 'dotenv/config';\nimport { log, logError } from './utils/logger';\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 /**\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 */\n constructor(options: {\n apiKey?: string;\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\n const configData = loadConfig();\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 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 /**\n * Create a new session in the AgentBay cloud environment.\n * \n * @param options - Optional parameters for creating the session\n * @param options.contextId - ID of the context to bind to the session\n * @param options.labels - Custom labels for the session\n * @returns A new Session object.\n */\n async create(options: {\n contextId?: string;\n labels?: Record<string, string>;\n imageId?: string;\n } = {}): Promise<Session> {\n try {\n const createSessionRequest = new $_client.CreateMcpSessionRequest({\n authorization: \"Bearer \"+this.apiKey,\n imageId: options.imageId\n });\n \n // Add context_id if provided\n if (options.contextId) {\n createSessionRequest.contextId = options.contextId;\n }\n \n // Add labels if provided\n if (options.labels) {\n createSessionRequest.labels = JSON.stringify(options.labels);\n }\n \n // Log API request\n log(\"API Call: CreateMcpSession\");\n log(`Request: ${options.contextId ? `ContextId=${options.contextId}, ` : ''}${options.labels ? `Labels=${JSON.stringify(options.labels)}, ` : ''}${options.imageId ? `ImageId=${options.imageId}` : ''}`);\n \n const response = await this.client.createMcpSession(createSessionRequest);\n \n // Log API response\n log(`Response from CreateMcpSession:`, response.body);\n \n const sessionId = response.body?.data?.sessionId;\n if (!sessionId) {\n throw new APIError('Invalid session ID in response');\n }\n \n // ResourceUrl is optional in CreateMcpSession response\n const resourceUrl = response.body?.data?.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 return session;\n \n } catch (error) {\n logError(\"Error calling CreateMcpSession:\", error);\n throw new APIError(`Failed to create session: ${error}`);\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.\n * It returns sessions that match all the specified labels.\n * \n * @param labels - The labels to filter by.\n * @returns A list of session objects that match the labels.\n */\n async listByLabels(labels: Record<string, string>): Promise<Session[]> {\n try {\n // Convert labels to JSON\n const labelsJSON = JSON.stringify(labels);\n \n const listSessionRequest = new ListSessionRequest({\n authorization: `Bearer ${this.apiKey}`,\n labels: labelsJSON\n });\n \n // Log API request\n log(\"API Call: ListSession\");\n log(`Request: Labels=${labelsJSON}`);\n \n const response = await this.client.listSession(listSessionRequest);\n \n // Log API response\n log(`Response from ListSession:`, response.body);\n \n const sessions: Session[] = [];\n if (response.body?.data) {\n for (const sessionData of response.body.data) {\n if (sessionData.sessionId) {\n const session = new Session(this, sessionData.sessionId);\n sessions.push(session);\n // Also store in the local cache\n this.sessions.set(sessionData.sessionId, session);\n }\n }\n }\n \n return sessions;\n } catch (error) {\n logError(\"Error calling ListSession:\", error);\n throw new APIError(`Failed to list sessions by labels: ${error}`);\n }\n }\n\n /**\n * Delete a session by ID.\n * \n * @param sessionId - The ID of the session to delete.\n * @returns True if the session was successfully deleted.\n */\n async delete(session: Session): Promise<boolean> {\n const getSession = this.sessions.get(session.sessionId);\n if (!getSession) {\n throw new Error(`Session with ID ${session.sessionId} not found`);\n }\n \n try {\n await session.delete();\n return true;\n } catch (error) {\n throw new APIError(`Failed to delete session: ${error}`);\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 // 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","import { AgentBay } from './agent-bay';\nimport { APIError } from './exceptions';\nimport { FileSystem } from './filesystem';\nimport { Command } from './command';\nimport { Oss } from './oss';\nimport { Application } from './application';\nimport { WindowManager } from './window';\nimport { UI } from './ui';\nimport {Client} from './api/client';\nimport { ReleaseMcpSessionRequest, SetLabelRequest, GetLabelRequest, GetMcpResourceRequest, GetLinkRequest } from './api/models/model';\nimport { log, logError } from './utils/logger';\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}\n\n/**\n * Represents a session in the AgentBay cloud environment.\n */\nexport class Session {\n private agentBay: AgentBay;\n public client: Client;\n public sessionId: string;\n public resourceUrl: string = \"\";\n\n // File, command, and oss handlers\n public filesystem: FileSystem;\n public command: Command;\n public oss: Oss;\n\n // Application, window, and UI management\n public Application: Application;\n public window: WindowManager;\n public ui: UI;\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.client = agentBay.getClient();\n log(`Session created with ID: ${sessionId}`);\n\n // Initialize filesystem, command, and oss handlers\n this.filesystem = new FileSystem(this);\n this.command = new Command(this);\n this.oss = new Oss(this);\n\n // Initialize application, window, and UI managers\n this.Application = new Application(this);\n this.window = new WindowManager(this);\n this.ui = new UI(this);\n }\n\n /**\n * Get information about this session.\n *\n * @returns Session information.\n */\n // async get_info(): Promise<Record<string, any>> {\n // // TODO: Implement the API call to get session info\n // try {\n // const response = await this.client.get(this.baseUrl);\n // return response.data;\n // } catch (error) {\n // throw new APIError(`Failed to get session info: ${error}`);\n // }\n // }\n\n /**\n * Delete this session.\n *\n * @returns True if the session was successfully deleted.\n */\n async delete(): Promise<boolean> {\n try {\n const releaseSessionRequest = new ReleaseMcpSessionRequest({\n authorization: `Bearer ${this.getAPIKey()}`,\n sessionId: this.sessionId\n });\n console.log(\"API Call delete: ReleaseMcpSession\", this.sessionId);\n\n // Log API request\n log(\"API Call: ReleaseMcpSession\");\n log(`Request: SessionId=${this.sessionId}`);\n\n const response = await this.client.releaseMcpSession(releaseSessionRequest);\n\n // Log API response\n log(`Response from ReleaseMcpSession:`, response.body);\n\n this.agentBay.removeSession(this.sessionId);\n return true;\n } catch (error) {\n logError(\"Error calling ReleaseMcpSession:\", error);\n throw new APIError(`Failed to delete session: ${error}`);\n }\n }\n\n\n\n /**\n * Sets the labels for this session.\n *\n * @param labels - The labels to set for the session.\n * @throws APIError if the operation fails.\n */\n async setLabels(labels: Record<string, string>): Promise<void> {\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 // Log API request\n log(\"API Call: SetLabel\");\n log(`Request: SessionId=${this.sessionId}, Labels=${labelsJSON}`);\n\n const response = await this.client.setLabel(request);\n\n // Log API response\n log(`Response from SetLabel:`, response.body);\n\n } catch (error) {\n logError(\"Error calling SetLabel:\", error);\n throw new APIError(`Failed to set labels for session: ${error}`);\n }\n }\n\n /**\n * Gets the labels for this session.\n *\n * @returns The labels for the session.\n * @throws APIError if the operation fails.\n */\n async getLabels(): Promise<Record<string, string>> {\n try {\n const request = new GetLabelRequest({\n authorization: `Bearer ${this.getAPIKey()}`,\n sessionId: this.sessionId\n });\n\n // Log API request\n log(\"API Call: GetLabel\");\n log(`Request: SessionId=${this.sessionId}`);\n\n const response = await this.client.getLabel(request);\n console.log(`Response from GetLabel: ${JSON.stringify(response)}`);\n\n // Log API response\n log(`Response from GetLabel:`, response.body);\n\n // Extract labels from response\n const labelsJSON = response.body?.data?.labels;\n\n if (labelsJSON) {\n return JSON.parse(labelsJSON);\n }\n\n return {};\n } catch (error) {\n logError(\"Error calling GetLabel:\", error);\n throw new APIError(`Failed to get labels for session: ${error}`);\n }\n }\n\n /**\n * Get the API key.\n *\n * @returns The API key.\n */\n getAPIKey(): string {\n return this.agentBay.getAPIKey();\n }\n\n /**\n * Get the client.\n *\n * @returns The client.\n */\n getClient(): Client {\n\n return this.client;\n }\n\n /**\n * Get the session ID.\n *\n * @returns The session ID.\n */\n getSessionId(): string {\n return this.sessionId;\n }\n\n /**\n * Gets information about this session.\n *\n * @returns Information about the session.\n * @throws APIError if the operation fails.\n */\n async info(): Promise<SessionInfo> {\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.client.getMcpResource(request);\n log(`Response from GetMcpResource:`, response.body);\n\n // Extract session info from response\n const sessionInfo: SessionInfo = {\n sessionId: response.body?.data?.sessionId || \"\",\n resourceUrl: response.body?.data?.resourceUrl || \"\"\n };\n\n // Update the session's resourceUrl with the latest value\n if (response.body?.data?.resourceUrl) {\n this.resourceUrl = response.body.data.resourceUrl;\n }\n\n // Transfer DesktopInfo fields to SessionInfo\n if (response.body?.data?.desktopInfo) {\n const desktopInfo = response.body.data.desktopInfo;\n sessionInfo.appId = desktopInfo.appId;\n sessionInfo.authCode = desktopInfo.authCode;\n sessionInfo.connectionProperties = desktopInfo.connectionProperties;\n sessionInfo.resourceId = desktopInfo.resourceId;\n sessionInfo.resourceType = desktopInfo.resourceType;\n }\n\n return sessionInfo;\n } catch (error) {\n logError(\"Error calling GetMcpResource:\", error);\n throw new APIError(`Failed to get session info for session ${this.sessionId}: ${error}`);\n }\n }\n\n /**\n * Gets the link for this session.\n *\n * @returns The link for the session.\n * @throws APIError if the operation fails.\n */\n async getLink(): Promise<string> {\n try {\n const request = new GetLinkRequest({\n authorization: `Bearer ${this.getAPIKey()}`,\n sessionId: this.sessionId\n });\n\n log(\"API Call: GetLink\");\n log(`Request: SessionId=${this.sessionId}`);\n\n const response = await this.client.getLink(request);\n log(`Response from GetLink:`, response.body);\n\n if (response.body?.data) {\n return response.body.data;\n }\n\n return \"\";\n } catch (error) {\n logError(\"Error calling GetLink:\", error);\n throw new APIError(`Failed to get link for session ${this.sessionId}: ${error}`);\n }\n }\n}\n","/**\n * Base exception for all AgentBay errors.\n */\nexport class AgentBayError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AgentBayError';\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(message: string) {\n super(message);\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 constructor(message: string) {\n super(message);\n this.name = 'APIError';\n Object.setPrototypeOf(this, APIError.prototype);\n }\n}\n\n/**\n * Raised when there is an error with file operations.\n */\nexport class FileError extends AgentBayError {\n constructor(message: string) {\n super(message);\n this.name = 'FileError';\n Object.setPrototypeOf(this, FileError.prototype);\n }\n}\n\n/**\n * Raised when there is an error with command execution.\n */\nexport class CommandError extends AgentBayError {\n constructor(message: string) {\n super(message);\n this.name = 'CommandError';\n Object.setPrototypeOf(this, CommandError.prototype);\n }\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';\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(args: Record<string, any>): 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}\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(`Request: SessionId=${this.session.getSessionId()}, Args=${loggableArgsJSON}`);\n \n const response = await this.session.getClient().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(`Response from CallMcpTool - ${toolName} - status: ${response.statusCode}`);\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 * \n * @param path - Path to the directory to create.\n * @returns The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async createDirectory(path: string): Promise<string> {\n const args = {\n path\n };\n \n const result = await this.callMcpTool('create_directory', args, 'Failed to create directory');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Edits a file by replacing occurrences of oldText with newText.\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 The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async editFile(path: string, edits: Array<{oldText: string, newText: string}>, dryRun: boolean = false): Promise<string> {\n const args = {\n path,\n edits,\n dryRun\n };\n \n const result = await this.callMcpTool('edit_file', args, 'Failed to edit file');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Gets information about a file or directory.\n * \n * @param path - Path to the file or directory to inspect.\n * @returns The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async getFileInfo(path: string): Promise<FileInfo> {\n const args = {\n path\n };\n \n const result = await this.callMcpTool('get_file_info', args, 'Failed to get file info');\n \n // Parse and return the file info\n if (!result.textContent) {\n throw new APIError('Empty response from get_file_info');\n }\n \n return parseFileInfo(result.textContent);\n }\n\n /**\n * Lists the contents of a directory.\n * \n * @param path - Path to the directory to list.\n * @returns Array of directory entries with properties like name, isDirectory\n * @throws APIError if the operation fails.\n */\n async listDirectory(path: string): Promise<DirectoryEntry[]> {\n const args = {\n path\n };\n \n const result = await this.callMcpTool('list_directory', args, 'Failed to list directory');\n \n // Parse the text content into directory entries\n if (!result.textContent) {\n return [];\n }\n \n return parseDirectoryListing(result.textContent);\n }\n\n /**\n * Moves a file or directory from source to destination.\n * \n * @param source - Path to the source file or directory.\n * @param destination - Path to the destination file or directory.\n * @returns The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async moveFile(source: string, destination: string): Promise<string> {\n const args = {\n source,\n destination\n };\n \n const result = await this.callMcpTool('move_file', args, 'Failed to move file');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Reads the content of a file.\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 The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async readFile(path: string, offset: number = 0, length: number = 0): Promise<string> {\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('read_file', args, 'Failed to read file');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Reads the content of multiple files.\n * \n * @param paths - Array of file paths to read.\n * @returns The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async readMultipleFiles(paths: string[]): Promise<Record<string, string>> {\n const args = {\n paths\n };\n \n const result = await this.callMcpTool('read_multiple_files', args, 'Failed to read multiple files');\n \n if (!result.textContent) {\n return {};\n }\n \n // Parse the response into a map of file paths to contents\n const fileContents: Record<string, string> = {};\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 (colonIndex > 0 && currentPath === '' && !line.substring(0, colonIndex).includes(' ')) {\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 return fileContents;\n }\n\n /**\n * Searches for files in a directory that match a pattern.\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 Array of search results with properties like path\n * @throws APIError if the operation fails.\n */\n async searchFiles(path: string, pattern: string, excludePatterns: string[] = []): Promise<string[]> {\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('search_files', args, 'Failed to search files');\n \n // Parse the text content into search results\n if (!result.textContent) {\n return [];\n }\n \n // Split by newlines and filter out empty lines\n return result.textContent.split('\\n')\n .map(line => line.trim())\n .filter(line => line !== '');\n }\n\n /**\n * Writes content to a file.\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 The extracted text content from the API response\n * @throws APIError if the operation fails.\n */\n async writeFile(path: string, content: string, mode: string = 'overwrite'): Promise<string> {\n // Validate mode\n const validModes = ['overwrite', 'append', 'create_new'];\n if (!validModes.includes(mode)) {\n throw new APIError(`Invalid mode: ${mode}. Must be one of ${validModes.join(', ')}`);\n }\n \n const args = {\n path,\n content,\n mode\n };\n \n const result = await this.callMcpTool('write_file', args, 'Failed to write file');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Reads a large file in chunks to handle size limitations of the underlying API.\n * It automatically splits the read operation into multiple requests of chunkSize bytes each.\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 The complete file content as a string\n * @throws APIError if the operation fails.\n */\n async readLargeFile(path: string, chunkSize: number = DEFAULT_CHUNK_SIZE): Promise<string> {\n // First get the file info\n const fileInfo = await this.getFileInfo(path);\n \n // Get size from the fileInfo object\n const fileSize = fileInfo.size;\n \n if (fileSize === 0) {\n throw new APIError('Couldn\\'t determine file size');\n }\n \n // Prepare to read the file in chunks\n let result = '';\n let offset = 0;\n \n log(`ReadLargeFile: Starting chunked read of ${path} (total size: ${fileSize} bytes, chunk size: ${chunkSize} bytes)`);\n \n let chunkCount = 0;\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(`ReadLargeFile: Reading chunk ${chunkCount + 1} (${length} bytes at offset ${offset}/${fileSize})`);\n \n try {\n // Read the chunk\n const chunk = await this.readFile(path, offset, length);\n \n // Since readFile returns a string, just append it to the result\n result += chunk;\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 throw new APIError(`Error reading chunk at offset ${offset}: ${error}`);\n }\n }\n \n log(`ReadLargeFile: Successfully read ${path} in ${chunkCount} chunks (total: ${fileSize} bytes)`);\n \n return result;\n }\n \n /**\n * Writes a large file in chunks to handle size limitations of the underlying API.\n * It automatically splits the write operation into multiple requests of chunkSize bytes each.\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 True if the operation was successful\n * @throws APIError if the operation fails.\n */\n async writeLargeFile(path: string, content: string, chunkSize: number = DEFAULT_CHUNK_SIZE): Promise<boolean> {\n const contentLen = content.length;\n \n log(`WriteLargeFile: Starting chunked write to ${path} (total size: ${contentLen} bytes, chunk size: ${chunkSize} bytes)`);\n \n // If content is small enough, use the regular WriteFile method\n if (contentLen <= chunkSize) {\n log(`WriteLargeFile: Content size (${contentLen} bytes) is smaller than chunk size, using normal WriteFile`);\n await this.writeFile(path, content, 'overwrite');\n return true;\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(`WriteLargeFile: Writing first chunk (0-${firstChunkEnd} bytes) with overwrite mode`);\n await this.writeFile(path, content.substring(0, firstChunkEnd), 'overwrite');\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(`WriteLargeFile: Writing chunk ${chunkCount + 1} (${offset}-${end} bytes) with append mode`);\n await this.writeFile(path, content.substring(offset, end), 'append');\n \n offset = end;\n chunkCount++;\n }\n \n log(`WriteLargeFile: Successfully wrote ${path} in ${chunkCount} chunks (total: ${contentLen} bytes)`);\n \n return true;\n }\n}\n","export { CreateMcpSessionResponseBodyData } from './CreateMcpSessionResponseBodyData';\nexport { GetContextResponseBodyData } from './GetContextResponseBodyData';\nexport { GetLabelResponseBodyData } from './GetLabelResponseBodyData';\nexport { GetMcpResourceResponseBodyDataDesktopInfo } from './GetMcpResourceResponseBodyDataDesktopInfo';\nexport { GetMcpResourceResponseBodyData } from './GetMcpResourceResponseBodyData';\nexport { ListContextsResponseBodyData } from './ListContextsResponseBodyData';\nexport { ListSessionResponseBodyData } from './ListSessionResponseBodyData';\nexport { CallMcpToolRequest } from './CallMcpToolRequest';\nexport { CallMcpToolResponseBody } from './CallMcpToolResponseBody';\nexport { CallMcpToolResponse } from './CallMcpToolResponse';\nexport { CreateMcpSessionRequest } from './CreateMcpSessionRequest';\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 { 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 { 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';\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 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 GetMcpResourceResponseBodyDataDesktopInfo extends $dara.Model {\n appId?: string;\n authCode?: string;\n connectionProperties?: string;\n resourceId?: string;\n resourceType?: 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 };\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 };\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 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';\n\n\nexport class CreateMcpSessionRequest extends $dara.Model {\n authorization?: string;\n contextId?: string;\n externalUserId?: string;\n imageId?: string;\n labels?: 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 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 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 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 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 GetLinkResponseBody 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 { 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 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","/**\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 { APIError } from '../exceptions';\nimport { Session } from '../session';\nimport { Client } from '../api/client';\nimport { CallMcpToolRequest } from '../api/models/model';\nimport { log, logError } from '../utils/logger';\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}\n\n/**\n * Represents the result of a command execution\n */\nexport interface CommandResult {\n output: string;\n exitCode?: number;\n durationMs?: number;\n}\n\n/**\n * Represents the result of code execution\n */\nexport interface CodeExecutionResult {\n output: string;\n durationMs?: number;\n memoryKb?: number;\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(`Request: SessionId=${this.session.getSessionId()}, Args=${argsJSON}`);\n \n const response = await this.session.getClient().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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 or return a simple object with output\n */\n private parseCommandResult(text: string): CommandResult {\n try {\n return JSON.parse(text) as CommandResult;\n } catch (error) {\n return { output: text };\n }\n }\n\n /**\n * Execute a command in the cloud environment with a specified timeout.\n * \n * @param command - The command to execute.\n * @param timeoutMs - The timeout for the command execution in milliseconds. Default is 1000ms.\n * @returns A string containing the command output\n */\n async executeCommand(command: string, timeoutMs: number = 1000): Promise<string> {\n const args = {\n command,\n timeout_ms: timeoutMs\n };\n \n const result = await this.callMcpTool('shell', args, 'Failed to execute command');\n \n // Return the text content directly\n return result.textContent || '';\n }\n \n /**\n * Helper method to parse JSON string or return a simple object with output\n */\n private parseCodeExecutionResult(text: string): CodeExecutionResult {\n try {\n return JSON.parse(text) as CodeExecutionResult;\n } catch (error) {\n return { output: text };\n }\n }\n \n /**\n * Execute code in the specified language with a timeout.\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 A string containing the code execution output\n * @throws APIError if the code execution fails or if an unsupported language is specified.\n */\n async runCode(code: string, language: string, timeoutS: number = 300): Promise<string> {\n // Validate language\n if (language !== 'python' && language !== 'javascript') {\n throw new Error(`Unsupported language: ${language}. Supported languages are 'python' and 'javascript'`);\n }\n \n const args = {\n code,\n language,\n timeout_s: timeoutS\n };\n \n const result = await this.callMcpTool('run_code', args, 'Failed to execute code');\n \n // Return the text content directly\n return result.textContent || '';\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';\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}\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(`Request: SessionId=${this.session.getSessionId()}, Args=${JSON.stringify(args)}`);\n\n const response = await this.session.getClient().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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 * Initialize OSS environment variables with the specified credentials.\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 The extracted text content from the API response\n */\n async envInit(\n accessKeyId: string,\n accessKeySecret: string,\n securityToken: string,\n endpoint?: string,\n region?: string\n ): Promise<string> {\n const args: Record<string, any> = {\n access_key_id: accessKeyId,\n access_key_secret: accessKeySecret,\n security_token: securityToken\n };\n\n // Add optional parameters if provided\n if (endpoint) {\n args.endpoint = endpoint;\n }\n if (region) {\n args.region = region;\n }\n\n const result = await this.callMcpTool('oss_env_init', args, 'error initializing OSS environment');\n\n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Create an OSS client with the provided credentials.\n *\n * @param accessKeyId - The Access Key ID for OSS authentication.\n * @param accessKeySecret - The Access Key Secret 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 The extracted text content from the API response\n */\n async createClient(\n accessKeyId: string,\n accessKeySecret: string,\n endpoint?: string,\n region?: string\n ): Promise<string> {\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 (endpoint) {\n args.endpoint = endpoint;\n }\n if (region) {\n args.region = region;\n }\n\n const result = await this.callMcpTool('oss_client_create', args, 'error creating OSS client');\n\n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Upload a local file or directory to OSS.\n *\n * @param bucket - OSS bucket name.\n * @param object - Object key in OSS.\n * @param path - Local file or directory path to upload.\n * @returns The extracted text content from the API response\n */\n async upload(bucket: string, object: string, path: string): Promise<string> {\n const args = {\n bucket,\n object,\n path\n };\n\n const result = await this.callMcpTool('oss_upload', args, 'error uploading to OSS');\n\n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Upload a local file or directory to OSS using a pre-signed URL.\n *\n * @param url - Pre-signed URL for anonymous upload.\n * @param path - Local file or directory path to upload.\n * @returns The extracted text content from the API response\n */\n async uploadAnonymous(url: string, path: string): Promise<string> {\n const args = {\n url,\n path\n };\n\n const result = await this.callMcpTool('oss_upload_annon', args, 'error uploading anonymously');\n\n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Download an object from OSS to a local file or directory.\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 The extracted text content from the API response\n */\n async download(bucket: string, object: string, path: string): Promise<string> {\n const args = {\n bucket,\n object,\n path\n };\n\n const result = await this.callMcpTool('oss_download', args, 'error downloading from OSS');\n\n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Download an object from OSS using a pre-signed URL.\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 The extracted text content from the API response\n */\n async downloadAnonymous(url: string, path: string): Promise<string> {\n const args = {\n url,\n path\n };\n\n const result = await this.callMcpTool('oss_download_annon', args, 'error downloading anonymously');\n\n // Return the extracted text content\n return result.textContent || '';\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 { OpenApiUtil, $OpenApiUtil }from '@alicloud/openapi-core';\nimport * as OpenApiDefault from \"@alicloud/openapi-core\";\nconst OpenApi = OpenApiDefault.default || OpenApiDefault;\nimport { log } from '../utils/logger';\n\n\nimport * as $_model from './models/model';\nexport * from './models/model';\n\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(\"wuyingai\", this._regionId, this._endpointRule, this._network, this._suffix, this._endpointMap, this._endpoint);\n }\n\n\n getEndpoint(productId: string, regionId: string, endpointRule: string, network: string, suffix: string, endpointMap: {[key: string ]: string}, endpoint: string): 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(productId, regionId, endpointRule, network, 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(request: $_model.CallMcpToolRequest, runtime: $dara.RuntimeOptions): Promise<$_model.CallMcpToolResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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 \n return $dara.cast<$_model.CallMcpToolResponse>(await this.callApi(params, req, runtime), new $_model.CallMcpToolResponse({}));\n }\n\n /**\n * 调用mcp工具\n * \n * @param request - CallMcpToolRequest\n * @returns CallMcpToolResponse\n */\n async callMcpTool(request: $_model.CallMcpToolRequest): Promise<$_model.CallMcpToolResponse> {\n let runtime = new $dara.RuntimeOptions({ });\n return await this.callMcpToolWithOptions(request, runtime);\n }\n\n /**\n * 创建 mcp session\n * \n * @param request - CreateMcpSessionRequest\n * @param runtime - runtime options for this request RuntimeOptions\n * @returns CreateMcpSessionResponse\n */\n async createMcpSessionWithOptions(request: $_model.CreateMcpSessionRequest, runtime: $dara.RuntimeOptions): Promise<$_model.CreateMcpSessionResponse> {\n request.validate();\n let 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.sessionId)) {\n body[\"SessionId\"] = request.sessionId;\n }\n if(!$dara.isNull(request.imageId)){\n body[\"ImageId\"] = request.imageId;\n }\n\n let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.CreateMcpSessionResponse({}));\n }\n\n /**\n * 创建 mcp session\n * \n * @param request - CreateMcpSessionRequest\n * @returns CreateMcpSessionResponse\n */\n async createMcpSession(request: $_model.CreateMcpSessionRequest): Promise<$_model.CreateMcpSessionResponse> {\n let 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(request: $_model.DeleteContextRequest, runtime: $dara.RuntimeOptions): Promise<$_model.DeleteContextResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.DeleteContextResponse({}));\n }\n\n /**\n * 删除持久化上下文\n * \n * @param request - DeleteContextRequest\n * @returns DeleteContextResponse\n */\n async deleteContext(request: $_model.DeleteContextRequest): Promise<$_model.DeleteContextResponse> {\n let 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(request: $_model.GetContextRequest, runtime: $dara.RuntimeOptions): Promise<$_model.GetContextResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.GetContextResponse({}));\n }\n\n /**\n * 获取上下文\n * \n * @param request - GetContextRequest\n * @returns GetContextResponse\n */\n async getContext(request: $_model.GetContextRequest): Promise<$_model.GetContextResponse> {\n let runtime = new $dara.RuntimeOptions({ });\n return await this.getContextWithOptions(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(request: $_model.GetLabelRequest, runtime: $dara.RuntimeOptions): Promise<$_model.GetLabelResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.GetLabelResponse({}));\n }\n\n /**\n * 获取标签\n * \n * @param request - GetLabelRequest\n * @returns GetLabelResponse\n */\n async getLabel(request: $_model.GetLabelRequest): Promise<$_model.GetLabelResponse> {\n let 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(request: $_model.GetLinkRequest, runtime: $dara.RuntimeOptions): Promise<$_model.GetLinkResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.GetLinkResponse({}));\n }\n\n /**\n * 获取特定端口的转发链接\n * \n * @param request - GetLinkRequest\n * @returns GetLinkResponse\n */\n async getLink(request: $_model.GetLinkRequest): Promise<$_model.GetLinkResponse> {\n let 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(request: $_model.GetMcpResourceRequest, runtime: $dara.RuntimeOptions): Promise<$_model.GetMcpResourceResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.GetMcpResourceResponse({}));\n }\n\n /**\n * 获取mcp资源信息\n * \n * @param request - GetMcpResourceRequest\n * @returns GetMcpResourceResponse\n */\n async getMcpResource(request: $_model.GetMcpResourceRequest): Promise<$_model.GetMcpResourceResponse> {\n let runtime = new $dara.RuntimeOptions({ });\n return await this.getMcpResourceWithOptions(request, runtime);\n }\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(request: $_model.ListContextsRequest, runtime: $dara.RuntimeOptions): Promise<$_model.ListContextsResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.ListContextsResponse({}));\n }\n\n /**\n * 获取上下文列表\n * \n * @param request - ListContextsRequest\n * @returns ListContextsResponse\n */\n async listContexts(request: $_model.ListContextsRequest): Promise<$_model.ListContextsResponse> {\n let runtime = new $dara.RuntimeOptions({ });\n return await this.listContextsWithOptions(request, runtime);\n }\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(request: $_model.ListSessionRequest, runtime: $dara.RuntimeOptions): Promise<$_model.ListSessionResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.ListSessionResponse({}));\n }\n\n /**\n * 根据Lable查询Session列表\n * \n * @param request - ListSessionRequest\n * @returns ListSessionResponse\n */\n async listSession(request: $_model.ListSessionRequest): Promise<$_model.ListSessionResponse> {\n let 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(request: $_model.ModifyContextRequest, runtime: $dara.RuntimeOptions): Promise<$_model.ModifyContextResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.ModifyContextResponse({}));\n }\n\n /**\n * 修改上下文\n * \n * @param request - ModifyContextRequest\n * @returns ModifyContextResponse\n */\n async modifyContext(request: $_model.ModifyContextRequest): Promise<$_model.ModifyContextResponse> {\n let 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(request: $_model.ReleaseMcpSessionRequest, runtime: $dara.RuntimeOptions): Promise<$_model.ReleaseMcpSessionResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.ReleaseMcpSessionResponse({}));\n }\n\n /**\n * 释放 mcp session\n * \n * @param request - ReleaseMcpSessionRequest\n * @returns ReleaseMcpSessionResponse\n */\n async releaseMcpSession(request: $_model.ReleaseMcpSessionRequest): Promise<$_model.ReleaseMcpSessionResponse> {\n let 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(request: $_model.SetLabelRequest, runtime: $dara.RuntimeOptions): Promise<$_model.SetLabelResponse> {\n request.validate();\n let 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 let req = new $OpenApiUtil.OpenApiRequest({\n body: OpenApiUtil.parseToMap(body),\n });\n let 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>(await this.callApi(params, req, runtime), new $_model.SetLabelResponse({}));\n }\n\n /**\n * 设置标签\n * \n * @param request - SetLabelRequest\n * @returns SetLabelResponse\n */\n async setLabel(request: $_model.SetLabelRequest): Promise<$_model.SetLabelResponse> {\n let runtime = new $dara.RuntimeOptions({ });\n return await this.setLabelWithOptions(request, runtime);\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';\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}\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 /**\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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 * @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 Array of InstalledApp objects\n * @throws Error if the operation fails.\n */\n async getInstalledApps(\n startMenu: boolean = true,\n desktop: boolean = true,\n ignoreSystemApps: boolean = true\n ): Promise<InstalledApp[]> {\n const args = {\n start_menu: startMenu,\n desktop,\n ignore_system_apps: ignoreSystemApps\n };\n\n const result = await this.callMcpTool('get_installed_apps', args, 'Failed to get installed apps');\n \n if (!result.textContent) {\n return [];\n }\n \n return this.parseJSON<InstalledApp[]>(result.textContent);\n }\n\n /**\n * Starts an application with the given command and optional working directory.\n * @param startCmd The command to start the application.\n * @param workDirectory The working directory for the application. Defaults to an empty string.\n * @returns Array of Process objects representing the started processes\n * @throws Error if the operation fails.\n */\n async startApp(startCmd: string, workDirectory: string = ''): Promise<Process[]> {\n const args: any = {\n start_cmd: startCmd\n };\n\n if (workDirectory) {\n args.work_directory = workDirectory;\n }\n\n const result = await this.callMcpTool('start_app', args, 'Failed to start app');\n \n if (!result.textContent) {\n return [];\n }\n \n return this.parseJSON<Process[]>(result.textContent);\n }\n\n /**\n * Stops an application by process name.\n * @param pname The name of the process to stop.\n * @throws Error if the operation fails.\n */\n async stopAppByPName(pname: string): Promise<void> {\n const args = {\n pname\n };\n\n await this.callMcpTool('stop_app_by_pname', args, 'Failed to stop app by pname');\n }\n\n /**\n * Stops an application by process ID.\n * @param pid The ID of the process to stop.\n * @throws Error if the operation fails.\n */\n async stopAppByPID(pid: number): Promise<void> {\n const args = {\n pid\n };\n\n await this.callMcpTool('stop_app_by_pid', args, 'Failed to stop app by pid');\n }\n\n /**\n * Stops an application by stop command.\n * @param stopCmd The command to stop the application.\n * @throws Error if the operation fails.\n */\n async stopAppByCmd(stopCmd: string): Promise<void> {\n const args = {\n stop_cmd: stopCmd\n };\n\n await this.callMcpTool('stop_app_by_cmd', args, 'Failed to stop app by command');\n }\n\n /**\n * Lists all currently visible applications.\n * @returns Array of Process objects representing the visible processes\n * @throws Error if the operation fails.\n */\n async listVisibleApps(): Promise<Process[]> {\n const args = {};\n\n const result = await this.callMcpTool('list_visible_apps', args, 'Failed to list visible apps');\n \n if (!result.textContent) {\n return [];\n }\n \n return this.parseJSON<Process[]>(result.textContent);\n }\n}\n","import { CallMcpToolRequest } from '../api/models/CallMcpToolRequest';\nimport { log, logError } from '../utils/logger';\nimport { APIError } from '../exceptions';\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}\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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 * @returns Array of Window objects\n * @throws Error if the operation fails.\n */\n async listRootWindows(): Promise<Window[]> {\n const args = {};\n\n const result = await this.callMcpTool('list_root_windows', args, 'Failed to list root windows');\n \n if (!result.textContent) {\n return [];\n }\n \n return this.parseWindowsFromJSON(result.textContent);\n }\n\n /**\n * Gets the currently active window.\n * @returns Window object or null if no active window\n * @throws Error if the operation fails.\n */\n async getActiveWindow(): Promise<Window | null> {\n const args = {};\n\n const result = await this.callMcpTool('get_active_window', args, 'Failed to get active window');\n \n if (!result.textContent) {\n return null;\n }\n \n const windows = this.parseWindowsFromJSON(result.textContent);\n return windows.length > 0 ? windows[0] : null;\n }\n\n /**\n * Activates a window by ID.\n * @param windowId The ID of the window to activate.\n * @throws Error if the operation fails.\n */\n async activateWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('activate_window', args, 'Failed to activate window');\n }\n\n /**\n * Maximizes a window by ID.\n * @param windowId The ID of the window to maximize.\n * @throws Error if the operation fails.\n */\n async maximizeWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('maximize_window', args, 'Failed to maximize window');\n }\n\n /**\n * Minimizes a window by ID.\n * @param windowId The ID of the window to minimize.\n * @throws Error if the operation fails.\n */\n async minimizeWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('minimize_window', args, 'Failed to minimize window');\n }\n\n /**\n * Restores a window by ID.\n * @param windowId The ID of the window to restore.\n * @throws Error if the operation fails.\n */\n async restoreWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('restore_window', args, 'Failed to restore window');\n }\n\n /**\n * Closes a window by ID.\n * @param windowId The ID of the window to close.\n * @throws Error if the operation fails.\n */\n async closeWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('close_window', args, 'Failed to close window');\n }\n\n /**\n * Sets a window to fullscreen by ID.\n * @param windowId The ID of the window to set to fullscreen.\n * @throws Error if the operation fails.\n */\n async fullscreenWindow(windowId: number): Promise<void> {\n const args = {\n window_id: windowId\n };\n\n await this.callMcpTool('fullscreen_window', args, 'Failed to set window to fullscreen');\n }\n\n /**\n * Resizes a window by ID.\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 * @throws Error if the operation fails.\n */\n async resizeWindow(windowId: number, width: number, height: number): Promise<void> {\n const args = {\n window_id: windowId,\n width,\n height\n };\n\n await this.callMcpTool('resize_window', args, 'Failed to resize window');\n }\n\n /**\n * Enables or disables focus mode.\n * @param on Whether to enable focus mode.\n * @throws Error if the operation fails.\n */\n async focusMode(on: boolean): Promise<void> {\n const args = {\n on\n };\n\n await this.callMcpTool('focus_mode', args, 'Failed to set focus mode');\n }\n}\n","import { APIError } from '../exceptions';\nimport { Session } from '../session';\nimport { CallMcpToolRequest } from '../api/models/model';\nimport { log, logError } from '../utils/logger';\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}\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(`Request: SessionId=${this.session.getSessionId()}, Args=${argsJSON}`);\n \n const response = await this.session.getClient().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 };\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 (item && typeof item === 'object' && item.text && typeof item.text === 'string') {\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 * \n * @param timeoutMs - The timeout in milliseconds. Default is 2000ms.\n * @returns An array of UIElement objects\n * @throws Error if the operation fails.\n */\n async getClickableUIElements(timeoutMs: number = 2000): Promise<UIElement[]> {\n const args = {\n timeout_ms: timeoutMs\n };\n \n const result = await this.callMcpTool('get_clickable_ui_elements', args, 'Failed to get clickable UI elements');\n \n if (!result.textContent) {\n return [];\n }\n \n try {\n // Parse the JSON string into an array of UIElement objects\n return JSON.parse(result.textContent) as UIElement[];\n } catch (error) {\n logError('Failed to parse clickable UI elements:', error);\n throw new APIError(`Failed to parse clickable UI elements: ${error}`);\n }\n }\n\n /**\n * Retrieves all UI elements within the specified timeout.\n * \n * @param timeoutMs - The timeout in milliseconds. Default is 2000ms.\n * @returns An array of UIElement objects\n * @throws Error if the operation fails.\n */\n async getAllUIElements(timeoutMs: number = 2000): Promise<UIElement[]> {\n const args = {\n timeout_ms: timeoutMs\n };\n \n const result = await this.callMcpTool('get_all_ui_elements', args, 'Failed to get all UI elements');\n \n if (!result.textContent) {\n return [];\n }\n \n try {\n // Parse the JSON string into an array of UIElement objects\n return JSON.parse(result.textContent) as UIElement[];\n } catch (error) {\n logError('Failed to parse all UI elements:', error);\n throw new APIError(`Failed to parse all UI elements: ${error}`);\n }\n }\n\n /**\n * Sends a key press event.\n * \n * @param key - The key code to send.\n * @returns The extracted text content from the API response\n * @throws Error if the operation fails.\n */\n async sendKey(key: number): Promise<string> {\n const args = {\n key\n };\n \n const result = await this.callMcpTool('send_key', args, 'Failed to send key');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Inputs text into the active field.\n * \n * @param text - The text to input.\n * @returns The extracted text content from the API response\n * @throws Error if the operation fails.\n */\n async inputText(text: string): Promise<string> {\n const args = {\n text\n };\n \n const result = await this.callMcpTool('input_text', args, 'Failed to input text');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Performs a swipe gesture on the screen.\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 The extracted text content from the API response\n * @throws Error if the operation fails.\n */\n async swipe(startX: number, startY: number, endX: number, endY: number, durationMs: number = 300): Promise<string> {\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('swipe', args, 'Failed to perform swipe');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Performs a click at the specified coordinates.\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 The extracted text content from the API response\n * @throws Error if the operation fails.\n */\n async click(x: number, y: number, button: string = 'left'): Promise<string> {\n const args = {\n x,\n y,\n button\n };\n \n const result = await this.callMcpTool('click', args, 'Failed to perform click');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n\n /**\n * Takes a screenshot of the current screen.\n * \n * @returns The extracted text content from the API response (usually a base64-encoded image)\n * @throws Error if the operation fails.\n */\n async screenshot(): Promise<string> {\n const args = {};\n \n const result = await this.callMcpTool('system_screenshot', args, 'Failed to take screenshot');\n \n // Return the extracted text content\n return result.textContent || '';\n }\n}\n","import { AgentBay } from './agent-bay';\nimport { APIError } from './exceptions';\nimport * as $_client from './api';\nimport { log, logError } from './utils/logger';\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: string = '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 * \n * @returns A list of Context objects.\n */\n async list(): Promise<Context[]> {\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(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 return contexts;\n } catch (error) {\n logError(\"Error calling ListContexts:\", error);\n throw new APIError(`Failed to list contexts: ${error}`);\n }\n }\n\n /**\n * Gets a context by name. Optionally creates it if it doesn't exist.\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 The Context object if found or created, null if not found and create is false.\n */\n async get(name: string, create: boolean = false): Promise<Context | null> {\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 null;\n }\n \n // Get the full context details\n const contexts = await this.list();\n for (const context of contexts) {\n if (context.id === contextId) {\n return context;\n }\n }\n \n // If we couldn't find the context in the list, create a basic one\n return new Context(contextId, name);\n } catch (error) {\n logError(\"Error calling GetContext:\", error);\n throw new APIError(`Failed to get context ${name}: ${error}`);\n }\n }\n\n /**\n * Creates a new context with the given name.\n * \n * @param name - The name for the new context.\n * @returns The created Context object.\n */\n async create(name: string): Promise<Context> {\n const context = await this.get(name, true);\n if (!context) {\n throw new APIError(`Failed to create context ${name}`);\n }\n return context;\n }\n\n /**\n * Updates the specified context.\n * \n * @param context - The Context object to update.\n * @returns The updated Context object.\n */\n async update(context: Context): Promise<Context> {\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 // Return the updated context\n return context;\n } catch (error) {\n logError(\"Error calling ModifyContext:\", error);\n throw new APIError(`Failed to update context ${context.id}: ${error}`);\n }\n }\n\n /**\n * Deletes the specified context.\n * \n * @param context - The Context object to delete.\n */\n async delete(context: Context): Promise<void> {\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 } catch (error) {\n logError(\"Error calling DeleteContext:\", error);\n throw new APIError(`Failed to delete context ${context.id}: ${error}`);\n }\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport 'dotenv/config';\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: 300000\n };\n}\n\n/**\n * Loads configuration from file\n */\nexport function loadConfig(): Config {\n // First check if the config file path is specified in environment variables\n let configPath = process.env.AGENTBAY_CONFIG_PATH;\n if (!configPath) {\n try {\n // Try to find the config file by traversing up from the current directory\n let dirPath = process.cwd();\n let found = false;\n \n // Start from current directory and traverse up to find .config.json\n // This will check current dir, parent, grandparent, etc. up to filesystem root\n for (let i = 0; i < 10; i++) { // Limit search depth to prevent infinite loop\n const possibleConfigPath = path.join(dirPath, '.config.json');\n if (fs.existsSync(possibleConfigPath)) {\n configPath = possibleConfigPath;\n found = true;\n log(`Found config file at: ${possibleConfigPath}`);\n break;\n }\n \n // Move up one directory\n const parentDir = path.dirname(dirPath);\n if (parentDir === dirPath) {\n // We've reached the filesystem root\n break;\n }\n dirPath = parentDir;\n }\n \n if (!found) {\n // Config file not found, return default config\n log('Warning: Configuration file not found, using default values');\n return defaultConfig();\n }\n } catch (error) {\n log(`Warning: Failed to search for configuration file: ${error}, using default values`);\n return defaultConfig();\n }\n }\n\n try {\n // Make sure configPath is defined\n if (!configPath) {\n log('Warning: Configuration file path is undefined, using default values');\n return defaultConfig();\n }\n \n // Read the config file\n const data = fs.readFileSync(configPath, 'utf8');\n const config = JSON.parse(data) as Config;\n\n // Allow environment variables to override config file values\n if (process.env.AGENTBAY_REGION_ID) {\n config.region_id = process.env.AGENTBAY_REGION_ID;\n }\n if (process.env.AGENTBAY_ENDPOINT) {\n config.endpoint = process.env.AGENTBAY_ENDPOINT;\n }\n\n return config;\n } catch (error) {\n log(`Warning: Failed to read configuration file: ${error}, using default values`);\n return defaultConfig();\n }\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"],"mappings":"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","names":["fs","path","$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","data","path","$dara","path","$OpenApiUtil","path","$OpenApiUtil"]}
|