@skrillex1224/playwright-toolkit 2.1.150 → 2.1.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -82,23 +82,23 @@ await Actor.exit();
82
82
 
83
83
  ### API 一览
84
84
 
85
- | 模块 | 方法 | 说明 |
86
- | ----------- | ------------------------------------------- | -------------------------------------- |
87
- | `Launch` | `getAdvancedLaunchOptions()` | 增强版启动参数 |
88
- | `Launch` | `getLaunchOptions({ proxyConfiguration, log? })` | 基础启动参数(统一代理解析,可选 bypass 日志) |
89
- | `Launch` | `getFingerprintGeneratorOptions()` | 指纹生成器选项 |
90
- | `AntiCheat` | `applyPage(page, options?)` | 应用时区/语言/权限/视口 |
91
- | `AntiCheat` | `applyContext(context, options?)` | 仅应用 Context 设置 |
92
- | `AntiCheat` | `syncViewportWithScreen(page)` | 同步视口与屏幕 |
93
- | `AntiCheat` | `getTlsFingerprintOptions(userAgent?)` | got-scraping TLS 指纹 |
94
- | `Humanize` | `initializeCursor(page)` | 初始化 Cursor (必须先调用) |
95
- | `Humanize` | `jitterMs(base, jitterPercent?)` | 生成带抖动的毫秒数 (同步,返回 number) |
96
- | `Humanize` | `humanType(page, selector, text, options?)` | 人类化输入 (baseDelay=180ms ±40%) |
97
- | `Humanize` | `humanClick(page, selector, options?)` | 人类化点击 (reactionDelay=250ms ±40%) |
98
- | `Humanize` | `warmUpBrowsing(page, baseDuration?)` | 页面预热 (3500ms ±40%) |
99
- | `Humanize` | `simulateGaze(page, baseDurationMs?)` | 模拟注视 (2500ms ±40%) |
100
- | `Humanize` | `randomSleep(baseMs, jitterPercent?)` | 随机延迟 (±30% 抖动) |
101
- | `Captcha` | `useCaptchaMonitor(page, options)` | 验证码监控 |
85
+ | 模块 | 方法 | 说明 |
86
+ | ----------- | ------------------------------------------------ | ------------------------------------------------------------------------------------ |
87
+ | `Launch` | `getAdvancedLaunchOptions()` | 增强版启动参数 |
88
+ | `Launch` | `getLaunchOptions({ proxyConfiguration, log? })` | 基础启动参数(返回 `onPageCreated(page) => { waitUntil }`,默认 `domcontentloaded`) |
89
+ | `Launch` | `getFingerprintGeneratorOptions()` | 指纹生成器选项 |
90
+ | `AntiCheat` | `applyPage(page, options?)` | 应用时区/语言/权限/视口 |
91
+ | `AntiCheat` | `applyContext(context, options?)` | 仅应用 Context 设置 |
92
+ | `AntiCheat` | `syncViewportWithScreen(page)` | 同步视口与屏幕 |
93
+ | `AntiCheat` | `getTlsFingerprintOptions(userAgent?)` | got-scraping TLS 指纹 |
94
+ | `Humanize` | `initializeCursor(page)` | 初始化 Cursor (必须先调用) |
95
+ | `Humanize` | `jitterMs(base, jitterPercent?)` | 生成带抖动的毫秒数 (同步,返回 number) |
96
+ | `Humanize` | `humanType(page, selector, text, options?)` | 人类化输入 (baseDelay=180ms ±40%) |
97
+ | `Humanize` | `humanClick(page, selector, options?)` | 人类化点击 (reactionDelay=250ms ±40%) |
98
+ | `Humanize` | `warmUpBrowsing(page, baseDuration?)` | 页面预热 (3500ms ±40%) |
99
+ | `Humanize` | `simulateGaze(page, baseDurationMs?)` | 模拟注视 (2500ms ±40%) |
100
+ | `Humanize` | `randomSleep(baseMs, jitterPercent?)` | 随机延迟 (±30% 抖动) |
101
+ | `Captcha` | `useCaptchaMonitor(page, options)` | 验证码监控 |
102
102
 
103
103
  ---
104
104
 
package/dist/browser.js CHANGED
@@ -1092,7 +1092,7 @@ var ActorInfo = {
1092
1092
  }),
