@midscene/core 0.26.7-beta-20250821033353.0 → 0.26.7-beta-20250821041506.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/ai-model/common.mjs +79 -13
- package/dist/es/ai-model/common.mjs.map +1 -1
- package/dist/es/ai-model/index.mjs +2 -2
- package/dist/es/ai-model/inspect.mjs.map +1 -1
- package/dist/es/ai-model/llm-planning.mjs +0 -1
- package/dist/es/ai-model/llm-planning.mjs.map +1 -1
- package/dist/es/ai-model/prompt/llm-planning.mjs +43 -21
- package/dist/es/ai-model/prompt/llm-planning.mjs.map +1 -1
- package/dist/es/index.mjs +2 -2
- package/dist/es/index.mjs.map +1 -1
- package/dist/es/insight/index.mjs +61 -3
- package/dist/es/insight/index.mjs.map +1 -1
- package/dist/es/types.mjs.map +1 -1
- package/dist/es/utils.mjs +2 -2
- package/dist/es/utils.mjs.map +1 -1
- package/dist/lib/ai-model/common.js +97 -19
- package/dist/lib/ai-model/common.js.map +1 -1
- package/dist/lib/ai-model/index.js +22 -10
- package/dist/lib/ai-model/inspect.js.map +1 -1
- package/dist/lib/ai-model/llm-planning.js +0 -1
- package/dist/lib/ai-model/llm-planning.js.map +1 -1
- package/dist/lib/ai-model/prompt/llm-planning.js +43 -21
- package/dist/lib/ai-model/prompt/llm-planning.js.map +1 -1
- package/dist/lib/index.js +14 -8
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/insight/index.js +58 -0
- package/dist/lib/insight/index.js.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/utils.js +2 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/ai-model/common.d.ts +363 -7
- package/dist/types/ai-model/index.d.ts +1 -1
- package/dist/types/ai-model/inspect.d.ts +2 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/insight/index.d.ts +5 -1
- package/dist/types/types.d.ts +2 -26
- package/dist/types/yaml.d.ts +4 -2
- package/package.json +3 -3
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["webpack://@midscene/core/webpack/runtime/define_property_getters","webpack://@midscene/core/webpack/runtime/has_own_property","webpack://@midscene/core/webpack/runtime/make_namespace_object","webpack://@midscene/core/./src/utils.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { execSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport * as path from 'node:path';\nimport {\n defaultRunDirName,\n getMidsceneRunSubDir,\n} from '@midscene/shared/common';\nimport {\n MIDSCENE_DEBUG_MODE,\n getUploadTestServerUrl,\n} from '@midscene/shared/env';\nimport { getRunningPkgInfo } from '@midscene/shared/node';\nimport { assert, logMsg } from '@midscene/shared/utils';\nimport {\n escapeScriptTag,\n ifInBrowser,\n ifInWorker,\n uuid,\n} from '@midscene/shared/utils';\nimport type { Rect, ReportDumpWithAttributes } from './types';\n\nlet logEnvReady = false;\n\nexport const groupedActionDumpFileExt = 'web-dump.json';\n\nconst reportInitializedMap = new Map<string, boolean>();\n\ndeclare const __DEV_REPORT_PATH__: string;\n\nfunction getReportTpl() {\n if (__DEV_REPORT_PATH__) {\n return fs.readFileSync(__DEV_REPORT_PATH__, 'utf-8');\n }\n const reportTpl = 'REPLACE_ME_WITH_REPORT_HTML';\n\n return reportTpl;\n}\n\n/**\n * high performance, insert script before </html> in HTML file\n * only truncate and append, no temporary file\n */\nexport function insertScriptBeforeClosingHtml(\n filePath: string,\n scriptContent: string,\n): void {\n const htmlEndTag = '</html>';\n const stat = fs.statSync(filePath);\n\n const readSize = Math.min(stat.size, 4096);\n const start = Math.max(0, stat.size - readSize);\n const buffer = Buffer.alloc(stat.size - start);\n const fd = fs.openSync(filePath, 'r');\n fs.readSync(fd, buffer, 0, buffer.length, start);\n fs.closeSync(fd);\n\n const tailStr = buffer.toString('utf8');\n const htmlEndIdx = tailStr.lastIndexOf(htmlEndTag);\n if (htmlEndIdx === -1) {\n throw new Error(`No </html> found in file:${filePath}`);\n }\n\n // calculate the correct byte position: char position to byte position\n const beforeHtmlInTail = tailStr.slice(0, htmlEndIdx);\n const htmlEndPos = start + Buffer.byteLength(beforeHtmlInTail, 'utf8');\n\n // truncate to </html> before\n fs.truncateSync(filePath, htmlEndPos);\n // append script and </html>\n fs.appendFileSync(filePath, `${scriptContent}\\n${htmlEndTag}\\n`);\n}\n\nexport function reportHTMLContent(\n dumpData: string | ReportDumpWithAttributes,\n reportPath?: string,\n appendReport?: boolean,\n): string {\n const tpl = getReportTpl();\n\n if (!tpl) {\n console.warn('reportTpl is not set, will not write report');\n return '';\n }\n\n // if reportPath is set, it means we are in write to file mode\n const writeToFile = reportPath && !ifInBrowser;\n let dumpContent = '';\n\n if (typeof dumpData === 'string') {\n // do not use template string here, will cause bundle error\n dumpContent =\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\" type=\"application/json\">\\n' +\n escapeScriptTag(dumpData) +\n '\\n</script>';\n } else {\n const { dumpString, attributes } = dumpData;\n const attributesArr = Object.keys(attributes || {}).map((key) => {\n return `${key}=\"${encodeURIComponent(attributes![key])}\"`;\n });\n\n dumpContent =\n // do not use template string here, will cause bundle error\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\" type=\"application/json\" ' +\n attributesArr.join(' ') +\n '>\\n' +\n escapeScriptTag(dumpString) +\n '\\n</script>';\n }\n\n if (writeToFile) {\n if (!appendReport) {\n writeFileSync(reportPath!, tpl + dumpContent, { flag: 'w' });\n return reportPath!;\n }\n\n if (!reportInitializedMap.get(reportPath!)) {\n writeFileSync(reportPath!, tpl, { flag: 'w' });\n reportInitializedMap.set(reportPath!, true);\n }\n\n insertScriptBeforeClosingHtml(reportPath!, dumpContent);\n return reportPath!;\n }\n\n return tpl + dumpContent;\n}\n\nexport function writeDumpReport(\n fileName: string,\n dumpData: string | ReportDumpWithAttributes,\n appendReport?: boolean,\n): string | null {\n if (ifInBrowser || ifInWorker) {\n console.log('will not write report in browser');\n return null;\n }\n\n const reportPath = path.join(\n getMidsceneRunSubDir('report'),\n `${fileName}.html`,\n );\n\n reportHTMLContent(dumpData, reportPath, appendReport);\n\n if (process.env.MIDSCENE_DEBUG_LOG_JSON) {\n const jsonPath = `${reportPath}.json`;\n let data;\n\n if (typeof dumpData === 'string') {\n data = JSON.parse(dumpData) as ReportDumpWithAttributes;\n } else {\n data = dumpData;\n }\n\n writeFileSync(jsonPath, JSON.stringify(data, null, 2), {\n flag: appendReport ? 'a' : 'w',\n });\n\n logMsg(`Midscene - dump file written: ${jsonPath}`);\n }\n\n return reportPath;\n}\n\nexport function writeLogFile(opts: {\n fileName: string;\n fileExt: string;\n fileContent: string;\n type: 'dump' | 'cache' | 'report' | 'tmp';\n generateReport?: boolean;\n appendReport?: boolean;\n}) {\n if (ifInBrowser || ifInWorker) {\n return '/mock/report.html';\n }\n const { fileName, fileExt, fileContent, type = 'dump' } = opts;\n const targetDir = getMidsceneRunSubDir(type);\n // Ensure directory exists\n if (!logEnvReady) {\n assert(targetDir, 'logDir should be set before writing dump file');\n\n // gitIgnore in the parent directory\n const gitIgnorePath = path.join(targetDir, '../../.gitignore');\n const gitPath = path.join(targetDir, '../../.git');\n let gitIgnoreContent = '';\n\n if (existsSync(gitPath)) {\n // if the git path exists, we need to add the log folder to the git ignore file\n if (existsSync(gitIgnorePath)) {\n gitIgnoreContent = readFileSync(gitIgnorePath, 'utf-8');\n }\n\n // ignore the log folder\n if (!gitIgnoreContent.includes(`${defaultRunDirName}/`)) {\n writeFileSync(\n gitIgnorePath,\n `${gitIgnoreContent}\\n# Midscene.js dump files\\n${defaultRunDirName}/dump\\n${defaultRunDirName}/report\\n${defaultRunDirName}/tmp\\n${defaultRunDirName}/log\\n`,\n 'utf-8',\n );\n }\n }\n\n logEnvReady = true;\n }\n\n const filePath = path.join(targetDir, `${fileName}.${fileExt}`);\n\n if (type !== 'dump') {\n // do not write dump file any more\n writeFileSync(filePath, fileContent);\n }\n\n if (opts?.generateReport) {\n return writeDumpReport(fileName, fileContent, opts.appendReport);\n }\n\n return filePath;\n}\n\nexport function getTmpDir(): string | null {\n try {\n const runningPkgInfo = getRunningPkgInfo();\n if (!runningPkgInfo) {\n return null;\n }\n const { name } = runningPkgInfo;\n const tmpPath = path.join(tmpdir(), name);\n mkdirSync(tmpPath, { recursive: true });\n return tmpPath;\n } catch (e) {\n return null;\n }\n}\n\nexport function getTmpFile(fileExtWithoutDot: string): string | null {\n if (ifInBrowser || ifInWorker) {\n return null;\n }\n const tmpDir = getTmpDir();\n const filename = `${uuid()}.${fileExtWithoutDot}`;\n return path.join(tmpDir!, filename);\n}\n\nexport function overlapped(container: Rect, target: Rect) {\n // container and the target have some part overlapped\n return (\n container.left < target.left + target.width &&\n container.left + container.width > target.left &&\n container.top < target.top + target.height &&\n container.top + container.height > target.top\n );\n}\n\nexport async function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replacerForPageObject(key: string, value: any) {\n if (value && value.constructor?.name === 'Page') {\n return '[Page object]';\n }\n if (value && value.constructor?.name === 'Browser') {\n return '[Browser object]';\n }\n return value;\n}\n\nexport function stringifyDumpData(data: any, indents?: number) {\n return JSON.stringify(data, replacerForPageObject, indents);\n}\n\ndeclare const __VERSION__: string;\n\nexport function getVersion() {\n return __VERSION__;\n}\n\nfunction debugLog(...message: any[]) {\n // always read from process.env, and cannot be override by modelConfig, overrideAIConfig, etc.\n const debugMode = process.env[MIDSCENE_DEBUG_MODE];\n if (debugMode) {\n console.log('[Midscene]', ...message);\n }\n}\n\nlet lastReportedRepoUrl = '';\nexport function uploadTestInfoToServer({ testUrl }: { testUrl: string }) {\n let repoUrl = '';\n let userEmail = '';\n\n const serverUrl = getUploadTestServerUrl();\n\n try {\n repoUrl = execSync('git config --get remote.origin.url').toString().trim();\n userEmail = execSync('git config --get user.email').toString().trim();\n } catch (error) {\n debugLog('Failed to get git info:', error);\n }\n\n // Only upload test info if:\n // 1. Server URL is configured AND\n // 2. Either:\n // - We have a repo URL that's different from last reported one (to avoid duplicate reports)\n // - OR we don't have a repo URL but have a test URL (for non-git environments)\n if (\n serverUrl &&\n ((repoUrl && repoUrl !== lastReportedRepoUrl) || (!repoUrl && testUrl))\n ) {\n debugLog('Uploading test info to server', {\n serverUrl,\n repoUrl,\n testUrl,\n userEmail,\n });\n\n fetch(serverUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n repo_url: repoUrl,\n test_url: testUrl,\n user_email: userEmail,\n }),\n })\n .then((response) => response.json())\n .then((data) => {\n debugLog('Successfully uploaded test info to server:', data);\n })\n .catch((error) =>\n debugLog('Failed to upload test info to server:', error),\n );\n lastReportedRepoUrl = repoUrl;\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","logEnvReady","groupedActionDumpFileExt","reportInitializedMap","Map","getReportTpl","reportTpl","insertScriptBeforeClosingHtml","filePath","scriptContent","htmlEndTag","stat","fs","readSize","Math","start","buffer","Buffer","fd","tailStr","htmlEndIdx","Error","beforeHtmlInTail","htmlEndPos","reportHTMLContent","dumpData","reportPath","appendReport","tpl","console","writeToFile","ifInBrowser","dumpContent","escapeScriptTag","dumpString","attributes","attributesArr","encodeURIComponent","writeFileSync","writeDumpReport","fileName","ifInWorker","path","getMidsceneRunSubDir","process","jsonPath","data","JSON","logMsg","writeLogFile","opts","fileExt","fileContent","type","targetDir","assert","gitIgnorePath","gitPath","gitIgnoreContent","existsSync","readFileSync","defaultRunDirName","getTmpDir","runningPkgInfo","getRunningPkgInfo","name","tmpPath","tmpdir","mkdirSync","e","getTmpFile","fileExtWithoutDot","tmpDir","filename","uuid","overlapped","container","target","sleep","ms","Promise","resolve","setTimeout","replacerForPageObject","value","_value_constructor","_value_constructor1","stringifyDumpData","indents","getVersion","__VERSION__","debugLog","message","debugMode","MIDSCENE_DEBUG_MODE","lastReportedRepoUrl","uploadTestInfoToServer","testUrl","repoUrl","userEmail","serverUrl","getUploadTestServerUrl","execSync","error","fetch","response"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["webpack://@midscene/core/webpack/runtime/define_property_getters","webpack://@midscene/core/webpack/runtime/has_own_property","webpack://@midscene/core/webpack/runtime/make_namespace_object","webpack://@midscene/core/./src/utils.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { execSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport * as path from 'node:path';\nimport {\n defaultRunDirName,\n getMidsceneRunSubDir,\n} from '@midscene/shared/common';\nimport {\n MIDSCENE_DEBUG_MODE,\n getUploadTestServerUrl,\n} from '@midscene/shared/env';\nimport { getRunningPkgInfo } from '@midscene/shared/node';\nimport { assert, logMsg } from '@midscene/shared/utils';\nimport {\n escapeScriptTag,\n ifInBrowser,\n ifInWorker,\n uuid,\n} from '@midscene/shared/utils';\nimport type { Rect, ReportDumpWithAttributes } from './types';\n\nlet logEnvReady = false;\n\nexport const groupedActionDumpFileExt = 'web-dump.json';\n\nconst reportInitializedMap = new Map<string, boolean>();\n\ndeclare const __DEV_REPORT_PATH__: string;\n\nfunction getReportTpl() {\n if (typeof __DEV_REPORT_PATH__ === 'string' && __DEV_REPORT_PATH__) {\n return fs.readFileSync(__DEV_REPORT_PATH__, 'utf-8');\n }\n const reportTpl = 'REPLACE_ME_WITH_REPORT_HTML';\n\n return reportTpl;\n}\n\n/**\n * high performance, insert script before </html> in HTML file\n * only truncate and append, no temporary file\n */\nexport function insertScriptBeforeClosingHtml(\n filePath: string,\n scriptContent: string,\n): void {\n const htmlEndTag = '</html>';\n const stat = fs.statSync(filePath);\n\n const readSize = Math.min(stat.size, 4096);\n const start = Math.max(0, stat.size - readSize);\n const buffer = Buffer.alloc(stat.size - start);\n const fd = fs.openSync(filePath, 'r');\n fs.readSync(fd, buffer, 0, buffer.length, start);\n fs.closeSync(fd);\n\n const tailStr = buffer.toString('utf8');\n const htmlEndIdx = tailStr.lastIndexOf(htmlEndTag);\n if (htmlEndIdx === -1) {\n throw new Error(`No </html> found in file:${filePath}`);\n }\n\n // calculate the correct byte position: char position to byte position\n const beforeHtmlInTail = tailStr.slice(0, htmlEndIdx);\n const htmlEndPos = start + Buffer.byteLength(beforeHtmlInTail, 'utf8');\n\n // truncate to </html> before\n fs.truncateSync(filePath, htmlEndPos);\n // append script and </html>\n fs.appendFileSync(filePath, `${scriptContent}\\n${htmlEndTag}\\n`);\n}\n\nexport function reportHTMLContent(\n dumpData: string | ReportDumpWithAttributes,\n reportPath?: string,\n appendReport?: boolean,\n): string {\n const tpl = getReportTpl();\n\n if (!tpl) {\n console.warn('reportTpl is not set, will not write report');\n return '';\n }\n\n // if reportPath is set, it means we are in write to file mode\n const writeToFile = reportPath && !ifInBrowser;\n let dumpContent = '';\n\n if (typeof dumpData === 'string') {\n // do not use template string here, will cause bundle error\n dumpContent =\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\" type=\"application/json\">\\n' +\n escapeScriptTag(dumpData) +\n '\\n</script>';\n } else {\n const { dumpString, attributes } = dumpData;\n const attributesArr = Object.keys(attributes || {}).map((key) => {\n return `${key}=\"${encodeURIComponent(attributes![key])}\"`;\n });\n\n dumpContent =\n // do not use template string here, will cause bundle error\n // biome-ignore lint/style/useTemplate: <explanation>\n '<script type=\"midscene_web_dump\" type=\"application/json\" ' +\n attributesArr.join(' ') +\n '>\\n' +\n escapeScriptTag(dumpString) +\n '\\n</script>';\n }\n\n if (writeToFile) {\n if (!appendReport) {\n writeFileSync(reportPath!, tpl + dumpContent, { flag: 'w' });\n return reportPath!;\n }\n\n if (!reportInitializedMap.get(reportPath!)) {\n writeFileSync(reportPath!, tpl, { flag: 'w' });\n reportInitializedMap.set(reportPath!, true);\n }\n\n insertScriptBeforeClosingHtml(reportPath!, dumpContent);\n return reportPath!;\n }\n\n return tpl + dumpContent;\n}\n\nexport function writeDumpReport(\n fileName: string,\n dumpData: string | ReportDumpWithAttributes,\n appendReport?: boolean,\n): string | null {\n if (ifInBrowser || ifInWorker) {\n console.log('will not write report in browser');\n return null;\n }\n\n const reportPath = path.join(\n getMidsceneRunSubDir('report'),\n `${fileName}.html`,\n );\n\n reportHTMLContent(dumpData, reportPath, appendReport);\n\n if (process.env.MIDSCENE_DEBUG_LOG_JSON) {\n const jsonPath = `${reportPath}.json`;\n let data;\n\n if (typeof dumpData === 'string') {\n data = JSON.parse(dumpData) as ReportDumpWithAttributes;\n } else {\n data = dumpData;\n }\n\n writeFileSync(jsonPath, JSON.stringify(data, null, 2), {\n flag: appendReport ? 'a' : 'w',\n });\n\n logMsg(`Midscene - dump file written: ${jsonPath}`);\n }\n\n return reportPath;\n}\n\nexport function writeLogFile(opts: {\n fileName: string;\n fileExt: string;\n fileContent: string;\n type: 'dump' | 'cache' | 'report' | 'tmp';\n generateReport?: boolean;\n appendReport?: boolean;\n}) {\n if (ifInBrowser || ifInWorker) {\n return '/mock/report.html';\n }\n const { fileName, fileExt, fileContent, type = 'dump' } = opts;\n const targetDir = getMidsceneRunSubDir(type);\n // Ensure directory exists\n if (!logEnvReady) {\n assert(targetDir, 'logDir should be set before writing dump file');\n\n // gitIgnore in the parent directory\n const gitIgnorePath = path.join(targetDir, '../../.gitignore');\n const gitPath = path.join(targetDir, '../../.git');\n let gitIgnoreContent = '';\n\n if (existsSync(gitPath)) {\n // if the git path exists, we need to add the log folder to the git ignore file\n if (existsSync(gitIgnorePath)) {\n gitIgnoreContent = readFileSync(gitIgnorePath, 'utf-8');\n }\n\n // ignore the log folder\n if (!gitIgnoreContent.includes(`${defaultRunDirName}/`)) {\n writeFileSync(\n gitIgnorePath,\n `${gitIgnoreContent}\\n# Midscene.js dump files\\n${defaultRunDirName}/dump\\n${defaultRunDirName}/report\\n${defaultRunDirName}/tmp\\n${defaultRunDirName}/log\\n`,\n 'utf-8',\n );\n }\n }\n\n logEnvReady = true;\n }\n\n const filePath = path.join(targetDir, `${fileName}.${fileExt}`);\n\n if (type !== 'dump') {\n // do not write dump file any more\n writeFileSync(filePath, fileContent);\n }\n\n if (opts?.generateReport) {\n return writeDumpReport(fileName, fileContent, opts.appendReport);\n }\n\n return filePath;\n}\n\nexport function getTmpDir(): string | null {\n try {\n const runningPkgInfo = getRunningPkgInfo();\n if (!runningPkgInfo) {\n return null;\n }\n const { name } = runningPkgInfo;\n const tmpPath = path.join(tmpdir(), name);\n mkdirSync(tmpPath, { recursive: true });\n return tmpPath;\n } catch (e) {\n return null;\n }\n}\n\nexport function getTmpFile(fileExtWithoutDot: string): string | null {\n if (ifInBrowser || ifInWorker) {\n return null;\n }\n const tmpDir = getTmpDir();\n const filename = `${uuid()}.${fileExtWithoutDot}`;\n return path.join(tmpDir!, filename);\n}\n\nexport function overlapped(container: Rect, target: Rect) {\n // container and the target have some part overlapped\n return (\n container.left < target.left + target.width &&\n container.left + container.width > target.left &&\n container.top < target.top + target.height &&\n container.top + container.height > target.top\n );\n}\n\nexport async function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replacerForPageObject(key: string, value: any) {\n if (value && value.constructor?.name === 'Page') {\n return '[Page object]';\n }\n if (value && value.constructor?.name === 'Browser') {\n return '[Browser object]';\n }\n return value;\n}\n\nexport function stringifyDumpData(data: any, indents?: number) {\n return JSON.stringify(data, replacerForPageObject, indents);\n}\n\ndeclare const __VERSION__: string;\n\nexport function getVersion() {\n return __VERSION__;\n}\n\nfunction debugLog(...message: any[]) {\n // always read from process.env, and cannot be override by modelConfig, overrideAIConfig, etc.\n const debugMode = process.env[MIDSCENE_DEBUG_MODE];\n if (debugMode) {\n console.log('[Midscene]', ...message);\n }\n}\n\nlet lastReportedRepoUrl = '';\nexport function uploadTestInfoToServer({ testUrl }: { testUrl: string }) {\n let repoUrl = '';\n let userEmail = '';\n\n const serverUrl = getUploadTestServerUrl();\n\n try {\n repoUrl = execSync('git config --get remote.origin.url').toString().trim();\n userEmail = execSync('git config --get user.email').toString().trim();\n } catch (error) {\n debugLog('Failed to get git info:', error);\n }\n\n // Only upload test info if:\n // 1. Server URL is configured AND\n // 2. Either:\n // - We have a repo URL that's different from last reported one (to avoid duplicate reports)\n // - OR we don't have a repo URL but have a test URL (for non-git environments)\n if (\n serverUrl &&\n ((repoUrl && repoUrl !== lastReportedRepoUrl) || (!repoUrl && testUrl))\n ) {\n debugLog('Uploading test info to server', {\n serverUrl,\n repoUrl,\n testUrl,\n userEmail,\n });\n\n fetch(serverUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n repo_url: repoUrl,\n test_url: testUrl,\n user_email: userEmail,\n }),\n })\n .then((response) => response.json())\n .then((data) => {\n debugLog('Successfully uploaded test info to server:', data);\n })\n .catch((error) =>\n debugLog('Failed to upload test info to server:', error),\n );\n lastReportedRepoUrl = repoUrl;\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","logEnvReady","groupedActionDumpFileExt","reportInitializedMap","Map","getReportTpl","reportTpl","insertScriptBeforeClosingHtml","filePath","scriptContent","htmlEndTag","stat","fs","readSize","Math","start","buffer","Buffer","fd","tailStr","htmlEndIdx","Error","beforeHtmlInTail","htmlEndPos","reportHTMLContent","dumpData","reportPath","appendReport","tpl","console","writeToFile","ifInBrowser","dumpContent","escapeScriptTag","dumpString","attributes","attributesArr","encodeURIComponent","writeFileSync","writeDumpReport","fileName","ifInWorker","path","getMidsceneRunSubDir","process","jsonPath","data","JSON","logMsg","writeLogFile","opts","fileExt","fileContent","type","targetDir","assert","gitIgnorePath","gitPath","gitIgnoreContent","existsSync","readFileSync","defaultRunDirName","getTmpDir","runningPkgInfo","getRunningPkgInfo","name","tmpPath","tmpdir","mkdirSync","e","getTmpFile","fileExtWithoutDot","tmpDir","filename","uuid","overlapped","container","target","sleep","ms","Promise","resolve","setTimeout","replacerForPageObject","value","_value_constructor","_value_constructor1","stringifyDumpData","indents","getVersion","__VERSION__","debugLog","message","debugMode","MIDSCENE_DEBUG_MODE","lastReportedRepoUrl","uploadTestInfoToServer","testUrl","repoUrl","userEmail","serverUrl","getUploadTestServerUrl","execSync","error","fetch","response"],"mappings":"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"}
|
|
@@ -14,7 +14,6 @@ export declare enum AIActionType {
|
|
|
14
14
|
PLAN = 3,
|
|
15
15
|
DESCRIBE_ELEMENT = 4
|
|
16
16
|
}
|
|
17
|
-
export declare const actionSpaceTypePrefix = "action_space_";
|
|
18
17
|
export declare function callAiFn<T>(msgs: AIArgs, AIActionTypeValue: AIActionType, modelPreferences: IModelPreferences): Promise<{
|
|
19
18
|
content: T;
|
|
20
19
|
usage?: AIUsageInfo;
|
|
@@ -86,9 +85,100 @@ export declare const RectSchema: z.ZodIntersection<z.ZodIntersection<z.ZodObject
|
|
|
86
85
|
}, {
|
|
87
86
|
zoom?: number | undefined;
|
|
88
87
|
}>>;
|
|
89
|
-
export declare const
|
|
90
|
-
|
|
88
|
+
export declare const TMultimodalPromptSchema: z.ZodObject<{
|
|
89
|
+
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
90
|
+
name: z.ZodString;
|
|
91
|
+
url: z.ZodString;
|
|
92
|
+
}, "strip", z.ZodTypeAny, {
|
|
93
|
+
name: string;
|
|
94
|
+
url: string;
|
|
95
|
+
}, {
|
|
96
|
+
name: string;
|
|
97
|
+
url: string;
|
|
98
|
+
}>, "many">>;
|
|
99
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodBoolean>;
|
|
100
|
+
}, "strip", z.ZodTypeAny, {
|
|
101
|
+
images?: {
|
|
102
|
+
name: string;
|
|
103
|
+
url: string;
|
|
104
|
+
}[] | undefined;
|
|
105
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
106
|
+
}, {
|
|
107
|
+
images?: {
|
|
108
|
+
name: string;
|
|
109
|
+
url: string;
|
|
110
|
+
}[] | undefined;
|
|
111
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
112
|
+
}>;
|
|
113
|
+
export declare const TUserPromptSchema: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
91
114
|
prompt: z.ZodString;
|
|
115
|
+
}, "strip", z.ZodTypeAny, {
|
|
116
|
+
prompt: string;
|
|
117
|
+
}, {
|
|
118
|
+
prompt: string;
|
|
119
|
+
}>, z.ZodObject<{
|
|
120
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
121
|
+
name: z.ZodString;
|
|
122
|
+
url: z.ZodString;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
name: string;
|
|
125
|
+
url: string;
|
|
126
|
+
}, {
|
|
127
|
+
name: string;
|
|
128
|
+
url: string;
|
|
129
|
+
}>, "many">>>;
|
|
130
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
images?: {
|
|
133
|
+
name: string;
|
|
134
|
+
url: string;
|
|
135
|
+
}[] | undefined;
|
|
136
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
137
|
+
}, {
|
|
138
|
+
images?: {
|
|
139
|
+
name: string;
|
|
140
|
+
url: string;
|
|
141
|
+
}[] | undefined;
|
|
142
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
143
|
+
}>>]>;
|
|
144
|
+
export type TMultimodalPrompt = z.infer<typeof TMultimodalPromptSchema>;
|
|
145
|
+
export type TUserPrompt = z.infer<typeof TUserPromptSchema>;
|
|
146
|
+
declare const MidsceneLocationResult: z.ZodObject<{
|
|
147
|
+
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
148
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
149
|
+
prompt: z.ZodString;
|
|
150
|
+
}, "strip", z.ZodTypeAny, {
|
|
151
|
+
prompt: string;
|
|
152
|
+
}, {
|
|
153
|
+
prompt: string;
|
|
154
|
+
}>, z.ZodObject<{
|
|
155
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
156
|
+
name: z.ZodString;
|
|
157
|
+
url: z.ZodString;
|
|
158
|
+
}, "strip", z.ZodTypeAny, {
|
|
159
|
+
name: string;
|
|
160
|
+
url: string;
|
|
161
|
+
}, {
|
|
162
|
+
name: string;
|
|
163
|
+
url: string;
|
|
164
|
+
}>, "many">>>;
|
|
165
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
166
|
+
}, "strip", z.ZodTypeAny, {
|
|
167
|
+
images?: {
|
|
168
|
+
name: string;
|
|
169
|
+
url: string;
|
|
170
|
+
}[] | undefined;
|
|
171
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
172
|
+
}, {
|
|
173
|
+
images?: {
|
|
174
|
+
name: string;
|
|
175
|
+
url: string;
|
|
176
|
+
}[] | undefined;
|
|
177
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
178
|
+
}>>]>;
|
|
179
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
180
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
181
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
92
182
|
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
93
183
|
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
94
184
|
left: z.ZodNumber;
|
|
@@ -120,7 +210,40 @@ export declare const MidsceneLocation: z.ZodObject<{
|
|
|
120
210
|
}>>;
|
|
121
211
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
122
212
|
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
123
|
-
prompt: z.ZodString
|
|
213
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
214
|
+
prompt: z.ZodString;
|
|
215
|
+
}, "strip", z.ZodTypeAny, {
|
|
216
|
+
prompt: string;
|
|
217
|
+
}, {
|
|
218
|
+
prompt: string;
|
|
219
|
+
}>, z.ZodObject<{
|
|
220
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
221
|
+
name: z.ZodString;
|
|
222
|
+
url: z.ZodString;
|
|
223
|
+
}, "strip", z.ZodTypeAny, {
|
|
224
|
+
name: string;
|
|
225
|
+
url: string;
|
|
226
|
+
}, {
|
|
227
|
+
name: string;
|
|
228
|
+
url: string;
|
|
229
|
+
}>, "many">>>;
|
|
230
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
231
|
+
}, "strip", z.ZodTypeAny, {
|
|
232
|
+
images?: {
|
|
233
|
+
name: string;
|
|
234
|
+
url: string;
|
|
235
|
+
}[] | undefined;
|
|
236
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
237
|
+
}, {
|
|
238
|
+
images?: {
|
|
239
|
+
name: string;
|
|
240
|
+
url: string;
|
|
241
|
+
}[] | undefined;
|
|
242
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
243
|
+
}>>]>;
|
|
244
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
245
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
246
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
124
247
|
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
125
248
|
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
126
249
|
left: z.ZodNumber;
|
|
@@ -152,7 +275,237 @@ export declare const MidsceneLocation: z.ZodObject<{
|
|
|
152
275
|
}>>;
|
|
153
276
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
154
277
|
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
155
|
-
prompt: z.ZodString
|
|
278
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
279
|
+
prompt: z.ZodString;
|
|
280
|
+
}, "strip", z.ZodTypeAny, {
|
|
281
|
+
prompt: string;
|
|
282
|
+
}, {
|
|
283
|
+
prompt: string;
|
|
284
|
+
}>, z.ZodObject<{
|
|
285
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
286
|
+
name: z.ZodString;
|
|
287
|
+
url: z.ZodString;
|
|
288
|
+
}, "strip", z.ZodTypeAny, {
|
|
289
|
+
name: string;
|
|
290
|
+
url: string;
|
|
291
|
+
}, {
|
|
292
|
+
name: string;
|
|
293
|
+
url: string;
|
|
294
|
+
}>, "many">>>;
|
|
295
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
296
|
+
}, "strip", z.ZodTypeAny, {
|
|
297
|
+
images?: {
|
|
298
|
+
name: string;
|
|
299
|
+
url: string;
|
|
300
|
+
}[] | undefined;
|
|
301
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
302
|
+
}, {
|
|
303
|
+
images?: {
|
|
304
|
+
name: string;
|
|
305
|
+
url: string;
|
|
306
|
+
}[] | undefined;
|
|
307
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
308
|
+
}>>]>;
|
|
309
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
310
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
311
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
312
|
+
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
313
|
+
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
314
|
+
left: z.ZodNumber;
|
|
315
|
+
top: z.ZodNumber;
|
|
316
|
+
}, "strip", z.ZodTypeAny, {
|
|
317
|
+
left: number;
|
|
318
|
+
top: number;
|
|
319
|
+
}, {
|
|
320
|
+
left: number;
|
|
321
|
+
top: number;
|
|
322
|
+
}>, z.ZodObject<{
|
|
323
|
+
width: z.ZodNumber;
|
|
324
|
+
height: z.ZodNumber;
|
|
325
|
+
dpr: z.ZodOptional<z.ZodNumber>;
|
|
326
|
+
}, "strip", z.ZodTypeAny, {
|
|
327
|
+
width: number;
|
|
328
|
+
height: number;
|
|
329
|
+
dpr?: number | undefined;
|
|
330
|
+
}, {
|
|
331
|
+
width: number;
|
|
332
|
+
height: number;
|
|
333
|
+
dpr?: number | undefined;
|
|
334
|
+
}>>, z.ZodObject<{
|
|
335
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
336
|
+
}, "strip", z.ZodTypeAny, {
|
|
337
|
+
zoom?: number | undefined;
|
|
338
|
+
}, {
|
|
339
|
+
zoom?: number | undefined;
|
|
340
|
+
}>>;
|
|
341
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
342
|
+
export type MidsceneLocationResultType = z.infer<typeof MidsceneLocationResult>;
|
|
343
|
+
export declare const getMidsceneLocationSchema: () => z.ZodObject<{
|
|
344
|
+
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
345
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
346
|
+
prompt: z.ZodString;
|
|
347
|
+
}, "strip", z.ZodTypeAny, {
|
|
348
|
+
prompt: string;
|
|
349
|
+
}, {
|
|
350
|
+
prompt: string;
|
|
351
|
+
}>, z.ZodObject<{
|
|
352
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
353
|
+
name: z.ZodString;
|
|
354
|
+
url: z.ZodString;
|
|
355
|
+
}, "strip", z.ZodTypeAny, {
|
|
356
|
+
name: string;
|
|
357
|
+
url: string;
|
|
358
|
+
}, {
|
|
359
|
+
name: string;
|
|
360
|
+
url: string;
|
|
361
|
+
}>, "many">>>;
|
|
362
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
363
|
+
}, "strip", z.ZodTypeAny, {
|
|
364
|
+
images?: {
|
|
365
|
+
name: string;
|
|
366
|
+
url: string;
|
|
367
|
+
}[] | undefined;
|
|
368
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
369
|
+
}, {
|
|
370
|
+
images?: {
|
|
371
|
+
name: string;
|
|
372
|
+
url: string;
|
|
373
|
+
}[] | undefined;
|
|
374
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
375
|
+
}>>]>;
|
|
376
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
377
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
378
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
379
|
+
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
380
|
+
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
381
|
+
left: z.ZodNumber;
|
|
382
|
+
top: z.ZodNumber;
|
|
383
|
+
}, "strip", z.ZodTypeAny, {
|
|
384
|
+
left: number;
|
|
385
|
+
top: number;
|
|
386
|
+
}, {
|
|
387
|
+
left: number;
|
|
388
|
+
top: number;
|
|
389
|
+
}>, z.ZodObject<{
|
|
390
|
+
width: z.ZodNumber;
|
|
391
|
+
height: z.ZodNumber;
|
|
392
|
+
dpr: z.ZodOptional<z.ZodNumber>;
|
|
393
|
+
}, "strip", z.ZodTypeAny, {
|
|
394
|
+
width: number;
|
|
395
|
+
height: number;
|
|
396
|
+
dpr?: number | undefined;
|
|
397
|
+
}, {
|
|
398
|
+
width: number;
|
|
399
|
+
height: number;
|
|
400
|
+
dpr?: number | undefined;
|
|
401
|
+
}>>, z.ZodObject<{
|
|
402
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
403
|
+
}, "strip", z.ZodTypeAny, {
|
|
404
|
+
zoom?: number | undefined;
|
|
405
|
+
}, {
|
|
406
|
+
zoom?: number | undefined;
|
|
407
|
+
}>>;
|
|
408
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
409
|
+
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
410
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
411
|
+
prompt: z.ZodString;
|
|
412
|
+
}, "strip", z.ZodTypeAny, {
|
|
413
|
+
prompt: string;
|
|
414
|
+
}, {
|
|
415
|
+
prompt: string;
|
|
416
|
+
}>, z.ZodObject<{
|
|
417
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
418
|
+
name: z.ZodString;
|
|
419
|
+
url: z.ZodString;
|
|
420
|
+
}, "strip", z.ZodTypeAny, {
|
|
421
|
+
name: string;
|
|
422
|
+
url: string;
|
|
423
|
+
}, {
|
|
424
|
+
name: string;
|
|
425
|
+
url: string;
|
|
426
|
+
}>, "many">>>;
|
|
427
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
428
|
+
}, "strip", z.ZodTypeAny, {
|
|
429
|
+
images?: {
|
|
430
|
+
name: string;
|
|
431
|
+
url: string;
|
|
432
|
+
}[] | undefined;
|
|
433
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
434
|
+
}, {
|
|
435
|
+
images?: {
|
|
436
|
+
name: string;
|
|
437
|
+
url: string;
|
|
438
|
+
}[] | undefined;
|
|
439
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
440
|
+
}>>]>;
|
|
441
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
442
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
443
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
444
|
+
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
445
|
+
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
446
|
+
left: z.ZodNumber;
|
|
447
|
+
top: z.ZodNumber;
|
|
448
|
+
}, "strip", z.ZodTypeAny, {
|
|
449
|
+
left: number;
|
|
450
|
+
top: number;
|
|
451
|
+
}, {
|
|
452
|
+
left: number;
|
|
453
|
+
top: number;
|
|
454
|
+
}>, z.ZodObject<{
|
|
455
|
+
width: z.ZodNumber;
|
|
456
|
+
height: z.ZodNumber;
|
|
457
|
+
dpr: z.ZodOptional<z.ZodNumber>;
|
|
458
|
+
}, "strip", z.ZodTypeAny, {
|
|
459
|
+
width: number;
|
|
460
|
+
height: number;
|
|
461
|
+
dpr?: number | undefined;
|
|
462
|
+
}, {
|
|
463
|
+
width: number;
|
|
464
|
+
height: number;
|
|
465
|
+
dpr?: number | undefined;
|
|
466
|
+
}>>, z.ZodObject<{
|
|
467
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
468
|
+
}, "strip", z.ZodTypeAny, {
|
|
469
|
+
zoom?: number | undefined;
|
|
470
|
+
}, {
|
|
471
|
+
zoom?: number | undefined;
|
|
472
|
+
}>>;
|
|
473
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
474
|
+
midscene_location_field_flag: z.ZodLiteral<true>;
|
|
475
|
+
prompt: z.ZodUnion<[z.ZodString, z.ZodIntersection<z.ZodObject<{
|
|
476
|
+
prompt: z.ZodString;
|
|
477
|
+
}, "strip", z.ZodTypeAny, {
|
|
478
|
+
prompt: string;
|
|
479
|
+
}, {
|
|
480
|
+
prompt: string;
|
|
481
|
+
}>, z.ZodObject<{
|
|
482
|
+
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
483
|
+
name: z.ZodString;
|
|
484
|
+
url: z.ZodString;
|
|
485
|
+
}, "strip", z.ZodTypeAny, {
|
|
486
|
+
name: string;
|
|
487
|
+
url: string;
|
|
488
|
+
}, {
|
|
489
|
+
name: string;
|
|
490
|
+
url: string;
|
|
491
|
+
}>, "many">>>;
|
|
492
|
+
convertHttpImage2Base64: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
|
|
493
|
+
}, "strip", z.ZodTypeAny, {
|
|
494
|
+
images?: {
|
|
495
|
+
name: string;
|
|
496
|
+
url: string;
|
|
497
|
+
}[] | undefined;
|
|
498
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
499
|
+
}, {
|
|
500
|
+
images?: {
|
|
501
|
+
name: string;
|
|
502
|
+
url: string;
|
|
503
|
+
}[] | undefined;
|
|
504
|
+
convertHttpImage2Base64?: boolean | undefined;
|
|
505
|
+
}>>]>;
|
|
506
|
+
deepThink: z.ZodOptional<z.ZodBoolean>;
|
|
507
|
+
cacheable: z.ZodOptional<z.ZodBoolean>;
|
|
508
|
+
xpath: z.ZodOptional<z.ZodBoolean>;
|
|
156
509
|
center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
157
510
|
rect: z.ZodIntersection<z.ZodIntersection<z.ZodObject<{
|
|
158
511
|
left: z.ZodNumber;
|
|
@@ -183,6 +536,9 @@ export declare const MidsceneLocation: z.ZodObject<{
|
|
|
183
536
|
zoom?: number | undefined;
|
|
184
537
|
}>>;
|
|
185
538
|
}, z.ZodTypeAny, "passthrough">>;
|
|
186
|
-
export type MidsceneLocationType = z.infer<typeof MidsceneLocation>;
|
|
187
539
|
export declare const ifMidsceneLocatorField: (field: any) => boolean;
|
|
188
|
-
export declare const
|
|
540
|
+
export declare const dumpMidsceneLocatorField: (field: any) => string;
|
|
541
|
+
export declare const findAllMidsceneLocatorField: (zodType?: z.ZodType<any>, requiredOnly?: boolean) => string[];
|
|
542
|
+
export declare const dumpActionParam: (jsonObject: Record<string, any>, zodSchema: z.ZodType<any>) => Record<string, any>;
|
|
543
|
+
export declare const loadActionParam: (jsonObject: Record<string, any>, zodSchema: z.ZodType<any>) => Record<string, any>;
|
|
544
|
+
export {};
|
|
@@ -9,4 +9,4 @@ export { plan } from './llm-planning';
|
|
|
9
9
|
export { callAiFn, adaptBboxToRect, } from './common';
|
|
10
10
|
export { vlmPlanning, resizeImageForUiTars } from './ui-tars-planning';
|
|
11
11
|
export { AIActionType, type AIArgs } from './common';
|
|
12
|
-
export {
|
|
12
|
+
export { getMidsceneLocationSchema, type MidsceneLocationResultType, PointSchema, SizeSchema, RectSchema, TMultimodalPromptSchema, TUserPromptSchema, type TMultimodalPrompt, type TUserPrompt, findAllMidsceneLocatorField, dumpActionParam, loadActionParam, } from './common';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { AIDataExtractionResponse, AIElementLocatorResponse, AIElementResponse, AISectionLocatorResponse, AIUsageInfo, BaseElement, ElementById, InsightExtractOption, Rect, ReferenceImage,
|
|
1
|
+
import type { AIDataExtractionResponse, AIElementLocatorResponse, AIElementResponse, AISectionLocatorResponse, AIUsageInfo, BaseElement, ElementById, InsightExtractOption, Rect, ReferenceImage, UIContext } from '../types';
|
|
2
2
|
import { type IModelPreferences } from '@midscene/shared/env';
|
|
3
3
|
import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam } from 'openai/resources/index';
|
|
4
|
+
import type { TMultimodalPrompt, TUserPrompt } from './common';
|
|
4
5
|
import { callAiFn } from './common';
|
|
5
6
|
export type AIArgs = [
|
|
6
7
|
ChatCompletionSystemMessageParam,
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { Executor } from './ai-model/action-executor';
|
|
3
3
|
import Insight from './insight/index';
|
|
4
4
|
import { getVersion } from './utils';
|
|
5
|
-
export { plan, describeUserPage, AiLocateElement,
|
|
5
|
+
export { plan, describeUserPage, AiLocateElement, getMidsceneLocationSchema, type MidsceneLocationResultType, PointSchema, SizeSchema, RectSchema, TMultimodalPromptSchema, TUserPromptSchema, type TMultimodalPrompt, type TUserPrompt, } from './ai-model/index';
|
|
6
6
|
export { getAIConfig, MIDSCENE_MODEL_NAME } from '@midscene/shared/env';
|
|
7
7
|
export type * from './types';
|
|
8
8
|
export { z };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { callAiFn } from '../ai-model/common';
|
|
2
|
-
import type { AIElementResponse, AIUsageInfo, BaseElement, DetailedLocateParam, DumpSubscriber, InsightAction, InsightExtractOption, InsightExtractParam, InsightOptions, InsightTaskInfo, LocateResult,
|
|
2
|
+
import type { AIDescribeElementResponse, AIElementResponse, AIUsageInfo, BaseElement, DetailedLocateParam, DumpSubscriber, InsightAction, InsightExtractOption, InsightExtractParam, InsightOptions, InsightTaskInfo, LocateResult, Rect, UIContext } from '../types';
|
|
3
|
+
import type { TMultimodalPrompt } from '../ai-model/common';
|
|
3
4
|
export interface LocateOpts {
|
|
4
5
|
context?: UIContext<BaseElement>;
|
|
5
6
|
callAI?: typeof callAiFn<AIElementResponse>;
|
|
@@ -19,4 +20,7 @@ export default class Insight<ElementType extends BaseElement = BaseElement, Cont
|
|
|
19
20
|
thought?: string;
|
|
20
21
|
usage?: AIUsageInfo;
|
|
21
22
|
}>;
|
|
23
|
+
describe(target: Rect | [number, number], opt?: {
|
|
24
|
+
deepThink?: boolean;
|
|
25
|
+
}): Promise<Pick<AIDescribeElementResponse, 'description'>>;
|
|
22
26
|
}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { NodeType } from '@midscene/shared/constants';
|
|
|
2
2
|
import type { BaseElement, ElementTreeNode, Rect, Size } from '@midscene/shared/types';
|
|
3
3
|
import type { ChatCompletionMessageParam } from 'openai/resources/index';
|
|
4
4
|
import type { z } from 'zod';
|
|
5
|
+
import type { TUserPrompt } from './ai-model/common';
|
|
5
6
|
import type { DetailedLocateParam, MidsceneYamlFlowItem } from './yaml';
|
|
6
7
|
export type { ElementTreeNode, BaseElement, Rect, Size, Point, } from '@midscene/shared/types';
|
|
7
8
|
export * from './yaml';
|
|
@@ -213,18 +214,13 @@ export interface PlanningActionParamInputOrKeyPress {
|
|
|
213
214
|
value: string;
|
|
214
215
|
autoDismissKeyboard?: boolean;
|
|
215
216
|
}
|
|
216
|
-
export interface PlanningActionParamAssert {
|
|
217
|
-
assertion: TUserPrompt;
|
|
218
|
-
}
|
|
219
217
|
export interface PlanningActionParamSleep {
|
|
220
218
|
timeMs: number;
|
|
221
219
|
}
|
|
222
220
|
export interface PlanningActionParamError {
|
|
223
221
|
thought: string;
|
|
224
222
|
}
|
|
225
|
-
export type PlanningActionParamWaitFor = AgentWaitForOpt & {
|
|
226
|
-
assertion: string;
|
|
227
|
-
};
|
|
223
|
+
export type PlanningActionParamWaitFor = AgentWaitForOpt & {};
|
|
228
224
|
export interface AndroidLongPressParam {
|
|
229
225
|
duration?: number;
|
|
230
226
|
}
|
|
@@ -369,26 +365,6 @@ export interface StreamingAIResponse {
|
|
|
369
365
|
/** Whether the response was streamed */
|
|
370
366
|
isStreamed: boolean;
|
|
371
367
|
}
|
|
372
|
-
export type TMultimodalPrompt = {
|
|
373
|
-
/**
|
|
374
|
-
* Support use image to inspect elements.
|
|
375
|
-
* The "images" field is an object that uses image name as key and image url as value.
|
|
376
|
-
* The image url can be a local path, a http link , or a base64 string.
|
|
377
|
-
*/
|
|
378
|
-
images?: {
|
|
379
|
-
name: string;
|
|
380
|
-
url: string;
|
|
381
|
-
}[];
|
|
382
|
-
/**
|
|
383
|
-
* By default, the image url in the "images" filed starts with `https://` or `http://` will be directly sent to the LLM.
|
|
384
|
-
* In case the images are not accessible to the LLM (One common case is that image url is internal network only.), you can enable this option.
|
|
385
|
-
* Then image will be download and convert to base64 format.
|
|
386
|
-
*/
|
|
387
|
-
convertHttpImage2Base64?: boolean;
|
|
388
|
-
};
|
|
389
|
-
export type TUserPrompt = string | ({
|
|
390
|
-
prompt: string;
|
|
391
|
-
} & Partial<TMultimodalPrompt>);
|
|
392
368
|
export interface DeviceAction<T = {}> {
|
|
393
369
|
name: string;
|
|
394
370
|
description?: string;
|
package/dist/types/yaml.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TUserPrompt } from './ai-model/common';
|
|
2
|
+
import type { Rect } from './types';
|
|
2
3
|
import type { BaseElement, UIContext } from './types';
|
|
3
4
|
export interface LocateOption {
|
|
5
|
+
prompt?: TUserPrompt;
|
|
4
6
|
deepThink?: boolean;
|
|
5
7
|
cacheable?: boolean;
|
|
6
8
|
xpath?: string;
|
|
@@ -118,7 +120,7 @@ export interface MidsceneYamlFlowItemAIInput extends LocateOption {
|
|
|
118
120
|
}
|
|
119
121
|
export interface MidsceneYamlFlowItemAIKeyboardPress extends LocateOption {
|
|
120
122
|
aiKeyboardPress: TUserPrompt | undefined;
|
|
121
|
-
|
|
123
|
+
keyName: string;
|
|
122
124
|
}
|
|
123
125
|
export interface MidsceneYamlFlowItemAIScroll extends LocateOption, ScrollParam {
|
|
124
126
|
aiScroll: TUserPrompt | undefined;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/core",
|
|
3
3
|
"description": "Automate browser actions, extract data, and perform assertions using AI. It offers JavaScript SDK, Chrome extension, and support for scripting in YAML. See https://midscenejs.com/ for details.",
|
|
4
|
-
"version": "0.26.7-beta-
|
|
4
|
+
"version": "0.26.7-beta-20250821041506.0",
|
|
5
5
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
6
6
|
"homepage": "https://midscenejs.com/",
|
|
7
7
|
"main": "./dist/lib/index.js",
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
"openai": "4.81.0",
|
|
62
62
|
"socks-proxy-agent": "8.0.4",
|
|
63
63
|
"zod": "3.24.3",
|
|
64
|
-
"@midscene/recorder": "0.26.7-beta-
|
|
65
|
-
"@midscene/shared": "0.26.7-beta-
|
|
64
|
+
"@midscene/recorder": "0.26.7-beta-20250821041506.0",
|
|
65
|
+
"@midscene/shared": "0.26.7-beta-20250821041506.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@microsoft/api-extractor": "^7.52.10",
|