@midscene/core 1.17.5 → 1.17.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/es/agent/utils.mjs +1 -1
  2. package/dist/es/ai-model/models/jev/locate.mjs +2 -12
  3. package/dist/es/ai-model/models/jev/locate.mjs.map +1 -1
  4. package/dist/es/ai-model/service-caller/call-ai.mjs +4 -1
  5. package/dist/es/ai-model/service-caller/call-ai.mjs.map +1 -1
  6. package/dist/es/ai-model/service-caller/openai/siwc/authorization.mjs +4 -3
  7. package/dist/es/ai-model/service-caller/openai/siwc/authorization.mjs.map +1 -1
  8. package/dist/es/ai-model/service-caller/openai/siwc/network.mjs +36 -0
  9. package/dist/es/ai-model/service-caller/openai/siwc/network.mjs.map +1 -0
  10. package/dist/es/ai-model/service-caller/openai/siwc/refresh.mjs +5 -3
  11. package/dist/es/ai-model/service-caller/openai/siwc/refresh.mjs.map +1 -1
  12. package/dist/es/ai-model/service-caller/openai/siwc/token-manager.mjs +7 -4
  13. package/dist/es/ai-model/service-caller/openai/siwc/token-manager.mjs.map +1 -1
  14. package/dist/es/ai-model/shared/json.mjs +6 -2
  15. package/dist/es/ai-model/shared/json.mjs.map +1 -1
  16. package/dist/es/report-html-template.mjs +1 -1
  17. package/dist/es/siwc.mjs +4 -0
  18. package/dist/es/task-runner.mjs +7 -2
  19. package/dist/es/task-runner.mjs.map +1 -1
  20. package/dist/es/utils.mjs +1 -1
  21. package/dist/lib/agent/utils.js +1 -1
  22. package/dist/lib/ai-model/models/jev/locate.js +2 -12
  23. package/dist/lib/ai-model/models/jev/locate.js.map +1 -1
  24. package/dist/lib/ai-model/service-caller/call-ai.js +4 -1
  25. package/dist/lib/ai-model/service-caller/call-ai.js.map +1 -1
  26. package/dist/lib/ai-model/service-caller/openai/siwc/authorization.js +3 -2
  27. package/dist/lib/ai-model/service-caller/openai/siwc/authorization.js.map +1 -1
  28. package/dist/lib/ai-model/service-caller/openai/siwc/network.js +73 -0
  29. package/dist/lib/ai-model/service-caller/openai/siwc/network.js.map +1 -0
  30. package/dist/lib/ai-model/service-caller/openai/siwc/refresh.js +4 -2
  31. package/dist/lib/ai-model/service-caller/openai/siwc/refresh.js.map +1 -1
  32. package/dist/lib/ai-model/service-caller/openai/siwc/token-manager.js +7 -4
  33. package/dist/lib/ai-model/service-caller/openai/siwc/token-manager.js.map +1 -1
  34. package/dist/lib/ai-model/shared/json.js +6 -2
  35. package/dist/lib/ai-model/shared/json.js.map +1 -1
  36. package/dist/lib/report-html-template.js +1 -1
  37. package/dist/lib/siwc.js +52 -0
  38. package/dist/lib/siwc.js.map +1 -0
  39. package/dist/lib/task-runner.js +7 -2
  40. package/dist/lib/task-runner.js.map +1 -1
  41. package/dist/lib/utils.js +1 -1
  42. package/dist/types/ai-model/models/jev/locate.d.ts.map +1 -1
  43. package/dist/types/ai-model/service-caller/openai/siwc/authorization.d.ts.map +1 -1
  44. package/dist/types/ai-model/service-caller/openai/siwc/network.d.ts +8 -0
  45. package/dist/types/ai-model/service-caller/openai/siwc/network.d.ts.map +1 -0
  46. package/dist/types/ai-model/service-caller/openai/siwc/refresh.d.ts +1 -1
  47. package/dist/types/ai-model/service-caller/openai/siwc/refresh.d.ts.map +1 -1
  48. package/dist/types/ai-model/service-caller/openai/siwc/token-manager.d.ts +2 -1
  49. package/dist/types/ai-model/service-caller/openai/siwc/token-manager.d.ts.map +1 -1
  50. package/dist/types/ai-model/shared/json.d.ts +4 -15
  51. package/dist/types/ai-model/shared/json.d.ts.map +1 -1
  52. package/dist/types/siwc.d.ts +5 -0
  53. package/dist/types/siwc.d.ts.map +1 -0
  54. package/dist/types/task-runner.d.ts.map +1 -1
  55. package/package.json +10 -2
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ parseSiwcCallback: ()=>authorization_js_namespaceObject.parseSiwcCallback,
28
+ refreshSiwcCredentials: ()=>refresh_js_namespaceObject.refreshSiwcCredentials,
29
+ exchangeSiwcCode: ()=>authorization_js_namespaceObject.exchangeSiwcCode,
30
+ SiwcError: ()=>errors_js_namespaceObject.SiwcError,
31
+ createSiwcAuthorization: ()=>authorization_js_namespaceObject.createSiwcAuthorization
32
+ });
33
+ const refresh_js_namespaceObject = require("./ai-model/service-caller/openai/siwc/refresh.js");
34
+ const authorization_js_namespaceObject = require("./ai-model/service-caller/openai/siwc/authorization.js");
35
+ const errors_js_namespaceObject = require("./ai-model/service-caller/openai/siwc/errors.js");
36
+ exports.SiwcError = __webpack_exports__.SiwcError;
37
+ exports.createSiwcAuthorization = __webpack_exports__.createSiwcAuthorization;
38
+ exports.exchangeSiwcCode = __webpack_exports__.exchangeSiwcCode;
39
+ exports.parseSiwcCallback = __webpack_exports__.parseSiwcCallback;
40
+ exports.refreshSiwcCredentials = __webpack_exports__.refreshSiwcCredentials;
41
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
42
+ "SiwcError",
43
+ "createSiwcAuthorization",
44
+ "exchangeSiwcCode",
45
+ "parseSiwcCallback",
46
+ "refreshSiwcCredentials"
47
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
48
+ Object.defineProperty(exports, '__esModule', {
49
+ value: true
50
+ });
51
+
52
+ //# sourceMappingURL=siwc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siwc.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object"],"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};"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D"}
@@ -44,6 +44,11 @@ function _define_property(obj, key, value) {
44
44
  }
45
45
  const debug = (0, logger_namespaceObject.getDebug)('task-runner');
46
46
  const UI_CONTEXT_CACHE_TTL_MS = 300;
