@agentrun/sdk 0.0.3 → 0.0.4

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.
Files changed (130) hide show
  1. package/README.md +20 -15
  2. package/dist/agent-runtime/api/index.cjs +907 -0
  3. package/dist/agent-runtime/api/index.cjs.map +1 -0
  4. package/dist/agent-runtime/api/index.d.cts +193 -0
  5. package/dist/agent-runtime/api/index.d.ts +193 -0
  6. package/dist/agent-runtime/api/index.js +882 -0
  7. package/dist/agent-runtime/api/index.js.map +1 -0
  8. package/dist/agent-runtime/index.cjs +2528 -0
  9. package/dist/agent-runtime/index.cjs.map +1 -0
  10. package/dist/agent-runtime/index.d.cts +778 -0
  11. package/dist/agent-runtime/index.d.ts +778 -0
  12. package/dist/agent-runtime/index.js +2496 -0
  13. package/dist/agent-runtime/index.js.map +1 -0
  14. package/dist/base-K1GMfJbH.d.ts +59 -0
  15. package/dist/base-xcWt5bua.d.cts +59 -0
  16. package/dist/client-DHXxjuo3.d.ts +58 -0
  17. package/dist/client-DPUTs69s.d.cts +58 -0
  18. package/dist/config-07gMelJP.d.cts +125 -0
  19. package/dist/config-07gMelJP.d.ts +125 -0
  20. package/dist/control-api-BWD4eua5.d.cts +27 -0
  21. package/dist/control-api-d-82Sgpr.d.ts +27 -0
  22. package/dist/credential/api/index.cjs +655 -0
  23. package/dist/credential/api/index.cjs.map +1 -0
  24. package/dist/credential/api/index.d.cts +93 -0
  25. package/dist/credential/api/index.d.ts +93 -0
  26. package/dist/credential/api/index.js +630 -0
  27. package/dist/credential/api/index.js.map +1 -0
  28. package/dist/credential/index.cjs +1286 -0
  29. package/dist/credential/index.cjs.map +1 -0
  30. package/dist/credential/index.d.cts +246 -0
  31. package/dist/credential/index.d.ts +246 -0
  32. package/dist/credential/index.js +1263 -0
  33. package/dist/credential/index.js.map +1 -0
  34. package/dist/data-api-B-4h9_Vf.d.ts +166 -0
  35. package/dist/data-api-DsG-8JRQ.d.cts +166 -0
  36. package/dist/exception-DM9H2Rpo.d.cts +68 -0
  37. package/dist/exception-DM9H2Rpo.d.ts +68 -0
  38. package/dist/index.cjs +29281 -1427
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +38 -4485
  41. package/dist/index.d.ts +38 -4485
  42. package/dist/index.js +29259 -1426
  43. package/dist/index.js.map +1 -1
  44. package/dist/integration/builtin/index.cjs +9399 -0
  45. package/dist/integration/builtin/index.cjs.map +1 -0
  46. package/dist/integration/builtin/index.d.cts +692 -0
  47. package/dist/integration/builtin/index.d.ts +692 -0
  48. package/dist/integration/builtin/index.js +9363 -0
  49. package/dist/integration/builtin/index.js.map +1 -0
  50. package/dist/integration/index.cjs +9524 -0
  51. package/dist/integration/index.cjs.map +1 -0
  52. package/dist/integration/index.d.cts +98 -0
  53. package/dist/integration/index.d.ts +98 -0
  54. package/dist/integration/index.js +9481 -0
  55. package/dist/integration/index.js.map +1 -0
  56. package/dist/integration/mastra/index.cjs +9383 -0
  57. package/dist/integration/mastra/index.cjs.map +1 -0
  58. package/dist/integration/mastra/index.d.cts +186 -0
  59. package/dist/integration/mastra/index.d.ts +186 -0
  60. package/dist/integration/mastra/index.js +9348 -0
  61. package/dist/integration/mastra/index.js.map +1 -0
  62. package/dist/model/index.cjs +2392 -0
  63. package/dist/model/index.cjs.map +1 -0
  64. package/dist/model/index.d.cts +97 -0
  65. package/dist/model/index.d.ts +97 -0
  66. package/dist/model/index.js +2368 -0
  67. package/dist/model/index.js.map +1 -0
  68. package/dist/model--I90nCqy.d.cts +66 -0
  69. package/dist/model--I90nCqy.d.ts +66 -0
  70. package/dist/model-BV7A6Trb.d.cts +512 -0
  71. package/dist/model-DGBy-o_L.d.cts +176 -0
  72. package/dist/model-DGBy-o_L.d.ts +176 -0
  73. package/dist/model-RiiiZnou.d.ts +512 -0
  74. package/dist/model-service-D-P2FZNi.d.ts +540 -0
  75. package/dist/model-service-VpzBb7rV.d.cts +540 -0
  76. package/dist/resource-CQovFUeh.d.cts +44 -0
  77. package/dist/resource-DnE_DEka.d.ts +44 -0
  78. package/dist/sandbox/index.cjs +3557 -0
  79. package/dist/sandbox/index.cjs.map +1 -0
  80. package/dist/sandbox/index.d.cts +1598 -0
  81. package/dist/sandbox/index.d.ts +1598 -0
  82. package/dist/sandbox/index.js +3532 -0
  83. package/dist/sandbox/index.js.map +1 -0
  84. package/dist/server/adapter/index.cjs +24886 -0
  85. package/dist/server/adapter/index.cjs.map +1 -0
  86. package/dist/server/adapter/index.d.cts +68 -0
  87. package/dist/server/adapter/index.d.ts +68 -0
  88. package/dist/server/adapter/index.js +24883 -0
  89. package/dist/server/adapter/index.js.map +1 -0
  90. package/dist/server/core/index.cjs +313 -0
  91. package/dist/server/core/index.cjs.map +1 -0
  92. package/dist/server/core/index.d.cts +58 -0
  93. package/dist/server/core/index.d.ts +58 -0
  94. package/dist/server/core/index.js +309 -0
  95. package/dist/server/core/index.js.map +1 -0
  96. package/dist/server/index.cjs +25098 -0
  97. package/dist/server/index.cjs.map +1 -0
  98. package/dist/server/index.d.cts +73 -0
  99. package/dist/server/index.d.ts +73 -0
  100. package/dist/server/index.js +25067 -0
  101. package/dist/server/index.js.map +1 -0
  102. package/dist/server/protocol/index.cjs +1057 -0
  103. package/dist/server/protocol/index.cjs.map +1 -0
  104. package/dist/server/protocol/index.d.cts +135 -0
  105. package/dist/server/protocol/index.d.ts +135 -0
  106. package/dist/server/protocol/index.js +1053 -0
  107. package/dist/server/protocol/index.js.map +1 -0
  108. package/dist/tool-CG0LY-ov.d.cts +155 -0
  109. package/dist/tool-JJHam0ms.d.ts +155 -0
  110. package/dist/toolset/api/index.cjs +754 -0
  111. package/dist/toolset/api/index.cjs.map +1 -0
  112. package/dist/toolset/api/index.d.cts +207 -0
  113. package/dist/toolset/api/index.d.ts +207 -0
  114. package/dist/toolset/api/index.js +727 -0
  115. package/dist/toolset/api/index.js.map +1 -0
  116. package/dist/toolset/index.cjs +1945 -0
  117. package/dist/toolset/index.cjs.map +1 -0
  118. package/dist/toolset/index.d.cts +182 -0
  119. package/dist/toolset/index.d.ts +182 -0
  120. package/dist/toolset/index.js +1920 -0
  121. package/dist/toolset/index.js.map +1 -0
  122. package/dist/toolset-BYDvhwRp.d.cts +394 -0
  123. package/dist/toolset-CSRsJxCb.d.ts +394 -0
  124. package/dist/utils/index.cjs +994 -0
  125. package/dist/utils/index.cjs.map +1 -0
  126. package/dist/utils/index.d.cts +30 -0
  127. package/dist/utils/index.d.ts +30 -0
  128. package/dist/utils/index.js +951 -0
  129. package/dist/utils/index.js.map +1 -0
  130. package/package.json +65 -13
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/log.ts","../../src/utils/version-check.ts","../../src/utils/config.ts","../../src/utils/exception.ts","../../src/toolset/api/control.ts","../../src/toolset/api/mcp.ts","../../src/toolset/api/index.ts","../../src/utils/model.ts","../../src/utils/resource.ts","../../src/toolset/model.ts","../../src/toolset/openapi.ts","../../src/toolset/toolset.ts","../../src/toolset/client.ts","../../src/toolset/index.ts"],"names":["fp","dotenv","config","ToolControlAPI","$Devs","$OpenApi","$Util","MCPSession","MCPToolSet","ToolInfo","ToolSchema","ToolSetSchemaType","init_model","ApiSet","OpenAPI","YAML","mcpClient","ToolSet","ToolSetClient","Authorization","AuthorizationParameters","APIKeyAuthParameter","Toolset","ToolsetSpec","ToolsetSchema","ListToolsetsRequest"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Logging utilities for AgentRun SDK\n *\n * 此模块提供日志功能。\n * This module provides logging utilities.\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n// concise ANSI color codes we need\nconst COLORS = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n yellow: '\\x1b[33m',\n red: '\\x1b[31m',\n};\n\nclass Logger {\n private level: LogLevel = 'info';\n // match Python logger name\n private prefix = 'agentrun-logger';\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private getColor(level: LogLevel): string {\n switch (level) {\n case 'debug':\n return COLORS.cyan;\n case 'info':\n return COLORS.blue;\n case 'warn':\n return COLORS.yellow;\n case 'error':\n return COLORS.red;\n default:\n return COLORS.reset;\n }\n }\n\n // format timestamp like Python: YYYY-MM-DD HH:mm:ss,SSS\n private formatTimestamp(d = new Date()): string {\n const pad = (n: number, sz = 2) => n.toString().padStart(sz, '0');\n const year = d.getFullYear();\n const month = pad(d.getMonth() + 1);\n const day = pad(d.getDate());\n const hour = pad(d.getHours());\n const minute = pad(d.getMinutes());\n const second = pad(d.getSeconds());\n const ms = pad(d.getMilliseconds(), 3);\n return `${year}-${month}-${day} ${hour}:${minute}:${second},${ms}`;\n }\n\n // attempt to infer caller file and line by parsing Error.stack\n // helper: parse a single stack frame into {filepath, line, functionName}\n private parseFrame(frame: string) {\n const m = frame.match(/^(?:at\\s+)?(?:(.+?)\\s+\\()?(.*?):(\\d+):(\\d+)\\)?$/);\n if (!m) return null;\n return {\n functionName: m[1] ? m[1].trim() : undefined,\n filepath: m[2],\n line: parseInt(m[3], 10),\n };\n }\n\n // get caller by fixed stack offset (used in public log methods)\n private getCallerByOffset(): { filepath?: string; line?: number } {\n const err = new Error();\n const stack = err.stack;\n if (!stack) return {};\n const lines = stack.split('\\n').map(l => l.trim());\n // try the requested offset, if absent try next few frames\n\n for (let i = 3; i < lines.length; i++) {\n let parsed = this.parseFrame(lines[i]);\n // fallback: try extract /path:line:col substring\n if (!parsed) {\n const m = lines[i].match(/(\\/[^:\\s]+:\\d+:\\d+)/);\n if (m) {\n const parts = m[1].split(':');\n parts.pop(); // col\n const ln = Number(parts.pop());\n const fp = parts.join(':');\n parsed = { filepath: fp, line: ln, functionName: undefined } as any;\n }\n }\n if (!parsed) continue;\n const fp = parsed.filepath;\n if (\n fp.includes('node_modules') ||\n fp.includes('internal') ||\n fp.includes('<anonymous>') ||\n fp.includes('native')\n )\n continue;\n // skip logger internal frames\n return { filepath: parsed.filepath, line: parsed.line };\n }\n // fallback: scan all frames and return first project frame\n const cwd = process.cwd();\n for (let i = 0; i < lines.length; i++) {\n let parsed = this.parseFrame(lines[i]);\n if (!parsed) {\n const m = lines[i].match(/(\\/[^:\\s]+:\\d+:\\d+)/);\n if (m) {\n const parts = m[1].split(':');\n parts.pop(); // col\n const ln = Number(parts.pop());\n const fp = parts.join(':');\n parsed = { filepath: fp, line: ln, functionName: undefined } as any;\n }\n }\n if (!parsed) continue;\n const fp = parsed.filepath;\n if (\n fp.includes('node_modules') ||\n fp.includes('internal') ||\n fp.includes('<anonymous>') ||\n fp.includes('native')\n )\n continue;\n if (fp.includes('/src/utils/log.ts')) continue;\n if (fp.startsWith(cwd)) return { filepath: parsed.filepath, line: parsed.line };\n }\n // final fallback: first non-node_modules parsed frame\n for (let i = 0; i < lines.length; i++) {\n let parsed = this.parseFrame(lines[i]);\n if (!parsed) {\n const m = lines[i].match(/(\\/[^:\\s]+:\\d+:\\d+)/);\n if (m) {\n const parts = m[1].split(':');\n parts.pop(); // col\n const ln = Number(parts.pop());\n const fp = parts.join(':');\n parsed = { filepath: fp, line: ln, functionName: undefined } as any;\n }\n }\n if (!parsed) continue;\n const fp = parsed.filepath;\n if (\n fp.includes('node_modules') ||\n fp.includes('internal') ||\n fp.includes('<anonymous>') ||\n fp.includes('native')\n )\n continue;\n if (fp.includes('/src/utils/log.ts')) continue;\n return { filepath: parsed.filepath, line: parsed.line };\n }\n return {};\n }\n\n private formatMessage(\n level: LogLevel,\n message: string,\n filepath?: string,\n line?: number\n ): string {\n const timestamp = this.formatTimestamp();\n const color = this.getColor(level);\n const reset = COLORS.reset;\n\n // filepath/line should be provided by caller via getCallerByOffset;\n // if missing, leave blank\n\n const levelName = level === 'warn' ? 'WARNING' : level.toUpperCase();\n const levelStr = `${COLORS.bright}${color}${levelName}${reset}`;\n const nameStr = `${color}[${this.prefix}]${reset}`;\n const tsStr = `${color} ${timestamp}${reset}`;\n const pathInfo =\n filepath && line !== undefined\n ? ` ${COLORS.dim}${COLORS.italic}${filepath}:${line}${reset}`\n : '';\n const msg = level === 'debug' ? `${COLORS.dim}${message}${reset}` : message;\n\n return `\\n${levelStr} ${nameStr}${tsStr}${pathInfo}\\n${msg}\\n`;\n }\n\n debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog('debug')) {\n const caller = this.getCallerByOffset();\n console.debug(this.formatMessage('debug', message, caller.filepath, caller.line), ...args);\n }\n }\n\n info(message: string, ...args: unknown[]): void {\n if (this.shouldLog('info')) {\n const caller = this.getCallerByOffset();\n console.info(this.formatMessage('info', message, caller.filepath, caller.line), ...args);\n }\n }\n\n warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog('warn')) {\n const caller = this.getCallerByOffset();\n console.warn(this.formatMessage('warn', message, caller.filepath, caller.line), ...args);\n }\n }\n\n error(message: string, ...args: unknown[]): void {\n if (this.shouldLog('error')) {\n const caller = this.getCallerByOffset();\n console.error(this.formatMessage('error', message, caller.filepath, caller.line), ...args);\n }\n }\n}\n\nexport const logger = new Logger();\nif (\n ![undefined, null, '', 'False', 'FALSE', 'false', '0'].includes(process.env['AGENTRUN_SDK_DEBUG'])\n) {\n logger.setLevel('debug');\n\n if (!(globalThis as any)._AGENTRUN_DEBUG_LOGGED) {\n logger.warn('启用 AgentRun SDK 调试日志, 移除 AGENTRUN_SDK_DEBUG 环境变量以关闭');\n (globalThis as any)._AGENTRUN_DEBUG_LOGGED = true;\n }\n} else {\n logger.setLevel('info');\n}\n","// Version check utility to ensure warning is only shown once globally\ndeclare const __VERSION__: string;\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '0.0.0-dev';\nimport { logger } from './log';\n\nif (\n !process.env.DISABLE_BREAKING_CHANGES_WARNING &&\n !(globalThis as any)._AGENTRUN_VERSION_WARNING_SHOWN\n) {\n (globalThis as any)._AGENTRUN_VERSION_WARNING_SHOWN = true;\n logger.warn(\n `当前您正在使用 AgentRun Python SDK 版本 ${VERSION}。早期版本通常包含许多新功能,这些功能\\x1b[1;33m 可能引入不兼容的变更 \\x1b[0m。为避免潜在问题,我们强烈建议\\x1b[1;32m 将依赖锁定为此版本 \\x1b[0m。\nYou are currently using AgentRun Python SDK version ${VERSION}. Early versions often include many new features, which\\x1b[1;33m may introduce breaking changes\\x1b[0m. To avoid potential issues, we strongly recommend \\x1b[1;32mpinning the dependency to this version\\x1b[0m.\n\\x1b[2;3m pip install 'agentrun-sdk==${VERSION}' \\x1b[0m\n\n增加\\x1b[2;3m DISABLE_BREAKING_CHANGES_WARNING=1 \\x1b[0m到您的环境变量以关闭此警告。\nAdd\\x1b[2;3m DISABLE_BREAKING_CHANGES_WARNING=1 \\x1b[0mto your environment variables to disable this warning.\n \nReleases:\\x1b[2;3m https://github.com/Serverless-Devs/agentrun-sdk-python/releases\\x1b[0m`\n );\n}\n","/**\n * Configuration Management Module\n *\n * 此模块提供 AgentRun SDK 的全局配置管理功能。\n * This module provides global configuration management for AgentRun SDK.\n */\n\nimport * as dotenv from 'dotenv';\n\n// Load environment variables\ndotenv.config();\n\n/**\n * Get environment variable with fallback keys\n */\nfunction getEnvWithDefault(defaultValue: string, ...keys: string[]): string {\n for (const key of keys) {\n const value = process.env[key];\n if (value !== undefined && value !== '') {\n return value;\n }\n }\n return defaultValue;\n}\n\n/**\n * Configuration options for AgentRun SDK\n */\nexport interface ConfigOptions {\n /**\n * Access Key ID for authentication.\n * Read from AGENTRUN_ACCESS_KEY_ID or ALIBABA_CLOUD_ACCESS_KEY_ID if not provided.\n */\n accessKeyId?: string;\n\n /**\n * Access Key Secret for authentication.\n * Read from AGENTRUN_ACCESS_KEY_SECRET or ALIBABA_CLOUD_ACCESS_KEY_SECRET if not provided.\n */\n accessKeySecret?: string;\n\n /**\n * Security token for STS authentication.\n * Read from AGENTRUN_SECURITY_TOKEN or ALIBABA_CLOUD_SECURITY_TOKEN if not provided.\n */\n securityToken?: string;\n\n /**\n * Account ID.\n * Read from AGENTRUN_ACCOUNT_ID or FC_ACCOUNT_ID if not provided.\n */\n accountId?: string;\n\n /**\n * Custom token for data API calls.\n */\n token?: string;\n\n /**\n * Region ID. Defaults to cn-hangzhou.\n * Read from AGENTRUN_REGION or FC_REGION if not provided.\n */\n regionId?: string;\n\n /**\n * Request timeout in milliseconds. Defaults to 600000 (10 minutes).\n */\n timeout?: number;\n\n /**\n * Read timeout in milliseconds. Defaults to 100000000.\n */\n readTimeout?: number;\n\n /**\n * Custom control API endpoint.\n * Read from AGENTRUN_CONTROL_ENDPOINT if not provided.\n */\n controlEndpoint?: string;\n\n /**\n * Custom data API endpoint.\n * Read from AGENTRUN_DATA_ENDPOINT if not provided.\n */\n dataEndpoint?: string;\n\n /**\n * Custom DevS API endpoint.\n * Read from DEVS_ENDPOINT if not provided.\n */\n devsEndpoint?: string;\n\n /**\n * Custom request headers.\n */\n headers?: Record<string, string>;\n}\n\n/**\n * AgentRun SDK Global Configuration Class\n *\n * 用于管理账号凭证和客户端配置。\n * Used for managing account credentials and client configuration.\n *\n * @example\n * ```typescript\n * // Create config from parameters\n * const config = new Config({\n * accountId: 'your-account-id',\n * accessKeyId: 'your-key-id',\n * accessKeySecret: 'your-secret',\n * });\n *\n * // Or read from environment variables\n * const config = new Config();\n * ```\n */\nexport class Config {\n private _accessKeyId: string;\n private _accessKeySecret: string;\n private _securityToken: string;\n private _accountId: string;\n private _token?: string;\n private _regionId: string;\n private _timeout: number;\n private _readTimeout: number;\n private _controlEndpoint: string;\n private _dataEndpoint: string;\n private _devsEndpoint: string;\n private _headers: Record<string, string>;\n\n constructor(options: ConfigOptions = {}) {\n this._accessKeyId =\n options.accessKeyId ??\n getEnvWithDefault('', 'AGENTRUN_ACCESS_KEY_ID', 'ALIBABA_CLOUD_ACCESS_KEY_ID');\n\n this._accessKeySecret =\n options.accessKeySecret ??\n getEnvWithDefault('', 'AGENTRUN_ACCESS_KEY_SECRET', 'ALIBABA_CLOUD_ACCESS_KEY_SECRET');\n\n this._securityToken =\n options.securityToken ??\n getEnvWithDefault('', 'AGENTRUN_SECURITY_TOKEN', 'ALIBABA_CLOUD_SECURITY_TOKEN');\n\n this._accountId =\n options.accountId ?? getEnvWithDefault('', 'AGENTRUN_ACCOUNT_ID', 'FC_ACCOUNT_ID');\n\n this._token = options.token;\n\n this._regionId =\n options.regionId ?? getEnvWithDefault('cn-hangzhou', 'AGENTRUN_REGION', 'FC_REGION');\n\n this._timeout = options.timeout ?? 600000;\n this._readTimeout = options.readTimeout ?? 100000000;\n\n this._controlEndpoint =\n options.controlEndpoint ?? getEnvWithDefault('', 'AGENTRUN_CONTROL_ENDPOINT');\n\n this._dataEndpoint = options.dataEndpoint ?? getEnvWithDefault('', 'AGENTRUN_DATA_ENDPOINT');\n\n this._devsEndpoint = options.devsEndpoint ?? getEnvWithDefault('', 'DEVS_ENDPOINT');\n\n this._headers = options.headers ?? {};\n }\n\n /**\n * Create a new Config by merging multiple configs.\n * Later configs take precedence.\n */\n static withConfigs(...configs: (Config | undefined)[]): Config {\n return new Config().update(...configs);\n }\n\n /**\n * Update this config with values from other configs.\n * Non-undefined values from later configs take precedence.\n */\n update(...configs: (Config | undefined)[]): Config {\n for (const config of configs) {\n if (!config) continue;\n\n if (config._accessKeyId) this._accessKeyId = config._accessKeyId;\n if (config._accessKeySecret) this._accessKeySecret = config._accessKeySecret;\n if (config._securityToken) this._securityToken = config._securityToken;\n if (config._accountId) this._accountId = config._accountId;\n if (config._token) this._token = config._token;\n if (config._regionId) this._regionId = config._regionId;\n if (config._timeout) this._timeout = config._timeout;\n if (config._readTimeout) this._readTimeout = config._readTimeout;\n if (config._controlEndpoint) this._controlEndpoint = config._controlEndpoint;\n if (config._dataEndpoint) this._dataEndpoint = config._dataEndpoint;\n if (config._devsEndpoint) this._devsEndpoint = config._devsEndpoint;\n if (config._headers && Object.keys(config._headers).length > 0) {\n this._headers = { ...this._headers, ...config._headers };\n }\n }\n return this;\n }\n\n get accessKeyId(): string {\n return this._accessKeyId;\n }\n\n get accessKeySecret(): string {\n return this._accessKeySecret;\n }\n\n get securityToken(): string {\n return this._securityToken;\n }\n\n get accountId(): string {\n if (!this._accountId) {\n throw new Error(\n 'Account ID is not set. Please add AGENTRUN_ACCOUNT_ID environment variable or set it in code.'\n );\n }\n return this._accountId;\n }\n\n get token(): string | undefined {\n return this._token;\n }\n\n get regionId(): string {\n return this._regionId || 'cn-hangzhou';\n }\n\n get timeout(): number {\n return this._timeout || 600000;\n }\n\n get readTimeout(): number {\n return this._readTimeout || 100000000;\n }\n\n get controlEndpoint(): string {\n if (this._controlEndpoint) {\n return this._controlEndpoint;\n }\n return `https://agentrun.${this.regionId}.aliyuncs.com`;\n }\n\n get dataEndpoint(): string {\n if (this._dataEndpoint) {\n return this._dataEndpoint;\n }\n return `https://${this.accountId}.agentrun-data.${this.regionId}.aliyuncs.com`;\n }\n\n get devsEndpoint(): string {\n if (this._devsEndpoint) {\n return this._devsEndpoint;\n }\n return `https://devs.${this.regionId}.aliyuncs.com`;\n }\n\n get headers(): Record<string, string> {\n return this._headers;\n }\n}\n","/**\n * Exception classes for AgentRun SDK\n *\n * 此模块定义 AgentRun SDK 的异常类。\n * This module defines exception classes for AgentRun SDK.\n */\n\n/**\n * Base error class for AgentRun SDK\n */\nexport class AgentRunError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AgentRunError';\n Object.setPrototypeOf(this, AgentRunError.prototype);\n }\n}\n\n/**\n * HTTP error with status code and request ID\n */\nexport class HTTPError extends AgentRunError {\n readonly statusCode: number;\n readonly requestId?: string;\n readonly errorCode?: string;\n\n constructor(\n statusCode: number,\n message: string,\n options?: {\n requestId?: string;\n errorCode?: string;\n }\n ) {\n super(message);\n this.name = 'HTTPError';\n this.statusCode = statusCode;\n this.requestId = options?.requestId;\n this.errorCode = options?.errorCode;\n Object.setPrototypeOf(this, HTTPError.prototype);\n }\n\n /**\n * Convert HTTP error to resource-specific error based on status code\n */\n toResourceError(resourceType: string, resourceId?: string): HTTPError {\n if (this.statusCode == 404) return new ResourceNotExistError(resourceType, resourceId);\n else if (this.statusCode == 409) return new ResourceAlreadyExistError(resourceType, resourceId);\n else if (\n (this.statusCode == 400 || this.statusCode == 500) &&\n this.message.includes('already exists')\n )\n return new ResourceAlreadyExistError(resourceType, resourceId);\n else return this;\n }\n}\n\n/**\n * Client-side error (4xx status codes)\n */\nexport class ClientError extends HTTPError {\n constructor(\n statusCode: number,\n message: string,\n options?: {\n requestId?: string;\n errorCode?: string;\n }\n ) {\n super(statusCode, message, options);\n this.name = 'ClientError';\n Object.setPrototypeOf(this, ClientError.prototype);\n }\n}\n\n/**\n * Server-side error (5xx status codes)\n */\nexport class ServerError extends HTTPError {\n constructor(\n statusCode: number,\n message: string,\n options?: {\n requestId?: string;\n errorCode?: string;\n }\n ) {\n super(statusCode, message, options);\n this.name = 'ServerError';\n Object.setPrototypeOf(this, ServerError.prototype);\n }\n}\n\n/**\n * Resource not found error\n */\nexport class ResourceNotExistError extends ClientError {\n readonly resourceType: string;\n readonly resourceId?: string;\n\n constructor(\n resourceType: string,\n resourceId?: string,\n options?: {\n requestId?: string;\n }\n ) {\n const message = resourceId\n ? `${resourceType} '${resourceId}' does not exist`\n : `${resourceType} does not exist`;\n super(404, message, options);\n this.name = 'ResourceNotExistError';\n this.resourceType = resourceType;\n this.resourceId = resourceId;\n Object.setPrototypeOf(this, ResourceNotExistError.prototype);\n }\n}\n\n/**\n * Resource already exists error\n */\nexport class ResourceAlreadyExistError extends ClientError {\n readonly resourceType: string;\n readonly resourceId?: string;\n\n constructor(\n resourceType: string,\n resourceId?: string,\n options?: {\n requestId?: string;\n }\n ) {\n const message = resourceId\n ? `${resourceType} '${resourceId}' already exists`\n : `${resourceType} already exists`;\n super(409, message, options);\n this.name = 'ResourceAlreadyExistError';\n this.resourceType = resourceType;\n this.resourceId = resourceId;\n Object.setPrototypeOf(this, ResourceAlreadyExistError.prototype);\n }\n}\n","/**\n * Tool Control API\n *\n * Tool 管控链路 API\n *\n * This file is auto generated by the code generation script.\n * Do not modify this file manually.\n * Use the `make codegen` command to regenerate.\n *\n * 当前文件为自动生成的控制 API 客户端代码。请勿手动修改此文件。\n * 使用 `make codegen` 命令重新生成。\n */\n\nimport * as $Devs from '@alicloud/devs20230714';\nimport * as $OpenApi from '@alicloud/openapi-client';\nimport * as $Util from '@alicloud/tea-util';\n\nimport { Config } from '../../utils/config';\n\n// Handle ESM/CJS interop for Client class\nconst $DevsClient =\n // @ts-expect-error - ESM interop: default.default exists when imported as ESM namespace\n $Devs.default?.default ?? $Devs.default ?? $Devs;\nimport { ClientError, HTTPError, ServerError } from '../../utils/exception';\nimport { logger } from '../../utils/log';\n\n/**\n * Tool Control API\n *\n * Tool 管控链路 API\n */\nexport class ToolControlAPI {\n private config?: Config;\n\n /**\n * Initialize API client\n * 初始化 API 客户端\n *\n * @param config - Global configuration object / 全局配置对象\n */\n constructor(config?: Config) {\n this.config = config;\n }\n\n /**\n * Get DevS client\n * 获取 DevS 客户端\n */\n protected getDevsClient(config?: Config): InstanceType<typeof $DevsClient> {\n const cfg = Config.withConfigs(this.config, config);\n\n // Use devs endpoint\n let endpoint = cfg.devsEndpoint;\n\n // Remove protocol prefix for SDK\n if (endpoint.startsWith('http://') || endpoint.startsWith('https://')) {\n endpoint = endpoint.split('://')[1];\n }\n\n const openApiConfig = new $OpenApi.Config({\n accessKeyId: cfg.accessKeyId,\n accessKeySecret: cfg.accessKeySecret,\n securityToken: cfg.securityToken || undefined,\n regionId: cfg.regionId,\n endpoint: endpoint,\n connectTimeout: cfg.timeout,\n });\n\n return new $DevsClient(openApiConfig);\n }\n\n /**\n * Get toolset\n * 获取工具\n *\n * @param name - Tool name / Tool 名称\n * @param headers - Request headers / 请求头\n * @param config - Configuration / 配置\n * @returns Toolset object / ToolSet 对象\n * @throws AgentRuntimeError - Throws on call failure / 调用失败时抛出\n * @throws ClientError - Client error / 客户端错误\n * @throws ServerError - Server error / 服务器错误\n */\n getToolset = async (params: {\n name: string;\n headers?: Record<string, string>;\n config?: Config;\n }): Promise<$Devs.Toolset> => {\n const { name, headers, config } = params;\n\n try {\n const client = this.getDevsClient(config);\n const runtime = new $Util.RuntimeOptions({});\n\n const response = await client.getToolsetWithOptions(name, headers || {}, runtime);\n\n logger.debug(`API getToolset called, Request ID: ${response.body?.requestId}`);\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n return response.body;\n } catch (error) {\n if (error instanceof HTTPError) {\n throw error.toResourceError('ToolSet', name);\n }\n this.handleError(error, name);\n }\n };\n\n /**\n * List toolsets\n * 枚举 ToolSets\n *\n * @param input - List configuration / 枚举的配置\n * @param headers - Request headers / 请求头\n * @param config - Configuration / 配置\n * @returns ToolSet list / ToolSet 列表\n * @throws AgentRuntimeError - Throws on call failure / 调用失败时抛出\n * @throws ClientError - Client error / 客户端错误\n * @throws ServerError - Server error / 服务器错误\n */\n listToolsets = async (params: {\n input: $Devs.ListToolsetsRequest;\n headers?: Record<string, string>;\n config?: Config;\n }): Promise<$Devs.ListToolsetsResponseBody> => {\n const { input, headers, config } = params;\n\n try {\n const client = this.getDevsClient(config);\n const runtime = new $Util.RuntimeOptions({});\n\n const response = await client.listToolsetsWithOptions(input, headers || {}, runtime);\n\n logger.debug(\n `API listToolsets called, Request ID: ${response?.headers?.['x-acs-request-id']}`\n );\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n return response.body;\n } catch (error) {\n this.handleError(error);\n }\n };\n\n /**\n * Create toolset\n * 创建工具集\n *\n * @param input - Toolset input / ToolSet 输入\n * @param headers - Request headers / 请求头\n * @param config - Configuration / 配置\n * @returns Toolset object / ToolSet 对象\n */\n createToolset = async (params: {\n input: $Devs.Toolset;\n headers?: Record<string, string>;\n config?: Config;\n }): Promise<$Devs.Toolset> => {\n const { input, headers, config } = params;\n\n try {\n const client = this.getDevsClient(config);\n const runtime = new $Util.RuntimeOptions({});\n\n const response = await client.createToolsetWithOptions(\n new $Devs.CreateToolsetRequest({ body: input }),\n headers || {},\n runtime\n );\n\n logger.debug(`API createToolset called, Request ID: ${response.body?.requestId}`);\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n return response.body;\n } catch (error) {\n this.handleError(error, input?.name);\n }\n };\n\n /**\n * Update toolset\n * 更新工具集\n *\n * @param name - Toolset name / ToolSet 名称\n * @param input - Toolset input / ToolSet 输入\n * @param headers - Request headers / 请求头\n * @param config - Configuration / 配置\n * @returns Toolset object / ToolSet 对象\n */\n updateToolset = async (params: {\n name: string;\n input: $Devs.Toolset;\n headers?: Record<string, string>;\n config?: Config;\n }): Promise<$Devs.Toolset> => {\n const { name, input, headers, config } = params;\n\n try {\n const client = this.getDevsClient(config);\n const runtime = new $Util.RuntimeOptions({});\n\n const response = await client.updateToolsetWithOptions(\n name,\n new $Devs.UpdateToolsetRequest({ body: input }),\n headers || {},\n runtime\n );\n\n logger.debug(`API updateToolset called, Request ID: ${response.body?.requestId}`);\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n return response.body;\n } catch (error) {\n this.handleError(error, name);\n }\n };\n\n /**\n * Delete toolset\n * 删除工具集\n *\n * @param name - Toolset name / ToolSet 名称\n * @param headers - Request headers / 请求头\n * @param config - Configuration / 配置\n * @returns Toolset object / ToolSet 对象\n */\n deleteToolset = async (params: {\n name: string;\n headers?: Record<string, string>;\n config?: Config;\n }): Promise<$Devs.Toolset> => {\n const { name, headers, config } = params;\n\n try {\n const client = this.getDevsClient(config);\n const runtime = new $Util.RuntimeOptions({});\n\n const response = await client.deleteToolsetWithOptions(name, headers || {}, runtime);\n\n logger.debug(`API deleteToolset called, Request ID: ${response.body?.requestId}`);\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n return response.body;\n } catch (error) {\n this.handleError(error, name);\n }\n };\n\n /**\n * Handle API errors\n * 处理 API 错误\n */\n private handleError(error: unknown, _resourceName?: string): never {\n if (error && typeof error === 'object' && 'statusCode' in error) {\n const e = error as {\n statusCode: number;\n message: string;\n data?: { requestId?: string };\n };\n const statusCode = e.statusCode;\n const message = e.message || 'Unknown error';\n const requestId = e.data?.requestId;\n\n if (statusCode >= 400 && statusCode < 500) {\n throw new ClientError(statusCode, message, { requestId });\n } else if (statusCode >= 500) {\n throw new ServerError(statusCode, message, { requestId });\n }\n }\n throw error;\n }\n}\n","/**\n * MCP Protocol Handler\n * MCP 协议处理\n *\n * Handles tool invocations for MCP (Model Context Protocol).\n * 处理 MCP(Model Context Protocol)协议的工具调用。\n */\n\nimport { Config } from '../../utils/config';\nimport { logger } from '../../utils/log';\n\n/**\n * MCP Session\n *\n * Manages an MCP session connection.\n * 管理 MCP 会话连接。\n */\nexport class MCPSession {\n private url: string;\n private config: Config;\n private client: any; // Will be typed when @modelcontextprotocol/sdk is installed\n private clientSession: any;\n\n constructor(url: string, config?: Config) {\n this.url = url;\n this.config = Config.withConfigs(config);\n }\n\n /**\n * Create and initialize the session\n * 创建并初始化会话\n */\n connect = async (_params?: { config?: Config }): Promise<any> => {\n try {\n // Dynamically import MCP SDK\n const { Client } = await import('@modelcontextprotocol/sdk/client/index.js');\n const { SSEClientTransport } = await import('@modelcontextprotocol/sdk/client/sse.js');\n\n // Create SSE transport\n // Note: SSEClientTransport does not support timeout or headers in constructor\n const transport = new SSEClientTransport(new URL(this.url));\n\n // Create client\n this.client = new Client(\n {\n name: 'agentrun-nodejs-client',\n version: '1.0.0',\n },\n {\n capabilities: {},\n }\n );\n\n // Connect\n await this.client.connect(transport);\n\n return this.client;\n } catch (error) {\n logger.error('Failed to create MCP session:', error);\n throw error;\n }\n };\n\n /**\n * Close the session\n * 关闭会话\n */\n close = async (_params?: { config?: Config }): Promise<void> => {\n if (this.client) {\n try {\n await this.client.close();\n } catch (error) {\n logger.error('Failed to close MCP session:', error);\n }\n }\n };\n\n /**\n * Get toolsets\n * 获取工具集\n */\n toolsets(config?: Config): MCPToolSet {\n const cfg = Config.withConfigs(this.config, config);\n return new MCPToolSet(this.url + '/toolsets', cfg);\n }\n}\n\n/**\n * MCP Tool Set\n *\n * Manages MCP tools and provides invocation capabilities.\n * 管理 MCP 工具并提供调用功能。\n */\nexport class MCPToolSet {\n private url: string;\n private config: Config;\n\n constructor(url: string, config?: Config) {\n this.url = url;\n this.config = Config.withConfigs(config);\n }\n\n /**\n * Create a new session\n * 创建新会话\n */\n newSession(config?: Config): MCPSession {\n const cfg = Config.withConfigs(this.config, config);\n return new MCPSession(this.url, cfg);\n }\n\n /**\n * List available tools (async)\n * 列出可用工具(异步)\n */\n toolsAsync = async (params?: { config?: Config }): Promise<any[]> => {\n const session = this.newSession(params?.config);\n try {\n const client = await session.connect();\n const result = await client.listTools();\n return result.tools || [];\n } finally {\n await session.close();\n }\n };\n\n /**\n * List available tools (sync wrapper)\n * 列出可用工具(同步包装)\n *\n * Note: This is a convenience method that wraps the async version.\n * In Node.js, prefer using toolsAsync() directly.\n */\n tools(config?: Config): Promise<any[]> {\n return this.toolsAsync({ config });\n }\n\n /**\n * Call a tool (async)\n * 调用工具(异步)\n */\n callToolAsync = async (\n name: string,\n args?: Record<string, unknown>,\n config?: Config\n ): Promise<any> => {\n const session = this.newSession(config);\n try {\n const client = await session.connect();\n const result = await client.callTool({\n name,\n arguments: args || {},\n });\n\n // Convert content to plain objects\n if (result.content && Array.isArray(result.content)) {\n return result.content.map((item: any) => {\n if (typeof item === 'object' && item !== null) {\n // If item has a toJSON method, use it\n if (typeof item.toJSON === 'function') {\n return item.toJSON();\n }\n // Otherwise, create a plain object copy\n return { ...item };\n }\n return item;\n });\n }\n\n return result.content || [];\n } finally {\n await session.close();\n }\n };\n\n /**\n * Call a tool (sync wrapper)\n * 调用工具(同步包装)\n *\n * Note: This is a convenience method that wraps the async version.\n * In Node.js, prefer using callToolAsync() directly.\n */\n callTool(name: string, args?: Record<string, unknown>, config?: Config): Promise<any> {\n return this.callToolAsync(name, args, config);\n }\n}\n","/**\n * ToolSet API Module\n * ToolSet API 模块\n *\n * This module contains API interfaces for toolsets.\n * 此模块包含工具集的 API 接口。\n */\n\nimport '@/utils/version-check';\n\nexport { ToolControlAPI } from './control';\nexport { MCPSession, MCPToolSet } from './mcp';\n","/**\n * Common data models for AgentRun SDK\n *\n * 此模块定义通用的数据模型。\n * This module defines common data models.\n */\n\n/**\n * Resource status enum\n */\nexport type Status =\n | 'CREATING'\n | 'CREATE_FAILED'\n | 'READY'\n | 'UPDATING'\n | 'UPDATE_FAILED'\n | 'DELETING'\n | 'DELETE_FAILED';\n\nexport const Status = {\n CREATING: 'CREATING' as Status,\n CREATE_FAILED: 'CREATE_FAILED' as Status,\n READY: 'READY' as Status,\n UPDATING: 'UPDATING' as Status,\n UPDATE_FAILED: 'UPDATE_FAILED' as Status,\n DELETING: 'DELETING' as Status,\n DELETE_FAILED: 'DELETE_FAILED' as Status,\n};\n\nexport function isFinalStatus(status?: Status) {\n return [\n undefined,\n null,\n '',\n ...(['READY', 'CREATE_FAILED', 'UPDATE_FAILED', 'DELETE_FAILED'] as Status[]),\n ].includes(status);\n}\n\n/**\n * Network mode enum\n */\nexport type NetworkMode = 'PUBLIC' | 'PRIVATE' | 'PUBLIC_AND_PRIVATE';\n\nexport const NetworkMode = {\n PUBLIC: 'PUBLIC' as NetworkMode,\n PRIVATE: 'PRIVATE' as NetworkMode,\n PUBLIC_AND_PRIVATE: 'PUBLIC_AND_PRIVATE' as NetworkMode,\n};\n\n/**\n * Pageable input for list operations\n */\nexport interface PageableInput {\n pageNumber?: number;\n pageSize?: number;\n}\n\n/**\n * Network configuration\n */\nexport interface NetworkConfig {\n networkMode?: NetworkMode;\n vpcId?: string;\n vSwitchIds?: string[];\n securityGroupId?: string;\n}\n\n/**\n * Helper to convert camelCase to snake_case\n */\nexport function toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Helper to convert snake_case to camelCase\n */\nexport function toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Convert object keys from camelCase to snake_case\n */\nexport function toSnakeCaseKeys<T extends Record<string, unknown>>(\n obj: T\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const snakeKey = toSnakeCase(key);\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n result[snakeKey] = toSnakeCaseKeys(value as Record<string, unknown>);\n } else if (Array.isArray(value)) {\n result[snakeKey] = value.map(item =>\n typeof item === 'object' && item !== null\n ? toSnakeCaseKeys(item as Record<string, unknown>)\n : item\n );\n } else {\n result[snakeKey] = value;\n }\n }\n return result;\n}\n\n/**\n * Convert object keys from snake_case to camelCase\n */\nexport function toCamelCaseKeys<T extends Record<string, unknown>>(\n obj: T\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = toCamelCase(key);\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n result[camelKey] = toCamelCaseKeys(value as Record<string, unknown>);\n } else if (Array.isArray(value)) {\n result[camelKey] = value.map(item =>\n typeof item === 'object' && item !== null\n ? toCamelCaseKeys(item as Record<string, unknown>)\n : item\n );\n } else {\n result[camelKey] = value;\n }\n }\n return result;\n}\n\n/**\n * Remove undefined values from object\n */\nexport function removeUndefined<T extends Record<string, unknown>>(obj: T): Partial<T> {\n const result: Partial<T> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== undefined) {\n (result as Record<string, unknown>)[key] = value;\n }\n }\n return result;\n}\n","/**\n资源基类模板 / Resource Base Template\n\n此模板用于生成资源对象的基类代码。\nThis template is used to generate base class code for resource objects.\n*/\n\nimport { Config } from './config';\nimport { ResourceNotExistError } from './exception';\nimport { logger } from './log';\nimport { isFinalStatus, PageableInput, Status } from './model';\n\n/**\n * 更新对象属性的辅助函数 / Helper function to update object properties\n *\n * 只复制数据属性,跳过方法和私有属性\n * Only copies data properties, skips methods and private properties\n *\n * @param target - 目标对象 / Target object\n * @param source - 源对象 / Source object\n */\nexport function updateObjectProperties(target: any, source: any): void {\n for (const key in source) {\n if (\n Object.prototype.hasOwnProperty.call(source, key) &&\n typeof source[key] !== 'function' &&\n !key.startsWith('_') // 跳过私有属性\n ) {\n target[key] = source[key];\n }\n }\n}\n\nexport interface WithUniqIdCallback {\n uniqIdCallback(): string | undefined;\n}\n\nexport interface ParamsWithConfig {\n config?: Config;\n}\n\nexport abstract class ResourceBase {\n public status?: Status;\n protected _config?: Config;\n\n abstract get(params?: ParamsWithConfig): Promise<any>;\n abstract delete(params?: ParamsWithConfig): Promise<any>;\n\n // static async list(params?: {\n // input?: PageableInput;\n // config?: Config;\n // }): Promise<WithUniqIdCallback[]> {\n // return [];\n // }\n\n waitUntil = async (params: {\n checkFinishedCallback: (resource: ResourceBase) => boolean | Promise<boolean>;\n intervalSeconds?: number;\n timeoutSeconds?: number;\n }): Promise<ResourceBase> => {\n const { checkFinishedCallback, intervalSeconds = 5, timeoutSeconds = 300 } = params;\n\n const startTime = Date.now();\n while (true) {\n if (await checkFinishedCallback(this)) return this;\n\n if (Date.now() - startTime >= timeoutSeconds * 1000) {\n throw new Error('Timeout waiting for resource to reach desired state');\n }\n\n await new Promise(resolve => setTimeout(resolve, intervalSeconds * 1000));\n }\n };\n\n waitUntilReadyOrFailed = async (params?: {\n callback?: (resource: ResourceBase) => void | Promise<void>;\n intervalSeconds?: number;\n timeoutSeconds?: number;\n }) => {\n const { callback, intervalSeconds = 5, timeoutSeconds = 300 } = params ?? {};\n\n async function checkFinishedCallback(resource: ResourceBase) {\n await resource.refresh();\n if (callback) await callback(resource);\n logger.debug(`Resource status: ${(resource as any).status}`);\n\n return isFinalStatus(resource.status);\n }\n\n return await this.waitUntil({\n checkFinishedCallback,\n intervalSeconds,\n timeoutSeconds,\n });\n };\n\n deleteAndWaitUntilFinished = async (params?: {\n callback?: (resource: ResourceBase) => void | Promise<void>;\n intervalSeconds?: number;\n timeoutSeconds?: number;\n }) => {\n const { callback, intervalSeconds = 5, timeoutSeconds = 300 } = params ?? {};\n\n try {\n await this.delete();\n } catch (error) {\n if (error instanceof ResourceNotExistError) return;\n }\n\n async function checkFinishedCallback(resource: ResourceBase) {\n try {\n await resource.refresh();\n if (callback) await callback(resource);\n } catch (error) {\n // Assuming that an error during refresh indicates the resource no longer exists\n if (error instanceof ResourceNotExistError) return true;\n if (resource.status === Status.DELETING) return false;\n\n throw Error(`Resource status is ${resource.status}`);\n }\n\n return false;\n }\n\n return await this.waitUntil({\n checkFinishedCallback,\n intervalSeconds,\n timeoutSeconds,\n });\n };\n\n refresh = async (params?: ParamsWithConfig) => await this.get(params);\n\n /**\n * 更新实例自身的属性 / Update instance properties\n *\n * @param source - 源对象 / Source object\n */\n updateSelf(source: any): void {\n updateObjectProperties(this, source);\n }\n\n setConfig = (config: Config) => {\n this._config = config;\n return this;\n };\n}\n\nexport function listAllResourcesFunction<\n ListParams extends { input?: PageableInput; config?: Config },\n ListResult extends WithUniqIdCallback,\n>(list: (params?: ListParams) => Promise<ListResult[]>) {\n return async (\n params?: Omit<NonNullable<ListParams['input']>, 'pageNumber' | 'pageSize'> & {\n config?: Config;\n }\n ) => {\n const { config, ...restParams } = params ?? {};\n\n const allResults: ListResult[] = [];\n let page = 1;\n const pageSize = 50;\n while (true) {\n const pageResults = await list({\n input: {\n ...restParams,\n pageNumber: page,\n pageSize: pageSize,\n },\n config,\n } as ListParams);\n\n page += 1;\n allResults.push(...pageResults);\n if (pageResults.length < pageSize) break;\n }\n\n const resultSet = new Set<string>();\n const results: any[] = [];\n for (const item of allResults) {\n const uniqId = item.uniqIdCallback() || '';\n if (!resultSet.has(uniqId) && uniqId) {\n resultSet.add(uniqId);\n results.push(item);\n }\n }\n\n return results;\n };\n}\n","/**\n * ToolSet Models\n *\n * ToolSet 相关的数据模型。\n * Data models for ToolSet.\n */\n\nimport { Status } from '../utils/model';\n\n/**\n * ToolSet schema type\n */\nexport enum ToolSetSchemaType {\n OPENAPI = 'OpenAPI',\n MCP = 'MCP',\n}\n\n/**\n * ToolSet schema\n */\nexport interface ToolSetSchema {\n /**\n * Schema type (OpenAPI, MCP)\n */\n type?: ToolSetSchemaType;\n /**\n * Schema detail (URL or inline definition)\n */\n detail?: string;\n}\n\n/**\n * ToolSet authorization configuration\n */\nexport interface ToolSetAuthorization {\n /**\n * Authorization type\n */\n type?: string;\n /**\n * API Key header name\n */\n apiKeyHeaderName?: string;\n /**\n * API Key value\n */\n apiKeyValue?: string;\n}\n\n/**\n * ToolSet specification\n */\nexport interface ToolSetSpec {\n /**\n * Schema configuration\n */\n schema?: ToolSetSchema;\n /**\n * Authorization configuration\n */\n authConfig?: ToolSetAuthorization;\n}\n\n/**\n * MCP Tool meta\n */\nexport interface MCPToolMeta {\n /**\n * Tool name\n */\n name?: string;\n /**\n * Tool description\n */\n description?: string;\n inputSchema?: Record<string, any>;\n}\n\n/**\n * ToolSet status outputs\n */\nexport interface ToolSetStatusOutputs {\n /**\n * MCP server configuration\n */\n mcpServerConfig?: {\n url?: string;\n transport?: string;\n };\n /**\n * Tools list\n */\n tools?: MCPToolMeta[];\n /**\n * URLs\n */\n urls?: {\n cdpUrl?: string;\n liveViewUrl?: string;\n streamUrl?: string;\n };\n}\n\n/**\n * ToolSet status\n */\nexport interface ToolSetStatus {\n /**\n * Current status\n */\n status?: Status;\n /**\n * Status reason\n */\n statusReason?: string;\n /**\n * Outputs\n */\n outputs?: ToolSetStatusOutputs;\n}\n\n/**\n * ToolSet data interface\n */\nexport interface ToolSetData {\n name?: string;\n uid?: string;\n kind?: string;\n description?: string;\n createdTime?: string;\n generation?: number;\n labels?: Record<string, string>;\n spec?: ToolSetSpec;\n status?: ToolSetStatus;\n}\n\n/**\n * ToolSet create input\n */\nexport interface ToolSetCreateInput {\n /**\n * ToolSet name (required)\n */\n name: string;\n /**\n * Description\n */\n description?: string;\n /**\n * Labels\n */\n labels?: Record<string, string>;\n /**\n * Spec configuration\n */\n spec?: ToolSetSpec;\n}\n\n/**\n * ToolSet update input\n */\nexport interface ToolSetUpdateInput {\n /**\n * Description\n */\n description?: string;\n /**\n * Labels\n */\n labels?: Record<string, string>;\n /**\n * Spec configuration\n */\n spec?: ToolSetSpec;\n}\n\n/**\n * ToolSet list input\n */\nexport interface ToolSetListInput {\n /**\n * Prefix filter\n */\n prefix?: string;\n /**\n * Page size\n */\n pageSize?: number;\n /**\n * Next token for pagination\n */\n nextToken?: string;\n /**\n * Labels filter\n */\n labels?: Record<string, string>;\n}\n\n/**\n * JSON Schema compatible tool parameter description\n *\n * Supports complete JSON Schema fields for describing complex nested data structures.\n * JSON Schema 兼容的工具参数描述\n *\n * 支持完整的 JSON Schema 字段,能够描述复杂的嵌套数据结构。\n */\nexport class ToolSchema {\n // Basic fields / 基本字段\n type?: string;\n description?: string;\n title?: string;\n\n // Object type fields / 对象类型字段\n properties?: Record<string, ToolSchema>;\n required?: string[];\n additionalProperties?: boolean;\n\n // Array type fields / 数组类型字段\n items?: ToolSchema;\n minItems?: number;\n maxItems?: number;\n\n // String type fields / 字符串类型字段\n pattern?: string;\n minLength?: number;\n maxLength?: number;\n format?: string; // date, date-time, email, uri, etc.\n enum?: unknown[];\n\n // Number type fields / 数值类型字段\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: number;\n exclusiveMaximum?: number;\n\n // Union types / 联合类型\n anyOf?: ToolSchema[];\n oneOf?: ToolSchema[];\n allOf?: ToolSchema[];\n\n // Default value / 默认值\n default?: unknown;\n\n constructor(data?: Partial<ToolSchema>) {\n if (data) {\n Object.assign(this, data);\n }\n }\n\n /**\n * Create ToolSchema from any OpenAPI/JSON Schema\n * 从任意 OpenAPI/JSON Schema 创建 ToolSchema\n *\n * Recursively parses all nested structures, preserving complete schema information.\n * 递归解析所有嵌套结构,保留完整的 schema 信息。\n */\n static fromAnyOpenAPISchema(schema: unknown): ToolSchema {\n if (!schema || typeof schema !== 'object') {\n return new ToolSchema({ type: 'string' });\n }\n\n const s = schema as Record<string, unknown>;\n\n // Parse properties / 解析 properties\n const propertiesRaw = s.properties as Record<string, unknown> | undefined;\n const properties = propertiesRaw\n ? Object.fromEntries(\n Object.entries(propertiesRaw).map(([key, value]) => [\n key,\n ToolSchema.fromAnyOpenAPISchema(value),\n ])\n )\n : undefined;\n\n // Parse items / 解析 items\n const itemsRaw = s.items;\n const items = itemsRaw ? ToolSchema.fromAnyOpenAPISchema(itemsRaw) : undefined;\n\n // Parse union types / 解析联合类型\n const anyOfRaw = s.anyOf as unknown[] | undefined;\n const anyOf = anyOfRaw ? anyOfRaw.map(ToolSchema.fromAnyOpenAPISchema) : undefined;\n\n const oneOfRaw = s.oneOf as unknown[] | undefined;\n const oneOf = oneOfRaw ? oneOfRaw.map(ToolSchema.fromAnyOpenAPISchema) : undefined;\n\n const allOfRaw = s.allOf as unknown[] | undefined;\n const allOf = allOfRaw ? allOfRaw.map(ToolSchema.fromAnyOpenAPISchema) : undefined;\n\n return new ToolSchema({\n // Basic fields\n type: s.type as string | undefined,\n description: s.description as string | undefined,\n title: s.title as string | undefined,\n // Object type\n properties,\n required: s.required as string[] | undefined,\n additionalProperties: s.additionalProperties as boolean | undefined,\n // Array type\n items,\n minItems: s.minItems as number | undefined,\n maxItems: s.maxItems as number | undefined,\n // String type\n pattern: s.pattern as string | undefined,\n minLength: s.minLength as number | undefined,\n maxLength: s.maxLength as number | undefined,\n format: s.format as string | undefined,\n enum: s.enum as unknown[] | undefined,\n // Number type\n minimum: s.minimum as number | undefined,\n maximum: s.maximum as number | undefined,\n exclusiveMinimum: s.exclusiveMinimum as number | undefined,\n exclusiveMaximum: s.exclusiveMaximum as number | undefined,\n // Union types\n anyOf,\n oneOf,\n allOf,\n // Default value\n default: s.default,\n });\n }\n\n /**\n * Convert to standard JSON Schema format\n * 转换为标准 JSON Schema 格式\n */\n toJSONSchema(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n // Basic fields / 基本字段\n if (this.type !== undefined) result.type = this.type;\n if (this.description !== undefined) result.description = this.description;\n if (this.title !== undefined) result.title = this.title;\n\n // Object type / 对象类型\n if (this.properties) {\n result.properties = Object.fromEntries(\n Object.entries(this.properties).map(([k, v]) => [k, v.toJSONSchema()])\n );\n }\n if (this.required) result.required = this.required;\n if (this.additionalProperties !== undefined) {\n result.additionalProperties = this.additionalProperties;\n }\n\n // Array type / 数组类型\n if (this.items) result.items = this.items.toJSONSchema();\n if (this.minItems !== undefined) result.minItems = this.minItems;\n if (this.maxItems !== undefined) result.maxItems = this.maxItems;\n\n // String type / 字符串类型\n if (this.pattern) result.pattern = this.pattern;\n if (this.minLength !== undefined) result.minLength = this.minLength;\n if (this.maxLength !== undefined) result.maxLength = this.maxLength;\n if (this.format) result.format = this.format;\n if (this.enum) result.enum = this.enum;\n\n // Number type / 数值类型\n if (this.minimum !== undefined) result.minimum = this.minimum;\n if (this.maximum !== undefined) result.maximum = this.maximum;\n if (this.exclusiveMinimum !== undefined) {\n result.exclusiveMinimum = this.exclusiveMinimum;\n }\n if (this.exclusiveMaximum !== undefined) {\n result.exclusiveMaximum = this.exclusiveMaximum;\n }\n\n // Union types / 联合类型\n if (this.anyOf) result.anyOf = this.anyOf.map(s => s.toJSONSchema());\n if (this.oneOf) result.oneOf = this.oneOf.map(s => s.toJSONSchema());\n if (this.allOf) result.allOf = this.allOf.map(s => s.toJSONSchema());\n\n // Default value / 默认值\n if (this.default !== undefined) result.default = this.default;\n\n return result;\n }\n}\n\n/**\n * Tool information\n * 工具信息\n */\nexport class ToolInfo {\n name?: string;\n description?: string;\n parameters?: ToolSchema;\n\n constructor(data?: Partial<ToolInfo>) {\n if (data) {\n this.name = data.name;\n this.description = data.description;\n this.parameters = data.parameters;\n }\n }\n\n /**\n * Create ToolInfo from MCP tool\n * 从 MCP tool 创建 ToolInfo\n */\n static fromMCPTool(tool: unknown): ToolInfo {\n if (!tool) {\n throw new Error('MCP tool is required');\n }\n\n let toolName: string | undefined;\n let toolDescription: string | undefined;\n let inputSchema: unknown;\n\n // Handle MCP Tool object / 处理 MCP Tool 对象\n if (typeof tool === 'object' && tool !== null) {\n const t = tool as Record<string, unknown>;\n\n if ('name' in t) {\n toolName = t.name as string;\n toolDescription = t.description as string | undefined;\n inputSchema = t.inputSchema || t.input_schema;\n } else {\n throw new Error(`Unsupported MCP tool format: ${typeof tool}`);\n }\n } else {\n throw new Error(`Unsupported MCP tool format: ${typeof tool}`);\n }\n\n if (!toolName) {\n throw new Error('MCP tool must have a name');\n }\n\n // Build parameters schema / 构建参数 schema\n let parameters: ToolSchema | undefined;\n if (inputSchema) {\n parameters = ToolSchema.fromAnyOpenAPISchema(inputSchema);\n }\n\n return new ToolInfo({\n name: toolName,\n description: toolDescription,\n parameters: parameters || new ToolSchema({ type: 'object', properties: {} }),\n });\n }\n}\n","/**\n * OpenAPI Protocol Handler\n *\n * 处理 OpenAPI 规范的工具解析和调用。\n * Handles tool parsing and invocation for OpenAPI specification.\n */\n\nimport { Config } from '../utils/config';\nimport { logger } from '../utils/log';\nimport YAML from 'js-yaml';\n\n/**\n * Tool parameter schema\n */\nexport interface ToolParameterSchema {\n type?: string;\n description?: string;\n properties?: Record<string, ToolParameterSchema>;\n required?: string[];\n items?: ToolParameterSchema;\n enum?: unknown[];\n default?: unknown;\n format?: string;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n}\n\n/**\n * Tool information\n */\nexport interface ToolInfo {\n name: string;\n description?: string;\n parameters?: ToolParameterSchema;\n operationId?: string;\n method?: string;\n path?: string;\n}\n\n/**\n * Invoke result\n */\nexport interface InvokeResult {\n status_code: number;\n headers?: Record<string, string>;\n body?: unknown;\n error?: string;\n}\n\n/**\n * OpenAPI handler options\n */\nexport interface OpenAPIOptions {\n /** OpenAPI schema (JSON string or object) */\n schema: string | Record<string, unknown>;\n /** Base URL for API calls */\n baseUrl?: string;\n /** Default headers for all requests */\n headers?: Record<string, string>;\n /** Default query parameters */\n queryParams?: Record<string, string>;\n /** Configuration */\n config?: Config;\n}\n\n/**\n * OpenAPI Handler class\n *\n * Parses OpenAPI schema and provides tool invocation capabilities.\n */\nexport class OpenAPI {\n private _schema: Record<string, unknown>;\n private _baseUrl: string;\n private _defaultHeaders: Record<string, string>;\n private _defaultQueryParams: Record<string, string>;\n private _config?: Config;\n private _tools: Map<string, ToolInfo> = new Map();\n\n constructor(options: OpenAPIOptions) {\n // Parse schema if it's a string\n if (typeof options.schema === 'string') {\n // Try to parse as YAML first (since OpenAPI specs are often in YAML)\n try {\n this._schema = YAML.load(options.schema) as Record<string, unknown>;\n } catch {\n // If YAML parsing fails, try JSON\n this._schema = JSON.parse(options.schema);\n }\n } else {\n this._schema = JSON.parse(JSON.stringify(options.schema)); // Deep copy\n }\n\n // Resolve all $ref references\n this._resolveAllRefs();\n\n // Extract base URL\n this._baseUrl = options.baseUrl || this._extractBaseUrl();\n\n this._defaultHeaders = options.headers ? { ...options.headers } : {};\n this._defaultQueryParams = options.queryParams ? { ...options.queryParams } : {};\n this._config = options.config;\n\n // Parse tools from schema\n this._parseTools();\n }\n\n /**\n * Get the parsed schema\n */\n get schema(): Record<string, unknown> {\n return this._schema;\n }\n\n /**\n * Get all parsed tools\n */\n get tools(): ToolInfo[] {\n return Array.from(this._tools.values());\n }\n\n /**\n * Get a specific tool by name\n */\n getTool(name: string): ToolInfo | undefined {\n return this._tools.get(name);\n }\n\n /**\n * Invoke a tool\n */\n invokeToolAsync = async (\n name: string,\n args: Record<string, unknown> = {},\n _config?: Config\n ): Promise<InvokeResult> => {\n const tool = this._tools.get(name);\n if (!tool) {\n throw new Error(`Tool '${name}' not found.`);\n }\n\n const method = (tool.method || 'get').toUpperCase();\n let path = tool.path || '/';\n\n // Build URL with path parameters\n const queryParams: Record<string, unknown> = {\n ...this._defaultQueryParams,\n };\n const headerParams: Record<string, string> = { ...this._defaultHeaders };\n let bodyContent: unknown = undefined;\n\n // Parse arguments into path, query, header, and body\n for (const [key, value] of Object.entries(args)) {\n if (key === 'body') {\n bodyContent = value;\n } else if (path.includes(`{${key}}`)) {\n path = path.replace(`{${key}}`, String(value));\n } else if (typeof value === 'string' && key.startsWith('X-')) {\n // Assume header parameter\n headerParams[key] = value;\n } else {\n // Default to query parameter\n queryParams[key] = value;\n }\n }\n\n // Build full URL\n const url = new URL(path, this._baseUrl);\n for (const [key, value] of Object.entries(queryParams)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n\n // Make request\n try {\n const fetchOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headerParams,\n },\n };\n\n if (bodyContent && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOptions.body = JSON.stringify(bodyContent);\n }\n\n const response = await fetch(url.toString(), fetchOptions);\n\n // Clone response to avoid \"Body already used\" error\n const responseClone = response.clone();\n let responseBody: unknown;\n\n try {\n responseBody = await response.json();\n } catch {\n // If JSON parsing fails, try text\n responseBody = await responseClone.text();\n }\n\n return {\n status_code: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n body: responseBody,\n };\n } catch (error) {\n return {\n status_code: 0,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n\n /**\n * Synchronous invoke (wrapper for async)\n */\n invokeToolSync(_name: string, _args: Record<string, unknown> = {}): InvokeResult {\n // Note: This is a simplified sync version that doesn't actually work in Node.js\n // It's mainly for testing purposes\n throw new Error(\n 'Synchronous invocation is not supported in Node.js. Use invokeToolAsync instead.'\n );\n }\n\n // Alias for Python compatibility\n invoke_tool = (\n name: string,\n args: Record<string, unknown> = {},\n _config?: Config\n ): Promise<InvokeResult> => {\n return this.invokeToolAsync(name, args);\n };\n\n /**\n * Extract base URL from schema\n */\n private _extractBaseUrl(): string {\n const servers = this._schema.servers as Array<{ url: string }> | undefined;\n if (servers && servers.length > 0) {\n return servers[0].url;\n }\n return '';\n }\n\n /**\n * Resolve all $ref references in the schema\n */\n private _resolveAllRefs(): void {\n this._schema = this._resolveRefs(this._schema, this._schema) as Record<string, unknown>;\n }\n\n /**\n * Recursively resolve $ref references\n */\n private _resolveRefs(obj: unknown, root: Record<string, unknown>): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => this._resolveRefs(item, root));\n }\n\n if (typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n const objRecord = obj as Record<string, unknown>;\n\n // Check for $ref\n if ('$ref' in objRecord && typeof objRecord.$ref === 'string') {\n const refPath = objRecord.$ref;\n const resolved = this._resolveRef(refPath, root);\n\n // Recursively resolve the referenced object itself\n const resolvedDeep = this._resolveRefs(resolved, root);\n\n // Merge resolved reference with sibling properties\n if (typeof resolvedDeep === 'object' && resolvedDeep !== null) {\n Object.assign(result, resolvedDeep);\n }\n\n // Add other properties (sibling to $ref)\n for (const [key, value] of Object.entries(objRecord)) {\n if (key !== '$ref') {\n result[key] = this._resolveRefs(value, root);\n }\n }\n\n return result;\n }\n\n // Recursively resolve all properties\n for (const [key, value] of Object.entries(objRecord)) {\n result[key] = this._resolveRefs(value, root);\n }\n\n return result;\n }\n\n return obj;\n }\n\n /**\n * Resolve a single $ref path\n */\n private _resolveRef(refPath: string, root: Record<string, unknown>): unknown {\n if (!refPath.startsWith('#/')) {\n // External reference - not supported yet\n logger.warn(`External $ref not supported: ${refPath}`);\n return {};\n }\n\n const path = refPath.substring(2).split('/');\n let current: unknown = root;\n\n for (const part of path) {\n if (current === null || current === undefined) {\n return {};\n }\n if (typeof current === 'object' && !Array.isArray(current)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return {};\n }\n }\n\n return current;\n }\n\n /**\n * Parse tools from OpenAPI paths\n */\n private _parseTools(): void {\n const paths = this._schema.paths as Record<string, Record<string, unknown>> | undefined;\n if (!paths) {\n return;\n }\n\n for (const [path, pathItem] of Object.entries(paths)) {\n if (typeof pathItem !== 'object' || pathItem === null) {\n continue;\n }\n\n for (const [method, operation] of Object.entries(pathItem)) {\n if (!['get', 'post', 'put', 'patch', 'delete', 'options', 'head'].includes(method)) {\n continue;\n }\n\n if (typeof operation !== 'object' || operation === null) {\n continue;\n }\n\n const op = operation as Record<string, unknown>;\n const operationId = op.operationId as string | undefined;\n if (!operationId) {\n continue;\n }\n\n // Parse parameters\n const parameters = this._parseParameters(op, path);\n\n const tool: ToolInfo = {\n name: operationId,\n description: (op.summary as string) || (op.description as string),\n parameters,\n operationId,\n method,\n path,\n };\n\n this._tools.set(operationId, tool);\n }\n }\n }\n\n /**\n * Parse operation parameters into a schema\n */\n private _parseParameters(operation: Record<string, unknown>, _path: string): ToolParameterSchema {\n const result: ToolParameterSchema = {\n type: 'object',\n properties: {},\n required: [],\n };\n\n // Parse path/query/header parameters\n const params = operation.parameters as Array<Record<string, unknown>> | undefined;\n if (params && Array.isArray(params)) {\n for (const param of params) {\n const name = param.name as string;\n const schema = param.schema as ToolParameterSchema | undefined;\n const required = param.required as boolean;\n\n if (!name) continue;\n\n result.properties![name] = {\n type: schema?.type || 'string',\n description: (param.description as string) || undefined,\n ...schema,\n };\n\n if (required) {\n result.required!.push(name);\n }\n }\n }\n\n // Parse request body\n const requestBody = operation.requestBody as Record<string, unknown> | undefined;\n if (requestBody) {\n const content = requestBody.content as Record<string, Record<string, unknown>> | undefined;\n if (content) {\n const jsonContent = content['application/json'];\n if (jsonContent && jsonContent.schema) {\n result.properties!['body'] = jsonContent.schema as ToolParameterSchema;\n if (requestBody.required) {\n result.required!.push('body');\n }\n }\n }\n }\n\n return result;\n }\n}\n\n/**\n * ApiSet class for unified tool invocation\n * 统一的工具集接口,支持 OpenAPI 和 MCP 工具\n */\nexport class ApiSet {\n private _tools: Map<string, ToolInfo>;\n private _invoker: any; // Can be OpenAPI or MCP invoker\n private _baseUrl?: string;\n private _defaultHeaders: Record<string, string>;\n private _defaultQueryParams: Record<string, unknown>;\n private _baseConfig?: Config;\n\n constructor(\n tools: ToolInfo[],\n invoker: any,\n baseUrl?: string,\n headers?: Record<string, string>,\n queryParams?: Record<string, unknown>,\n config?: Config\n ) {\n this._tools = new Map(tools.filter(t => t.name).map(t => [t.name, t]));\n this._invoker = invoker;\n this._baseUrl = baseUrl;\n this._defaultHeaders = headers ? { ...headers } : {};\n this._defaultQueryParams = queryParams ? { ...queryParams } : {};\n this._baseConfig = config;\n }\n\n /**\n * Invoke a tool by name\n * 调用指定的工具\n */\n invoke = async (\n name: string,\n args: Record<string, unknown> = {},\n config?: Config\n ): Promise<Record<string, unknown>> => {\n if (!this._tools.has(name)) {\n throw new Error(`Tool '${name}' not found.`);\n }\n\n // Convert arguments from non-serializable types\n const convertedArgs = this._convertArguments(args);\n\n // Merge configurations: prioritize passed config, otherwise use base_config\n const effectiveConfig = Config.withConfigs(this._baseConfig, config);\n\n // Call the actual invoker\n if (typeof this._invoker.invokeToolAsync === 'function') {\n return await this._invoker.invokeToolAsync(name, convertedArgs, effectiveConfig);\n } else if (typeof this._invoker.invoke_tool === 'function') {\n return await this._invoker.invoke_tool(name, convertedArgs, effectiveConfig);\n } else if (typeof this._invoker === 'function') {\n return await this._invoker(name, convertedArgs);\n } else {\n throw new Error('Invalid invoker provided.');\n }\n };\n\n /**\n * Get all tools\n * 返回所有工具列表\n */\n get tools(): ToolInfo[] {\n return Array.from(this._tools.values());\n }\n\n /**\n * Get a specific tool\n * 获取指定名称的工具\n */\n getTool(name: string): ToolInfo | undefined {\n return this._tools.get(name);\n }\n\n /**\n * Convert arguments from framework-specific types to native JavaScript types\n * 将常见框架类型转换为 JavaScript 原生类型\n *\n * Purpose: Ensure we send JSON-serializable data to OpenAPI\n * 目的:确保我们发送到 OpenAPI 的 JSON body 是可以被序列化的\n */\n private _convertToNative(value: unknown): unknown {\n // Basic types\n if (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n // Arrays\n if (Array.isArray(value)) {\n return value.map(item => this._convertToNative(item));\n }\n\n // Plain objects\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n // Handle objects with toJSON method\n if (typeof obj.toJSON === 'function') {\n try {\n return this._convertToNative(obj.toJSON());\n } catch {\n // Ignore and continue\n }\n }\n\n // Handle plain objects\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n result[k] = this._convertToNative(v);\n }\n return result;\n }\n\n // Cannot convert, return original value\n return value;\n }\n\n /**\n * Convert arguments dictionary\n * 转换参数字典\n */\n private _convertArguments(args?: Record<string, unknown>): Record<string, unknown> | undefined {\n if (!args || typeof args !== 'object') {\n return args;\n }\n\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(args)) {\n result[k] = this._convertToNative(v);\n }\n return result;\n }\n\n /**\n * Create ApiSet from MCP tools\n * 从 MCP tools 创建 ApiSet\n *\n * @param tools - MCP tools list or single tool / MCP tools 列表或单个工具\n * @param mcpClient - MCP client (MCPToolSet instance) / MCP 客户端(MCPToolSet 实例)\n * @param config - Configuration object / 配置对象\n */\n static fromMCPTools(params: { tools: unknown; mcpClient: any; config?: Config }): ApiSet {\n const { tools, mcpClient, config } = params;\n\n // Get tools list / 获取工具列表\n const toolInfos: ToolInfo[] = [];\n let toolArray: unknown[];\n\n // If tools is a single tool, convert to array\n // 如果 tools 是单个工具,转换为列表\n if (Array.isArray(tools)) {\n toolArray = tools;\n } else if (tools) {\n toolArray = [tools];\n } else {\n toolArray = [];\n }\n\n for (const tool of toolArray) {\n if (!tool) {\n continue;\n }\n\n try {\n // Use ToolInfo.fromMCPTool to parse the tool\n // 使用 ToolInfo.fromMCPTool 解析工具\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolInfo } = require('./model');\n const toolInfo = ToolInfo.fromMCPTool(tool);\n toolInfos.push(toolInfo);\n } catch (error) {\n logger.warn(`Failed to parse MCP tool:`, error);\n continue;\n }\n }\n\n // Create invoker wrapper / 创建调用器包装\n class MCPInvoker {\n constructor(\n private mcpClient: any,\n private config?: Config\n ) {}\n\n invokeToolAsync = async (\n name: string,\n args?: Record<string, unknown>,\n config?: Config\n ): Promise<Record<string, unknown>> => {\n const cfg = Config.withConfigs(this.config, config);\n return await this.mcpClient.callToolAsync(name, args, cfg);\n };\n }\n\n const invoker = new MCPInvoker(mcpClient, config);\n\n return new ApiSet(toolInfos, invoker, undefined, undefined, undefined, config);\n }\n}\n","/**\n * ToolSet Resource Class\n *\n * ToolSet 资源类,用于管理 ToolSet 资源。\n * Resource class for managing ToolSet resources.\n */\n\nimport { Config } from '../utils/config';\nimport { logger } from '../utils/log';\nimport { listAllResourcesFunction, updateObjectProperties } from '../utils/resource';\n\nimport {\n ToolSetCreateInput,\n ToolSetData,\n ToolSetListInput,\n ToolSetSpec,\n ToolSetStatus,\n ToolSetUpdateInput,\n} from './model';\n\n/**\n * ToolSet resource class\n */\nexport class ToolSet implements ToolSetData {\n name?: string;\n uid?: string;\n kind?: string;\n description?: string;\n createdTime?: string;\n generation?: number;\n labels?: Record<string, string>;\n spec?: ToolSetSpec;\n status?: ToolSetStatus;\n\n private _config?: Config;\n\n constructor(data?: any, config?: Config) {\n if (data) {\n updateObjectProperties(this, data);\n }\n this._config = config;\n }\n\n /**\n * Get DevS client\n */\n private static getClient() {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolSetClient } = require('./client');\n return new ToolSetClient();\n }\n\n uniqIdCallback = () => this.name;\n\n /**\n * Create a new ToolSet\n */\n static async create(params: { input: ToolSetCreateInput; config?: Config }): Promise<ToolSet> {\n const { input, config } = params;\n return await ToolSet.getClient().create({ input, config });\n }\n\n /**\n * Delete a ToolSet by Name\n */\n static async delete(params: { name: string; config?: Config }): Promise<ToolSet> {\n const { name, config } = params;\n return await ToolSet.getClient().delete({ name, config });\n }\n\n /**\n * Get a ToolSet by Name\n */\n static async get(params: { name: string; config?: Config }): Promise<ToolSet> {\n const { name, config } = params;\n return await ToolSet.getClient().get({ name, config });\n }\n\n /**\n * List ToolSets\n */\n\n static list: /**\n * @deprecated\n */\n | ((input?: ToolSetListInput, config?: Config) => Promise<ToolSet[]>)\n /**\n * 枚举 ToolSet 列表 / List ToolSet list\n */\n | ((params?: { input?: ToolSetListInput; config?: Config }) => Promise<ToolSet[]>) = async (\n ...args: any\n ): Promise<ToolSet[]> => {\n let input: ToolSetListInput | undefined;\n let config: Config | undefined;\n\n if (args.length >= 1 && 'input' in args[0]) {\n input = args[0].input;\n } else {\n input = args[0];\n }\n\n if (args.length >= 1 && 'config' in args[0]) {\n config = args[0].config;\n } else if (args.length > 1 && args[1] instanceof Config) {\n config = args[1];\n }\n\n return await this.getClient().list({\n input: {\n ...input,\n } as ToolSetListInput,\n config,\n });\n };\n\n static listAll: /**\n * @deprecated\n */\n | ((\n options?: { prefix?: string; labels?: Record<string, string> },\n config?: Config\n ) => Promise<ToolSet[]>)\n /**\n * 枚举 ToolSet 列表 / List ToolSet list\n */\n | ((params?: { input?: ToolSetListInput; config?: Config }) => Promise<ToolSet[]>) = async (\n ...args: any\n ) => {\n let input: ToolSetListInput | undefined;\n let config: Config | undefined;\n\n if (args.length >= 1 && 'input' in args[0]) {\n input = args[0].input;\n } else {\n input = args[0];\n }\n\n if (args.length >= 1 && 'config' in args[0]) {\n config = args[0].config;\n } else if (args.length > 1 && args[1] instanceof Config) {\n config = args[1];\n }\n\n return await listAllResourcesFunction(this.list as any)({ ...input, config });\n };\n\n /**\n * Update a ToolSet by Name\n */\n static async update(params: {\n name: string;\n input: ToolSetUpdateInput;\n config?: Config;\n }): Promise<ToolSet> {\n const { name, input, config } = params;\n return await ToolSet.getClient().update({ name, input, config });\n }\n\n /**\n * Delete this toolset\n */\n delete = async (params?: { config?: Config }): Promise<ToolSet> => {\n const config = params?.config;\n if (!this.name) {\n throw new Error('name is required to delete a ToolSet');\n }\n\n const result = await ToolSet.delete({\n name: this.name,\n config: config ?? this._config,\n });\n updateObjectProperties(this, result);\n return this;\n };\n\n /**\n * Update this toolset\n */\n update = async (params: { input: ToolSetUpdateInput; config?: Config }): Promise<ToolSet> => {\n const { input, config } = params;\n if (!this.name) {\n throw new Error('name is required to update a ToolSet');\n }\n\n const result = await ToolSet.update({\n name: this.name,\n input,\n config: config ?? this._config,\n });\n updateObjectProperties(this, result);\n return this;\n };\n\n /**\n * Refresh this toolset's data\n */\n refresh = async (params?: { config?: Config }): Promise<ToolSet> => {\n const config = params?.config;\n if (!this.name) {\n throw new Error('name is required to refresh a ToolSet');\n }\n\n const result = await ToolSet.get({\n name: this.name,\n config: config ?? this._config,\n });\n updateObjectProperties(this, result);\n return this;\n };\n\n /**\n * Get toolset type\n * 获取工具集类型\n */\n type(): string | undefined {\n return this.spec?.schema?.type;\n }\n\n /**\n * List tools (async)\n * 异步获取工具列表,返回统一的 ToolInfo 列表\n */\n listToolsAsync = async (params?: { config?: Config }): Promise<any[]> => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolSetSchemaType } = require('./model');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolInfo } = require('./model');\n\n if (this.type() === ToolSetSchemaType.MCP) {\n // MCP tools\n const mcpTools = this.status?.outputs?.tools || [];\n return mcpTools.map((tool: any) => ToolInfo.fromMCPTool(tool));\n } else if (this.type() === ToolSetSchemaType.OPENAPI) {\n // OpenAPI tools - use toApiSet\n const apiset = await this.toApiSet(params);\n return apiset.tools;\n }\n return [];\n };\n\n /**\n * List tools (sync wrapper)\n * 同步获取工具列表,返回统一的 ToolInfo 列表\n */\n listTools = (config?: Config): Promise<any[]> => {\n return this.listToolsAsync({ config });\n };\n\n /**\n * Call tool (async)\n * 异步调用工具,统一使用 ApiSet 实现\n */\n callToolAsync = async (\n name: string,\n args?: Record<string, unknown>,\n config?: Config\n ): Promise<any> => {\n const apiset = await this.toApiSet({ config });\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolSetSchemaType } = require('./model');\n\n // For OpenAPI, may need to resolve operation name\n // 对于 OpenAPI,可能需要解析 operation name\n if (this.type() === ToolSetSchemaType.OPENAPI) {\n const tool = apiset.getTool(name);\n if (!tool) {\n // Try to find via tool_id mapping\n // 尝试通过 tool_id 映射查找\n const openApiTools = (this.status?.outputs as any)?.openApiTools || [];\n for (const toolMeta of openApiTools) {\n if (!toolMeta) continue;\n if (toolMeta.toolId === name || toolMeta.tool_id === name) {\n name = toolMeta.toolName || toolMeta.tool_name || name;\n break;\n }\n }\n }\n }\n\n logger.debug(`Invoke tool ${name} with arguments`, args);\n const result = await apiset.invoke(name, args, config);\n logger.debug(`Invoke tool ${name} got result`, result);\n return result;\n };\n\n /**\n * Call tool (sync wrapper)\n * 同步调用工具,统一使用 ApiSet 实现\n */\n callTool = (name: string, args?: Record<string, unknown>, config?: Config): Promise<any> => {\n return this.callToolAsync(name, args, config);\n };\n\n /**\n * Convert ToolSet to unified ApiSet object\n * 将 ToolSet 转换为统一的 ApiSet 对象\n */\n toApiSet = async (params?: { config?: Config }): Promise<any> => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ApiSet } = require('./openapi');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolSetSchemaType } = require('./model');\n\n if (this.type() === ToolSetSchemaType.MCP) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { MCPToolSet } = require('./api/mcp');\n\n const mcpServerConfig = (this.status?.outputs as any)?.mcpServerConfig;\n if (!mcpServerConfig?.url) {\n throw new Error('MCP server URL is missing.');\n }\n\n const cfg = Config.withConfigs(\n params?.config,\n new Config({ headers: mcpServerConfig.headers })\n );\n\n const mcpClient = new MCPToolSet(mcpServerConfig.url, cfg);\n\n // Get MCP tools\n const mcpTools = this.status?.outputs?.tools || [];\n\n return ApiSet.fromMCPTools({\n tools: mcpTools,\n mcpClient,\n config: cfg,\n });\n } else if (this.type() === ToolSetSchemaType.OPENAPI) {\n const headers = this._getOpenAPIAuthDefaults().headers;\n const query = this._getOpenAPIAuthDefaults().query;\n\n // Use OpenAPI.fromSchema if available, otherwise create basic ApiSet\n // 如果可用,使用 OpenAPI.fromSchema,否则创建基本 ApiSet\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { OpenAPI } = require('./openapi');\n\n const openapi = new OpenAPI({\n schema: this.spec?.schema?.detail || '{}',\n baseUrl: this._getOpenAPIBaseUrl(),\n headers,\n queryParams: query,\n config: params?.config,\n });\n\n // Convert OpenAPI tools to ToolInfo format\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ToolInfo } = require('./model');\n const tools = openapi.tools.map(\n (t: any) =>\n new ToolInfo({\n name: t.name,\n description: t.description,\n parameters: t.parameters as any,\n })\n );\n\n return new ApiSet(tools, openapi, undefined, headers, query, params?.config);\n }\n\n throw new Error(`Unsupported ToolSet type: ${this.type()}`);\n };\n\n /**\n * Get OpenAPI authentication defaults\n * 获取 OpenAPI 认证默认值\n */\n private _getOpenAPIAuthDefaults(): {\n headers: Record<string, string>;\n query: Record<string, string>;\n } {\n const headers: Record<string, string> = {};\n const query: Record<string, string> = {};\n\n const authConfig = this.spec?.authConfig;\n const authType = authConfig?.type;\n\n if (authType === 'APIKey') {\n const key = authConfig?.apiKeyHeaderName;\n const value = authConfig?.apiKeyValue;\n const location = 'header'; // Default location\n\n if (key && value) {\n if (location === 'header') {\n headers[key] = value;\n } else if (location === 'query') {\n query[key] = value;\n }\n }\n }\n\n return { headers, query };\n }\n\n /**\n * Get OpenAPI base URL\n * 获取 OpenAPI 基础 URL\n */\n private _getOpenAPIBaseUrl(): string | undefined {\n const outputs = this.status?.outputs as any;\n return outputs?.urls?.internetUrl || outputs?.urls?.intranetUrl;\n }\n}\n","/**\n * ToolSet Client\n *\n * ToolSet 客户端,提供 ToolSet 的管理功能。\n * Client for managing ToolSet resources.\n */\n\nimport {\n APIKeyAuthParameter,\n Authorization,\n AuthorizationParameters,\n ListToolsetsRequest,\n Toolset,\n ToolsetSchema,\n ToolsetSpec,\n} from '@alicloud/devs20230714';\nimport { Config } from '../utils/config';\nimport { HTTPError } from '../utils/exception';\nimport { ToolControlAPI } from './api';\n\nimport { ToolSetCreateInput, ToolSetListInput, ToolSetUpdateInput } from './model';\nimport { ToolSet } from './toolset';\n\n/**\n * ToolSet Client\n *\n * 提供 ToolSet 的管理功能。\n */\nexport class ToolSetClient {\n private config?: Config;\n private controlApi: ToolControlAPI;\n constructor(config?: Config) {\n this.config = config;\n this.controlApi = new ToolControlAPI(config);\n }\n\n /**\n * Create a ToolSet\n */\n create = async (params: { input: ToolSetCreateInput; config?: Config }): Promise<ToolSet> => {\n const { input, config } = params;\n const cfg = Config.withConfigs(this.config, config);\n\n try {\n const authConfig = input.spec?.authConfig\n ? new Authorization({\n type: input.spec.authConfig.type,\n parameters: new AuthorizationParameters({\n apiKeyParameter: new APIKeyAuthParameter({\n key: input.spec.authConfig.apiKeyHeaderName,\n value: input.spec.authConfig.apiKeyValue,\n in: 'header',\n }),\n }),\n })\n : undefined;\n\n const request = new Toolset({\n ...input,\n spec: input.spec\n ? new ToolsetSpec({\n ...input.spec,\n schema: input.spec.schema\n ? new ToolsetSchema({\n ...input.spec.schema,\n })\n : undefined,\n authConfig,\n })\n : undefined,\n });\n const result = await this.controlApi.createToolset({\n input: request,\n config: cfg,\n });\n\n return new ToolSet(result, cfg);\n } catch (error) {\n if (error instanceof HTTPError) {\n throw error.toResourceError('ToolSet', input.name);\n }\n throw error;\n }\n };\n\n /**\n * Delete a ToolSet by name\n */\n delete = async (params: { name: string; config?: Config }): Promise<ToolSet> => {\n const { name, config } = params;\n const cfg = Config.withConfigs(this.config, config);\n\n try {\n const result = await this.controlApi.deleteToolset({\n name,\n config: cfg,\n });\n\n return new ToolSet(result, cfg);\n } catch (error) {\n if (error instanceof HTTPError) {\n throw error.toResourceError('ToolSet', name);\n }\n throw error;\n }\n };\n\n /**\n * Update a ToolSet by name\n */\n update = async (params: {\n name: string;\n input: ToolSetUpdateInput;\n config?: Config;\n }): Promise<ToolSet> => {\n const { name, input, config } = params;\n const cfg = Config.withConfigs(this.config, config);\n\n try {\n const authConfig = input.spec?.authConfig\n ? new Authorization({\n type: input.spec.authConfig.type,\n parameters: new AuthorizationParameters({\n apiKeyParameter: new APIKeyAuthParameter({\n key: input.spec.authConfig.apiKeyHeaderName,\n value: input.spec.authConfig.apiKeyValue,\n in: 'header',\n }),\n }),\n })\n : undefined;\n\n const request = new Toolset({\n name,\n ...input,\n spec: input.spec\n ? new ToolsetSpec({\n ...input.spec,\n schema: input.spec.schema\n ? new ToolsetSchema({\n ...input.spec.schema,\n })\n : undefined,\n authConfig,\n })\n : undefined,\n });\n\n const result = await this.controlApi.updateToolset({\n name,\n input: request,\n config: cfg,\n });\n\n return new ToolSet(result, cfg);\n } catch (error) {\n if (error instanceof HTTPError) {\n throw error.toResourceError('ToolSet', name);\n }\n throw error;\n }\n };\n\n /**\n * Get a ToolSet by name\n */\n get = async (params: { name: string; config?: Config }): Promise<ToolSet> => {\n const { name, config } = params;\n const cfg = Config.withConfigs(this.config, config);\n\n try {\n const result = await this.controlApi.getToolset({\n name,\n config: cfg,\n });\n\n return new ToolSet(result, cfg);\n } catch (error) {\n if (error instanceof HTTPError) {\n throw error.toResourceError('ToolSet', name);\n }\n throw error;\n }\n };\n\n /**\n * List ToolSets\n */\n list = async (params?: { input?: ToolSetListInput; config?: Config }): Promise<ToolSet[]> => {\n const { input, config } = params ?? {};\n const cfg = Config.withConfigs(this.config, config);\n\n const results = await this.controlApi.listToolsets({\n input: new ListToolsetsRequest({ ...input }),\n config: cfg,\n });\n\n return results.data?.map(result => new ToolSet(result, cfg)) || [];\n };\n}\n","/**\n * ToolSet Module\n *\n * ToolSet 模块,提供 ToolSet 资源的管理功能。\n * Module for managing ToolSet resources.\n */\n\nimport '@/utils/version-check';\n\nexport { ToolSetClient } from './client';\nexport { ToolSet } from './toolset';\nexport { OpenAPI, ApiSet } from './openapi';\nexport { ToolSetSchemaType, ToolSchema, ToolInfo } from './model';\nexport { ToolControlAPI } from './api/control';\nexport { MCPSession, MCPToolSet } from './api/mcp';\nexport type {\n ToolSetCreateInput,\n ToolSetUpdateInput,\n ToolSetListInput,\n ToolSetData,\n ToolSetAuthorization,\n ToolSetSchema,\n ToolSetSpec,\n ToolSetStatus,\n ToolSetStatusOutputs,\n MCPToolMeta,\n} from './model';\nexport type { ToolParameterSchema, InvokeResult, OpenAPIOptions } from './openapi';\n"]}
@@ -0,0 +1,182 @@
1
+ export { T as ToolSetClient } from '../client-DPUTs69s.cjs';
2
+ export { M as MCPToolMeta, k as ToolInfo, l as ToolSchema, T as ToolSet, a as ToolSetAuthorization, b as ToolSetCreateInput, c as ToolSetData, d as ToolSetListInput, e as ToolSetSchema, f as ToolSetSchemaType, g as ToolSetSpec, h as ToolSetStatus, i as ToolSetStatusOutputs, j as ToolSetUpdateInput } from '../toolset-BYDvhwRp.cjs';
3
+ import { C as Config } from '../config-07gMelJP.cjs';
4
+ export { MCPSession, MCPToolSet, ToolControlAPI } from './api/index.cjs';
5
+ import '../model--I90nCqy.cjs';
6
+ import '@alicloud/devs20230714';
7
+
8
+ /**
9
+ * OpenAPI Protocol Handler
10
+ *
11
+ * 处理 OpenAPI 规范的工具解析和调用。
12
+ * Handles tool parsing and invocation for OpenAPI specification.
13
+ */
14
+
15
+ /**
16
+ * Tool parameter schema
17
+ */
18
+ interface ToolParameterSchema {
19
+ type?: string;
20
+ description?: string;
21
+ properties?: Record<string, ToolParameterSchema>;
22
+ required?: string[];
23
+ items?: ToolParameterSchema;
24
+ enum?: unknown[];
25
+ default?: unknown;
26
+ format?: string;
27
+ minimum?: number;
28
+ maximum?: number;
29
+ minLength?: number;
30
+ maxLength?: number;
31
+ pattern?: string;
32
+ }
33
+ /**
34
+ * Tool information
35
+ */
36
+ interface ToolInfo {
37
+ name: string;
38
+ description?: string;
39
+ parameters?: ToolParameterSchema;
40
+ operationId?: string;
41
+ method?: string;
42
+ path?: string;
43
+ }
44
+ /**
45
+ * Invoke result
46
+ */
47
+ interface InvokeResult {
48
+ status_code: number;
49
+ headers?: Record<string, string>;
50
+ body?: unknown;
51
+ error?: string;
52
+ }
53
+ /**
54
+ * OpenAPI handler options
55
+ */
56
+ interface OpenAPIOptions {
57
+ /** OpenAPI schema (JSON string or object) */
58
+ schema: string | Record<string, unknown>;
59
+ /** Base URL for API calls */
60
+ baseUrl?: string;
61
+ /** Default headers for all requests */
62
+ headers?: Record<string, string>;
63
+ /** Default query parameters */
64
+ queryParams?: Record<string, string>;
65
+ /** Configuration */
66
+ config?: Config;
67
+ }
68
+ /**
69
+ * OpenAPI Handler class
70
+ *
71
+ * Parses OpenAPI schema and provides tool invocation capabilities.
72
+ */
73
+ declare class OpenAPI {
74
+ private _schema;
75
+ private _baseUrl;
76
+ private _defaultHeaders;
77
+ private _defaultQueryParams;
78
+ private _config?;
79
+ private _tools;
80
+ constructor(options: OpenAPIOptions);
81
+ /**
82
+ * Get the parsed schema
83
+ */
84
+ get schema(): Record<string, unknown>;
85
+ /**
86
+ * Get all parsed tools
87
+ */
88
+ get tools(): ToolInfo[];
89
+ /**
90
+ * Get a specific tool by name
91
+ */
92
+ getTool(name: string): ToolInfo | undefined;
93
+ /**
94
+ * Invoke a tool
95
+ */
96
+ invokeToolAsync: (name: string, args?: Record<string, unknown>, _config?: Config) => Promise<InvokeResult>;
97
+ /**
98
+ * Synchronous invoke (wrapper for async)
99
+ */
100
+ invokeToolSync(_name: string, _args?: Record<string, unknown>): InvokeResult;
101
+ invoke_tool: (name: string, args?: Record<string, unknown>, _config?: Config) => Promise<InvokeResult>;
102
+ /**
103
+ * Extract base URL from schema
104
+ */
105
+ private _extractBaseUrl;
106
+ /**
107
+ * Resolve all $ref references in the schema
108
+ */
109
+ private _resolveAllRefs;
110
+ /**
111
+ * Recursively resolve $ref references
112
+ */
113
+ private _resolveRefs;
114
+ /**
115
+ * Resolve a single $ref path
116
+ */
117
+ private _resolveRef;
118
+ /**
119
+ * Parse tools from OpenAPI paths
120
+ */
121
+ private _parseTools;
122
+ /**
123
+ * Parse operation parameters into a schema
124
+ */
125
+ private _parseParameters;
126
+ }
127
+ /**
128
+ * ApiSet class for unified tool invocation
129
+ * 统一的工具集接口,支持 OpenAPI 和 MCP 工具
130
+ */
131
+ declare class ApiSet {
132
+ private _tools;
133
+ private _invoker;
134
+ private _baseUrl?;
135
+ private _defaultHeaders;
136
+ private _defaultQueryParams;
137
+ private _baseConfig?;
138
+ constructor(tools: ToolInfo[], invoker: any, baseUrl?: string, headers?: Record<string, string>, queryParams?: Record<string, unknown>, config?: Config);
139
+ /**
140
+ * Invoke a tool by name
141
+ * 调用指定的工具
142
+ */
143
+ invoke: (name: string, args?: Record<string, unknown>, config?: Config) => Promise<Record<string, unknown>>;
144
+ /**
145
+ * Get all tools
146
+ * 返回所有工具列表
147
+ */
148
+ get tools(): ToolInfo[];
149
+ /**
150
+ * Get a specific tool
151
+ * 获取指定名称的工具
152
+ */
153
+ getTool(name: string): ToolInfo | undefined;
154
+ /**
155
+ * Convert arguments from framework-specific types to native JavaScript types
156
+ * 将常见框架类型转换为 JavaScript 原生类型
157
+ *
158
+ * Purpose: Ensure we send JSON-serializable data to OpenAPI
159
+ * 目的:确保我们发送到 OpenAPI 的 JSON body 是可以被序列化的
160
+ */
161
+ private _convertToNative;
162
+ /**
163
+ * Convert arguments dictionary
164
+ * 转换参数字典
165
+ */
166
+ private _convertArguments;
167
+ /**
168
+ * Create ApiSet from MCP tools
169
+ * 从 MCP tools 创建 ApiSet
170
+ *
171
+ * @param tools - MCP tools list or single tool / MCP tools 列表或单个工具
172
+ * @param mcpClient - MCP client (MCPToolSet instance) / MCP 客户端(MCPToolSet 实例)
173
+ * @param config - Configuration object / 配置对象
174
+ */
175
+ static fromMCPTools(params: {
176
+ tools: unknown;
177
+ mcpClient: any;
178
+ config?: Config;
179
+ }): ApiSet;
180
+ }
181
+
182
+ export { ApiSet, type InvokeResult, OpenAPI, type OpenAPIOptions, type ToolParameterSchema };