1093
1093
  douyin: createActorInfo({
1094
1094
  key: "douyin",
1095
- name: "\u6296\u97F3\u641C\u7D22",
1095
+ name: "\u6296\u97F3AI\u641C",
1096
1096
  domain: "www.douyin.com",
1097
1097
  path: "/search",
1098
1098
  share: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/internals/logger.js", "../src/logger.js", "../src/display.js", "../src/constants.js", "../entrys/browser.js"],
4
- "sourcesContent": ["\n// =============================================================================\n// Core Helpers & State\n// =============================================================================\n\nconst pad = (value, size = 2) => String(value).padStart(size, '0');\n\nconst FORCED_TIMEZONE_OFFSET_MINUTES = -8 * 60;\n\nconst formatTimestamp = (date = new Date()) => {\n const source = date instanceof Date ? date : new Date(date);\n const forcedDate = new Date(source.getTime() - (FORCED_TIMEZONE_OFFSET_MINUTES * 60 * 1000));\n\n const year = forcedDate.getUTCFullYear();\n const month = pad(forcedDate.getUTCMonth() + 1);\n const day = pad(forcedDate.getUTCDate());\n const hours = pad(forcedDate.getUTCHours());\n const minutes = pad(forcedDate.getUTCMinutes());\n const seconds = pad(forcedDate.getUTCSeconds());\n const millis = pad(forcedDate.getUTCMilliseconds(), 3);\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${millis}`;\n};\n\nconst formatLine = (prefix, icon, message) => {\n const parts = [];\n if (prefix) parts.push(`[${prefix}]`);\n if (icon) parts.push(icon);\n if (message) parts.push(message);\n return parts.join(' ').trim();\n};\n\nconst fallbackLog = {\n info: (...args) => console.log(...args),\n warning: (...args) => (console.warn ? console.warn(...args) : console.log(...args)),\n error: (...args) => console.error(...args),\n debug: (...args) => (console.debug ? console.debug(...args) : console.log(...args)),\n};\n\nconst resolveLogMethod = (logger, name) => {\n if (logger && typeof logger[name] === 'function') {\n return logger[name].bind(logger);\n }\n if (name === 'warning' && logger && typeof logger.warn === 'function') {\n return logger.warn.bind(logger);\n }\n return fallbackLog[name];\n};\n\nlet defaultLogger = null;\n\nexport const setDefaultLogger = (logger) => {\n defaultLogger = logger;\n};\n\n// Lazy resolver: always checks current state\nconst resolveLogger = (explicitLogger) => {\n if (explicitLogger && typeof explicitLogger.info === 'function') {\n return explicitLogger;\n }\n if (defaultLogger && typeof defaultLogger.info === 'function') {\n return defaultLogger;\n }\n return fallbackLog;\n};\n\nconst ANSI = {\n reset: '\\x1b[0m',\n gray: '\\x1b[90m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n};\n\nconst colorize = (text, color) => {\n if (!text || !color) return text;\n return `${color}${text}${ANSI.reset}`;\n};\n\nexport const createBaseLogger = (prefix = '', explicitLogger) => {\n const name = prefix ? String(prefix) : '';\n\n const dispatch = (methodName, icon, message, color) => {\n const logger = resolveLogger(explicitLogger);\n const logFn = resolveLogMethod(logger, methodName);\n const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);\n const line = formatLine(name, icon, message);\n const coloredLine = colorize(line, color);\n logFn(`${timestamp} ${coloredLine}`.trim());\n };\n\n return {\n info: (message) => dispatch('info', '\uD83D\uDCD6', message, ANSI.cyan),\n success: (message) => dispatch('info', '\u2705', message, ANSI.green),\n warning: (message) => dispatch('warning', '\u26A0\uFE0F', message, ANSI.yellow),\n warn: (message) => dispatch('warning', '\u26A0\uFE0F', message, ANSI.yellow),\n error: (message) => dispatch('error', '\u274C', message, ANSI.red),\n debug: (message) => dispatch('debug', '\uD83D\uDD39', message, ANSI.gray),\n start: (message) => dispatch('info', '\uD83D\uDD37', message, ANSI.blue),\n };\n};\n\n/**\n * \u521B\u5EFA\u6A21\u5757\u7EA7\u65E5\u5FD7\u5668\n * @param {string} moduleName - \u6A21\u5757\u540D\u79F0\n * @param {object} [logger] - \u53EF\u9009\u7684\u663E\u5F0F\u65E5\u5FD7\u5668\uFF0C\u901A\u5E38\u4E0D\u9700\u8981\u4F20\uFF0C\u4F1A\u81EA\u52A8\u4F7F\u7528 setDefaultLogger \u8BBE\u7F6E\u7684\u5168\u5C40\u65E5\u5FD7\u5668\n */\nexport function createInternalLogger(moduleName, explicitLogger) {\n const baseLogger = createBaseLogger(moduleName, explicitLogger);\n\n return {\n start(methodName, params = '') {\n const paramStr = params ? ` (${params})` : '';\n baseLogger.start(`${methodName} \u5F00\u59CB${paramStr}`);\n },\n success(methodName, result = '') {\n const resultStr = result ? ` (${result})` : '';\n baseLogger.success(`${methodName} \u5B8C\u6210${resultStr}`);\n },\n fail(methodName, error) {\n const message = error instanceof Error ? error.message : error;\n baseLogger.error(`${methodName} \u5931\u8D25: ${message}`);\n },\n debug(message) {\n baseLogger.debug(message);\n },\n warn(message) {\n baseLogger.warning(message);\n },\n warning(message) {\n baseLogger.warning(message);\n },\n info(message) {\n baseLogger.info(message);\n }\n };\n}\n", "import { createBaseLogger, setDefaultLogger } from './internals/logger.js';\n\nexport const stripAnsi = (input) => {\n if (!input) return '';\n return String(input).replace(/\\x1b\\[[0-9;]*m/g, '');\n};\n\n// =============================================================================\n// Log Templates & Definitions\n// =============================================================================\n\nconst STEP_PREFIX = '\u6B65\u9AA4:';\nconst STEP_SEPARATOR = ' | ';\nconst STEP_EMOJIS = [\n { match: '\u4EFB\u52A1', emoji: '\uD83E\uDDED' },\n { match: '\u8FD0\u884C\u6A21\u5F0F', emoji: '\uD83E\uDDE9' },\n { match: '\u6A21\u677F\u8BC6\u522B', emoji: '\uD83E\uDDF1' },\n { match: '\u767B\u5F55', emoji: '\uD83D\uDD10' },\n { match: '\u73AF\u5883', emoji: '\uD83E\uDDEA' },\n { match: '\u8F93\u5165', emoji: '\u2328\uFE0F' },\n { match: '\u53D1\u9001', emoji: '\uD83D\uDCE4' },\n { match: '\u54CD\u5E94\u76D1\u542C', emoji: '\uD83D\uDCE1' },\n { match: '\u7B49\u5F85\u54CD\u5E94', emoji: '\u23F3' },\n { match: '\u6D41\u5F0F', emoji: '\uD83E\uDDF5' },\n { match: '\u5F15\u7528', emoji: '\uD83D\uDCCE' },\n { match: '\u622A\u56FE', emoji: '\uD83D\uDDBC\uFE0F' },\n { match: '\u5206\u4EAB\u94FE\u63A5', emoji: '\uD83D\uDD17' },\n { match: '\u6570\u636E\u63A8\u9001', emoji: '\uD83D\uDCE6' },\n { match: '\u5F39\u7A97', emoji: '\uD83E\uDE9F' },\n];\nconst STATUS_EMOJIS = [\n { match: '\u5F00\u59CB', emoji: '\uD83D\uDE80' },\n { match: '\u5B8C\u6210', emoji: '\u2705' },\n { match: '\u6210\u529F', emoji: '\u2705' },\n { match: '\u5931\u8D25', emoji: '\u274C' },\n { match: '\u8DF3\u8FC7', emoji: '\u23ED\uFE0F' },\n { match: '\u8D85\u65F6', emoji: '\u23F1\uFE0F' },\n { match: '\u91CD\u8BD5', emoji: '\uD83D\uDD01' },\n { match: '\u7ED3\u675F', emoji: '\uD83C\uDFC1' },\n { match: '\u5DF2\u914D\u7F6E', emoji: '\uD83E\uDDF7' },\n { match: '\u5DF2\u68C0\u6D4B', emoji: '\uD83D\uDD0E' },\n];\n\nconst toErrorMessage = (error) => {\n if (!error) return '';\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\nconst decorateLabel = (label, mappings) => {\n if (!label) return '';\n const mapping = mappings.find((item) => label.includes(item.match));\n if (!mapping) return label;\n return `${mapping.emoji} ${label}`;\n};\n\nconst normalizeSnippet = (snippet, maxLen = 120) => {\n if (!snippet) return '';\n const text = String(snippet).replace(/\\s+/g, ' ').trim();\n if (!text) return '';\n const cleaned = text.replace(/\"/g, \"'\");\n if (cleaned.length <= maxLen) return cleaned;\n return `${cleaned.slice(0, maxLen)}...`;\n};\n\nconst LOG_TAG_PREFIX = '[#log:';\nconst LOG_TAG_SUFFIX = ']';\n\nconst buildLogTag = (key) => `${LOG_TAG_PREFIX}${key}${LOG_TAG_SUFFIX}`;\n\nconst escapeRegExp = (value) => String(value).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst buildStepPattern = (step, status) => {\n if (!step) return null;\n let pattern = `\u6B65\u9AA4: .*${escapeRegExp(step)}`;\n if (status) {\n pattern += `.*${escapeRegExp(status)}`;\n }\n return new RegExp(pattern);\n};\n\nconst buildDefinitionPatterns = (definition) => {\n const patterns = [new RegExp(`\\\\[#log:${escapeRegExp(definition.key)}\\\\]`)];\n const fallback = buildStepPattern(definition.step, definition.status);\n if (fallback) patterns.push(fallback);\n if (Array.isArray(definition.extraPatterns)) {\n patterns.push(...definition.extraPatterns);\n }\n return patterns;\n};\n\nconst ATTENTION_RANK = {\n low: 1,\n medium: 2,\n high: 3,\n critical: 4,\n};\nconst DEFAULT_ATTENTION_RANK = ATTENTION_RANK.high;\n\nconst LOG_DEFINITIONS = [\n {\n key: 'task_start',\n method: 'taskStart',\n label: '\u4EFB\u52A1\u5F00\u59CB',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (url) => [url ? `url=${url}` : ''],\n },\n {\n key: 'task_success',\n method: 'taskSuccess',\n label: '\u4EFB\u52A1\u5B8C\u6210',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'high',\n },\n {\n key: 'task_fail',\n method: 'taskFail',\n label: '\u4EFB\u52A1\u5931\u8D25',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'critical',\n buildDetails: (url, err) => [\n url ? `url=${url}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'runtime_headless',\n method: 'runtimeHeadless',\n label: '\u8FD0\u884C\u6A21\u5F0F\u5F3A\u5236\u65E0\u5934',\n group: '\u8FD0\u884C\u6A21\u5F0F',\n step: '\u8FD0\u884C\u6A21\u5F0F',\n status: 'Apify \u73AF\u5883\u5F3A\u5236\u65E0\u5934',\n level: 'warning',\n attention: 'medium',\n },\n {\n key: 'login_inject_success',\n method: 'loginInjectSuccess',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u6210\u529F',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'login_inject_skip',\n method: 'loginInjectSkip',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u8DF3\u8FC7',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'login_inject_fail',\n method: 'loginInjectFail',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u5931\u8D25',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'login_verify_success',\n method: 'loginVerifySuccess',\n label: '\u767B\u5F55\u9A8C\u8BC1\u6210\u529F',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'login_verify_skip',\n method: 'loginVerifySkip',\n label: '\u767B\u5F55\u9A8C\u8BC1\u8DF3\u8FC7',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'login_verify_fail',\n method: 'loginVerifyFail',\n label: '\u767B\u5F55\u9A8C\u8BC1\u5931\u8D25',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'critical',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'env_check_success',\n method: 'envCheckSuccess',\n label: '\u73AF\u5883\u68C0\u67E5\u6210\u529F',\n group: '\u73AF\u5883',\n step: '\u73AF\u5883\u68C0\u67E5',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'env_check_fail',\n method: 'envCheckFail',\n label: '\u73AF\u5883\u68C0\u67E5\u5931\u8D25',\n group: '\u73AF\u5883',\n step: '\u73AF\u5883\u68C0\u67E5',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'input_query_start',\n method: 'inputQuery',\n label: '\u8F93\u5165\u67E5\u8BE2\u5F00\u59CB',\n group: '\u8F93\u5165',\n step: '\u8F93\u5165\u67E5\u8BE2',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (query) => [query ? `query=${query}` : ''],\n },\n {\n key: 'send_action',\n method: 'sendAction',\n label: '\u53D1\u9001\u8BF7\u6C42',\n group: '\u53D1\u9001',\n step: '\u53D1\u9001\u8BF7\u6C42',\n status: '\u70B9\u51FB\u53D1\u9001',\n level: 'info',\n attention: 'low',\n },\n {\n key: 'response_listen_start',\n method: 'responseListenStart',\n label: '\u54CD\u5E94\u76D1\u542C\u5F00\u59CB',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label, timeoutSec) => [\n label ? `\u76EE\u6807=${label}` : '',\n timeoutSec ? `timeout=${timeoutSec}s` : ''\n ],\n },\n {\n key: 'response_listen_ready',\n method: 'responseListenReady',\n label: '\u54CD\u5E94\u76D1\u542C\u5DF2\u914D\u7F6E',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5DF2\u914D\u7F6E',\n level: 'info',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_listen_detected',\n method: 'responseListenDetected',\n label: '\u54CD\u5E94\u76D1\u542C\u5DF2\u68C0\u6D4B',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5DF2\u68C0\u6D4B',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_listen_timeout',\n method: 'responseListenTimeout',\n label: '\u54CD\u5E94\u76D1\u542C\u8D85\u65F6',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u8D85\u65F6',\n level: 'error',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'response_listen_end',\n method: 'responseListenEnd',\n label: '\u54CD\u5E94\u76D1\u542C\u7ED3\u675F',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u7ED3\u675F',\n level: 'info',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_start',\n method: 'responseWaitStart',\n label: '\u7B49\u5F85\u54CD\u5E94\u5F00\u59CB',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_success',\n method: 'responseWaitSuccess',\n label: '\u7B49\u5F85\u54CD\u5E94\u5B8C\u6210',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_fail',\n method: 'responseWaitFail',\n label: '\u7B49\u5F85\u54CD\u5E94\u5931\u8D25',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'response_wait_retry',\n method: 'responseWaitRetry',\n label: '\u7B49\u5F85\u54CD\u5E94\u91CD\u8BD5',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u91CD\u8BD5',\n level: 'warning',\n attention: 'medium',\n buildDetails: (label, attempt) => [\n label ? `\u76EE\u6807=${label}` : '',\n attempt !== undefined ? `\u5C1D\u8BD5=${attempt}` : ''\n ],\n },\n {\n key: 'dom_wait_start',\n method: 'domWaitStart',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5F00\u59CB',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'dom_wait_fail',\n method: 'domWaitFail',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5931\u8D25',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'dom_chunk',\n method: 'domChunk',\n label: 'DOM\u7247\u6BB5',\n group: 'DOM',\n step: 'DOM\u7247\u6BB5',\n status: '',\n level: 'info',\n attention: 'low',\n throttleKey: 'dom-chunk',\n throttleMs: 2000,\n buildDetails: (length, snippet, paused) => [\n length !== undefined ? `len=${length}` : '',\n snippet ? `preview=\"${normalizeSnippet(snippet)}\"` : '',\n paused ? 'paused=1' : ''\n ],\n },\n {\n key: 'dom_wait_success',\n method: 'domWaitSuccess',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5B8C\u6210',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n buildDetails: (mutationCount, stableTime, wasPaused) => [\n mutationCount !== undefined ? `mutations=${mutationCount}` : '',\n stableTime !== undefined ? `stableTime=${stableTime}ms` : '',\n wasPaused ? 'paused=1' : ''\n ],\n },\n {\n key: 'stream_chunk',\n method: 'streamChunk',\n label: '\u6D41\u5F0F\u7247\u6BB5',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u7247\u6BB5',\n status: '',\n level: 'info',\n attention: 'low',\n throttleKey: 'stream-chunk',\n throttleMs: 2000,\n buildDetails: (length, snippet) => [\n length !== undefined ? `len=${length}` : '',\n snippet ? `preview=\"${normalizeSnippet(snippet)}\"` : ''\n ],\n },\n {\n key: 'stream_events_parsed',\n method: 'streamEventsParsed',\n label: '\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790\u5B8C\u6210',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790',\n status: '\u5B8C\u6210',\n level: 'info',\n attention: 'low',\n throttleKey: 'stream-events',\n throttleMs: 4000,\n buildDetails: (count) => [count !== undefined ? `count=${count}` : ''],\n },\n {\n key: 'stream_complete_event',\n method: 'streamCompleteEvent',\n label: '\u6D41\u5F0F\u5B8C\u6210\u4E8B\u4EF6\u6355\u83B7',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u4E8B\u4EF6',\n status: '\u5B8C\u6210\u4E8B\u4EF6\u5DF2\u6355\u83B7',\n level: 'success',\n attention: 'medium',\n },\n {\n key: 'stream_end',\n method: 'streamEnd',\n label: '\u6D41\u5F0F\u54CD\u5E94\u7ED3\u675F',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u54CD\u5E94',\n status: '\u7ED3\u675F',\n level: 'info',\n attention: 'low',\n },\n {\n key: 'reference_expand_start',\n method: 'referenceExpandStart',\n label: '\u5F15\u7528\u5C55\u5F00\u5F00\u59CB',\n group: '\u5F15\u7528',\n step: '\u5F15\u7528\u5C55\u5F00',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'reference_expand_fail',\n method: 'referenceExpandFail',\n label: '\u5F15\u7528\u5C55\u5F00\u5931\u8D25',\n group: '\u5F15\u7528',\n step: '\u5F15\u7528\u5C55\u5F00',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'medium',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'screenshot_start',\n method: 'screenshotStart',\n label: '\u622A\u56FE\u5F00\u59CB',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n },\n {\n key: 'screenshot_success',\n method: 'screenshotSuccess',\n label: '\u622A\u56FE\u6210\u529F',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n },\n {\n key: 'screenshot_fail',\n method: 'screenshotFail',\n label: '\u622A\u56FE\u5931\u8D25',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'share_start',\n method: 'shareStart',\n label: '\u5206\u4EAB\u94FE\u63A5\u5F00\u59CB',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n },\n {\n key: 'share_progress',\n method: 'shareProgress',\n label: '\u5206\u4EAB\u94FE\u63A5\u6B65\u9AA4',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6B65\u9AA4',\n level: 'info',\n attention: 'low',\n buildDetails: (label) => [label ? `\u6B65\u9AA4=${label}` : ''],\n },\n {\n key: 'share_dom_hit',\n method: 'shareDomHit',\n label: '\u5206\u4EAB\u94FE\u63A5DOM\u547D\u4E2D',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: 'DOM\u547D\u4E2D',\n level: 'info',\n attention: 'low',\n buildDetails: (link, domSnapshot) => [\n link ? `\u94FE\u63A5=${link}` : '',\n domSnapshot ? `DOM=${normalizeSnippet(domSnapshot, 220)}` : ''\n ],\n },\n {\n key: 'share_source',\n method: 'shareSource',\n label: '\u5206\u4EAB\u94FE\u63A5\u6765\u6E90',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6765\u6E90',\n level: 'info',\n attention: 'low',\n buildDetails: (source, link, domSnapshot) => [\n source ? `\u6765\u6E90=${source}` : '',\n link ? `\u94FE\u63A5=${link}` : '',\n source === 'dom' && domSnapshot ? `DOM=${normalizeSnippet(domSnapshot, 220)}` : ''\n ],\n },\n {\n key: 'share_success',\n method: 'shareSuccess',\n label: '\u5206\u4EAB\u94FE\u63A5\u6210\u529F',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (link) => [link ? `\u94FE\u63A5=${link}` : ''],\n },\n {\n key: 'share_fail',\n method: 'shareFail',\n label: '\u5206\u4EAB\u94FE\u63A5\u5931\u8D25',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'share_skip',\n method: 'shareSkip',\n label: '\u5206\u4EAB\u94FE\u63A5\u8DF3\u8FC7',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'ai_search_card_detect_attempt',\n method: 'aiSearchCardDetectAttempt',\n label: 'AI Search \u5361\u7247\u8BC6\u522B\u5C1D\u8BD5',\n group: 'AI Search',\n step: 'AI Search \u5361\u7247\u8BC6\u522B',\n status: '\u5C1D\u8BD5',\n level: 'info',\n attention: 'low',\n buildDetails: (attempt = 1, maxAttempts = 1, url = '') => [\n `attempt=${attempt}/${maxAttempts}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'ai_search_card_detect_success',\n method: 'aiSearchCardDetectSuccess',\n label: 'AI Search \u5361\u7247\u8BC6\u522B\u6210\u529F',\n group: 'AI Search',\n step: 'AI Search \u5361\u7247\u8BC6\u522B',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (cardType = '', attempts = 1, refreshCount = 0, url = '') => [\n cardType ? `cardType=${cardType}` : '',\n `attempts=${attempts}`,\n `refreshCount=${refreshCount}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'ai_search_card_empty_result_success',\n method: 'aiSearchCardEmptyResultSuccess',\n label: 'AI Search \u7A7A\u7ED3\u679C\u6210\u529F',\n group: 'AI Search',\n step: 'AI Search \u7A7A\u7ED3\u679C',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (contentLeftTpls = [], targetTpls = [], url = '', attempts = 0, refreshCount = 0) => [\n Array.isArray(contentLeftTpls) ? `contentLeftTpls=${normalizeSnippet(contentLeftTpls.join(','), 200)}` : '',\n Array.isArray(targetTpls) ? `targetTpls=${normalizeSnippet(targetTpls.join(','), 200)}` : '',\n `attempts=${attempts}`,\n `refreshCount=${refreshCount}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'data_push_success',\n method: 'dataPushSuccess',\n label: '\u6570\u636E\u63A8\u9001\u6210\u529F',\n group: '\u6570\u636E\u63A8\u9001',\n step: '\u6570\u636E\u63A8\u9001',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u8BF4\u660E=${label}` : ''],\n },\n {\n key: 'data_push_fail',\n method: 'dataPushFail',\n label: '\u6570\u636E\u63A8\u9001\u5931\u8D25',\n group: '\u6570\u636E\u63A8\u9001',\n step: '\u6570\u636E\u63A8\u9001',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'popup_detected',\n method: 'popupDetected',\n label: '\u5F39\u7A97\u68C0\u6D4B',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u68C0\u6D4B\u5230\u906E\u7F69',\n level: 'warning',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'popup_close_attempt',\n method: 'popupCloseAttempt',\n label: '\u5F39\u7A97\u5173\u95ED\u5C1D\u8BD5',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5C1D\u8BD5\u5173\u95ED',\n level: 'info',\n attention: 'low',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'popup_close_success',\n method: 'popupCloseSuccess',\n label: '\u5F39\u7A97\u5173\u95ED\u5B8C\u6210',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5173\u95ED\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n },\n {\n key: 'popup_close_fail',\n method: 'popupCloseFail',\n label: '\u5F39\u7A97\u5173\u95ED\u5931\u8D25',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5173\u95ED\u5931\u8D25',\n level: 'warning',\n attention: 'medium',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n];\n\nexport const LOG_TEMPLATES = LOG_DEFINITIONS.map((definition) => {\n const attention = definition.attention || 'medium';\n const attentionRank = ATTENTION_RANK[attention] || ATTENTION_RANK.medium;\n const defaultSelected = attentionRank >= DEFAULT_ATTENTION_RANK;\n return {\n key: definition.key,\n label: definition.label,\n group: definition.group,\n attention,\n patterns: buildDefinitionPatterns(definition),\n defaultSelected,\n };\n});\n\nconst buildStepLine = (step, status, details = []) => {\n const parts = [];\n const decoratedStep = step ? decorateLabel(step, STEP_EMOJIS) : '';\n const base = decoratedStep ? `${STEP_PREFIX} ${decoratedStep}` : STEP_PREFIX;\n parts.push(base.trim());\n if (status) parts.push(decorateLabel(status, STATUS_EMOJIS));\n const detailParts = details.filter(Boolean);\n if (detailParts.length > 0) {\n parts.push(...detailParts);\n }\n return parts.join(STEP_SEPARATOR);\n};\n\nconst createThrottle = () => {\n const lastMap = new Map();\n return (key, intervalMs, fn) => {\n const now = Date.now();\n const last = lastMap.get(key) || 0;\n if (now - last >= intervalMs) {\n lastMap.set(key, now);\n fn();\n }\n };\n};\n\nexport const createTemplateLogger = (baseLogger = createBaseLogger()) => {\n const throttle = createThrottle();\n\n const info = (line) => baseLogger.info(line);\n const success = (line) => baseLogger.success(line);\n const warning = (line) => baseLogger.warning(line);\n const error = (line) => baseLogger.error(line);\n const debug = (line) => baseLogger.debug(line);\n const start = (line) => baseLogger.start(line);\n\n const stepInfo = (step, status, details = []) => info(buildStepLine(step, status, details));\n const stepSuccess = (step, status, details = []) => success(buildStepLine(step, status, details));\n const stepWarn = (step, status, details = []) => warning(buildStepLine(step, status, details));\n const stepError = (step, status, details = []) => error(buildStepLine(step, status, details));\n const stepStart = (step, status, details = []) => start(buildStepLine(step, status, details));\n\n const stepHandlers = {\n info: stepInfo,\n success: stepSuccess,\n warning: stepWarn,\n error: stepError,\n start: stepStart,\n };\n\n const logFromDefinition = (definition, details = []) => {\n const handler = stepHandlers[definition.level] || stepInfo;\n const payload = [...details, buildLogTag(definition.key)];\n const emit = () => handler(definition.step, definition.status, payload);\n if (definition.throttleMs) {\n throttle(definition.throttleKey || definition.key, definition.throttleMs, emit);\n return;\n }\n emit();\n };\n\n const definitionMethods = {};\n LOG_DEFINITIONS.forEach((definition) => {\n if (!definition.method) return;\n definitionMethods[definition.method] = (...args) => {\n const details = definition.buildDetails ? definition.buildDetails(...args) : [];\n logFromDefinition(definition, details);\n };\n });\n\n return {\n step: (step, status, details, level = 'info') => {\n if (level === 'error') return stepError(step, status, details);\n if (level === 'warn' || level === 'warning') return stepWarn(step, status, details);\n if (level === 'start') return stepStart(step, status, details);\n if (level === 'success') return stepSuccess(step, status, details);\n return stepInfo(step, status, details);\n },\n info: (message) => info(message),\n success: (message) => success(message),\n warning: (message) => warning(message),\n warn: (message) => warning(message),\n error: (message) => error(message),\n debug: (message) => debug(message),\n start: (message) => start(message),\n ...definitionMethods,\n };\n};\n\nconst getDefaultBaseLogger = () => createBaseLogger('');\n\nexport const Logger = {\n setLogger: (logger) => setDefaultLogger(logger),\n info: (message) => getDefaultBaseLogger().info(message),\n success: (message) => getDefaultBaseLogger().success(message),\n warning: (message) => getDefaultBaseLogger().warning(message),\n warn: (message) => getDefaultBaseLogger().warning(message),\n error: (message) => getDefaultBaseLogger().error(message),\n debug: (message) => getDefaultBaseLogger().debug(message),\n start: (message) => getDefaultBaseLogger().start(message),\n useTemplate: (logger) => {\n if (logger) return createTemplateLogger(createBaseLogger('', logger));\n return createTemplateLogger();\n },\n};\n", "export const Display = {\n parseTokenDisplayName(value) {\n if (!value) {\n return { owner: '', accountType: '', note: '' };\n }\n const parts = String(value).split(':');\n const owner = (parts[0] || '').trim();\n const accountType = (parts[1] || '').trim();\n const note = parts.length > 2 ? parts.slice(2).join(':').trim() : '';\n return { owner, accountType, note };\n },\n\n parseAccountDisplayName(value) {\n if (!value) {\n return { account: '', owner: '', accountType: '', note: '' };\n }\n const parts = String(value).split(':');\n const account = (parts[0] || '').trim();\n const owner = (parts[1] || '').trim();\n const accountType = (parts[2] || '').trim();\n const note = parts.length > 3 ? parts.slice(3).join(':').trim() : '';\n return { account, owner, accountType, note };\n },\n\n buildTokenDisplayName({ owner, accountType, note } = {}) {\n const trimmedOwner = owner?.trim() || '';\n const trimmedType = accountType?.trim() || '';\n const trimmedNote = note?.trim() || '';\n const parts = [trimmedOwner, trimmedType];\n if (trimmedNote) {\n parts.push(trimmedNote);\n }\n return parts.filter(Boolean).join(':');\n },\n\n shortId(value, max = 8) {\n const clean = String(value || '').trim();\n if (!clean) return '';\n if (clean.length <= max) return clean;\n return clean.slice(0, max);\n },\n\n resolveTokenIdentity(displayName, tokenId) {\n const cleanName = String(displayName || '').trim();\n const cleanId = String(tokenId || '').trim();\n const short = this.shortId(cleanId, 8);\n const hasName = cleanName !== '' && cleanName !== cleanId;\n const primary = hasName ? cleanName : (short || '-');\n const secondary = hasName && short ? short : '';\n return { primary, secondary, fullId: cleanId, shortId: short };\n },\n\n resolveAccountIdentity(displayName, accountId) {\n const parts = this.parseAccountDisplayName(displayName);\n const cleanId = String(accountId || '').trim();\n const short = this.shortId(cleanId, 8);\n const hasName = parts.account !== '' && parts.account !== cleanId;\n const primary = hasName ? parts.account : (short || '-');\n const secondary = hasName && short ? short : '';\n return { primary, secondary, parts, fullId: cleanId, shortId: short };\n },\n};\n", "export const Code = {\n Success: 0,\n UnknownError: -1,\n NotLogin: 30000001,\n Chaptcha: 30000002,\n Timeout: 30000003,\n InitialTimeout: 30000004,\n OverallTimeout: 30000005,\n}\n\nexport const Status = {\n Success: 'SUCCESS',\n Failed: 'FAILED'\n}\n\nexport const PresetOfLiveViewKey = 'LIVE_VIEW_SCREENSHOT';\n\n\nconst createActorInfo = (info) => {\n const normalizeDomain = (value) => {\n if (!value) return '';\n return String(value).trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');\n };\n\n const normalizePath = (value) => {\n if (!value) return '/';\n const raw = String(value).trim();\n if (!raw) return '/';\n return raw.startsWith('/') ? raw : `/${raw}`;\n };\n\n const normalizeShare = (value) => {\n const raw = value && typeof value === 'object' ? value : {};\n\n const modeRaw = String(raw.mode || 'dom').trim().toLowerCase();\n const mode = modeRaw === 'response' ? 'response' : 'dom';\n\n const prefix = String(raw.prefix || '').trim();\n\n const rawXurl = Array.isArray(raw.xurl)\n ? raw.xurl\n : [];\n\n const normalizeMatcherList = (input) => {\n if (Array.isArray(input)) {\n return input\n .map((item) => String(item || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n }\n\n const single = String(input || '').trim().replace(/\\.+$/, '');\n return single ? [single] : [];\n };\n\n const normalizeSegments = (input) => {\n if (Array.isArray(input)) {\n return input\n .map((item) => String(item || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n }\n\n const rawPath = String(input || '').trim();\n if (!rawPath) return [];\n\n return rawPath\n .split('.')\n .map((segment) => String(segment || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n };\n\n const xurl = [];\n\n const matcherList = normalizeMatcherList(rawXurl[0]);\n if (matcherList.length > 0) {\n xurl.push(matcherList);\n }\n\n const flatPath = [];\n const extraPaths = [];\n\n rawXurl.slice(1).forEach((item) => {\n if (Array.isArray(item)) {\n const segments = normalizeSegments(item);\n if (segments.length > 0) {\n extraPaths.push(segments);\n }\n return;\n }\n\n const segments = normalizeSegments(item);\n if (segments.length > 0) {\n flatPath.push(...segments);\n }\n });\n\n if (flatPath.length > 0) {\n xurl.push(flatPath);\n }\n\n if (extraPaths.length > 0) {\n xurl.push(...extraPaths);\n }\n\n return {\n mode,\n prefix,\n xurl,\n };\n };\n\n const buildLandingUrl = ({ protocol, domain, path }) => {\n const safeProtocol = String(protocol).trim();\n const safeDomain = normalizeDomain(domain);\n const safePath = normalizePath(path);\n return `${safeProtocol}://${safeDomain}${safePath}`;\n };\n\n const buildIcon = ({ key }) => {\n return `https://heartbitai.com/general/actors/${key}.png`;\n }\n\n\n const protocol = info.protocol || 'https';\n const domain = normalizeDomain(info.domain);\n const path = normalizePath(info.path);\n const share = normalizeShare(info.share);\n\n return {\n ...info,\n protocol,\n domain,\n path,\n share,\n get icon() {\n if (info.icon) return info.icon;\n return buildIcon(this);\n },\n get landingUrl() {\n return buildLandingUrl(this);\n },\n };\n};\n\nexport const ActorInfo = {\n qbot: createActorInfo({\n key: 'qbot',\n name: '\u641C\u72D7QBot',\n domain: 'm.sogou.com',\n path: '/web/searchList.jsp',\n share: {\n mode: 'dom',\n prefix: '',\n xurl: [],\n },\n }),\n douyin: createActorInfo({\n key: 'douyin',\n name: '\u6296\u97F3\u641C\u7D22',\n domain: 'www.douyin.com',\n path: '/search',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aweme/v1/web/web_shorten',\n 'data',\n ],\n },\n }),\n doubao: createActorInfo({\n key: 'doubao',\n name: '\u8C46\u5305',\n domain: 'www.doubao.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://www.doubao.com/thread/',\n xurl: [\n '/samantha/thread/share/save',\n 'data', 'share_id',\n ],\n },\n }),\n deepseek: createActorInfo({\n key: 'deepseek',\n name: 'DeepSeek',\n domain: 'chat.deepseek.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://chat.deepseek.com/share/',\n xurl: [\n '/api/v0/share/create',\n 'data', 'biz_data', 'share_id',\n ],\n },\n }),\n erine: createActorInfo({\n key: 'erine',\n name: '\u6587\u5FC3\u4E00\u8A00',\n domain: 'yiyan.baidu.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://yiyan.baidu.com/share/',\n xurl: [\n '/eb/share/key/gen',\n 'data', 'key',\n ],\n },\n }),\n wenxin: createActorInfo({\n key: 'wenxin',\n name: '\u6587\u5FC3\u52A9\u624B',\n domain: 'chat.baidu.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aichat/api/shortURL',\n 'data', 'short_url',\n ],\n },\n }),\n baidu: createActorInfo({\n key: 'baidu',\n name: '\u767E\u5EA6AI\u641C',\n domain: 'www.baidu.com',\n path: '/s',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aichat/api/shortURL',\n 'data', 'short_url',\n ],\n },\n }),\n yuanbao: createActorInfo({\n key: 'yuanbao',\n name: '\u5143\u5B9D',\n domain: 'yuanbao.tencent.com',\n path: '/chat/',\n share: {\n mode: 'response',\n prefix: 'https://yb.tencent.com/s/',\n xurl: [\n '/api/conversations/v2/share', 'shareId',\n ],\n },\n }),\n kimi: createActorInfo({\n key: 'kimi',\n name: 'Kimi',\n domain: 'www.kimi.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://www.kimi.com/share/',\n xurl: [\n '/kimi.gateway.chat.v1.ChatService/CreateChatShare', 'share', 'id'\n ],\n },\n }),\n qwen: createActorInfo({\n key: 'qwen',\n name: '\u901A\u4E49\u5343\u95EE',\n domain: 'www.qianwen.com',\n path: '/chat',\n share: {\n mode: 'response',\n prefix: 'https://www.qianwen.com/share/chat/',\n xurl: [\n '/api/v1/share/create', 'data', 'share_id'\n ],\n },\n }),\n}\n", "import { Logger, LOG_TEMPLATES, stripAnsi } from '../src/logger.js';\nimport { Display } from '../src/display.js';\nimport * as Constants from '../src/constants.js';\n\nexport const usePlaywrightToolKit = () => {\n return {\n Logger,\n Display,\n Constants,\n $Internals: {\n LOG_TEMPLATES,\n stripAnsi,\n },\n };\n};\n"],
4
+ "sourcesContent": ["\n// =============================================================================\n// Core Helpers & State\n// =============================================================================\n\nconst pad = (value, size = 2) => String(value).padStart(size, '0');\n\nconst FORCED_TIMEZONE_OFFSET_MINUTES = -8 * 60;\n\nconst formatTimestamp = (date = new Date()) => {\n const source = date instanceof Date ? date : new Date(date);\n const forcedDate = new Date(source.getTime() - (FORCED_TIMEZONE_OFFSET_MINUTES * 60 * 1000));\n\n const year = forcedDate.getUTCFullYear();\n const month = pad(forcedDate.getUTCMonth() + 1);\n const day = pad(forcedDate.getUTCDate());\n const hours = pad(forcedDate.getUTCHours());\n const minutes = pad(forcedDate.getUTCMinutes());\n const seconds = pad(forcedDate.getUTCSeconds());\n const millis = pad(forcedDate.getUTCMilliseconds(), 3);\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${millis}`;\n};\n\nconst formatLine = (prefix, icon, message) => {\n const parts = [];\n if (prefix) parts.push(`[${prefix}]`);\n if (icon) parts.push(icon);\n if (message) parts.push(message);\n return parts.join(' ').trim();\n};\n\nconst fallbackLog = {\n info: (...args) => console.log(...args),\n warning: (...args) => (console.warn ? console.warn(...args) : console.log(...args)),\n error: (...args) => console.error(...args),\n debug: (...args) => (console.debug ? console.debug(...args) : console.log(...args)),\n};\n\nconst resolveLogMethod = (logger, name) => {\n if (logger && typeof logger[name] === 'function') {\n return logger[name].bind(logger);\n }\n if (name === 'warning' && logger && typeof logger.warn === 'function') {\n return logger.warn.bind(logger);\n }\n return fallbackLog[name];\n};\n\nlet defaultLogger = null;\n\nexport const setDefaultLogger = (logger) => {\n defaultLogger = logger;\n};\n\n// Lazy resolver: always checks current state\nconst resolveLogger = (explicitLogger) => {\n if (explicitLogger && typeof explicitLogger.info === 'function') {\n return explicitLogger;\n }\n if (defaultLogger && typeof defaultLogger.info === 'function') {\n return defaultLogger;\n }\n return fallbackLog;\n};\n\nconst ANSI = {\n reset: '\\x1b[0m',\n gray: '\\x1b[90m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n cyan: '\\x1b[36m',\n};\n\nconst colorize = (text, color) => {\n if (!text || !color) return text;\n return `${color}${text}${ANSI.reset}`;\n};\n\nexport const createBaseLogger = (prefix = '', explicitLogger) => {\n const name = prefix ? String(prefix) : '';\n\n const dispatch = (methodName, icon, message, color) => {\n const logger = resolveLogger(explicitLogger);\n const logFn = resolveLogMethod(logger, methodName);\n const timestamp = colorize(`[${formatTimestamp()}]`, ANSI.gray);\n const line = formatLine(name, icon, message);\n const coloredLine = colorize(line, color);\n logFn(`${timestamp} ${coloredLine}`.trim());\n };\n\n return {\n info: (message) => dispatch('info', '\uD83D\uDCD6', message, ANSI.cyan),\n success: (message) => dispatch('info', '\u2705', message, ANSI.green),\n warning: (message) => dispatch('warning', '\u26A0\uFE0F', message, ANSI.yellow),\n warn: (message) => dispatch('warning', '\u26A0\uFE0F', message, ANSI.yellow),\n error: (message) => dispatch('error', '\u274C', message, ANSI.red),\n debug: (message) => dispatch('debug', '\uD83D\uDD39', message, ANSI.gray),\n start: (message) => dispatch('info', '\uD83D\uDD37', message, ANSI.blue),\n };\n};\n\n/**\n * \u521B\u5EFA\u6A21\u5757\u7EA7\u65E5\u5FD7\u5668\n * @param {string} moduleName - \u6A21\u5757\u540D\u79F0\n * @param {object} [logger] - \u53EF\u9009\u7684\u663E\u5F0F\u65E5\u5FD7\u5668\uFF0C\u901A\u5E38\u4E0D\u9700\u8981\u4F20\uFF0C\u4F1A\u81EA\u52A8\u4F7F\u7528 setDefaultLogger \u8BBE\u7F6E\u7684\u5168\u5C40\u65E5\u5FD7\u5668\n */\nexport function createInternalLogger(moduleName, explicitLogger) {\n const baseLogger = createBaseLogger(moduleName, explicitLogger);\n\n return {\n start(methodName, params = '') {\n const paramStr = params ? ` (${params})` : '';\n baseLogger.start(`${methodName} \u5F00\u59CB${paramStr}`);\n },\n success(methodName, result = '') {\n const resultStr = result ? ` (${result})` : '';\n baseLogger.success(`${methodName} \u5B8C\u6210${resultStr}`);\n },\n fail(methodName, error) {\n const message = error instanceof Error ? error.message : error;\n baseLogger.error(`${methodName} \u5931\u8D25: ${message}`);\n },\n debug(message) {\n baseLogger.debug(message);\n },\n warn(message) {\n baseLogger.warning(message);\n },\n warning(message) {\n baseLogger.warning(message);\n },\n info(message) {\n baseLogger.info(message);\n }\n };\n}\n", "import { createBaseLogger, setDefaultLogger } from './internals/logger.js';\n\nexport const stripAnsi = (input) => {\n if (!input) return '';\n return String(input).replace(/\\x1b\\[[0-9;]*m/g, '');\n};\n\n// =============================================================================\n// Log Templates & Definitions\n// =============================================================================\n\nconst STEP_PREFIX = '\u6B65\u9AA4:';\nconst STEP_SEPARATOR = ' | ';\nconst STEP_EMOJIS = [\n { match: '\u4EFB\u52A1', emoji: '\uD83E\uDDED' },\n { match: '\u8FD0\u884C\u6A21\u5F0F', emoji: '\uD83E\uDDE9' },\n { match: '\u6A21\u677F\u8BC6\u522B', emoji: '\uD83E\uDDF1' },\n { match: '\u767B\u5F55', emoji: '\uD83D\uDD10' },\n { match: '\u73AF\u5883', emoji: '\uD83E\uDDEA' },\n { match: '\u8F93\u5165', emoji: '\u2328\uFE0F' },\n { match: '\u53D1\u9001', emoji: '\uD83D\uDCE4' },\n { match: '\u54CD\u5E94\u76D1\u542C', emoji: '\uD83D\uDCE1' },\n { match: '\u7B49\u5F85\u54CD\u5E94', emoji: '\u23F3' },\n { match: '\u6D41\u5F0F', emoji: '\uD83E\uDDF5' },\n { match: '\u5F15\u7528', emoji: '\uD83D\uDCCE' },\n { match: '\u622A\u56FE', emoji: '\uD83D\uDDBC\uFE0F' },\n { match: '\u5206\u4EAB\u94FE\u63A5', emoji: '\uD83D\uDD17' },\n { match: '\u6570\u636E\u63A8\u9001', emoji: '\uD83D\uDCE6' },\n { match: '\u5F39\u7A97', emoji: '\uD83E\uDE9F' },\n];\nconst STATUS_EMOJIS = [\n { match: '\u5F00\u59CB', emoji: '\uD83D\uDE80' },\n { match: '\u5B8C\u6210', emoji: '\u2705' },\n { match: '\u6210\u529F', emoji: '\u2705' },\n { match: '\u5931\u8D25', emoji: '\u274C' },\n { match: '\u8DF3\u8FC7', emoji: '\u23ED\uFE0F' },\n { match: '\u8D85\u65F6', emoji: '\u23F1\uFE0F' },\n { match: '\u91CD\u8BD5', emoji: '\uD83D\uDD01' },\n { match: '\u7ED3\u675F', emoji: '\uD83C\uDFC1' },\n { match: '\u5DF2\u914D\u7F6E', emoji: '\uD83E\uDDF7' },\n { match: '\u5DF2\u68C0\u6D4B', emoji: '\uD83D\uDD0E' },\n];\n\nconst toErrorMessage = (error) => {\n if (!error) return '';\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\nconst decorateLabel = (label, mappings) => {\n if (!label) return '';\n const mapping = mappings.find((item) => label.includes(item.match));\n if (!mapping) return label;\n return `${mapping.emoji} ${label}`;\n};\n\nconst normalizeSnippet = (snippet, maxLen = 120) => {\n if (!snippet) return '';\n const text = String(snippet).replace(/\\s+/g, ' ').trim();\n if (!text) return '';\n const cleaned = text.replace(/\"/g, \"'\");\n if (cleaned.length <= maxLen) return cleaned;\n return `${cleaned.slice(0, maxLen)}...`;\n};\n\nconst LOG_TAG_PREFIX = '[#log:';\nconst LOG_TAG_SUFFIX = ']';\n\nconst buildLogTag = (key) => `${LOG_TAG_PREFIX}${key}${LOG_TAG_SUFFIX}`;\n\nconst escapeRegExp = (value) => String(value).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst buildStepPattern = (step, status) => {\n if (!step) return null;\n let pattern = `\u6B65\u9AA4: .*${escapeRegExp(step)}`;\n if (status) {\n pattern += `.*${escapeRegExp(status)}`;\n }\n return new RegExp(pattern);\n};\n\nconst buildDefinitionPatterns = (definition) => {\n const patterns = [new RegExp(`\\\\[#log:${escapeRegExp(definition.key)}\\\\]`)];\n const fallback = buildStepPattern(definition.step, definition.status);\n if (fallback) patterns.push(fallback);\n if (Array.isArray(definition.extraPatterns)) {\n patterns.push(...definition.extraPatterns);\n }\n return patterns;\n};\n\nconst ATTENTION_RANK = {\n low: 1,\n medium: 2,\n high: 3,\n critical: 4,\n};\nconst DEFAULT_ATTENTION_RANK = ATTENTION_RANK.high;\n\nconst LOG_DEFINITIONS = [\n {\n key: 'task_start',\n method: 'taskStart',\n label: '\u4EFB\u52A1\u5F00\u59CB',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (url) => [url ? `url=${url}` : ''],\n },\n {\n key: 'task_success',\n method: 'taskSuccess',\n label: '\u4EFB\u52A1\u5B8C\u6210',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'high',\n },\n {\n key: 'task_fail',\n method: 'taskFail',\n label: '\u4EFB\u52A1\u5931\u8D25',\n group: '\u4EFB\u52A1',\n step: '\u4EFB\u52A1',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'critical',\n buildDetails: (url, err) => [\n url ? `url=${url}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'runtime_headless',\n method: 'runtimeHeadless',\n label: '\u8FD0\u884C\u6A21\u5F0F\u5F3A\u5236\u65E0\u5934',\n group: '\u8FD0\u884C\u6A21\u5F0F',\n step: '\u8FD0\u884C\u6A21\u5F0F',\n status: 'Apify \u73AF\u5883\u5F3A\u5236\u65E0\u5934',\n level: 'warning',\n attention: 'medium',\n },\n {\n key: 'login_inject_success',\n method: 'loginInjectSuccess',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u6210\u529F',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'login_inject_skip',\n method: 'loginInjectSkip',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u8DF3\u8FC7',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'login_inject_fail',\n method: 'loginInjectFail',\n label: '\u767B\u5F55\u6001\u6CE8\u5165\u5931\u8D25',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u6001\u6CE8\u5165',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'login_verify_success',\n method: 'loginVerifySuccess',\n label: '\u767B\u5F55\u9A8C\u8BC1\u6210\u529F',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'login_verify_skip',\n method: 'loginVerifySkip',\n label: '\u767B\u5F55\u9A8C\u8BC1\u8DF3\u8FC7',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'login_verify_fail',\n method: 'loginVerifyFail',\n label: '\u767B\u5F55\u9A8C\u8BC1\u5931\u8D25',\n group: '\u767B\u5F55',\n step: '\u767B\u5F55\u9A8C\u8BC1',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'critical',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'env_check_success',\n method: 'envCheckSuccess',\n label: '\u73AF\u5883\u68C0\u67E5\u6210\u529F',\n group: '\u73AF\u5883',\n step: '\u73AF\u5883\u68C0\u67E5',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'env_check_fail',\n method: 'envCheckFail',\n label: '\u73AF\u5883\u68C0\u67E5\u5931\u8D25',\n group: '\u73AF\u5883',\n step: '\u73AF\u5883\u68C0\u67E5',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'input_query_start',\n method: 'inputQuery',\n label: '\u8F93\u5165\u67E5\u8BE2\u5F00\u59CB',\n group: '\u8F93\u5165',\n step: '\u8F93\u5165\u67E5\u8BE2',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (query) => [query ? `query=${query}` : ''],\n },\n {\n key: 'send_action',\n method: 'sendAction',\n label: '\u53D1\u9001\u8BF7\u6C42',\n group: '\u53D1\u9001',\n step: '\u53D1\u9001\u8BF7\u6C42',\n status: '\u70B9\u51FB\u53D1\u9001',\n level: 'info',\n attention: 'low',\n },\n {\n key: 'response_listen_start',\n method: 'responseListenStart',\n label: '\u54CD\u5E94\u76D1\u542C\u5F00\u59CB',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label, timeoutSec) => [\n label ? `\u76EE\u6807=${label}` : '',\n timeoutSec ? `timeout=${timeoutSec}s` : ''\n ],\n },\n {\n key: 'response_listen_ready',\n method: 'responseListenReady',\n label: '\u54CD\u5E94\u76D1\u542C\u5DF2\u914D\u7F6E',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5DF2\u914D\u7F6E',\n level: 'info',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_listen_detected',\n method: 'responseListenDetected',\n label: '\u54CD\u5E94\u76D1\u542C\u5DF2\u68C0\u6D4B',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u5DF2\u68C0\u6D4B',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_listen_timeout',\n method: 'responseListenTimeout',\n label: '\u54CD\u5E94\u76D1\u542C\u8D85\u65F6',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u8D85\u65F6',\n level: 'error',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'response_listen_end',\n method: 'responseListenEnd',\n label: '\u54CD\u5E94\u76D1\u542C\u7ED3\u675F',\n group: '\u54CD\u5E94\u76D1\u542C',\n step: '\u54CD\u5E94\u76D1\u542C',\n status: '\u7ED3\u675F',\n level: 'info',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_start',\n method: 'responseWaitStart',\n label: '\u7B49\u5F85\u54CD\u5E94\u5F00\u59CB',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_success',\n method: 'responseWaitSuccess',\n label: '\u7B49\u5F85\u54CD\u5E94\u5B8C\u6210',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'response_wait_fail',\n method: 'responseWaitFail',\n label: '\u7B49\u5F85\u54CD\u5E94\u5931\u8D25',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'response_wait_retry',\n method: 'responseWaitRetry',\n label: '\u7B49\u5F85\u54CD\u5E94\u91CD\u8BD5',\n group: '\u7B49\u5F85\u54CD\u5E94',\n step: '\u7B49\u5F85\u54CD\u5E94',\n status: '\u91CD\u8BD5',\n level: 'warning',\n attention: 'medium',\n buildDetails: (label, attempt) => [\n label ? `\u76EE\u6807=${label}` : '',\n attempt !== undefined ? `\u5C1D\u8BD5=${attempt}` : ''\n ],\n },\n {\n key: 'dom_wait_start',\n method: 'domWaitStart',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5F00\u59CB',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'dom_wait_fail',\n method: 'domWaitFail',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5931\u8D25',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (label, err) => [\n label ? `\u76EE\u6807=${label}` : '',\n err ? `err=${toErrorMessage(err)}` : ''\n ],\n },\n {\n key: 'dom_chunk',\n method: 'domChunk',\n label: 'DOM\u7247\u6BB5',\n group: 'DOM',\n step: 'DOM\u7247\u6BB5',\n status: '',\n level: 'info',\n attention: 'low',\n throttleKey: 'dom-chunk',\n throttleMs: 2000,\n buildDetails: (length, snippet, paused) => [\n length !== undefined ? `len=${length}` : '',\n snippet ? `preview=\"${normalizeSnippet(snippet)}\"` : '',\n paused ? 'paused=1' : ''\n ],\n },\n {\n key: 'dom_wait_success',\n method: 'domWaitSuccess',\n label: 'DOM\u7A33\u5B9A\u7B49\u5F85\u5B8C\u6210',\n group: 'DOM',\n step: 'DOM\u7A33\u5B9A',\n status: '\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n buildDetails: (mutationCount, stableTime, wasPaused) => [\n mutationCount !== undefined ? `mutations=${mutationCount}` : '',\n stableTime !== undefined ? `stableTime=${stableTime}ms` : '',\n wasPaused ? 'paused=1' : ''\n ],\n },\n {\n key: 'stream_chunk',\n method: 'streamChunk',\n label: '\u6D41\u5F0F\u7247\u6BB5',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u7247\u6BB5',\n status: '',\n level: 'info',\n attention: 'low',\n throttleKey: 'stream-chunk',\n throttleMs: 2000,\n buildDetails: (length, snippet) => [\n length !== undefined ? `len=${length}` : '',\n snippet ? `preview=\"${normalizeSnippet(snippet)}\"` : ''\n ],\n },\n {\n key: 'stream_events_parsed',\n method: 'streamEventsParsed',\n label: '\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790\u5B8C\u6210',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790',\n status: '\u5B8C\u6210',\n level: 'info',\n attention: 'low',\n throttleKey: 'stream-events',\n throttleMs: 4000,\n buildDetails: (count) => [count !== undefined ? `count=${count}` : ''],\n },\n {\n key: 'stream_complete_event',\n method: 'streamCompleteEvent',\n label: '\u6D41\u5F0F\u5B8C\u6210\u4E8B\u4EF6\u6355\u83B7',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u4E8B\u4EF6',\n status: '\u5B8C\u6210\u4E8B\u4EF6\u5DF2\u6355\u83B7',\n level: 'success',\n attention: 'medium',\n },\n {\n key: 'stream_end',\n method: 'streamEnd',\n label: '\u6D41\u5F0F\u54CD\u5E94\u7ED3\u675F',\n group: '\u6D41\u5F0F',\n step: '\u6D41\u5F0F\u54CD\u5E94',\n status: '\u7ED3\u675F',\n level: 'info',\n attention: 'low',\n },\n {\n key: 'reference_expand_start',\n method: 'referenceExpandStart',\n label: '\u5F15\u7528\u5C55\u5F00\u5F00\u59CB',\n group: '\u5F15\u7528',\n step: '\u5F15\u7528\u5C55\u5F00',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ''],\n },\n {\n key: 'reference_expand_fail',\n method: 'referenceExpandFail',\n label: '\u5F15\u7528\u5C55\u5F00\u5931\u8D25',\n group: '\u5F15\u7528',\n step: '\u5F15\u7528\u5C55\u5F00',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'medium',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'screenshot_start',\n method: 'screenshotStart',\n label: '\u622A\u56FE\u5F00\u59CB',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n },\n {\n key: 'screenshot_success',\n method: 'screenshotSuccess',\n label: '\u622A\u56FE\u6210\u529F',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n },\n {\n key: 'screenshot_fail',\n method: 'screenshotFail',\n label: '\u622A\u56FE\u5931\u8D25',\n group: '\u622A\u56FE',\n step: '\u622A\u56FE',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'share_start',\n method: 'shareStart',\n label: '\u5206\u4EAB\u94FE\u63A5\u5F00\u59CB',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u5F00\u59CB',\n level: 'start',\n attention: 'low',\n },\n {\n key: 'share_progress',\n method: 'shareProgress',\n label: '\u5206\u4EAB\u94FE\u63A5\u6B65\u9AA4',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6B65\u9AA4',\n level: 'info',\n attention: 'low',\n buildDetails: (label) => [label ? `\u6B65\u9AA4=${label}` : ''],\n },\n {\n key: 'share_dom_hit',\n method: 'shareDomHit',\n label: '\u5206\u4EAB\u94FE\u63A5DOM\u547D\u4E2D',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: 'DOM\u547D\u4E2D',\n level: 'info',\n attention: 'low',\n buildDetails: (link, domSnapshot) => [\n link ? `\u94FE\u63A5=${link}` : '',\n domSnapshot ? `DOM=${normalizeSnippet(domSnapshot, 220)}` : ''\n ],\n },\n {\n key: 'share_source',\n method: 'shareSource',\n label: '\u5206\u4EAB\u94FE\u63A5\u6765\u6E90',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6765\u6E90',\n level: 'info',\n attention: 'low',\n buildDetails: (source, link, domSnapshot) => [\n source ? `\u6765\u6E90=${source}` : '',\n link ? `\u94FE\u63A5=${link}` : '',\n source === 'dom' && domSnapshot ? `DOM=${normalizeSnippet(domSnapshot, 220)}` : ''\n ],\n },\n {\n key: 'share_success',\n method: 'shareSuccess',\n label: '\u5206\u4EAB\u94FE\u63A5\u6210\u529F',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (link) => [link ? `\u94FE\u63A5=${link}` : ''],\n },\n {\n key: 'share_fail',\n method: 'shareFail',\n label: '\u5206\u4EAB\u94FE\u63A5\u5931\u8D25',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u5931\u8D25',\n level: 'warning',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'share_skip',\n method: 'shareSkip',\n label: '\u5206\u4EAB\u94FE\u63A5\u8DF3\u8FC7',\n group: '\u5206\u4EAB',\n step: '\u5206\u4EAB\u94FE\u63A5',\n status: '\u8DF3\u8FC7',\n level: 'warning',\n attention: 'medium',\n buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ''],\n },\n {\n key: 'ai_search_card_detect_attempt',\n method: 'aiSearchCardDetectAttempt',\n label: 'AI Search \u5361\u7247\u8BC6\u522B\u5C1D\u8BD5',\n group: 'AI Search',\n step: 'AI Search \u5361\u7247\u8BC6\u522B',\n status: '\u5C1D\u8BD5',\n level: 'info',\n attention: 'low',\n buildDetails: (attempt = 1, maxAttempts = 1, url = '') => [\n `attempt=${attempt}/${maxAttempts}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'ai_search_card_detect_success',\n method: 'aiSearchCardDetectSuccess',\n label: 'AI Search \u5361\u7247\u8BC6\u522B\u6210\u529F',\n group: 'AI Search',\n step: 'AI Search \u5361\u7247\u8BC6\u522B',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (cardType = '', attempts = 1, refreshCount = 0, url = '') => [\n cardType ? `cardType=${cardType}` : '',\n `attempts=${attempts}`,\n `refreshCount=${refreshCount}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'ai_search_card_empty_result_success',\n method: 'aiSearchCardEmptyResultSuccess',\n label: 'AI Search \u7A7A\u7ED3\u679C\u6210\u529F',\n group: 'AI Search',\n step: 'AI Search \u7A7A\u7ED3\u679C',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'high',\n buildDetails: (contentLeftTpls = [], targetTpls = [], url = '', attempts = 0, refreshCount = 0) => [\n Array.isArray(contentLeftTpls) ? `contentLeftTpls=${normalizeSnippet(contentLeftTpls.join(','), 200)}` : '',\n Array.isArray(targetTpls) ? `targetTpls=${normalizeSnippet(targetTpls.join(','), 200)}` : '',\n `attempts=${attempts}`,\n `refreshCount=${refreshCount}`,\n url ? `url=${url}` : '',\n ],\n },\n {\n key: 'data_push_success',\n method: 'dataPushSuccess',\n label: '\u6570\u636E\u63A8\u9001\u6210\u529F',\n group: '\u6570\u636E\u63A8\u9001',\n step: '\u6570\u636E\u63A8\u9001',\n status: '\u6210\u529F',\n level: 'success',\n attention: 'medium',\n buildDetails: (label) => [label ? `\u8BF4\u660E=${label}` : ''],\n },\n {\n key: 'data_push_fail',\n method: 'dataPushFail',\n label: '\u6570\u636E\u63A8\u9001\u5931\u8D25',\n group: '\u6570\u636E\u63A8\u9001',\n step: '\u6570\u636E\u63A8\u9001',\n status: '\u5931\u8D25',\n level: 'error',\n attention: 'high',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n {\n key: 'popup_detected',\n method: 'popupDetected',\n label: '\u5F39\u7A97\u68C0\u6D4B',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u68C0\u6D4B\u5230\u906E\u7F69',\n level: 'warning',\n attention: 'medium',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'popup_close_attempt',\n method: 'popupCloseAttempt',\n label: '\u5F39\u7A97\u5173\u95ED\u5C1D\u8BD5',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5C1D\u8BD5\u5173\u95ED',\n level: 'info',\n attention: 'low',\n buildDetails: (detail) => [detail ? `detail=${detail}` : ''],\n },\n {\n key: 'popup_close_success',\n method: 'popupCloseSuccess',\n label: '\u5F39\u7A97\u5173\u95ED\u5B8C\u6210',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5173\u95ED\u5B8C\u6210',\n level: 'success',\n attention: 'medium',\n },\n {\n key: 'popup_close_fail',\n method: 'popupCloseFail',\n label: '\u5F39\u7A97\u5173\u95ED\u5931\u8D25',\n group: '\u5F39\u7A97',\n step: '\u5F39\u7A97\u5904\u7406',\n status: '\u5173\u95ED\u5931\u8D25',\n level: 'warning',\n attention: 'medium',\n buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ''],\n },\n];\n\nexport const LOG_TEMPLATES = LOG_DEFINITIONS.map((definition) => {\n const attention = definition.attention || 'medium';\n const attentionRank = ATTENTION_RANK[attention] || ATTENTION_RANK.medium;\n const defaultSelected = attentionRank >= DEFAULT_ATTENTION_RANK;\n return {\n key: definition.key,\n label: definition.label,\n group: definition.group,\n attention,\n patterns: buildDefinitionPatterns(definition),\n defaultSelected,\n };\n});\n\nconst buildStepLine = (step, status, details = []) => {\n const parts = [];\n const decoratedStep = step ? decorateLabel(step, STEP_EMOJIS) : '';\n const base = decoratedStep ? `${STEP_PREFIX} ${decoratedStep}` : STEP_PREFIX;\n parts.push(base.trim());\n if (status) parts.push(decorateLabel(status, STATUS_EMOJIS));\n const detailParts = details.filter(Boolean);\n if (detailParts.length > 0) {\n parts.push(...detailParts);\n }\n return parts.join(STEP_SEPARATOR);\n};\n\nconst createThrottle = () => {\n const lastMap = new Map();\n return (key, intervalMs, fn) => {\n const now = Date.now();\n const last = lastMap.get(key) || 0;\n if (now - last >= intervalMs) {\n lastMap.set(key, now);\n fn();\n }\n };\n};\n\nexport const createTemplateLogger = (baseLogger = createBaseLogger()) => {\n const throttle = createThrottle();\n\n const info = (line) => baseLogger.info(line);\n const success = (line) => baseLogger.success(line);\n const warning = (line) => baseLogger.warning(line);\n const error = (line) => baseLogger.error(line);\n const debug = (line) => baseLogger.debug(line);\n const start = (line) => baseLogger.start(line);\n\n const stepInfo = (step, status, details = []) => info(buildStepLine(step, status, details));\n const stepSuccess = (step, status, details = []) => success(buildStepLine(step, status, details));\n const stepWarn = (step, status, details = []) => warning(buildStepLine(step, status, details));\n const stepError = (step, status, details = []) => error(buildStepLine(step, status, details));\n const stepStart = (step, status, details = []) => start(buildStepLine(step, status, details));\n\n const stepHandlers = {\n info: stepInfo,\n success: stepSuccess,\n warning: stepWarn,\n error: stepError,\n start: stepStart,\n };\n\n const logFromDefinition = (definition, details = []) => {\n const handler = stepHandlers[definition.level] || stepInfo;\n const payload = [...details, buildLogTag(definition.key)];\n const emit = () => handler(definition.step, definition.status, payload);\n if (definition.throttleMs) {\n throttle(definition.throttleKey || definition.key, definition.throttleMs, emit);\n return;\n }\n emit();\n };\n\n const definitionMethods = {};\n LOG_DEFINITIONS.forEach((definition) => {\n if (!definition.method) return;\n definitionMethods[definition.method] = (...args) => {\n const details = definition.buildDetails ? definition.buildDetails(...args) : [];\n logFromDefinition(definition, details);\n };\n });\n\n return {\n step: (step, status, details, level = 'info') => {\n if (level === 'error') return stepError(step, status, details);\n if (level === 'warn' || level === 'warning') return stepWarn(step, status, details);\n if (level === 'start') return stepStart(step, status, details);\n if (level === 'success') return stepSuccess(step, status, details);\n return stepInfo(step, status, details);\n },\n info: (message) => info(message),\n success: (message) => success(message),\n warning: (message) => warning(message),\n warn: (message) => warning(message),\n error: (message) => error(message),\n debug: (message) => debug(message),\n start: (message) => start(message),\n ...definitionMethods,\n };\n};\n\nconst getDefaultBaseLogger = () => createBaseLogger('');\n\nexport const Logger = {\n setLogger: (logger) => setDefaultLogger(logger),\n info: (message) => getDefaultBaseLogger().info(message),\n success: (message) => getDefaultBaseLogger().success(message),\n warning: (message) => getDefaultBaseLogger().warning(message),\n warn: (message) => getDefaultBaseLogger().warning(message),\n error: (message) => getDefaultBaseLogger().error(message),\n debug: (message) => getDefaultBaseLogger().debug(message),\n start: (message) => getDefaultBaseLogger().start(message),\n useTemplate: (logger) => {\n if (logger) return createTemplateLogger(createBaseLogger('', logger));\n return createTemplateLogger();\n },\n};\n", "export const Display = {\n parseTokenDisplayName(value) {\n if (!value) {\n return { owner: '', accountType: '', note: '' };\n }\n const parts = String(value).split(':');\n const owner = (parts[0] || '').trim();\n const accountType = (parts[1] || '').trim();\n const note = parts.length > 2 ? parts.slice(2).join(':').trim() : '';\n return { owner, accountType, note };\n },\n\n parseAccountDisplayName(value) {\n if (!value) {\n return { account: '', owner: '', accountType: '', note: '' };\n }\n const parts = String(value).split(':');\n const account = (parts[0] || '').trim();\n const owner = (parts[1] || '').trim();\n const accountType = (parts[2] || '').trim();\n const note = parts.length > 3 ? parts.slice(3).join(':').trim() : '';\n return { account, owner, accountType, note };\n },\n\n buildTokenDisplayName({ owner, accountType, note } = {}) {\n const trimmedOwner = owner?.trim() || '';\n const trimmedType = accountType?.trim() || '';\n const trimmedNote = note?.trim() || '';\n const parts = [trimmedOwner, trimmedType];\n if (trimmedNote) {\n parts.push(trimmedNote);\n }\n return parts.filter(Boolean).join(':');\n },\n\n shortId(value, max = 8) {\n const clean = String(value || '').trim();\n if (!clean) return '';\n if (clean.length <= max) return clean;\n return clean.slice(0, max);\n },\n\n resolveTokenIdentity(displayName, tokenId) {\n const cleanName = String(displayName || '').trim();\n const cleanId = String(tokenId || '').trim();\n const short = this.shortId(cleanId, 8);\n const hasName = cleanName !== '' && cleanName !== cleanId;\n const primary = hasName ? cleanName : (short || '-');\n const secondary = hasName && short ? short : '';\n return { primary, secondary, fullId: cleanId, shortId: short };\n },\n\n resolveAccountIdentity(displayName, accountId) {\n const parts = this.parseAccountDisplayName(displayName);\n const cleanId = String(accountId || '').trim();\n const short = this.shortId(cleanId, 8);\n const hasName = parts.account !== '' && parts.account !== cleanId;\n const primary = hasName ? parts.account : (short || '-');\n const secondary = hasName && short ? short : '';\n return { primary, secondary, parts, fullId: cleanId, shortId: short };\n },\n};\n", "export const Code = {\n Success: 0,\n UnknownError: -1,\n NotLogin: 30000001,\n Chaptcha: 30000002,\n Timeout: 30000003,\n InitialTimeout: 30000004,\n OverallTimeout: 30000005,\n}\n\nexport const Status = {\n Success: 'SUCCESS',\n Failed: 'FAILED'\n}\n\nexport const PresetOfLiveViewKey = 'LIVE_VIEW_SCREENSHOT';\n\n\nconst createActorInfo = (info) => {\n const normalizeDomain = (value) => {\n if (!value) return '';\n return String(value).trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');\n };\n\n const normalizePath = (value) => {\n if (!value) return '/';\n const raw = String(value).trim();\n if (!raw) return '/';\n return raw.startsWith('/') ? raw : `/${raw}`;\n };\n\n const normalizeShare = (value) => {\n const raw = value && typeof value === 'object' ? value : {};\n\n const modeRaw = String(raw.mode || 'dom').trim().toLowerCase();\n const mode = modeRaw === 'response' ? 'response' : 'dom';\n\n const prefix = String(raw.prefix || '').trim();\n\n const rawXurl = Array.isArray(raw.xurl)\n ? raw.xurl\n : [];\n\n const normalizeMatcherList = (input) => {\n if (Array.isArray(input)) {\n return input\n .map((item) => String(item || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n }\n\n const single = String(input || '').trim().replace(/\\.+$/, '');\n return single ? [single] : [];\n };\n\n const normalizeSegments = (input) => {\n if (Array.isArray(input)) {\n return input\n .map((item) => String(item || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n }\n\n const rawPath = String(input || '').trim();\n if (!rawPath) return [];\n\n return rawPath\n .split('.')\n .map((segment) => String(segment || '').trim().replace(/\\.+$/, ''))\n .filter(Boolean);\n };\n\n const xurl = [];\n\n const matcherList = normalizeMatcherList(rawXurl[0]);\n if (matcherList.length > 0) {\n xurl.push(matcherList);\n }\n\n const flatPath = [];\n const extraPaths = [];\n\n rawXurl.slice(1).forEach((item) => {\n if (Array.isArray(item)) {\n const segments = normalizeSegments(item);\n if (segments.length > 0) {\n extraPaths.push(segments);\n }\n return;\n }\n\n const segments = normalizeSegments(item);\n if (segments.length > 0) {\n flatPath.push(...segments);\n }\n });\n\n if (flatPath.length > 0) {\n xurl.push(flatPath);\n }\n\n if (extraPaths.length > 0) {\n xurl.push(...extraPaths);\n }\n\n return {\n mode,\n prefix,\n xurl,\n };\n };\n\n const buildLandingUrl = ({ protocol, domain, path }) => {\n const safeProtocol = String(protocol).trim();\n const safeDomain = normalizeDomain(domain);\n const safePath = normalizePath(path);\n return `${safeProtocol}://${safeDomain}${safePath}`;\n };\n\n const buildIcon = ({ key }) => {\n return `https://heartbitai.com/general/actors/${key}.png`;\n }\n\n\n const protocol = info.protocol || 'https';\n const domain = normalizeDomain(info.domain);\n const path = normalizePath(info.path);\n const share = normalizeShare(info.share);\n\n return {\n ...info,\n protocol,\n domain,\n path,\n share,\n get icon() {\n if (info.icon) return info.icon;\n return buildIcon(this);\n },\n get landingUrl() {\n return buildLandingUrl(this);\n },\n };\n};\n\nexport const ActorInfo = {\n qbot: createActorInfo({\n key: 'qbot',\n name: '\u641C\u72D7QBot',\n domain: 'm.sogou.com',\n path: '/web/searchList.jsp',\n share: {\n mode: 'dom',\n prefix: '',\n xurl: [],\n },\n }),\n douyin: createActorInfo({\n key: 'douyin',\n name: '\u6296\u97F3AI\u641C',\n domain: 'www.douyin.com',\n path: '/search',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aweme/v1/web/web_shorten',\n 'data',\n ],\n },\n }),\n doubao: createActorInfo({\n key: 'doubao',\n name: '\u8C46\u5305',\n domain: 'www.doubao.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://www.doubao.com/thread/',\n xurl: [\n '/samantha/thread/share/save',\n 'data', 'share_id',\n ],\n },\n }),\n deepseek: createActorInfo({\n key: 'deepseek',\n name: 'DeepSeek',\n domain: 'chat.deepseek.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://chat.deepseek.com/share/',\n xurl: [\n '/api/v0/share/create',\n 'data', 'biz_data', 'share_id',\n ],\n },\n }),\n erine: createActorInfo({\n key: 'erine',\n name: '\u6587\u5FC3\u4E00\u8A00',\n domain: 'yiyan.baidu.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://yiyan.baidu.com/share/',\n xurl: [\n '/eb/share/key/gen',\n 'data', 'key',\n ],\n },\n }),\n wenxin: createActorInfo({\n key: 'wenxin',\n name: '\u6587\u5FC3\u52A9\u624B',\n domain: 'chat.baidu.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aichat/api/shortURL',\n 'data', 'short_url',\n ],\n },\n }),\n baidu: createActorInfo({\n key: 'baidu',\n name: '\u767E\u5EA6AI\u641C',\n domain: 'www.baidu.com',\n path: '/s',\n share: {\n mode: 'response',\n prefix: '',\n xurl: [\n '/aichat/api/shortURL',\n 'data', 'short_url',\n ],\n },\n }),\n yuanbao: createActorInfo({\n key: 'yuanbao',\n name: '\u5143\u5B9D',\n domain: 'yuanbao.tencent.com',\n path: '/chat/',\n share: {\n mode: 'response',\n prefix: 'https://yb.tencent.com/s/',\n xurl: [\n '/api/conversations/v2/share', 'shareId',\n ],\n },\n }),\n kimi: createActorInfo({\n key: 'kimi',\n name: 'Kimi',\n domain: 'www.kimi.com',\n path: '/',\n share: {\n mode: 'response',\n prefix: 'https://www.kimi.com/share/',\n xurl: [\n '/kimi.gateway.chat.v1.ChatService/CreateChatShare', 'share', 'id'\n ],\n },\n }),\n qwen: createActorInfo({\n key: 'qwen',\n name: '\u901A\u4E49\u5343\u95EE',\n domain: 'www.qianwen.com',\n path: '/chat',\n share: {\n mode: 'response',\n prefix: 'https://www.qianwen.com/share/chat/',\n xurl: [\n '/api/v1/share/create', 'data', 'share_id'\n ],\n },\n }),\n}\n", "import { Logger, LOG_TEMPLATES, stripAnsi } from '../src/logger.js';\nimport { Display } from '../src/display.js';\nimport * as Constants from '../src/constants.js';\n\nexport const usePlaywrightToolKit = () => {\n return {\n Logger,\n Display,\n Constants,\n $Internals: {\n LOG_TEMPLATES,\n stripAnsi,\n },\n };\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["segments", "protocol", "domain", "path"]
7
7
  }
package/dist/index.cjs CHANGED
@@ -162,7 +162,7 @@ var ActorInfo = {
162
162
  }),
163
163
  douyin: createActorInfo({
164
164
  key: "douyin",
165
- name: "\u6296\u97F3\u641C\u7D22",
165
+ name: "\u6296\u97F3AI\u641C",
166
166
  domain: "www.douyin.com",
167
167
  path: "/search",
168
168
  share: {
@@ -1297,19 +1297,26 @@ var Humanize = {
1297
1297
  };
1298
1298
 
1299
1299
  // src/launch.js
1300
+ var import_picomatch = __toESM(require("picomatch"), 1);
1300
1301
  var logger6 = createInternalLogger("Launch");
1302
+ var buildByPassDomainRule = (rawPattern) => {
1303
+ const pattern = String(rawPattern || "").trim().toLowerCase();
1304
+ if (!pattern) return null;
1305
+ let matcher;
1306
+ try {
1307
+ matcher = (0, import_picomatch.default)(pattern, { nocase: true });
1308
+ } catch {
1309
+ return null;
1310
+ }
1311
+ return {
1312
+ pattern,
1313
+ test: (hostname) => matcher(String(hostname || "").toLowerCase())
1314
+ };
1315
+ };
1301
1316
  var normalizeByPassDomains = (domains) => {
1302
1317
  if (!Array.isArray(domains)) return [];
1303
1318
  return domains.map((item) => String(item || "").trim()).filter(Boolean);
1304
1319
  };
1305
- var compileByPassMatcher = (patternRaw) => {
1306
- const pattern = String(patternRaw || "").trim().toLowerCase();
1307
- if (!pattern) return null;
1308
- if (!pattern.includes("*")) return { pattern, test: (hostname) => hostname === pattern };
1309
- const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
1310
- const regex = new RegExp(`^${escaped}$`);
1311
- return { pattern, test: (hostname) => regex.test(hostname) };
1312
- };
1313
1320
  var resolveProxyLaunchOptions = (proxyConfiguration = {}) => {
1314
1321
  const config = proxyConfiguration && typeof proxyConfiguration === "object" && !Array.isArray(proxyConfiguration) ? proxyConfiguration : {};
1315
1322
  const proxyUrl = String(config.proxy_url || "").trim();
@@ -1368,11 +1375,13 @@ var Launch = {
1368
1375
  );
1369
1376
  }
1370
1377
  const onPageCreated = (page) => {
1378
+ const recommendedGotoOptions = {
1379
+ waitUntil: "domcontentloaded"
1380
+ };
1371
1381
  if (!enableByPassLogger || byPassDomains.length === 0 || !page || typeof page.on !== "function") {
1372
- return () => {
1373
- };
1382
+ return recommendedGotoOptions;
1374
1383
  }
1375
- const matchers = byPassDomains.map((pattern) => compileByPassMatcher(pattern)).filter(Boolean);
1384
+ const byPassRules = byPassDomains.map((domain) => buildByPassDomainRule(domain)).filter(Boolean);
1376
1385
  const requestHandler = (req) => {
1377
1386
  const requestUrl = req.url();
1378
1387
  let hostname = "";
@@ -1381,12 +1390,12 @@ var Launch = {
1381
1390
  } catch {
1382
1391
  return;
1383
1392
  }
1384
- const matched = matchers.find((item) => item.test(hostname));
1385
- if (!matched) return;
1386
- logger6.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matched.pattern} \u57DF\u540D=${hostname} \u8D44\u6E90\u7C7B\u578B=${req.resourceType()} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
1393
+ const matchedRule = byPassRules.find((rule) => rule.test(hostname));
1394
+ if (!matchedRule) return;
1395
+ logger6.info(`[\u76F4\u8FDE\u547D\u4E2D] \u89C4\u5219=${matchedRule.pattern} \u57DF\u540D=${hostname} \u8D44\u6E90\u7C7B\u578B=${req.resourceType()} \u65B9\u6CD5=${req.method()} \u5730\u5740=${requestUrl}`);
1387
1396
  };
1388
1397
  page.on("request", requestHandler);
1389
- return () => page.off("request", requestHandler);
1398
+ return recommendedGotoOptions;
1390
1399
  };
1391
1400
  return { launchOptions, onPageCreated };
1392
1401
  },