@aiscene/shared 8.0.1 → 8.0.3

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 (92) hide show
  1. package/dist/es/cli/cli-args.mjs +95 -0
  2. package/dist/es/cli/cli-error.mjs +24 -0
  3. package/dist/es/cli/cli-runner.mjs +10 -40
  4. package/dist/es/cli/index.mjs +4 -2
  5. package/dist/es/constants/example-code.mjs +2 -2
  6. package/dist/es/constants/index.mjs +6 -1
  7. package/dist/es/env/model-config-manager.mjs +3 -0
  8. package/dist/es/env/parse-model-config.mjs +6 -1
  9. package/dist/es/env/types.mjs +2 -1
  10. package/dist/es/env/utils.mjs +1 -9
  11. package/dist/es/extractor/index.mjs +2 -2
  12. package/dist/es/img/index.mjs +2 -2
  13. package/dist/es/img/info.mjs +7 -1
  14. package/dist/es/key-alias-utils.mjs +19 -0
  15. package/dist/es/mcp/base-server.mjs +10 -9
  16. package/dist/es/mcp/base-tools.mjs +72 -4
  17. package/dist/es/mcp/cli-report-session.mjs +78 -0
  18. package/dist/es/mcp/error-formatter.mjs +19 -0
  19. package/dist/es/mcp/index.mjs +2 -0
  20. package/dist/es/mcp/init-arg-utils.mjs +38 -0
  21. package/dist/es/mcp/inject-report-html-plugin.mjs +1 -1
  22. package/dist/es/mcp/tool-generator.mjs +65 -17
  23. package/dist/es/node/fs.mjs +1 -1
  24. package/dist/lib/cli/cli-args.js +138 -0
  25. package/dist/lib/cli/cli-error.js +61 -0
  26. package/dist/lib/cli/cli-runner.js +19 -46
  27. package/dist/lib/cli/index.js +8 -3
  28. package/dist/lib/constants/example-code.js +2 -2
  29. package/dist/lib/constants/index.js +23 -3
  30. package/dist/lib/env/model-config-manager.js +3 -0
  31. package/dist/lib/env/parse-model-config.js +6 -1
  32. package/dist/lib/env/types.js +4 -0
  33. package/dist/lib/env/utils.js +0 -11
  34. package/dist/lib/extractor/index.js +3 -0
  35. package/dist/lib/img/index.js +3 -0
  36. package/dist/lib/img/info.js +10 -1
  37. package/dist/lib/key-alias-utils.js +62 -0
  38. package/dist/lib/mcp/base-server.js +11 -10
  39. package/dist/lib/mcp/base-tools.js +74 -6
  40. package/dist/lib/mcp/cli-report-session.js +121 -0
  41. package/dist/lib/mcp/error-formatter.js +53 -0
  42. package/dist/lib/mcp/index.js +24 -10
  43. package/dist/lib/mcp/init-arg-utils.js +78 -0
  44. package/dist/lib/mcp/inject-report-html-plugin.js +1 -1
  45. package/dist/lib/mcp/tool-generator.js +74 -26
  46. package/dist/lib/node/fs.js +1 -1
  47. package/dist/types/cli/cli-args.d.ts +8 -0
  48. package/dist/types/cli/cli-error.d.ts +5 -0
  49. package/dist/types/cli/cli-runner.d.ts +4 -7
  50. package/dist/types/cli/index.d.ts +3 -1
  51. package/dist/types/constants/example-code.d.ts +1 -1
  52. package/dist/types/constants/index.d.ts +5 -0
  53. package/dist/types/env/types.d.ts +10 -2
  54. package/dist/types/env/utils.d.ts +0 -31
  55. package/dist/types/extractor/index.d.ts +1 -1
  56. package/dist/types/img/index.d.ts +1 -1
  57. package/dist/types/img/info.d.ts +5 -0
  58. package/dist/types/key-alias-utils.d.ts +9 -0
  59. package/dist/types/mcp/base-tools.d.ts +74 -5
  60. package/dist/types/mcp/cli-report-session.d.ts +12 -0
  61. package/dist/types/mcp/error-formatter.d.ts +12 -0
  62. package/dist/types/mcp/index.d.ts +2 -0
  63. package/dist/types/mcp/init-arg-utils.d.ts +13 -0
  64. package/dist/types/mcp/inject-report-html-plugin.d.ts +2 -2
  65. package/dist/types/mcp/launcher-helper.d.ts +3 -3
  66. package/dist/types/mcp/tool-generator.d.ts +3 -3
  67. package/dist/types/mcp/types.d.ts +9 -0
  68. package/package.json +1 -1
  69. package/src/cli/cli-args.ts +173 -0
  70. package/src/cli/cli-error.ts +24 -0
  71. package/src/cli/cli-runner.ts +37 -56
  72. package/src/cli/index.ts +3 -7
  73. package/src/constants/example-code.ts +2 -2
  74. package/src/constants/index.ts +10 -0
  75. package/src/env/model-config-manager.ts +3 -0
  76. package/src/env/parse-model-config.ts +19 -1
  77. package/src/env/types.ts +11 -2
  78. package/src/env/utils.ts +0 -50
  79. package/src/extractor/index.ts +1 -1
  80. package/src/img/index.ts +2 -0
  81. package/src/img/info.ts +27 -0
  82. package/src/key-alias-utils.ts +23 -0
  83. package/src/mcp/base-server.ts +10 -12
  84. package/src/mcp/base-tools.ts +218 -11
  85. package/src/mcp/cli-report-session.ts +130 -0
  86. package/src/mcp/error-formatter.ts +52 -0
  87. package/src/mcp/index.ts +2 -0
  88. package/src/mcp/init-arg-utils.ts +105 -0
  89. package/src/mcp/inject-report-html-plugin.ts +3 -3
  90. package/src/mcp/launcher-helper.ts +3 -3
  91. package/src/mcp/tool-generator.ts +98 -20
  92. package/src/mcp/types.ts +16 -1