47
+ function serializeTaskError(error, signal) {
48
+ const serializedError = (0, error_formatter_namespaceObject.serializeError)(error);
49
+ if (signal?.aborted && error === signal.reason) serializedError.message = (0, error_formatter_namespaceObject.truncateSerializedErrorString)(`Operation interrupted by an external abort signal.\nReason: ${serializedError.message}`);
50
+ return serializedError;
51
+ }
47
52
  function serializeErrorTask(task) {
48
53
  if (!task) return;
49
54
  return {
@@ -241,7 +246,7 @@ class TaskRunner {
241
246
  taskIndex++;
242
247
  } catch (error) {
243
248
  successfullyCompleted = false;
244
- const serializedError = (0, error_formatter_namespaceObject.serializeError)(error);
249
+ const serializedError = serializeTaskError(error, this.abortSignal);
245
250
  task.error = serializedError;
246
251
  task.errorMessage = serializedError.message;
247
252
  task.errorStack = serializedError.stack;
@@ -271,7 +276,7 @@ class TaskRunner {
271
276
  } else {
272
277
  this.status = 'error';
273
278
  const errorTask = this.latestErrorTask();
274
- const error = errorTask?.error ?? (this.abortSignal?.aborted ? (0, error_formatter_namespaceObject.serializeError)(this.abortSignal.reason) : {
279
+ const error = errorTask?.error ?? (this.abortSignal?.aborted ? serializeTaskError(this.abortSignal.reason, this.abortSignal) : {
275
280
  name: 'Error',
276
281
  message: 'Task execution failed'
277
282
  });
@@ -1 +1 @@
1
- {"version":3,"file":"task-runner.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../src/task-runner.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 type { ScreenshotItem } from '@/screenshot-item';\nimport { setTimingFieldOnce } from '@/task-timing';\nimport {\n ExecutionDump,\n type ExecutionRecorderItem,\n type ExecutionTask,\n type ExecutionTaskActionApply,\n type ExecutionTaskApply,\n type ExecutionTaskPlanningLocateOutput,\n type ExecutionTaskProgressOptions,\n type ExecutionTaskReturn,\n type ExecutorContext,\n type PlanningActionParamError,\n type UIContext,\n} from '@/types';\nimport {\n type SerializedError,\n serializeError,\n truncateSerializedErrorString,\n} from '@midscene/shared/agent-tools/error-formatter';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert, uuid } from '@midscene/shared/utils';\n\nconst debug = getDebug('task-runner');\nconst UI_CONTEXT_CACHE_TTL_MS = 300;\n\n/**\n * A native, per-task lifecycle notification. The runner is the single source\n * of truth for when a task actually transitions, so it reports each transition\n * exactly once with the task that changed. Consumers no longer have to re-scan\n * the task list and diff it against remembered keys to reconstruct this stream.\n */\nexport type TaskRunnerEventKind =\n | 'append'\n | 'start'\n | 'finish'\n | 'error'\n | 'cancel';\n\nexport interface TaskRunnerEvent {\n kind: TaskRunnerEventKind;\n task: ExecutionTask;\n runner: TaskRunner;\n}\n\nexport interface SerializedErrorTask {\n taskId: string;\n type: ExecutionTask['type'];\n subType?: string;\n status: ExecutionTask['status'];\n thought?: string;\n errorMessage?: string;\n}\n\nexport interface SerializedTaskExecutionError extends SerializedError {\n code: 'TASK_EXECUTION_FAILED';\n cause: SerializedError;\n task?: SerializedErrorTask;\n}\n\nfunction serializeErrorTask(\n task: ExecutionTask | null,\n): SerializedErrorTask | undefined {\n if (!task) {\n return undefined;\n }\n\n return {\n taskId: truncateSerializedErrorString(task.taskId),\n type: task.type,\n ...(task.subType === undefined\n ? {}\n : { subType: truncateSerializedErrorString(task.subType) }),\n status: task.status,\n ...(task.thought === undefined\n ? {}\n : { thought: truncateSerializedErrorString(task.thought) }),\n ...(task.errorMessage === undefined\n ? {}\n : {\n errorMessage: truncateSerializedErrorString(task.errorMessage),\n }),\n };\n}\n\nexport type TaskRunnerEventListener = (\n event: TaskRunnerEvent,\n) => Promise<void> | void;\n\n/** Minimal prompt-image shape retained as report asset metadata. */\nexport interface ExecutionReferenceImage {\n readonly url: string;\n}\n\ntype TaskRunnerInitOptions = ExecutionTaskProgressOptions & {\n tasks?: ExecutionTaskApply[];\n abortSignal?: AbortSignal;\n referenceImages?: readonly ExecutionReferenceImage[];\n /**\n * Coarse \"the execution snapshot changed\" signal. Fires on any state change\n * (append, status flips, completion) with the whole runner, so consumers can\n * re-dump/re-render the current snapshot. Deliberately batch-granular, unlike\n * the per-task {@link onTaskEvent} stream.\n */\n onSnapshotChange?: (\n runner: TaskRunner,\n error?: TaskExecutionError,\n ) => Promise<void> | void;\n onTaskEvent?: TaskRunnerEventListener;\n};\n\ntype TaskRunnerOperationOptions = {\n allowWhenError?: boolean;\n};\n\nexport class TaskRunner {\n readonly id: string;\n name: string;\n\n tasks: ExecutionTask[];\n\n // status of runner\n status: 'init' | 'pending' | 'running' | 'completed' | 'error';\n\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n\n private readonly uiContextBuilder: (\n signal?: AbortSignal,\n ) => Promise<UIContext>;\n private readonly abortSignal?: AbortSignal;\n\n private readonly onSnapshotChange?:\n | ((runner: TaskRunner, error?: TaskExecutionError) => Promise<void> | void)\n | undefined;\n\n private readonly onTaskEvent?: TaskRunnerEventListener | undefined;\n\n private readonly executionLogTime: number;\n\n private readonly referenceImageUrls = new Set<string>();\n\n constructor(\n name: string,\n uiContextBuilder: (signal?: AbortSignal) => Promise<UIContext>,\n options?: TaskRunnerInitOptions,\n ) {\n this.id = uuid();\n this.status =\n options?.tasks && options.tasks.length > 0 ? 'pending' : 'init';\n this.name = name;\n this.tasks = (options?.tasks || []).map((item) =>\n this.markTaskAsPending(item),\n );\n this.onTaskStart = options?.onTaskStart;\n this.uiContextBuilder = uiContextBuilder;\n this.abortSignal = options?.abortSignal;\n this.onSnapshotChange = options?.onSnapshotChange;\n this.onTaskEvent = options?.onTaskEvent;\n this.executionLogTime = Date.now();\n for (const image of options?.referenceImages ?? []) {\n this.referenceImageUrls.add(image.url);\n }\n }\n\n private async emitSnapshotChange(error?: TaskExecutionError): Promise<void> {\n if (!this.onSnapshotChange) {\n return;\n }\n await this.onSnapshotChange(this, error);\n }\n\n private async emitTaskEvent(\n kind: TaskRunnerEventKind,\n task: ExecutionTask,\n ): Promise<void> {\n if (!this.onTaskEvent) {\n return;\n }\n try {\n await this.onTaskEvent({ kind, task, runner: this });\n } catch (error) {\n console.error('Error in onTaskEvent listener', error);\n }\n }\n\n private lastUiContext?: {\n context: UIContext;\n capturedAt: number;\n };\n\n private async getUiContext(options?: { forceRefresh?: boolean }): Promise<\n UIContext | undefined\n > {\n this.abortSignal?.throwIfAborted();\n const now = Date.now();\n const shouldReuse =\n !options?.forceRefresh &&\n this.lastUiContext &&\n now - this.lastUiContext.capturedAt <= UI_CONTEXT_CACHE_TTL_MS;\n\n if (shouldReuse && this.lastUiContext?.context) {\n debug(\n `reuse cached uiContext captured ${now - this.lastUiContext.capturedAt}ms ago`,\n );\n return this.lastUiContext?.context;\n }\n\n try {\n const uiContext = await this.uiContextBuilder(this.abortSignal);\n this.abortSignal?.throwIfAborted();\n if (uiContext) {\n this.lastUiContext = {\n context: uiContext,\n capturedAt: Date.now(),\n };\n } else {\n this.lastUiContext = undefined;\n }\n return uiContext;\n } catch (error) {\n this.lastUiContext = undefined;\n throw error;\n }\n }\n\n private async captureScreenshot(): Promise<ScreenshotItem | undefined> {\n try {\n const uiContext = await this.getUiContext({ forceRefresh: true });\n return uiContext?.screenshot;\n } catch (error) {\n console.error('error while capturing screenshot', error);\n }\n return undefined;\n }\n\n private attachRecorderItem(\n task: ExecutionTask,\n screenshot: ScreenshotItem | undefined,\n phase: 'after-calling',\n ): void {\n if (!phase || !screenshot) {\n return;\n }\n\n const recorderItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: Date.now(),\n screenshot,\n timing: phase,\n };\n\n if (!task.recorder) {\n task.recorder = [recorderItem];\n return;\n }\n task.recorder.push(recorderItem);\n }\n\n private markTaskAsPending(task: ExecutionTaskApply): ExecutionTask {\n return {\n taskId: uuid(),\n status: 'pending',\n ...task,\n };\n }\n\n private normalizeStatusFromError(\n options?: TaskRunnerOperationOptions,\n errorMessage?: string,\n ): void {\n if (this.status !== 'error') {\n return;\n }\n assert(\n options?.allowWhenError,\n errorMessage ||\n `task runner is in error state, cannot proceed\\nerror=${this.latestErrorTask()?.errorMessage}\\n${this.latestErrorTask()?.errorStack}`,\n );\n // reset runner state so new tasks can run\n this.status = this.tasks.length > 0 ? 'pending' : 'init';\n }\n\n async append(\n task: ExecutionTaskApply[] | ExecutionTaskApply,\n options?: TaskRunnerOperationOptions,\n ): Promise<void> {\n this.abortSignal?.throwIfAborted();\n this.normalizeStatusFromError(\n options,\n `task runner is in error state, cannot append task\\nerror=${this.latestErrorTask()?.errorMessage}\\n${this.latestErrorTask()?.errorStack}`,\n );\n const appended: ExecutionTask[] = [];\n if (Array.isArray(task)) {\n appended.push(...task.map((item) => this.markTaskAsPending(item)));\n } else {\n appended.push(this.markTaskAsPending(task));\n }\n this.tasks.push(...appended);\n if (this.status !== 'running') {\n this.status = 'pending';\n }\n await this.emitSnapshotChange();\n for (const appendedTask of appended) {\n await this.emitTaskEvent('append', appendedTask);\n }\n }\n\n async appendAndFlush(\n task: ExecutionTaskApply[] | ExecutionTaskApply,\n options?: TaskRunnerOperationOptions,\n ): Promise<{ output: any; thought?: string } | undefined> {\n await this.append(task, options);\n return this.flush(options);\n }\n\n async flush(\n options?: TaskRunnerOperationOptions,\n ): Promise<{ output: any; thought?: string } | undefined> {\n if (this.status === 'init' && this.tasks.length > 0) {\n console.warn(\n 'illegal state for task runner, status is init but tasks are not empty',\n );\n }\n\n this.normalizeStatusFromError(options, 'task runner is in error state');\n assert(this.status !== 'running', 'task runner is already running');\n assert(this.status !== 'completed', 'task runner is already completed');\n\n const nextPendingIndex = this.tasks.findIndex(\n (task) => task.status === 'pending',\n );\n if (nextPendingIndex < 0) {\n // all tasks are completed\n return;\n }\n\n this.status = 'running';\n await this.emitSnapshotChange();\n let taskIndex = nextPendingIndex;\n let successfullyCompleted = true;\n\n let previousFindOutput: ExecutionTaskPlanningLocateOutput | undefined;\n\n while (taskIndex < this.tasks.length) {\n const task = this.tasks[taskIndex];\n assert(\n task.status === 'pending',\n `task status should be pending, but got: ${task.status}`,\n );\n let taskStarted = false;\n try {\n this.abortSignal?.throwIfAborted();\n taskStarted = true;\n task.timing = { start: Date.now() };\n task.status = 'running';\n await this.emitSnapshotChange();\n await this.emitTaskEvent('start', task);\n this.abortSignal?.throwIfAborted();\n try {\n if (this.onTaskStart) {\n await this.onTaskStart(task, this.abortSignal);\n }\n } catch (e) {\n console.error('error in onTaskStart', e);\n }\n this.abortSignal?.throwIfAborted();\n assert(\n ['Insight', 'Action Space', 'Planning'].indexOf(task.type) >= 0,\n `unsupported task type: ${task.type}`,\n );\n\n const { executor } = task;\n assert(executor, `executor is required for task type: ${task.type}`);\n\n let returnValue;\n // For Insight tasks (Query/Assert/WaitFor), always get fresh context\n // to ensure we have the latest UI state after any preceding actions\n const forceRefresh = task.type === 'Insight';\n setTimingFieldOnce(task.timing, 'getUiContextStart');\n const uiContext = await this.getUiContext({ forceRefresh });\n setTimingFieldOnce(task.timing, 'getUiContextEnd');\n this.abortSignal?.throwIfAborted();\n\n task.uiContext = uiContext;\n const executorContext: ExecutorContext = {\n task,\n element: previousFindOutput?.element,\n uiContext,\n signal: this.abortSignal,\n };\n\n if (task.type === 'Insight') {\n assert(\n task.subType === 'Query' ||\n task.subType === 'Assert' ||\n task.subType === 'WaitFor' ||\n task.subType === 'Boolean' ||\n task.subType === 'Number' ||\n task.subType === 'String',\n `unsupported service subType: ${task.subType}`,\n );\n returnValue = await task.executor(executorContext);\n } else if (task.type === 'Planning') {\n returnValue = await task.executor(executorContext);\n if (task.subType === 'Locate') {\n previousFindOutput = (\n returnValue as ExecutionTaskReturn<ExecutionTaskPlanningLocateOutput>\n )?.output;\n }\n } else if (task.type === 'Action Space') {\n try {\n returnValue = await task.executor(executorContext);\n } finally {\n // The short TTL still lets planning and the action itself share one\n // context. Once an action settles, time alone can no longer prove\n // that the cached context represents the current UI.\n this.lastUiContext = undefined;\n }\n } else {\n console.warn(\n `unsupported task type: ${task.type}, will try to execute it directly`,\n );\n returnValue = await task.executor(executorContext);\n }\n\n this.abortSignal?.throwIfAborted();\n const isLastTask = taskIndex === this.tasks.length - 1;\n\n if (isLastTask) {\n setTimingFieldOnce(task.timing, 'captureAfterCallingSnapshotStart');\n const screenshot = await this.captureScreenshot();\n this.abortSignal?.throwIfAborted();\n this.attachRecorderItem(task, screenshot, 'after-calling');\n setTimingFieldOnce(task.timing, 'captureAfterCallingSnapshotEnd');\n }\n // Cancellation may arrive during the report screenshot, after planning\n // has returned but before the next batch of actions is built.\n this.abortSignal?.throwIfAborted();\n\n Object.assign(task, returnValue);\n task.status = 'finished';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n await this.emitSnapshotChange();\n await this.emitTaskEvent('finish', task);\n taskIndex++;\n } catch (error) {\n successfullyCompleted = false;\n const serializedError = serializeError(error);\n task.error = serializedError;\n task.errorMessage = serializedError.message;\n task.errorStack = serializedError.stack;\n\n task.status = taskStarted ? 'failed' : 'cancelled';\n if (taskStarted && task.timing) {\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n }\n await this.emitSnapshotChange();\n await this.emitTaskEvent(taskStarted ? 'error' : 'cancel', task);\n break;\n }\n }\n\n // set all remaining tasks as cancelled\n const cancelledTasks: ExecutionTask[] = [];\n for (let i = taskIndex + 1; i < this.tasks.length; i++) {\n this.tasks[i].status = 'cancelled';\n cancelledTasks.push(this.tasks[i]);\n }\n if (cancelledTasks.length > 0) {\n await this.emitSnapshotChange();\n for (const cancelledTask of cancelledTasks) {\n await this.emitTaskEvent('cancel', cancelledTask);\n }\n }\n\n let finalizeError: TaskExecutionError | undefined;\n if (!successfullyCompleted) {\n this.status = 'error';\n const errorTask = this.latestErrorTask();\n const error =\n errorTask?.error ??\n (this.abortSignal?.aborted\n ? serializeError(this.abortSignal.reason)\n : {\n name: 'Error',\n message: 'Task execution failed',\n });\n finalizeError = new TaskExecutionError(\n error,\n serializeErrorTask(errorTask),\n );\n await this.emitSnapshotChange(finalizeError);\n } else {\n this.status = 'completed';\n await this.emitSnapshotChange();\n }\n\n if (finalizeError) {\n throw finalizeError;\n }\n\n if (this.tasks.length) {\n // return the last output\n const outputIndex = Math.min(taskIndex, this.tasks.length - 1);\n const { thought, output } = this.tasks[outputIndex];\n return {\n thought,\n output,\n };\n }\n }\n\n isInErrorState(): boolean {\n return this.status === 'error';\n }\n\n latestErrorTask(): ExecutionTask | null {\n if (this.status !== 'error') {\n return null;\n }\n // Find the LAST failed task (not the first one)\n // This is important when using allowWhenError to continue after errors\n for (let i = this.tasks.length - 1; i >= 0; i--) {\n if (this.tasks[i].status === 'failed') {\n return this.tasks[i];\n }\n }\n return null;\n }\n\n dump(): ExecutionDump {\n return new ExecutionDump(\n {\n id: this.id,\n logTime: this.executionLogTime,\n name: this.name,\n tasks: this.tasks,\n },\n { referenceImageUrls: [...this.referenceImageUrls] },\n );\n }\n\n async appendErrorPlan(errorMsg: string): Promise<{\n output: undefined;\n runner: TaskRunner;\n }> {\n const errorTask: ExecutionTaskActionApply<PlanningActionParamError> = {\n type: 'Action Space',\n subType: 'Error',\n param: {\n thought: errorMsg,\n },\n thought: errorMsg,\n executor: async () => {\n throw new Error(errorMsg || 'error without thought');\n },\n };\n await this.appendAndFlush(errorTask);\n\n return {\n output: undefined,\n runner: this,\n };\n }\n}\n\nexport class TaskExecutionError extends Error {\n readonly code = 'TASK_EXECUTION_FAILED' as const;\n\n override readonly cause: SerializedError;\n\n readonly task?: SerializedErrorTask;\n\n constructor(error: SerializedError, task?: SerializedErrorTask) {\n super(error.message, { cause: error });\n this.name = 'TaskExecutionError';\n this.cause = error;\n this.task = task;\n if (this.stack) {\n this.stack = truncateSerializedErrorString(this.stack);\n }\n }\n\n /**\n * Return the same bounded fields already stored on the live error. The\n * wrapper stack identifies where TaskExecutionError was created; cause.stack\n * preserves the executor's original stack.\n */\n toJSON(): SerializedTaskExecutionError {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n ...(this.stack === undefined ? {} : { stack: this.stack }),\n cause: this.cause,\n ...(this.task === undefined ? {} : { task: this.task }),\n };\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","UI_CONTEXT_CACHE_TTL_MS","serializeErrorTask","task","truncateSerializedErrorString","undefined","TaskRunner","error","kind","console","options","now","Date","shouldReuse","uiContext","screenshot","phase","recorderItem","uuid","errorMessage","assert","appended","Array","item","appendedTask","nextPendingIndex","taskIndex","successfullyCompleted","previousFindOutput","taskStarted","e","executor","returnValue","forceRefresh","setTimingFieldOnce","executorContext","isLastTask","serializedError","serializeError","cancelledTasks","i","cancelledTask","finalizeError","errorTask","TaskExecutionError","outputIndex","Math","thought","output","ExecutionDump","errorMsg","Error","name","uiContextBuilder","Set","image"],"mappings":"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"}
1
+ {"version":3,"file":"task-runner.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../src/task-runner.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 type { ScreenshotItem } from '@/screenshot-item';\nimport { setTimingFieldOnce } from '@/task-timing';\nimport {\n ExecutionDump,\n type ExecutionRecorderItem,\n type ExecutionTask,\n type ExecutionTaskActionApply,\n type ExecutionTaskApply,\n type ExecutionTaskPlanningLocateOutput,\n type ExecutionTaskProgressOptions,\n type ExecutionTaskReturn,\n type ExecutorContext,\n type PlanningActionParamError,\n type UIContext,\n} from '@/types';\nimport {\n type SerializedError,\n serializeError,\n truncateSerializedErrorString,\n} from '@midscene/shared/agent-tools/error-formatter';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert, uuid } from '@midscene/shared/utils';\n\nconst debug = getDebug('task-runner');\nconst UI_CONTEXT_CACHE_TTL_MS = 300;\n\nfunction serializeTaskError(\n error: unknown,\n signal?: AbortSignal,\n): SerializedError {\n const serializedError = serializeError(error);\n // Do not relabel an unrelated error that races with cancellation.\n // Preserve the original stack and diagnostics alongside the explanation.\n if (signal?.aborted && error === signal.reason) {\n serializedError.message = truncateSerializedErrorString(\n `Operation interrupted by an external abort signal.\\nReason: ${serializedError.message}`,\n );\n }\n return serializedError;\n}\n\n/**\n * A native, per-task lifecycle notification. The runner is the single source\n * of truth for when a task actually transitions, so it reports each transition\n * exactly once with the task that changed. Consumers no longer have to re-scan\n * the task list and diff it against remembered keys to reconstruct this stream.\n */\nexport type TaskRunnerEventKind =\n | 'append'\n | 'start'\n | 'finish'\n | 'error'\n | 'cancel';\n\nexport interface TaskRunnerEvent {\n kind: TaskRunnerEventKind;\n task: ExecutionTask;\n runner: TaskRunner;\n}\n\nexport interface SerializedErrorTask {\n taskId: string;\n type: ExecutionTask['type'];\n subType?: string;\n status: ExecutionTask['status'];\n thought?: string;\n errorMessage?: string;\n}\n\nexport interface SerializedTaskExecutionError extends SerializedError {\n code: 'TASK_EXECUTION_FAILED';\n cause: SerializedError;\n task?: SerializedErrorTask;\n}\n\nfunction serializeErrorTask(\n task: ExecutionTask | null,\n): SerializedErrorTask | undefined {\n if (!task) {\n return undefined;\n }\n\n return {\n taskId: truncateSerializedErrorString(task.taskId),\n type: task.type,\n ...(task.subType === undefined\n ? {}\n : { subType: truncateSerializedErrorString(task.subType) }),\n status: task.status,\n ...(task.thought === undefined\n ? {}\n : { thought: truncateSerializedErrorString(task.thought) }),\n ...(task.errorMessage === undefined\n ? {}\n : {\n errorMessage: truncateSerializedErrorString(task.errorMessage),\n }),\n };\n}\n\nexport type TaskRunnerEventListener = (\n event: TaskRunnerEvent,\n) => Promise<void> | void;\n\n/** Minimal prompt-image shape retained as report asset metadata. */\nexport interface ExecutionReferenceImage {\n readonly url: string;\n}\n\ntype TaskRunnerInitOptions = ExecutionTaskProgressOptions & {\n tasks?: ExecutionTaskApply[];\n abortSignal?: AbortSignal;\n referenceImages?: readonly ExecutionReferenceImage[];\n /**\n * Coarse \"the execution snapshot changed\" signal. Fires on any state change\n * (append, status flips, completion) with the whole runner, so consumers can\n * re-dump/re-render the current snapshot. Deliberately batch-granular, unlike\n * the per-task {@link onTaskEvent} stream.\n */\n onSnapshotChange?: (\n runner: TaskRunner,\n error?: TaskExecutionError,\n ) => Promise<void> | void;\n onTaskEvent?: TaskRunnerEventListener;\n};\n\ntype TaskRunnerOperationOptions = {\n allowWhenError?: boolean;\n};\n\nexport class TaskRunner {\n readonly id: string;\n name: string;\n\n tasks: ExecutionTask[];\n\n // status of runner\n status: 'init' | 'pending' | 'running' | 'completed' | 'error';\n\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n\n private readonly uiContextBuilder: (\n signal?: AbortSignal,\n ) => Promise<UIContext>;\n private readonly abortSignal?: AbortSignal;\n\n private readonly onSnapshotChange?:\n | ((runner: TaskRunner, error?: TaskExecutionError) => Promise<void> | void)\n | undefined;\n\n private readonly onTaskEvent?: TaskRunnerEventListener | undefined;\n\n private readonly executionLogTime: number;\n\n private readonly referenceImageUrls = new Set<string>();\n\n constructor(\n name: string,\n uiContextBuilder: (signal?: AbortSignal) => Promise<UIContext>,\n options?: TaskRunnerInitOptions,\n ) {\n this.id = uuid();\n this.status =\n options?.tasks && options.tasks.length > 0 ? 'pending' : 'init';\n this.name = name;\n this.tasks = (options?.tasks || []).map((item) =>\n this.markTaskAsPending(item),\n );\n this.onTaskStart = options?.onTaskStart;\n this.uiContextBuilder = uiContextBuilder;\n this.abortSignal = options?.abortSignal;\n this.onSnapshotChange = options?.onSnapshotChange;\n this.onTaskEvent = options?.onTaskEvent;\n this.executionLogTime = Date.now();\n for (const image of options?.referenceImages ?? []) {\n this.referenceImageUrls.add(image.url);\n }\n }\n\n private async emitSnapshotChange(error?: TaskExecutionError): Promise<void> {\n if (!this.onSnapshotChange) {\n return;\n }\n await this.onSnapshotChange(this, error);\n }\n\n private async emitTaskEvent(\n kind: TaskRunnerEventKind,\n task: ExecutionTask,\n ): Promise<void> {\n if (!this.onTaskEvent) {\n return;\n }\n try {\n await this.onTaskEvent({ kind, task, runner: this });\n } catch (error) {\n console.error('Error in onTaskEvent listener', error);\n }\n }\n\n private lastUiContext?: {\n context: UIContext;\n capturedAt: number;\n };\n\n private async getUiContext(options?: { forceRefresh?: boolean }): Promise<\n UIContext | undefined\n > {\n this.abortSignal?.throwIfAborted();\n const now = Date.now();\n const shouldReuse =\n !options?.forceRefresh &&\n this.lastUiContext &&\n now - this.lastUiContext.capturedAt <= UI_CONTEXT_CACHE_TTL_MS;\n\n if (shouldReuse && this.lastUiContext?.context) {\n debug(\n `reuse cached uiContext captured ${now - this.lastUiContext.capturedAt}ms ago`,\n );\n return this.lastUiContext?.context;\n }\n\n try {\n const uiContext = await this.uiContextBuilder(this.abortSignal);\n this.abortSignal?.throwIfAborted();\n if (uiContext) {\n this.lastUiContext = {\n context: uiContext,\n capturedAt: Date.now(),\n };\n } else {\n this.lastUiContext = undefined;\n }\n return uiContext;\n } catch (error) {\n this.lastUiContext = undefined;\n throw error;\n }\n }\n\n private async captureScreenshot(): Promise<ScreenshotItem | undefined> {\n try {\n const uiContext = await this.getUiContext({ forceRefresh: true });\n return uiContext?.screenshot;\n } catch (error) {\n console.error('error while capturing screenshot', error);\n }\n return undefined;\n }\n\n private attachRecorderItem(\n task: ExecutionTask,\n screenshot: ScreenshotItem | undefined,\n phase: 'after-calling',\n ): void {\n if (!phase || !screenshot) {\n return;\n }\n\n const recorderItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: Date.now(),\n screenshot,\n timing: phase,\n };\n\n if (!task.recorder) {\n task.recorder = [recorderItem];\n return;\n }\n task.recorder.push(recorderItem);\n }\n\n private markTaskAsPending(task: ExecutionTaskApply): ExecutionTask {\n return {\n taskId: uuid(),\n status: 'pending',\n ...task,\n };\n }\n\n private normalizeStatusFromError(\n options?: TaskRunnerOperationOptions,\n errorMessage?: string,\n ): void {\n if (this.status !== 'error') {\n return;\n }\n assert(\n options?.allowWhenError,\n errorMessage ||\n `task runner is in error state, cannot proceed\\nerror=${this.latestErrorTask()?.errorMessage}\\n${this.latestErrorTask()?.errorStack}`,\n );\n // reset runner state so new tasks can run\n this.status = this.tasks.length > 0 ? 'pending' : 'init';\n }\n\n async append(\n task: ExecutionTaskApply[] | ExecutionTaskApply,\n options?: TaskRunnerOperationOptions,\n ): Promise<void> {\n this.abortSignal?.throwIfAborted();\n this.normalizeStatusFromError(\n options,\n `task runner is in error state, cannot append task\\nerror=${this.latestErrorTask()?.errorMessage}\\n${this.latestErrorTask()?.errorStack}`,\n );\n const appended: ExecutionTask[] = [];\n if (Array.isArray(task)) {\n appended.push(...task.map((item) => this.markTaskAsPending(item)));\n } else {\n appended.push(this.markTaskAsPending(task));\n }\n this.tasks.push(...appended);\n if (this.status !== 'running') {\n this.status = 'pending';\n }\n await this.emitSnapshotChange();\n for (const appendedTask of appended) {\n await this.emitTaskEvent('append', appendedTask);\n }\n }\n\n async appendAndFlush(\n task: ExecutionTaskApply[] | ExecutionTaskApply,\n options?: TaskRunnerOperationOptions,\n ): Promise<{ output: any; thought?: string } | undefined> {\n await this.append(task, options);\n return this.flush(options);\n }\n\n async flush(\n options?: TaskRunnerOperationOptions,\n ): Promise<{ output: any; thought?: string } | undefined> {\n if (this.status === 'init' && this.tasks.length > 0) {\n console.warn(\n 'illegal state for task runner, status is init but tasks are not empty',\n );\n }\n\n this.normalizeStatusFromError(options, 'task runner is in error state');\n assert(this.status !== 'running', 'task runner is already running');\n assert(this.status !== 'completed', 'task runner is already completed');\n\n const nextPendingIndex = this.tasks.findIndex(\n (task) => task.status === 'pending',\n );\n if (nextPendingIndex < 0) {\n // all tasks are completed\n return;\n }\n\n this.status = 'running';\n await this.emitSnapshotChange();\n let taskIndex = nextPendingIndex;\n let successfullyCompleted = true;\n\n let previousFindOutput: ExecutionTaskPlanningLocateOutput | undefined;\n\n while (taskIndex < this.tasks.length) {\n const task = this.tasks[taskIndex];\n assert(\n task.status === 'pending',\n `task status should be pending, but got: ${task.status}`,\n );\n let taskStarted = false;\n try {\n this.abortSignal?.throwIfAborted();\n taskStarted = true;\n task.timing = { start: Date.now() };\n task.status = 'running';\n await this.emitSnapshotChange();\n await this.emitTaskEvent('start', task);\n this.abortSignal?.throwIfAborted();\n try {\n if (this.onTaskStart) {\n await this.onTaskStart(task, this.abortSignal);\n }\n } catch (e) {\n console.error('error in onTaskStart', e);\n }\n this.abortSignal?.throwIfAborted();\n assert(\n ['Insight', 'Action Space', 'Planning'].indexOf(task.type) >= 0,\n `unsupported task type: ${task.type}`,\n );\n\n const { executor } = task;\n assert(executor, `executor is required for task type: ${task.type}`);\n\n let returnValue;\n // For Insight tasks (Query/Assert/WaitFor), always get fresh context\n // to ensure we have the latest UI state after any preceding actions\n const forceRefresh = task.type === 'Insight';\n setTimingFieldOnce(task.timing, 'getUiContextStart');\n const uiContext = await this.getUiContext({ forceRefresh });\n setTimingFieldOnce(task.timing, 'getUiContextEnd');\n this.abortSignal?.throwIfAborted();\n\n task.uiContext = uiContext;\n const executorContext: ExecutorContext = {\n task,\n element: previousFindOutput?.element,\n uiContext,\n signal: this.abortSignal,\n };\n\n if (task.type === 'Insight') {\n assert(\n task.subType === 'Query' ||\n task.subType === 'Assert' ||\n task.subType === 'WaitFor' ||\n task.subType === 'Boolean' ||\n task.subType === 'Number' ||\n task.subType === 'String',\n `unsupported service subType: ${task.subType}`,\n );\n returnValue = await task.executor(executorContext);\n } else if (task.type === 'Planning') {\n returnValue = await task.executor(executorContext);\n if (task.subType === 'Locate') {\n previousFindOutput = (\n returnValue as ExecutionTaskReturn<ExecutionTaskPlanningLocateOutput>\n )?.output;\n }\n } else if (task.type === 'Action Space') {\n try {\n returnValue = await task.executor(executorContext);\n } finally {\n // The short TTL still lets planning and the action itself share one\n // context. Once an action settles, time alone can no longer prove\n // that the cached context represents the current UI.\n this.lastUiContext = undefined;\n }\n } else {\n console.warn(\n `unsupported task type: ${task.type}, will try to execute it directly`,\n );\n returnValue = await task.executor(executorContext);\n }\n\n this.abortSignal?.throwIfAborted();\n const isLastTask = taskIndex === this.tasks.length - 1;\n\n if (isLastTask) {\n setTimingFieldOnce(task.timing, 'captureAfterCallingSnapshotStart');\n const screenshot = await this.captureScreenshot();\n this.abortSignal?.throwIfAborted();\n this.attachRecorderItem(task, screenshot, 'after-calling');\n setTimingFieldOnce(task.timing, 'captureAfterCallingSnapshotEnd');\n }\n // Cancellation may arrive during the report screenshot, after planning\n // has returned but before the next batch of actions is built.\n this.abortSignal?.throwIfAborted();\n\n Object.assign(task, returnValue);\n task.status = 'finished';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n await this.emitSnapshotChange();\n await this.emitTaskEvent('finish', task);\n taskIndex++;\n } catch (error) {\n successfullyCompleted = false;\n const serializedError = serializeTaskError(error, this.abortSignal);\n task.error = serializedError;\n task.errorMessage = serializedError.message;\n task.errorStack = serializedError.stack;\n\n task.status = taskStarted ? 'failed' : 'cancelled';\n if (taskStarted && task.timing) {\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n }\n await this.emitSnapshotChange();\n await this.emitTaskEvent(taskStarted ? 'error' : 'cancel', task);\n break;\n }\n }\n\n // set all remaining tasks as cancelled\n const cancelledTasks: ExecutionTask[] = [];\n for (let i = taskIndex + 1; i < this.tasks.length; i++) {\n this.tasks[i].status = 'cancelled';\n cancelledTasks.push(this.tasks[i]);\n }\n if (cancelledTasks.length > 0) {\n await this.emitSnapshotChange();\n for (const cancelledTask of cancelledTasks) {\n await this.emitTaskEvent('cancel', cancelledTask);\n }\n }\n\n let finalizeError: TaskExecutionError | undefined;\n if (!successfullyCompleted) {\n this.status = 'error';\n const errorTask = this.latestErrorTask();\n const error =\n errorTask?.error ??\n (this.abortSignal?.aborted\n ? serializeTaskError(this.abortSignal.reason, this.abortSignal)\n : {\n name: 'Error',\n message: 'Task execution failed',\n });\n finalizeError = new TaskExecutionError(\n error,\n serializeErrorTask(errorTask),\n );\n await this.emitSnapshotChange(finalizeError);\n } else {\n this.status = 'completed';\n await this.emitSnapshotChange();\n }\n\n if (finalizeError) {\n throw finalizeError;\n }\n\n if (this.tasks.length) {\n // return the last output\n const outputIndex = Math.min(taskIndex, this.tasks.length - 1);\n const { thought, output } = this.tasks[outputIndex];\n return {\n thought,\n output,\n };\n }\n }\n\n isInErrorState(): boolean {\n return this.status === 'error';\n }\n\n latestErrorTask(): ExecutionTask | null {\n if (this.status !== 'error') {\n return null;\n }\n // Find the LAST failed task (not the first one)\n // This is important when using allowWhenError to continue after errors\n for (let i = this.tasks.length - 1; i >= 0; i--) {\n if (this.tasks[i].status === 'failed') {\n return this.tasks[i];\n }\n }\n return null;\n }\n\n dump(): ExecutionDump {\n return new ExecutionDump(\n {\n id: this.id,\n logTime: this.executionLogTime,\n name: this.name,\n tasks: this.tasks,\n },\n { referenceImageUrls: [...this.referenceImageUrls] },\n );\n }\n\n async appendErrorPlan(errorMsg: string): Promise<{\n output: undefined;\n runner: TaskRunner;\n }> {\n const errorTask: ExecutionTaskActionApply<PlanningActionParamError> = {\n type: 'Action Space',\n subType: 'Error',\n param: {\n thought: errorMsg,\n },\n thought: errorMsg,\n executor: async () => {\n throw new Error(errorMsg || 'error without thought');\n },\n };\n await this.appendAndFlush(errorTask);\n\n return {\n output: undefined,\n runner: this,\n };\n }\n}\n\nexport class TaskExecutionError extends Error {\n readonly code = 'TASK_EXECUTION_FAILED' as const;\n\n override readonly cause: SerializedError;\n\n readonly task?: SerializedErrorTask;\n\n constructor(error: SerializedError, task?: SerializedErrorTask) {\n super(error.message, { cause: error });\n this.name = 'TaskExecutionError';\n this.cause = error;\n this.task = task;\n if (this.stack) {\n this.stack = truncateSerializedErrorString(this.stack);\n }\n }\n\n /**\n * Return the same bounded fields already stored on the live error. The\n * wrapper stack identifies where TaskExecutionError was created; cause.stack\n * preserves the executor's original stack.\n */\n toJSON(): SerializedTaskExecutionError {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n ...(this.stack === undefined ? {} : { stack: this.stack }),\n cause: this.cause,\n ...(this.task === undefined ? {} : { task: this.task }),\n };\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","UI_CONTEXT_CACHE_TTL_MS","serializeTaskError","error","signal","serializedError","serializeError","truncateSerializedErrorString","serializeErrorTask","task","undefined","TaskRunner","kind","console","options","now","Date","shouldReuse","uiContext","screenshot","phase","recorderItem","uuid","errorMessage","assert","appended","Array","item","appendedTask","nextPendingIndex","taskIndex","successfullyCompleted","previousFindOutput","taskStarted","e","executor","returnValue","forceRefresh","setTimingFieldOnce","executorContext","isLastTask","cancelledTasks","i","cancelledTask","finalizeError","errorTask","TaskExecutionError","outputIndex","Math","thought","output","ExecutionDump","errorMsg","Error","name","uiContextBuilder","Set","image"],"mappings":"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"}
package/dist/lib/utils.js CHANGED
@@ -228,7 +228,7 @@ function stringifyDumpData(data, indents) {
228
228
  return JSON.stringify(data, replacerForPageObject, indents);
229
229
  }
230
230
  function getVersion() {
231
- return "1.17.5";
231
+ return "1.17.6";
232
232
  }
233
233
  function debugLog(...message) {
234
234
  const debugMode = process.env[env_namespaceObject.MIDSCENE_DEBUG_MODE];
@@ -1 +1 @@
1
- {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../../../../src/ai-model/models/jev/locate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAGhE,eAAO,MAAM,SAAS,EAAE,QA4CvB,CAAC"}
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../../../../src/ai-model/models/jev/locate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAGhE,eAAO,MAAM,SAAS,EAAE,QAgCvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAiC,MAAM,MAAM,CAAC;AAK3E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;;;GAgCA;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;;;cAqCvE;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE;IAAE,KAAK,EAAE,OAAO,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;;;;;kBA4EtB,MAAM;mBACJ,MAAM;cAChB,MAAM;;;;GAItC"}
1
+ {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,MAAM,CAAC;AAMvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;;;GAgCA;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;;;cAqCvE;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE;IAAE,KAAK,EAAE,OAAO,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;;;;;kBA2EtB,MAAM;mBACJ,MAAM;cAChB,MAAM;;;;GAItC"}
@@ -0,0 +1,8 @@
1
+ import { type JWTVerifyGetKey } from 'jose';
2
+ export interface SiwcProxyConfig {
3
+ httpProxy?: string;
4
+ socksProxy?: string;
5
+ }
6
+ export declare function fetchSiwc(input: Parameters<typeof fetch>[0], init?: RequestInit, proxy?: SiwcProxyConfig): Promise<Response>;
7
+ export declare function createSiwcJWKSet(issuer: string, signal: AbortSignal, request?: typeof fetch): JWTVerifyGetKey;
8
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/network.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,MAAM,CAAC;AAI/D,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,eAAe,qBAsBxB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,OAAO,KAAiB,GAChC,eAAe,CAWjB"}
@@ -7,7 +7,7 @@ interface RefreshableCredentials {
7
7
  }
8
8
  export declare function refreshSiwcCredentials<T extends RefreshableCredentials>(saved: T, signal: AbortSignal, dependencies?: {
9
9
  fetch: typeof fetch;
10
- keys: JWTVerifyGetKey;
10
+ keys?: JWTVerifyGetKey;
11
11
  }): Promise<T & {
12
12
  access_token: any;
13
13
  refresh_token: any;
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAiC,MAAM,MAAM,CAAC;AAE3E,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,sBAAsB,EAC3E,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE;IAAE,KAAK,EAAE,OAAO,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;;;;;;GAmF9D"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,MAAM,CAAC;AAGvD,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,sBAAsB,EAC3E,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE;IAAE,KAAK,EAAE,OAAO,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE;;;;;;GAgF/D"}
@@ -1,8 +1,9 @@
1
+ import { type SiwcProxyConfig } from './network';
1
2
  declare class SiwcTokenManager {
2
3
  private pendingRefresh?;
3
4
  getAccessToken(): Promise<string>;
4
5
  /** Only refresh operations are shared; ordinary reads remain independent. */
5
- refreshAccessToken(previousAccessToken: string): Promise<string>;
6
+ refreshAccessToken(previousAccessToken: string, proxy?: SiwcProxyConfig): Promise<string>;
6
7
  private refreshAndSave;
7
8
  }
8
9
  export declare const siwcTokenManager: SiwcTokenManager;
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/token-manager.ts"],"names":[],"mappings":"AAGA,cAAM,gBAAgB;IACpB,OAAO,CAAC,cAAc,CAAC,CAAkB;IAEnC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQvC,6EAA6E;IAC7E,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YASlD,cAAc;CA2B7B;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../../../../../src/ai-model/service-caller/openai/siwc/token-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,WAAW,CAAC;AAG5D,cAAM,gBAAgB;IACpB,OAAO,CAAC,cAAc,CAAC,CAAkB;IAEnC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAQvC,6EAA6E;IAC7E,kBAAkB,CAChB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,GAAE,eAAoB,GAC1B,OAAO,CAAC,MAAM,CAAC;YAUJ,cAAc;CA+B7B;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -1,19 +1,8 @@
1
1
  /**
2
- * Extract the JSON portion from a model response.
3
- *
4
- * This mainly handles fenced JSON like ```json { ... } ``` by removing the
5
- * fence. If that does not produce a JSON object, it falls back to a greedy regex
6
- * that extracts from the first "{" to the last "}". If that still fails, the
7
- * original response is returned.
8
- *
9
- * Expected model responses are JSON objects, possibly wrapped in markdown
10
- * fences. Natural language mixed with JSON, or arrays like
11
- * [{"type":"Tap"}, {"type":"Hover"}], are outside the supported contract and
12
- * are not reliably recoverable.
13
- *
14
- * This extractor is also used by extraction responses that can be any
15
- * JSON value. In those cases, arrays/strings/numbers have no object braces and
16
- * pass through unchanged.
2
+ * Preserve complete JSON values and remove optional markdown fences before
3
+ * parsing. Keep array boundaries intact, including when the contents need repair.
4
+ * For prose mixed with JSON, fall back to extracting the first through last
5
+ * object brace; arbitrary prose with arrays is not a supported format.
17
6
  */
18
7
  export declare function extractJSONFromCodeBlock(response: string): string;
19
8
  export type JsonParserSource = 'generic-object' | 'planning-action-param' | 'locate' | 'section-locator';
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/ai-model/shared/json.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UAwBxD;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,uBAAuB,GACvB,QAAQ,GACR,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC;AA8D/E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW3C;AAUD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,iBAAiB,OA8B5B"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/ai-model/shared/json.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,UA6BxD;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,uBAAuB,GACvB,QAAQ,GACR,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC;AA8D/E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW3C;AAUD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,iBAAiB,OA8B5B"}
@@ -0,0 +1,5 @@
1
+ /** Public SIWC authorization API for external login and CI session owners. */
2
+ export { refreshSiwcCredentials } from './ai-model/service-caller/openai/siwc/refresh';
3
+ export { type SiwcLoginAttempt, createSiwcAuthorization, parseSiwcCallback, exchangeSiwcCode, } from './ai-model/service-caller/openai/siwc/authorization';
4
+ export { SiwcError } from './ai-model/service-caller/openai/siwc/errors';
5
+ //# sourceMappingURL=siwc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siwc.d.ts","sourceRoot":"","sources":["../../src/siwc.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EACL,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../src/task-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../src/task-runner.ts"],"names":[],"mappings":"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"}
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": "1.17.5",
4
+ "version": "1.17.6",
5
5
  "repository": "https://github.com/web-infra-dev/midscene",
6
6
  "homepage": "https://midscenejs.com/",
7
7
  "main": "./dist/lib/index.js",
@@ -44,6 +44,11 @@
44
44
  "import": "./dist/es/utils.mjs",
45
45
  "require": "./dist/lib/utils.js"
46
46
  },
47
+ "./siwc": {
48
+ "types": "./dist/types/siwc.d.ts",
49
+ "import": "./dist/es/siwc.mjs",
50
+ "require": "./dist/lib/siwc.js"
51
+ },
47
52
  "./ai-model": {
48
53
  "types": "./dist/types/ai-model/index.d.ts",
49
54
  "import": "./dist/es/ai-model/index.mjs",
@@ -118,6 +123,9 @@
118
123
  "utils": [
119
124
  "./dist/types/utils.d.ts"
120
125
  ],
126
+ "siwc": [
127
+ "./dist/types/siwc.d.ts"
128
+ ],
121
129
  "ai-model": [
122
130
  "./dist/types/ai-model.d.ts"
123
131
  ],
@@ -188,7 +196,7 @@
188
196
  "semver": "7.5.2",
189
197
  "undici": "^6.0.0",
190
198
  "zod": "^3.25.1",
191
- "@midscene/shared": "1.17.5"
199
+ "@midscene/shared": "1.17.6"
192
200
  },
193
201
  "devDependencies": {
194
202
  "@rslib/core": "^0.18.3",