@reconcrap/boss-recommend-mcp 0.1.13 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reconcrap/boss-recommend-mcp",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "Unified MCP pipeline for recommend-page filtering and screening on Boss Zhipin",
5
5
  "keywords": [
6
6
  "boss",
@@ -1407,14 +1407,26 @@ class RecommendScreenCli {
1407
1407
  }
1408
1408
  }
1409
1409
 
1410
+ const isListReadyNow = async () => {
1411
+ const detailState = await this.getDetailClosedState();
1412
+ if (!detailState?.closed) return false;
1413
+ const listState = await this.evaluate(jsGetListState);
1414
+ return Boolean(listState?.ok);
1415
+ };
1416
+
1410
1417
  let know = null;
1411
1418
  for (let index = 0; index < 10; index += 1) {
1412
1419
  await sleep(humanDelay(260, 80));
1413
1420
  know = await this.evaluate(jsGetKnowButtonState);
1414
1421
  if (know?.ok) break;
1422
+ if (await isListReadyNow()) {
1423
+ log("[打招呼] 未检测到“知道了”弹窗,页面已自动返回列表,继续下一位候选人。");
1424
+ return { actionTaken: "greet", ackMode: "auto_return_no_popup" };
1425
+ }
1415
1426
  }
1416
1427
  if (!know?.ok) {
1417
- throw this.buildError("ACK_BUTTON_FAILED", know?.error || "未出现知道了确认按钮");
1428
+ log(`[打招呼] 未检测到“知道了”弹窗(${know?.error || "ACK_BUTTON_NOT_FOUND"}),按无弹窗流程继续。`);
1429
+ return { actionTaken: "greet", ackMode: "no_popup_detected" };
1418
1430
  }
1419
1431
 
1420
1432
  try {
@@ -1422,7 +1434,12 @@ class RecommendScreenCli {
1422
1434
  } catch {
1423
1435
  const fallback = await this.evaluate(jsClickKnowFallback);
1424
1436
  if (!fallback?.ok) {
1425
- throw this.buildError("ACK_BUTTON_FAILED", fallback?.error || "知道了按钮点击失败");
1437
+ if (await isListReadyNow()) {
1438
+ log("[打招呼] “知道了”点击兜底失败,但页面已回列表,继续下一位候选人。");
1439
+ return { actionTaken: "greet", ackMode: "ack_click_failed_but_list_ready" };
1440
+ }
1441
+ log(`[打招呼] “知道了”按钮点击失败(${fallback?.error || "unknown"}),后续由详情关闭流程兜底。`);
1442
+ return { actionTaken: "greet", ackMode: "ack_click_failed" };
1426
1443
  }
1427
1444
  }
1428
1445
 
@@ -1430,11 +1447,18 @@ class RecommendScreenCli {
1430
1447
  await sleep(humanDelay(220, 60));
1431
1448
  const state = await this.evaluate(jsGetKnowButtonState);
1432
1449
  if (!state?.ok) {
1433
- return { actionTaken: "greet" };
1450
+ return { actionTaken: "greet", ackMode: "ack_closed" };
1451
+ }
1452
+ if (await isListReadyNow()) {
1453
+ return { actionTaken: "greet", ackMode: "auto_return_after_ack" };
1434
1454
  }
1435
1455
  }
1436
1456
 
1437
- throw this.buildError("ACK_BUTTON_FAILED", "知道了弹窗未成功关闭。");
1457
+ if (await isListReadyNow()) {
1458
+ return { actionTaken: "greet", ackMode: "ack_still_visible_but_list_ready" };
1459
+ }
1460
+ log("[打招呼] “知道了”弹窗关闭未确认,后续由详情关闭流程兜底。");
1461
+ return { actionTaken: "greet", ackMode: "ack_close_unconfirmed" };
1438
1462
  }
1439
1463
 
1440
1464
  async closeDetailPage(maxRetries = 3) {