@@ -0,0 +1,62 @@
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
+ camelToKebab: ()=>camelToKebab,
28
+ getKeyAliases: ()=>getKeyAliases,
29
+ isRecord: ()=>isRecord,
30
+ kebabToCamel: ()=>kebabToCamel
31
+ });
32
+ function kebabToCamel(str) {
33
+ return str.replace(/-([a-z])/g, (_, letter)=>letter.toUpperCase());
34
+ }
35
+ function camelToKebab(str) {
36
+ return str.replace(/[A-Z]/g, (letter)=>`-${letter.toLowerCase()}`).replace(/^-/, '');
37
+ }
38
+ function getKeyAliases(key) {
39
+ return [
40
+ ...new Set([
41
+ key,
42
+ kebabToCamel(key),
43
+ camelToKebab(key)
44
+ ])
45
+ ];
46
+ }
47
+ function isRecord(value) {
48
+ return 'object' == typeof value && null !== value && !Array.isArray(value);
49
+ }
50
+ exports.camelToKebab = __webpack_exports__.camelToKebab;
51
+ exports.getKeyAliases = __webpack_exports__.getKeyAliases;
52
+ exports.isRecord = __webpack_exports__.isRecord;
53
+ exports.kebabToCamel = __webpack_exports__.kebabToCamel;
54
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
55
+ "camelToKebab",
56
+ "getKeyAliases",
57
+ "isRecord",
58
+ "kebabToCamel"
59
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
60
+ Object.defineProperty(exports, '__esModule', {
61
+ value: true
62
+ });
@@ -38,12 +38,13 @@ __webpack_require__.d(__webpack_exports__, {
38
38
  BaseMCPServer: ()=>BaseMCPServer
39
39
  });
40
40
  const external_node_crypto_namespaceObject = require("node:crypto");
41
- const external_utils_js_namespaceObject = require("../utils.js");
41
+ const utils_namespaceObject = require("@aiscene/shared/utils");
42
42
  const mcp_js_namespaceObject = require("@modelcontextprotocol/sdk/server/mcp.js");
43
43
  const stdio_js_namespaceObject = require("@modelcontextprotocol/sdk/server/stdio.js");
44
44
  const streamableHttp_js_namespaceObject = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
45
45
  const external_express_namespaceObject = require("express");
46
46
  var external_express_default = /*#__PURE__*/ __webpack_require__.n(external_express_namespaceObject);
