@aiscene/aiserver 1.8.8 → 1.9.1

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.
@@ -1,8 +1,13 @@
1
1
  export interface AiMemorySource {
2
+ type?: unknown;
3
+ platform?: unknown;
4
+ appId?: unknown;
5
+ packageName?: unknown;
6
+ bundleId?: unknown;
2
7
  aiMemory?: unknown;
3
8
  memory?: unknown;
4
9
  memoryScope?: unknown;
5
10
  }
6
11
  export declare function normalizeAiMemory(source: AiMemorySource | undefined): string[];
7
- export declare function applyAiMemory(agentConfig: Record<string, unknown>, source: AiMemorySource | undefined): Record<string, unknown>;
12
+ export declare function applyAiMemory(agentConfig: Record<string, unknown>, source: AiMemorySource | undefined, log?: (message: string) => void): Record<string, unknown>;
8
13
  //# sourceMappingURL=ai-memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-memory.d.ts","sourceRoot":"","sources":["../../src/core/ai-memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,CAM9E;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB"}
1
+ {"version":3,"file":"ai-memory.d.ts","sourceRoot":"","sources":["../../src/core/ai-memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAaD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ9E;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB"}
@@ -1,20 +1,72 @@
1
+ const LOCAL_TEMP_AI_MEMORY = [
2
+ {
3
+ platform: 'android',
4
+ appId: 'com.jd.dh',
5
+ items: [
6
+ '侧边悬浮的知医派单中是知医功能入口,不是页面引导',
7
+ '测试助手是测试包辅助工具,不能跟业务混淆',
8
+ ],
9
+ },
10
+ ];
1
11
  export function normalizeAiMemory(source) {
2
12
  const raw = source?.aiMemory ?? source?.memory;
3
13
  const values = Array.isArray(raw) ? raw : raw == null ? [] : [raw];
4
- return values
14
+ const incoming = values
5
15
  .map((item) => String(item ?? '').trim())
6
16
  .filter(Boolean);
17
+ const local = resolveLocalTempAiMemory(source);
18
+ return uniqueMemory([...incoming, ...local.items]);
7
19
  }
8
- export function applyAiMemory(agentConfig, source) {
20
+ export function applyAiMemory(agentConfig, source, log) {
9
21
  const memory = normalizeAiMemory(source);
10
- console.info('[AI Memory] applied ' + JSON.stringify({
22
+ const local = resolveLocalTempAiMemory(source);
23
+ const message = '[AI Memory] applied ' + JSON.stringify({
11
24
  count: memory.length,
12
- scope: source?.memoryScope || null,
25
+ scope: source?.memoryScope || local.scope || null,
26
+ localTempCount: local.items.length,
13
27
  items: memory,
14
- }));
28
+ });
29
+ console.info(message);
30
+ log?.(message);
15
31
  if (memory.length > 0) {
16
32
  agentConfig.memory = memory;
17
33
  }
18
34
  return agentConfig;
19
35
  }
36
+ function resolveLocalTempAiMemory(source) {
37
+ const platform = normalizeText(source?.platform || source?.type);
38
+ const appId = normalizeText(source?.appId || source?.packageName || source?.bundleId);
39
+ const matched = LOCAL_TEMP_AI_MEMORY.find((item) => {
40
+ if (item.platform !== platform && !(item.platform === 'android' && platform === 'action')) {
41
+ return false;
42
+ }
43
+ return item.appId === appId;
44
+ });
45
+ if (!matched) {
46
+ return { items: [], scope: null };
47
+ }
48
+ return {
49
+ items: matched.items,
50
+ scope: {
51
+ platform: matched.platform,
52
+ appId: matched.appId,
53
+ scopeType: 'aiserver_local_temp',
54
+ },
55
+ };
56
+ }
57
+ function normalizeText(value) {
58
+ return String(value ?? '').trim().toLowerCase();
59
+ }
60
+ function uniqueMemory(items) {
61
+ const seen = new Set();
62
+ const result = [];
63
+ for (const item of items) {
64
+ if (seen.has(item)) {
65
+ continue;
66
+ }
67
+ seen.add(item);
68
+ result.push(item);
69
+ }
70
+ return result;
71
+ }
20
72
  //# sourceMappingURL=ai-memory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-memory.js","sourceRoot":"","sources":["../../src/core/ai-memory.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,iBAAiB,CAAC,MAAkC;IAClE,MAAM,GAAG,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACxC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,WAAoC,EACpC,MAAkC;IAElC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;QACnD,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,KAAK,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;QAClC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,CAAC;IACJ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"ai-memory.js","sourceRoot":"","sources":["../../src/core/ai-memory.ts"],"names":[],"mappings":"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"}
@@ -201,6 +201,7 @@ export interface BatchActionRequest extends AiMemoryRequestFields {
201
201
  callback?: {
202
202
  baseUrl?: string;
203
203
  token?: string;
204
+ timeoutMs?: number;
204
205
  };
205
206
  }
206
207
  export interface StopBatchRequest {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,8 @@ export declare class DebugWebSocketServer {
80
80
  private handleExecuteWebAction;
81
81
  private batchAbortControllers;
82
82
  private handleBatchAction;
83
+ private getNextBatchRequests;
84
+ private continueNextLoopBatches;
83
85
  /** 批次执行 - 单条 Web 用例 */
84
86
  private executeBatchWebCase;
85
87
  /** 批次执行 - 单条 App (Android/iOS) 用例 */
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/debug/websocket-server.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsBrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0B1D,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,qBAAqB,CAA0B;IAGvD,OAAO,CAAC,kBAAkB,CAA0C;IAEpE,OAAO,CAAC,uBAAuB,CAA0C;IAGzE,+CAA+C;IAC/C,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,6DAA6D;IAC7D,OAAO,CAAC,wBAAwB,CAAgE;IAChG,6CAA6C;IAC7C,OAAO,CAAC,uBAAuB,CAA6E;IAC5G,gBAAgB;IAChB,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,IAAI,GAAE,MAAa;IAI/B,8CAA8C;IAC9C,OAAO,CAAC,eAAe;IAMvB,2CAA2C;IAC3C,OAAO,CAAC,kBAAkB;IAI1B,8BAA8B;IAC9B,OAAO,CAAC,oBAAoB;IAI5B,qCAAqC;IACrC,OAAO,CAAC,iBAAiB;IAenB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ElD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,uBAAuB;YAuDjB,aAAa;YAuDb,kBAAkB;IAwGhC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,yBAAyB;IAWjC,4CAA4C;IAC5C,OAAO,CAAC,YAAY;YAMN,gBAAgB;IAiD9B;;;;;OAKG;YACW,mBAAmB;IAiQjC;;OAEG;YACW,gBAAgB;IAyC9B,6CAA6C;YAC/B,uBAAuB;IAkJrC,uCAAuC;YACzB,wBAAwB;YAwKxB,mBAAmB;YAuNnB,kBAAkB;IAgQhC,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,gBAAgB;YAQV,oBAAoB;YAKpB,WAAW;YAmDX,sBAAsB;IAwfpC,OAAO,CAAC,qBAAqB,CAAsC;YAErD,iBAAiB;IA4J/B,uBAAuB;YACT,mBAAmB;IAiOjC,qCAAqC;YACvB,mBAAmB;YA+InB,eAAe;YAiBf,qBAAqB;YA4BrB,oBAAoB;YAuBpB,eAAe;YAqDf,qBAAqB;YAqBrB,eAAe;YAgIf,aAAa;IAU3B;;OAEG;YACW,gBAAgB;IA2B9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YAgFV,iBAAiB;IAgC/B,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,SAAS;IAIjB;;;OAGG;IAEH;;;OAGG;YACW,wBAAwB;YAqCxB,cAAc;IA4B5B,WAAW,IAAI,YAAY,EAAE;IAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
1
+ {"version":3,"file":"websocket-server.d.ts","sourceRoot":"","sources":["../../src/debug/websocket-server.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsBrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0B1D,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,qBAAqB,CAA0B;IAGvD,OAAO,CAAC,kBAAkB,CAA0C;IAEpE,OAAO,CAAC,uBAAuB,CAA0C;IAGzE,+CAA+C;IAC/C,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,6DAA6D;IAC7D,OAAO,CAAC,wBAAwB,CAAgE;IAChG,6CAA6C;IAC7C,OAAO,CAAC,uBAAuB,CAA6E;IAC5G,gBAAgB;IAChB,OAAO,CAAC,iBAAiB,CAA+B;gBAE5C,IAAI,GAAE,MAAa;IAI/B,8CAA8C;IAC9C,OAAO,CAAC,eAAe;IAMvB,2CAA2C;IAC3C,OAAO,CAAC,kBAAkB;IAI1B,8BAA8B;IAC9B,OAAO,CAAC,oBAAoB;IAI5B,qCAAqC;IACrC,OAAO,CAAC,iBAAiB;IAenB,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ElD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,uBAAuB;YAuDjB,aAAa;YAuDb,kBAAkB;IAwGhC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,yBAAyB;IAWjC,4CAA4C;IAC5C,OAAO,CAAC,YAAY;YAMN,gBAAgB;IAiD9B;;;;;OAKG;YACW,mBAAmB;IAiQjC;;OAEG;YACW,gBAAgB;IAyC9B,6CAA6C;YAC/B,uBAAuB;IAkJrC,uCAAuC;YACzB,wBAAwB;YAwKxB,mBAAmB;YAuNnB,kBAAkB;IAgQhC,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,gBAAgB;YAQV,oBAAoB;YAKpB,WAAW;YAmDX,sBAAsB;IAwfpC,OAAO,CAAC,qBAAqB,CAAsC;YAErD,iBAAiB;IAwM/B,OAAO,CAAC,oBAAoB;YAiBd,uBAAuB;IAqCrC,uBAAuB;YACT,mBAAmB;IAiPjC,qCAAqC;YACvB,mBAAmB;YA+InB,eAAe;YAiBf,qBAAqB;YA4BrB,oBAAoB;YAuBpB,eAAe;YAqDf,qBAAqB;YAqBrB,eAAe;YAgIf,aAAa;IAU3B;;OAEG;YACW,gBAAgB;IA2B9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YAgFV,iBAAiB;IAiE/B,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,SAAS;IAIjB;;;OAGG;IAEH;;;OAGG;YACW,wBAAwB;YAqCxB,cAAc;IA4B5B,WAAW,IAAI,YAAY,EAAE;IAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
@@ -2135,6 +2135,7 @@ export class DebugWebSocketServer {
2135
2135
  platform,
2136
2136
  });
2137
2137
  const results = [];
2138
+ const callbackFailures = [];
2138
2139
  // Web 相关状态
2139
2140
  let browserLaunched = false;
2140
2141
  let sharedSessionId = '';
@@ -2156,11 +2157,21 @@ export class DebugWebSocketServer {
2156
2157
  caseIndex: i,
2157
2158
  totalCases: cases.length,
2158
2159
  });
2159
- await this.postBatchCallback(request, `/test-batches/${encodeURIComponent(batchId)}/items/${encodeURIComponent(tc.id)}`, {
2160
+ const runningCallbackPath = `/test-batches/${encodeURIComponent(batchId)}/items/${encodeURIComponent(tc.id)}`;
2161
+ const runningCallback = await this.postBatchCallback(request, runningCallbackPath, {
2160
2162
  status: 'running',
2161
2163
  caseIndex: i,
2162
2164
  totalCases: cases.length,
2163
2165
  });
2166
+ if (!runningCallback.ok && !runningCallback.skipped) {
2167
+ callbackFailures.push({
2168
+ stage: 'case_started',
2169
+ caseId: tc.id,
2170
+ path: runningCallbackPath,
2171
+ status: runningCallback.status,
2172
+ error: runningCallback.error,
2173
+ });
2174
+ }
2164
2175
  let caseSuccess = false;
2165
2176
  let caseError;
2166
2177
  let caseReportUrl;
@@ -2217,7 +2228,8 @@ export class DebugWebSocketServer {
2217
2228
  reportUrl: caseReportUrl,
2218
2229
  captureDataUrl: caseCaptureDataUrl,
2219
2230
  });
2220
- await this.postBatchCallback(request, `/test-batches/${encodeURIComponent(batchId)}/items/${encodeURIComponent(tc.id)}`, {
2231
+ const completedCallbackPath = `/test-batches/${encodeURIComponent(batchId)}/items/${encodeURIComponent(tc.id)}`;
2232
+ const completedCallback = await this.postBatchCallback(request, completedCallbackPath, {
2221
2233
  status: caseSuccess ? 'completed' : 'failed',
2222
2234
  success: caseSuccess,
2223
2235
  error: caseError,
@@ -2227,6 +2239,15 @@ export class DebugWebSocketServer {
2227
2239
  deviceId: tc.deviceId || request.deviceId,
2228
2240
  durationMs: Date.now() - caseStartedAt,
2229
2241
  });
2242
+ if (!completedCallback.ok && !completedCallback.skipped) {
2243
+ callbackFailures.push({
2244
+ stage: 'case_completed',
2245
+ caseId: tc.id,
2246
+ path: completedCallbackPath,
2247
+ status: completedCallback.status,
2248
+ error: completedCallback.error,
2249
+ });
2250
+ }
2230
2251
  }
2231
2252
  }
2232
2253
  finally {
@@ -2239,20 +2260,80 @@ export class DebugWebSocketServer {
2239
2260
  }
2240
2261
  catch { /* ignore */ }
2241
2262
  }
2242
- // 通知前端:批次完成
2243
- this.sendMessage(ws, {
2244
- type: 'batch_completed',
2245
- batchId,
2263
+ const finalizeCallbackPath = `/test-batches/${encodeURIComponent(batchId)}/finalize`;
2264
+ const finalizeCallback = await this.postBatchCallback(request, finalizeCallbackPath, {
2265
+ status: 'completed',
2246
2266
  totalCases: cases.length,
2247
2267
  completedCases: results.length,
2248
2268
  results,
2249
2269
  });
2250
- await this.postBatchCallback(request, `/test-batches/${encodeURIComponent(batchId)}/finalize`, {
2251
- status: 'completed',
2270
+ if (!finalizeCallback.ok && !finalizeCallback.skipped) {
2271
+ callbackFailures.push({
2272
+ stage: 'batch_finalize',
2273
+ path: finalizeCallbackPath,
2274
+ status: finalizeCallback.status,
2275
+ error: finalizeCallback.error,
2276
+ });
2277
+ logger.warn(`[BatchAction] Finalize callback failed for batch ${batchId}: ${finalizeCallback.error || finalizeCallback.status || 'unknown error'}`);
2278
+ }
2279
+ // 通知前端:批次完成。放在 finalize 回调之后,避免前端先看到完成但平台还没落最终态。
2280
+ this.sendMessage(ws, {
2281
+ type: 'batch_completed',
2282
+ batchId,
2252
2283
  totalCases: cases.length,
2253
2284
  completedCases: results.length,
2254
2285
  results,
2286
+ callbackOk: callbackFailures.length === 0,
2287
+ callbackFailures: callbackFailures.slice(-10),
2255
2288
  });
2289
+ await this.continueNextLoopBatches(ws, request, finalizeCallback.data);
2290
+ }
2291
+ }
2292
+ getNextBatchRequests(callbackData) {
2293
+ if (!callbackData || typeof callbackData !== 'object')
2294
+ return [];
2295
+ const data = callbackData;
2296
+ const nestedData = data.data && typeof data.data === 'object'
2297
+ ? data.data
2298
+ : null;
2299
+ const candidates = [
2300
+ data.nextBatchRequests,
2301
+ data.next_batch_requests,
2302
+ nestedData?.nextBatchRequests,
2303
+ nestedData?.next_batch_requests,
2304
+ ];
2305
+ const list = candidates.find(Array.isArray);
2306
+ if (!Array.isArray(list))
2307
+ return [];
2308
+ return list.filter((item) => item && typeof item === 'object');
2309
+ }
2310
+ async continueNextLoopBatches(ws, sourceRequest, callbackData) {
2311
+ const nextBatchRequests = this.getNextBatchRequests(callbackData);
2312
+ if (nextBatchRequests.length === 0)
2313
+ return;
2314
+ logger.info(`[BatchAction] Received ${nextBatchRequests.length} next loop batch request(s), continuing unattended`);
2315
+ for (const item of nextBatchRequests) {
2316
+ const rawRequest = (item.request || item);
2317
+ if (!rawRequest || rawRequest.type !== 'batch_action') {
2318
+ logger.warn('[BatchAction] Skip invalid next loop batch request: missing batch_action payload');
2319
+ continue;
2320
+ }
2321
+ const nextRequest = {
2322
+ ...rawRequest,
2323
+ callback: rawRequest.callback || sourceRequest.callback,
2324
+ modelConfig: rawRequest.modelConfig || sourceRequest.modelConfig,
2325
+ loginContext: rawRequest.loginContext || sourceRequest.loginContext,
2326
+ proxyPort: rawRequest.proxyPort ?? sourceRequest.proxyPort,
2327
+ proxyAccount: rawRequest.proxyAccount || sourceRequest.proxyAccount,
2328
+ headless: rawRequest.headless ?? sourceRequest.headless,
2329
+ viewport: rawRequest.viewport || sourceRequest.viewport,
2330
+ };
2331
+ if (!nextRequest.batchId || !Array.isArray(nextRequest.cases) || nextRequest.cases.length === 0) {
2332
+ logger.warn(`[BatchAction] Skip invalid next loop batch request: batchId=${nextRequest.batchId || ''}, cases=${nextRequest.cases?.length || 0}`);
2333
+ continue;
2334
+ }
2335
+ logger.info(`[BatchAction] Continuing next loop batch ${nextRequest.batchId}, cases=${nextRequest.cases.length}, platform=${nextRequest.platform}`);
2336
+ await this.handleBatchAction(ws, nextRequest);
2256
2337
  }
2257
2338
  }
2258
2339
  /** 批次执行 - 单条 Web 用例 */
@@ -2403,6 +2484,31 @@ export class DebugWebSocketServer {
2403
2484
  }
2404
2485
  this.touchWebSession(sessionId);
2405
2486
  session.webActionRunning = true;
2487
+ const uploadCaseArtifacts = async () => {
2488
+ let reportFile = '';
2489
+ try {
2490
+ const reportSess = sessionManager.get(sessionId);
2491
+ if (reportSess?.webAgent && typeof reportSess.webAgent.reportFile === 'string') {
2492
+ reportFile = reportSess.webAgent.reportFile || '';
2493
+ }
2494
+ }
2495
+ catch { /* ignore */ }
2496
+ try {
2497
+ caseReportUrl = (await this.safeUploadReport(reportFile, `${request.batchId}-${tc.id}`)) ?? undefined;
2498
+ }
2499
+ catch (uploadErr) {
2500
+ logger.warn(`${caseLabel}: report upload failed - ${uploadErr.message}`);
2501
+ }
2502
+ try {
2503
+ const capturedRequests = await whistleManager.stopCapture(sessionId);
2504
+ if (capturedRequests.length > 0) {
2505
+ const uploadResult = await this.saveAndUploadCaptureData(capturedRequests, `${request.batchId}-${tc.id}`);
2506
+ if (uploadResult)
2507
+ caseCaptureDataUrl = uploadResult;
2508
+ }
2509
+ }
2510
+ catch { /* ignore */ }
2511
+ };
2406
2512
  try {
2407
2513
  // 执行登录(仅首条或 freshBrowserPerCase 时)
2408
2514
  const effectiveLoginContext = tc.loginContext || batchLoginContext;
@@ -2449,32 +2555,26 @@ export class DebugWebSocketServer {
2449
2555
  await fn.call(ctx);
2450
2556
  }
2451
2557
  caseSuccess = true;
2452
- // 提取报告
2453
- let reportFile = '';
2454
- try {
2455
- const reportSess = sessionManager.get(sessionId);
2456
- if (reportSess?.webAgent && typeof reportSess.webAgent.reportFile === 'string') {
2457
- reportFile = reportSess.webAgent.reportFile || '';
2458
- }
2459
- }
2460
- catch { /* ignore */ }
2461
- caseReportUrl = (await this.safeUploadReport(reportFile, `${request.batchId}-${tc.id}`)) ?? undefined;
2462
- // 停止抓包
2463
- try {
2464
- const capturedRequests = await whistleManager.stopCapture(sessionId);
2465
- if (capturedRequests.length > 0) {
2466
- const uploadResult = await this.saveAndUploadCaptureData(capturedRequests, `${request.batchId}-${tc.id}`);
2467
- if (uploadResult)
2468
- caseCaptureDataUrl = uploadResult;
2469
- }
2470
- }
2471
- catch { /* ignore */ }
2558
+ await uploadCaseArtifacts();
2559
+ }
2560
+ catch (err) {
2561
+ caseSuccess = false;
2562
+ caseError = err.message;
2563
+ logger.warn(`${caseLabel}: web execution failed - ${caseError}`);
2564
+ await uploadCaseArtifacts();
2472
2565
  }
2473
2566
  finally {
2474
- // 无论成功/失败/异常,都必须重置执行标记,否则 closeWebSession 会因 webActionRunning=true 跳过关闭,导致会话名额泄漏
2567
+ // 无论成功/失败/异常,都必须重置执行标记并关闭浏览器,避免 Chrome 进程和并发名额残留。
2475
2568
  const sess = sessionManager.get(sessionId);
2476
2569
  if (sess)
2477
2570
  sess.webActionRunning = false;
2571
+ try {
2572
+ await this.closeWebSession(sessionId);
2573
+ }
2574
+ catch (closeErr) {
2575
+ logger.warn(`${caseLabel}: close web session failed - ${closeErr.message}`);
2576
+ }
2577
+ browserLaunched = false;
2478
2578
  }
2479
2579
  return { success: caseSuccess, error: caseError, reportUrl: caseReportUrl, captureDataUrl: caseCaptureDataUrl, sessionId, browserLaunched };
2480
2580
  }
@@ -2976,27 +3076,63 @@ export class DebugWebSocketServer {
2976
3076
  async postBatchCallback(request, pathName, payload) {
2977
3077
  const baseUrl = request.callback?.baseUrl?.trim();
2978
3078
  if (!baseUrl)
2979
- return;
2980
- try {
2981
- const relativePath = pathName.replace(/^\/+/, '');
2982
- const url = new URL(relativePath, baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`);
2983
- const headers = { 'Content-Type': 'application/json' };
2984
- const token = request.callback?.token?.trim();
2985
- if (token)
2986
- headers.Authorization = token.startsWith('Bearer ') ? token : `Bearer ${token}`;
2987
- const response = await fetch(url.toString(), {
2988
- method: 'POST',
2989
- headers,
2990
- body: JSON.stringify(payload),
2991
- });
2992
- if (!response.ok) {
3079
+ return { ok: true, skipped: true };
3080
+ const relativePath = pathName.replace(/^\/+/, '');
3081
+ const url = new URL(relativePath, baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`);
3082
+ const headers = { 'Content-Type': 'application/json' };
3083
+ const token = request.callback?.token?.trim();
3084
+ if (token)
3085
+ headers.Authorization = token.startsWith('Bearer ') ? token : `Bearer ${token}`;
3086
+ const timeoutMs = Math.max(1000, Math.min(Number(request.callback?.timeoutMs || 10000) || 10000, 60000));
3087
+ const maxAttempts = 2;
3088
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
3089
+ const controller = new AbortController();
3090
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
3091
+ try {
3092
+ const response = await fetch(url.toString(), {
3093
+ method: 'POST',
3094
+ headers,
3095
+ body: JSON.stringify(payload),
3096
+ signal: controller.signal,
3097
+ });
3098
+ if (response.ok) {
3099
+ const text = await response.text().catch(() => '');
3100
+ let data;
3101
+ if (text) {
3102
+ try {
3103
+ data = JSON.parse(text);
3104
+ }
3105
+ catch {
3106
+ data = text;
3107
+ }
3108
+ }
3109
+ return { ok: true, status: response.status, url: url.toString(), data };
3110
+ }
2993
3111
  const text = await response.text().catch(() => '');
2994
- logger.warn(`[BatchAction] Callback failed: ${response.status} ${response.statusText}, path=${pathName}, body=${text.slice(0, 300)}`);
3112
+ const error = `${response.status} ${response.statusText}${text ? ` - ${text.slice(0, 300)}` : ''}`;
3113
+ logger.warn(`[BatchAction] Callback failed: ${error}, path=${pathName}, attempt=${attempt}/${maxAttempts}`);
3114
+ if (response.status >= 500 && attempt < maxAttempts) {
3115
+ await new Promise((resolve) => setTimeout(resolve, 500));
3116
+ continue;
3117
+ }
3118
+ return { ok: false, status: response.status, error, url: url.toString() };
3119
+ }
3120
+ catch (error) {
3121
+ const message = error.name === 'AbortError'
3122
+ ? `callback timeout after ${timeoutMs}ms`
3123
+ : error.message;
3124
+ logger.warn(`[BatchAction] Callback error: path=${pathName}, attempt=${attempt}/${maxAttempts}, error=${message}`);
3125
+ if (attempt < maxAttempts) {
3126
+ await new Promise((resolve) => setTimeout(resolve, 500));
3127
+ continue;
3128
+ }
3129
+ return { ok: false, error: message, url: url.toString() };
3130
+ }
3131
+ finally {
3132
+ clearTimeout(timeout);
2995
3133
  }
2996
3134
  }
2997
- catch (error) {
2998
- logger.warn(`[BatchAction] Callback error: path=${pathName}, error=${error.message}`);
2999
- }
3135
+ return { ok: false, error: 'callback failed after retries', url: url.toString() };
3000
3136
  }
3001
3137
  sendMessage(ws, message, deviceId) {
3002
3138
  try {