47
+ const external_error_formatter_js_namespaceObject = require("./error-formatter.js");
47
48
  function _define_property(obj, key, value) {
48
49
  if (key in obj) Object.defineProperty(obj, key, {
49
50
  value: value,
@@ -80,12 +81,12 @@ const CLEANUP_INTERVAL_MS = 300000;
80
81
  const MAX_SESSIONS = 100;
81
82
  class BaseMCPServer {
82
83
  async initializeToolsManager() {
83
- (0, external_utils_js_namespaceObject.setIsMcp)(true);
84
+ (0, utils_namespaceObject.setIsMcp)(true);
84
85
  this.toolsManager = this.providedToolsManager || this.createToolsManager();
85
86
  try {
86
87
  await this.toolsManager.initTools();
87
88
  } catch (error) {
88
- const message = error instanceof Error ? error.message : String(error);
89
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
89
90
  console.error(`Failed to initialize tools: ${message}`);
90
91
  console.error('Tools will be initialized on first use');
91
92
  }
@@ -111,7 +112,7 @@ class BaseMCPServer {
111
112
  try {
112
113
  await this.mcpServer.connect(transport);
113
114
  } catch (error) {
114
- const message = error instanceof Error ? error.message : String(error);
115
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
115
116
  console.error(`Failed to connect MCP stdio transport: ${message}`);
116
117
  throw new Error(`Failed to initialize MCP stdio transport: ${message}`);
117
118
  }
@@ -182,7 +183,7 @@ class BaseMCPServer {
182
183
  });
183
184
  }
184
185
  } catch (error) {
185
- const message = error instanceof Error ? error.message : String(error);
186
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
186
187
  const duration = Date.now() - startTime;
187
188
  console.error(`[${new Date().toISOString()}] [${requestId}] MCP request error after ${duration}ms: ${message}`);
188
189
  if (!res.headersSent) res.status(500).json({
@@ -210,7 +211,7 @@ class BaseMCPServer {
210
211
  for (const session of sessions.values())try {
211
212
  await session.transport.close();
212
213
  } catch (error) {
213
- const message = error instanceof Error ? error.message : String(error);
214
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
214
215
  console.error(`Failed to close session ${session.transport.sessionId}: ${message}`);
215
216
  }
216
217
  sessions.clear();
@@ -245,7 +246,7 @@ class BaseMCPServer {
245
246
  try {
246
247
  await this.mcpServer.connect(transport);
247
248
  } catch (error) {
248
- const message = error instanceof Error ? error.message : String(error);
249
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
249
250
  console.error(`[${new Date().toISOString()}] Failed to connect MCP transport: ${message}`);
250
251
  if (transport.sessionId) sessions.delete(transport.sessionId);
251
252
  throw new Error(`Failed to initialize MCP session: ${message}`);
@@ -264,7 +265,7 @@ class BaseMCPServer {
264
265
  sessions.delete(sid);
265
266
  console.log(`[${new Date().toISOString()}] Session ${sid} cleaned up due to inactivity (remaining: ${sessions.size})`);
266
267
  } catch (error) {
267
- const message = error instanceof Error ? error.message : String(error);
268
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
268
269
  console.error(`[${new Date().toISOString()}] Failed to close session ${sid} during cleanup: ${message}`);
269
270
  sessions.delete(sid);
270
271
  }
@@ -277,7 +278,7 @@ class BaseMCPServer {
277
278
  for (const session of sessions.values())try {
278
279
  session.transport.close();
279
280
  } catch (error) {
280
- const message = error instanceof Error ? error.message : String(error);
281
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
281
282
  console.error(`Error closing session during shutdown: ${message}`);
282
283
  }
283
284
  sessions.clear();
@@ -290,7 +291,7 @@ class BaseMCPServer {
290
291
  this.performCleanup().finally(()=>process.exit(1));
291
292
  }, 5000);
292
293
  } catch (error) {
293
- const message = error instanceof Error ? error.message : String(error);
294
+ const message = (0, external_error_formatter_js_namespaceObject.getErrorMessage)(error);
294
295
  console.error(`Error closing HTTP server: ${message}`);
295
296
  this.performCleanup().finally(()=>process.exit(1));
296
297
  }
@@ -26,8 +26,11 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  BaseMidsceneTools: ()=>BaseMidsceneTools
28
28
  });
29
- const index_js_namespaceObject = require("../img/index.js");
30
- const external_logger_js_namespaceObject = require("../logger.js");
29
+ const img_namespaceObject = require("@aiscene/shared/img");
30
+ const logger_namespaceObject = require("@aiscene/shared/logger");
31
+ const external_key_alias_utils_js_namespaceObject = require("../key-alias-utils.js");
32
+ const external_cli_report_session_js_namespaceObject = require("./cli-report-session.js");
33
+ const external_init_arg_utils_js_namespaceObject = require("./init-arg-utils.js");
31
34
  const external_tool_generator_js_namespaceObject = require("./tool-generator.js");
32
35
  function _define_property(obj, key, value) {
33
36
  if (key in obj) Object.defineProperty(obj, key, {
@@ -39,11 +42,76 @@ function _define_property(obj, key, value) {
39
42
  else obj[key] = value;
40
43
  return obj;
41
44
  }
42
- const debug = (0, external_logger_js_namespaceObject.getDebug)('mcp:base-tools');
45
+ const debug = (0, logger_namespaceObject.getDebug)('mcp:base-tools');
43
46
  class BaseMidsceneTools {
47
+ getInitArgKeys() {
48
+ return this.initArgSpec ? Object.keys(this.initArgSpec.shape) : [];
49
+ }
50
+ extractAgentInitParam(args) {
51
+ if (!this.initArgSpec) return;
52
+ const extracted = (0, external_init_arg_utils_js_namespaceObject.extractNamespacedArgs)(args, this.initArgSpec.namespace, this.getInitArgKeys());
53
+ if (this.initArgSpec.adapt) return this.initArgSpec.adapt(extracted);
54
+ return extracted;
55
+ }
56
+ sanitizeToolArgs(args) {
57
+ if (!this.initArgSpec) return args;
58
+ return (0, external_init_arg_utils_js_namespaceObject.sanitizeNamespacedArgs)(args, this.initArgSpec.namespace, this.getInitArgKeys());
59
+ }
60
+ getAgentInitArgSchema() {
61
+ if (!this.initArgSpec) return {};
62
+ return (0, external_init_arg_utils_js_namespaceObject.createNamespacedInitArgSchema)(this.initArgSpec.namespace, this.initArgSpec.shape);
63
+ }
64
+ getAgentInitArgCliMetadata() {
65
+ if (!this.initArgSpec?.cli) return;
66
+ const options = Object.fromEntries(this.getInitArgKeys().map((key)=>{
67
+ const canonicalKey = `${this.initArgSpec.namespace}.${key}`;
68
+ const preferredName = this.initArgSpec.cli?.preferredNames?.[key] ?? (this.initArgSpec.cli?.preferBareKeys ? (0, external_key_alias_utils_js_namespaceObject.camelToKebab)(key) : canonicalKey);
69
+ const acceptedNames = new Set([
70
+ preferredName,
71
+ ...this.initArgSpec.cli?.preferBareKeys ? (0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(key) : (0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(canonicalKey)
72
+ ]);
73
+ acceptedNames.delete(preferredName);
74
+ return [
75
+ canonicalKey,
76
+ {
77
+ preferredName,
78
+ aliases: [
79
+ ...acceptedNames
80
+ ]
81
+ }
82
+ ];
83
+ }));
84
+ return {
85
+ options
86
+ };
87
+ }
44
88
  preparePlatformTools() {
45
89
  return [];
46
90
  }
91
+ getCliReportSessionName() {}
92
+ createNewCliReportSession(targetIdentity) {
93
+ const sessionName = this.getCliReportSessionName();
94
+ if (!sessionName) return;
95
+ return (0, external_cli_report_session_js_namespaceObject.generateCliReportSession)(sessionName, targetIdentity);
96
+ }
97
+ commitCliReportSession(session) {
98
+ if (session) (0, external_cli_report_session_js_namespaceObject.writeCliReportSession)(session);
99
+ }
100
+ readCliReportFileName() {
101
+ const sessionName = this.getCliReportSessionName();
102
+ if (!sessionName) return;
103
+ return (0, external_cli_report_session_js_namespaceObject.readCliReportSession)(sessionName)?.reportFileName;
104
+ }
105
+ readCliReportAgentOptions() {
106
+ const reportFileName = this.readCliReportFileName();
107
+ if (!reportFileName) return;
108
+ return {
109
+ reportFileName,
110
+ reportAttributes: {
111
+ 'data-group-id': reportFileName
112
+ }
113
+ };
114
+ }
47
115
  async initTools() {
48
116
  this.toolDefinitions = [];
49
117
  const platformTools = this.preparePlatformTools();
@@ -58,8 +126,8 @@ class BaseMidsceneTools {
58
126
  await tempDevice.destroy?.();
59
127
  debug('Action space from temporary device:', actionSpace.map((a)=>a.name).join(', '));
60
128
  }
61
- const actionTools = (0, external_tool_generator_js_namespaceObject.generateToolsFromActionSpace)(actionSpace, ()=>this.ensureAgent());
62
- const commonTools = (0, external_tool_generator_js_namespaceObject.generateCommonTools)(()=>this.ensureAgent());
129
+ const actionTools = (0, external_tool_generator_js_namespaceObject.generateToolsFromActionSpace)(actionSpace, (args = {})=>this.ensureAgent(this.extractAgentInitParam(args)), (args = {})=>this.sanitizeToolArgs(args), this.getAgentInitArgSchema(), this.getAgentInitArgCliMetadata());
130
+ const commonTools = (0, external_tool_generator_js_namespaceObject.generateCommonTools)((args = {})=>this.ensureAgent(this.extractAgentInitParam(args)), this.getAgentInitArgSchema(), this.getAgentInitArgCliMetadata());
63
131
  this.toolDefinitions.push(...actionTools, ...commonTools);
64
132
  debug('Total tools prepared:', this.toolDefinitions.length);
65
133
  }
@@ -79,7 +147,7 @@ class BaseMidsceneTools {
79
147
  this.agent = agent;
80
148
  }
81
149
  buildScreenshotContent(screenshot) {
82
- const { mimeType, body } = (0, index_js_namespaceObject.parseBase64)(screenshot);
150
+ const { mimeType, body } = (0, img_namespaceObject.parseBase64)(screenshot);
83
151
  return [
84
152
  {
85
153
  type: 'image',
@@ -0,0 +1,121 @@
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
+ createCliReportSession: ()=>createCliReportSession,
28
+ generateCliReportSession: ()=>generateCliReportSession,
29
+ readCliReportSession: ()=>readCliReportSession,
30
+ writeCliReportSession: ()=>writeCliReportSession
31
+ });
32
+ const external_node_fs_namespaceObject = require("node:fs");
33
+ const external_node_path_namespaceObject = require("node:path");
34
+ const external_common_js_namespaceObject = require("../common.js");
35
+ const sessionDirName = 'cli-report-session';
36
+ function sanitizeSessionName(sessionName) {
37
+ return sessionName.replace(/[^a-zA-Z0-9._-]/g, '_') || 'default';
38
+ }
39
+ function sanitizeFileSegment(segment) {
40
+ const sanitized = segment.replace(/[^a-zA-Z0-9._-]/g, '_') || 'unknown';
41
+ return sanitized.slice(0, 80);
42
+ }
43
+ function ensureHtmlFileName(reportFileName) {
44
+ return reportFileName.endsWith('.html') ? reportFileName : `${reportFileName}.html`;
45
+ }
46
+ function formatDateForFileName(date) {
47
+ const pad = (value)=>String(value).padStart(2, '0');
48
+ const day = [
49
+ date.getFullYear(),
50
+ pad(date.getMonth() + 1),
51
+ pad(date.getDate())
52
+ ].join('-');
53
+ const time = [
54
+ pad(date.getHours()),
55
+ pad(date.getMinutes()),
56
+ pad(date.getSeconds())
57
+ ].join('-');
58
+ return `${day}_${time}`;
59
+ }
60
+ function randomId() {
61
+ return Math.random().toString(36).slice(2, 10);
62
+ }
63
+ function getCliReportSessionDir() {
64
+ const dir = (0, external_node_path_namespaceObject.join)((0, external_common_js_namespaceObject.getMidsceneRunBaseDir)(), sessionDirName);
65
+ if (!(0, external_node_fs_namespaceObject.existsSync)(dir)) (0, external_node_fs_namespaceObject.mkdirSync)(dir, {
66
+ recursive: true
67
+ });
68
+ return dir;
69
+ }
70
+ function getCliReportSessionPath(sessionName) {
71
+ return (0, external_node_path_namespaceObject.join)(getCliReportSessionDir(), `${sanitizeSessionName(sessionName)}.json`);
72
+ }
73
+ function generateCliReportSession(sessionName, targetIdentity) {
74
+ const identitySegment = targetIdentity ? `-${sanitizeFileSegment(targetIdentity)}` : '';
75
+ const reportFileName = `${sanitizeSessionName(sessionName)}${identitySegment}-${formatDateForFileName(new Date())}-${randomId()}`;
76
+ const reportPath = (0, external_node_path_namespaceObject.join)((0, external_common_js_namespaceObject.getMidsceneRunSubDir)('report'), ensureHtmlFileName(reportFileName));
77
+ const session = {
78
+ version: 1,
79
+ sessionName,
80
+ ...targetIdentity ? {
81
+ targetIdentity
82
+ } : {},
83
+ reportFileName,
84
+ reportPath,
85
+ createdAt: Date.now()
86
+ };
87
+ return session;
88
+ }
89
+ function writeCliReportSession(session) {
90
+ (0, external_node_fs_namespaceObject.writeFileSync)(getCliReportSessionPath(session.sessionName), JSON.stringify(session, null, 2), 'utf-8');
91
+ }
92
+ function createCliReportSession(sessionName, targetIdentity) {
93
+ const session = generateCliReportSession(sessionName, targetIdentity);
94
+ writeCliReportSession(session);
95
+ return session;
96
+ }
97
+ function readCliReportSession(sessionName) {
98
+ const sessionPath = getCliReportSessionPath(sessionName);
99
+ if (!(0, external_node_fs_namespaceObject.existsSync)(sessionPath)) return;
100
+ try {
101
+ const raw = (0, external_node_fs_namespaceObject.readFileSync)(sessionPath, 'utf-8');
102
+ const parsed = JSON.parse(raw);
103
+ if (1 !== parsed.version || parsed.sessionName !== sessionName || 'string' != typeof parsed.reportFileName || !parsed.reportFileName.trim() || /[\\/]/.test(parsed.reportFileName)) return;
104
+ return parsed;
105
+ } catch {
106
+ return;
107
+ }
108
+ }
109
+ exports.createCliReportSession = __webpack_exports__.createCliReportSession;
110
+ exports.generateCliReportSession = __webpack_exports__.generateCliReportSession;
111
+ exports.readCliReportSession = __webpack_exports__.readCliReportSession;
112
+ exports.writeCliReportSession = __webpack_exports__.writeCliReportSession;
113
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
114
+ "createCliReportSession",
115
+ "generateCliReportSession",
116
+ "readCliReportSession",
117
+ "writeCliReportSession"
118
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
119
+ Object.defineProperty(exports, '__esModule', {
120
+ value: true
121
+ });
@@ -0,0 +1,53 @@
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
+ getErrorMessage: ()=>getErrorMessage
28
+ });
29
+ function getErrorMessage(error) {
30
+ if (error instanceof Error) return error.message;
31
+ if (null == error) return String(error);
32
+ if ('object' != typeof error) return String(error);
33
+ const candidate = extractStringMessage(error);
34
+ if (candidate) return candidate;
35
+ try {
36
+ return JSON.stringify(error);
37
+ } catch {
38
+ return Object.prototype.toString.call(error);
39
+ }
40
+ }
41
+ function extractStringMessage(error) {
42
+ const anyError = error;
43
+ if ('string' == typeof anyError.message && anyError.message) return anyError.message;
44
+ if (anyError.error && 'string' == typeof anyError.error.message && anyError.error.message) return anyError.error.message;
45
+ if (anyError.cause && 'string' == typeof anyError.cause.message && anyError.cause.message) return anyError.cause.message;
46
+ }
47
+ exports.getErrorMessage = __webpack_exports__.getErrorMessage;
48
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
49
+ "getErrorMessage"
50
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
51
+ Object.defineProperty(exports, '__esModule', {
52
+ value: true
53
+ });
@@ -9,6 +9,12 @@ var __webpack_modules__ = {
9
9
  "./chrome-path" (module) {
10
10
  module.exports = require("./chrome-path.js");
11
11
  },
12
+ "./error-formatter" (module) {
13
+ module.exports = require("./error-formatter.js");
14
+ },
15
+ "./init-arg-utils" (module) {
16
+ module.exports = require("./init-arg-utils.js");
17
+ },
12
18
  "./inject-report-html-plugin" (module) {
13
19
  module.exports = require("./inject-report-html-plugin.js");
14
20
  },
@@ -73,25 +79,33 @@ var __webpack_exports__ = {};
73
79
  var __rspack_reexport = {};
74
80
  for(const __rspack_import_key in _base_tools__rspack_import_1)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_base_tools__rspack_import_1[__rspack_import_key];
75
81
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
76
- var _tool_generator__rspack_import_2 = __webpack_require__("./tool-generator");
82
+ var _init_arg_utils__rspack_import_2 = __webpack_require__("./init-arg-utils");
83
+ var __rspack_reexport = {};
84
+ for(const __rspack_import_key in _init_arg_utils__rspack_import_2)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_init_arg_utils__rspack_import_2[__rspack_import_key];
85
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
86
+ var _error_formatter__rspack_import_3 = __webpack_require__("./error-formatter");
87
+ var __rspack_reexport = {};
88
+ for(const __rspack_import_key in _error_formatter__rspack_import_3)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_error_formatter__rspack_import_3[__rspack_import_key];
89
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
90
+ var _tool_generator__rspack_import_4 = __webpack_require__("./tool-generator");
77
91
  var __rspack_reexport = {};
78
- for(const __rspack_import_key in _tool_generator__rspack_import_2)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_tool_generator__rspack_import_2[__rspack_import_key];
92
+ for(const __rspack_import_key in _tool_generator__rspack_import_4)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_tool_generator__rspack_import_4[__rspack_import_key];
79
93
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
80
- var _types__rspack_import_3 = __webpack_require__("./types");
94
+ var _types__rspack_import_5 = __webpack_require__("./types");
81
95
  var __rspack_reexport = {};
82
- for(const __rspack_import_key in _types__rspack_import_3)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_types__rspack_import_3[__rspack_import_key];
96
+ for(const __rspack_import_key in _types__rspack_import_5)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_types__rspack_import_5[__rspack_import_key];
83
97
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
84
- var _inject_report_html_plugin__rspack_import_4 = __webpack_require__("./inject-report-html-plugin");
98
+ var _inject_report_html_plugin__rspack_import_6 = __webpack_require__("./inject-report-html-plugin");
85
99
  var __rspack_reexport = {};
86
- for(const __rspack_import_key in _inject_report_html_plugin__rspack_import_4)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_inject_report_html_plugin__rspack_import_4[__rspack_import_key];
100
+ for(const __rspack_import_key in _inject_report_html_plugin__rspack_import_6)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_inject_report_html_plugin__rspack_import_6[__rspack_import_key];
87
101
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
88
- var _launcher_helper__rspack_import_5 = __webpack_require__("./launcher-helper");
102
+ var _launcher_helper__rspack_import_7 = __webpack_require__("./launcher-helper");
89
103
  var __rspack_reexport = {};
90
- for(const __rspack_import_key in _launcher_helper__rspack_import_5)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_launcher_helper__rspack_import_5[__rspack_import_key];
104
+ for(const __rspack_import_key in _launcher_helper__rspack_import_7)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_launcher_helper__rspack_import_7[__rspack_import_key];
91
105
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
92
- var _chrome_path__rspack_import_6 = __webpack_require__("./chrome-path");
106
+ var _chrome_path__rspack_import_8 = __webpack_require__("./chrome-path");
93
107
  var __rspack_reexport = {};
94
- for(const __rspack_import_key in _chrome_path__rspack_import_6)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_chrome_path__rspack_import_6[__rspack_import_key];
108
+ for(const __rspack_import_key in _chrome_path__rspack_import_8)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_chrome_path__rspack_import_8[__rspack_import_key];
95
109
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
96
110
  })();
97
111
  for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
@@ -0,0 +1,78 @@
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
+ createNamespacedInitArgSchema: ()=>createNamespacedInitArgSchema,
28
+ extractNamespacedArgs: ()=>extractNamespacedArgs,
29
+ sanitizeNamespacedArgs: ()=>sanitizeNamespacedArgs
30
+ });
31
+ const external_key_alias_utils_js_namespaceObject = require("../key-alias-utils.js");
32
+ function readAliasedValue(args, key) {
33
+ for (const alias of (0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(key))if (alias in args) return args[alias];
34
+ }
35
+ function readNamespacedArg(args, namespace, key) {
36
+ const namespacedArgs = readAliasedValue(args, namespace);
37
+ if ((0, external_key_alias_utils_js_namespaceObject.isRecord)(namespacedArgs)) {
38
+ const nestedValue = readAliasedValue(namespacedArgs, key);
39
+ if (void 0 !== nestedValue) return nestedValue;
40
+ }
41
+ const dottedValue = readAliasedValue(args, `${namespace}.${key}`);
42
+ if (void 0 !== dottedValue) return dottedValue;
43
+ const directValue = readAliasedValue(args, key);
44
+ if (void 0 !== directValue) return directValue;
45
+ }
46
+ function extractNamespacedArgs(args, namespace, keys) {
47
+ const extracted = {};
48
+ for (const key of keys){
49
+ const value = readNamespacedArg(args, namespace, key);
50
+ if (void 0 !== value) extracted[key] = value;
51
+ }
52
+ return Object.keys(extracted).length > 0 ? extracted : void 0;
53
+ }
54
+ function sanitizeNamespacedArgs(args, namespace, keys) {
55
+ const excludedKeys = new Set((0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(namespace));
56
+ for (const key of keys){
57
+ for (const alias of (0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(key))excludedKeys.add(alias);
58
+ for (const alias of (0, external_key_alias_utils_js_namespaceObject.getKeyAliases)(`${namespace}.${key}`))excludedKeys.add(alias);
59
+ }
60
+ return Object.fromEntries(Object.entries(args).filter(([key])=>!excludedKeys.has(key)));
61
+ }
62
+ function createNamespacedInitArgSchema(namespace, shape) {
63
+ return Object.fromEntries(Object.entries(shape).map(([key, value])=>[
64
+ `${namespace}.${key}`,
65
+ value
66
+ ]));
67
+ }
68
+ exports.createNamespacedInitArgSchema = __webpack_exports__.createNamespacedInitArgSchema;
69
+ exports.extractNamespacedArgs = __webpack_exports__.extractNamespacedArgs;
70
+ exports.sanitizeNamespacedArgs = __webpack_exports__.sanitizeNamespacedArgs;
71
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
72
+ "createNamespacedInitArgSchema",
73
+ "extractNamespacedArgs",
74
+ "sanitizeNamespacedArgs"
75
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
76
+ Object.defineProperty(exports, '__esModule', {
77
+ value: true
78
+ });
@@ -48,7 +48,7 @@ function injectReportHtmlFromCore(packageDir) {
48
48
  setup (api) {
49
49
  api.onAfterBuild(()=>{
50
50
  const coreUtilsPath = external_node_path_default().resolve(packageDir, '..', 'core', 'dist', 'lib', 'utils.js');
51
- if (!external_node_fs_default().existsSync(coreUtilsPath)) return void console.warn('[inject-report-html] @midscene/core dist not found, skipping');
51
+ if (!external_node_fs_default().existsSync(coreUtilsPath)) return void console.warn('[inject-report-html] @aiscene/core dist not found, skipping');
52
52
  const coreContent = external_node_fs_default().readFileSync(coreUtilsPath, 'utf-8');
53
53
  if (!coreContent.includes(REPLACED_MARK)) return void console.warn('[inject-report-html] HTML not found in core dist. Ensure report builds first.');
54
54
  const markerIndex = coreContent.indexOf(REPLACED_MARK);