@joohw/boss-cli 0.3.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +172 -130
  2. package/dist/browser/agent_operating_indicator.d.ts +1 -0
  3. package/dist/browser/agent_operating_indicator.d.ts.map +1 -1
  4. package/dist/browser/agent_operating_indicator.js +15 -3
  5. package/dist/browser/agent_operating_indicator.js.map +1 -1
  6. package/dist/cli/cliRouter.d.ts.map +1 -1
  7. package/dist/cli/cliRouter.js +55 -49
  8. package/dist/cli/cliRouter.js.map +1 -1
  9. package/dist/common/auth.d.ts +6 -0
  10. package/dist/common/auth.d.ts.map +1 -1
  11. package/dist/common/auth.js +18 -0
  12. package/dist/common/auth.js.map +1 -1
  13. package/dist/common/boss_modal.d.ts +14 -0
  14. package/dist/common/boss_modal.d.ts.map +1 -0
  15. package/dist/common/boss_modal.js +81 -0
  16. package/dist/common/boss_modal.js.map +1 -0
  17. package/dist/common/boss_paywall_popup.d.ts +5 -0
  18. package/dist/common/boss_paywall_popup.d.ts.map +1 -1
  19. package/dist/common/boss_paywall_popup.js +8 -2
  20. package/dist/common/boss_paywall_popup.js.map +1 -1
  21. package/dist/common/boss_session_lock.d.ts +2 -0
  22. package/dist/common/boss_session_lock.d.ts.map +1 -0
  23. package/dist/common/boss_session_lock.js +121 -0
  24. package/dist/common/boss_session_lock.js.map +1 -0
  25. package/dist/common/boss_session_page.d.ts +2 -1
  26. package/dist/common/boss_session_page.d.ts.map +1 -1
  27. package/dist/common/boss_session_page.js +60 -51
  28. package/dist/common/boss_session_page.js.map +1 -1
  29. package/dist/common/c_resume_capture.js +1 -1
  30. package/dist/toolset/deep-search.d.ts +1 -1
  31. package/dist/toolset/deep-search.d.ts.map +1 -1
  32. package/dist/toolset/deep-search.js +12 -26
  33. package/dist/toolset/deep-search.js.map +1 -1
  34. package/dist/toolset/greet.d.ts +5 -1
  35. package/dist/toolset/greet.d.ts.map +1 -1
  36. package/dist/toolset/greet.js +30 -7
  37. package/dist/toolset/greet.js.map +1 -1
  38. package/dist/toolset/index.d.ts +4 -1
  39. package/dist/toolset/index.d.ts.map +1 -1
  40. package/dist/toolset/index.js +2 -2
  41. package/dist/toolset/index.js.map +1 -1
  42. package/dist/toolset/jd.d.ts.map +1 -1
  43. package/dist/toolset/jd.js +2 -6
  44. package/dist/toolset/jd.js.map +1 -1
  45. package/dist/toolset/login.d.ts.map +1 -1
  46. package/dist/toolset/login.js +10 -3
  47. package/dist/toolset/login.js.map +1 -1
  48. package/dist/toolset/preview.js +1 -1
  49. package/dist/toolset/preview.js.map +1 -1
  50. package/dist/toolset/recommend.d.ts +1 -1
  51. package/dist/toolset/recommend.d.ts.map +1 -1
  52. package/dist/toolset/recommend.js +13 -26
  53. package/dist/toolset/recommend.js.map +1 -1
  54. package/package.json +34 -2
@@ -37,6 +37,24 @@ export function isBossChatIndexUrl(url) {
37
37
  return false;
38
38
  }
39
39
  }
40
+ /**
41
+ * 是否已经位于 Boss 已登录主壳页(pathname 以 `/web/chat/` 开头)。
42
+ * 当前已知主壳页:`/web/chat/index`、`/web/chat/recommend`、`/web/chat/aiform`、`/web/chat/job/list`。
43
+ * 它们共享同一套侧栏 `.menu-list`,校验登录态时不必再额外跳回 `/web/chat/index`。
44
+ */
45
+ export function isBossChatShellUrl(url) {
46
+ try {
47
+ const u = new URL(url);
48
+ if (!u.hostname.includes('zhipin.com')) {
49
+ return false;
50
+ }
51
+ const p = u.pathname.replace(/\/+$/, '') || '/';
52
+ return p === '/web/chat' || p.startsWith('/web/chat/');
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
40
58
  /** 未登录时常见跳转:如 `https://www.zhipin.com/web/user/?ka=bticket` */
41
59
  export function isWebUserLoginUrl(url) {
42
60
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/common/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/common/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ /**
3
+ * 关闭当前可见的 Boss 弹层(通常同一时刻只会出现一个)。
4
+ * 覆盖 `.boss-popup__wrapper` / `.boss-dialog__wrapper` / `.dialog-container`,
5
+ * 以及含 c-resume 的简历预览层(`.close-btn`)。
6
+ * 会在主文档与各子 frame 中尝试。返回是否执行了关闭。
7
+ */
8
+ export declare function closeBossModalIfPresent(page: Page): Promise<boolean>;
9
+ /**
10
+ * 轮询直到出现可见弹层并关闭,或超时。
11
+ * 用于操作完成后清理延迟出现的提示框(如「当前职位尚未开放」)。
12
+ */
13
+ export declare function waitAndCloseBossModalIfPresent(page: Page, timeoutMs: number): Promise<boolean>;
14
+ //# sourceMappingURL=boss_modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss_modal.d.ts","sourceRoot":"","sources":["../../src/common/boss_modal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAgD3C;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAa1E;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CASlB"}
@@ -0,0 +1,81 @@
1
+ import { C_RESUME_IFRAME_SELECTOR } from './c_resume_capture.js';
2
+ import { sleepRandom } from '../browser/timing.js';
3
+ const CLOSE_BOSS_MODAL_SCRIPT = `(() => {
4
+ function isVisible(el) {
5
+ if (!(el instanceof HTMLElement)) return false;
6
+ const st = window.getComputedStyle(el);
7
+ if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
8
+ return false;
9
+ }
10
+ const rect = el.getBoundingClientRect();
11
+ return rect.width >= 20 && rect.height >= 20;
12
+ }
13
+
14
+ function tryClickClose(root) {
15
+ const closeBtn =
16
+ root.querySelector(".boss-popup__close, .boss-dialog__close, .drawer-close") ||
17
+ root.querySelector(".dialog-header .close") ||
18
+ root.querySelector(".close-btn") ||
19
+ root.querySelector(".icon-close");
20
+ if (closeBtn instanceof HTMLElement) {
21
+ closeBtn.click();
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+
27
+ const roots = Array.from(
28
+ document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper, .dialog-container"),
29
+ );
30
+ for (const root of roots) {
31
+ if (!isVisible(root)) continue;
32
+ if (tryClickClose(root)) return true;
33
+ }
34
+
35
+ const resumeIframe = document.querySelector(${JSON.stringify(C_RESUME_IFRAME_SELECTOR)});
36
+ if (resumeIframe instanceof HTMLElement && isVisible(resumeIframe)) {
37
+ let node = resumeIframe.parentElement;
38
+ for (let i = 0; i < 15 && node; i++) {
39
+ if (tryClickClose(node)) return true;
40
+ node = node.parentElement;
41
+ }
42
+ }
43
+
44
+ return false;
45
+ })()`;
46
+ /**
47
+ * 关闭当前可见的 Boss 弹层(通常同一时刻只会出现一个)。
48
+ * 覆盖 `.boss-popup__wrapper` / `.boss-dialog__wrapper` / `.dialog-container`,
49
+ * 以及含 c-resume 的简历预览层(`.close-btn`)。
50
+ * 会在主文档与各子 frame 中尝试。返回是否执行了关闭。
51
+ */
52
+ export async function closeBossModalIfPresent(page) {
53
+ for (const frame of page.frames()) {
54
+ try {
55
+ const closed = (await frame.evaluate(CLOSE_BOSS_MODAL_SCRIPT));
56
+ if (closed) {
57
+ await sleepRandom(220, 480);
58
+ return true;
59
+ }
60
+ }
61
+ catch {
62
+ /* detached / 无权限 */
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+ /**
68
+ * 轮询直到出现可见弹层并关闭,或超时。
69
+ * 用于操作完成后清理延迟出现的提示框(如「当前职位尚未开放」)。
70
+ */
71
+ export async function waitAndCloseBossModalIfPresent(page, timeoutMs) {
72
+ const deadline = Date.now() + timeoutMs;
73
+ while (Date.now() < deadline) {
74
+ if (await closeBossModalIfPresent(page)) {
75
+ return true;
76
+ }
77
+ await sleepRandom(160, 240);
78
+ }
79
+ return false;
80
+ }
81
+ //# sourceMappingURL=boss_modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss_modal.js","sourceRoot":"","sources":["../../src/common/boss_modal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAgCgB,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC;;;;;;;;;;KAUnF,CAAC;AAEN;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAU;IACtD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAY,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAAU,EACV,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -4,6 +4,11 @@ import type { Page } from 'puppeteer-core';
4
4
  * c-resume 可能在主文档,也可能在 `recommendFrame` 等子 frame 内(推荐预览),故遍历 {@link Page.frames}。
5
5
  */
6
6
  export declare function waitForCResumeIframeOrPaywall(page: Page, timeoutMs?: number): Promise<'iframe' | 'paywall' | 'neither'>;
7
+ /**
8
+ * 单次探测:主文档是否当前正显示付费弹层(与 {@link describeBossPaywallPopupIfPresent} 判定一致)。
9
+ * 供合并轮询(同一循环内同时检测多类弹层)使用,避免重复编写检测脚本。
10
+ */
11
+ export declare function detectBossPaywallPopup(page: Page): Promise<boolean>;
7
12
  /**
8
13
  * 打招呼等操作后,轮询主文档是否出现付费弹层(与 {@link describeBossPaywallPopupIfPresent} 判定一致)。
9
14
  * 命中则返回 true;超时未出现则返回 false。
@@ -1 +1 @@
1
- {"version":3,"file":"boss_paywall_popup.d.ts","sourceRoot":"","sources":["../../src/common/boss_paywall_popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAgC3C;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,MAAyC,GACnD,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,CAkB3C;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCjF;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,QAAQ,GAAG,OAAkB,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB"}
1
+ {"version":3,"file":"boss_paywall_popup.d.ts","sourceRoot":"","sources":["../../src/common/boss_paywall_popup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAgC3C;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,MAAyC,GACnD,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,CAkB3C;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCjF;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,QAAQ,GAAG,OAAkB,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB"}
@@ -48,6 +48,13 @@ export async function waitForCResumeIframeOrPaywall(page, timeoutMs = ONLINE_RES
48
48
  }
49
49
  return 'neither';
50
50
  }
51
+ /**
52
+ * 单次探测:主文档是否当前正显示付费弹层(与 {@link describeBossPaywallPopupIfPresent} 判定一致)。
53
+ * 供合并轮询(同一循环内同时检测多类弹层)使用,避免重复编写检测脚本。
54
+ */
55
+ export async function detectBossPaywallPopup(page) {
56
+ return (await page.evaluate(HAS_PAYWALL_SCRIPT));
57
+ }
51
58
  /**
52
59
  * 打招呼等操作后,轮询主文档是否出现付费弹层(与 {@link describeBossPaywallPopupIfPresent} 判定一致)。
53
60
  * 命中则返回 true;超时未出现则返回 false。
@@ -55,8 +62,7 @@ export async function waitForCResumeIframeOrPaywall(page, timeoutMs = ONLINE_RES
55
62
  export async function waitForBossPaywallPopup(page, timeoutMs = GREET_PAYWALL_WAIT_MAX_MS) {
56
63
  const deadline = Date.now() + timeoutMs;
57
64
  while (Date.now() < deadline) {
58
- const paywall = (await page.evaluate(HAS_PAYWALL_SCRIPT));
59
- if (paywall) {
65
+ if (await detectBossPaywallPopup(page)) {
60
66
  return true;
61
67
  }
62
68
  await sleepRandom(160, 240);
@@ -1 +1 @@
1
- {"version":3,"file":"boss_paywall_popup.js","sourceRoot":"","sources":["../../src/common/boss_paywall_popup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;KAwBtB,CAAC;AAEN;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAU,EACV,YAAoB,gCAAgC;IAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAY,CAAC;QACrE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAU,EACV,YAAoB,yBAAyB;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAY,CAAC;QACrE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,IAAU;IAC7D,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8B/B,CAAC,CAAY,CAAC;IACnB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,UAA8B,QAAQ;IAEtC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiC5B,CAAC,CAAkB,CAAC;IACzB,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"boss_paywall_popup.js","sourceRoot":"","sources":["../../src/common/boss_paywall_popup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;KAwBtB,CAAC;AAEN;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAU,EACV,YAAoB,gCAAgC;IAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAY,CAAC;QACrE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAU;IACrD,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAY,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAU,EACV,YAAoB,yBAAyB;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,MAAM,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,IAAU;IAC7D,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8B/B,CAAC,CAAY,CAAC;IACnB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,UAA8B,QAAQ;IAEtC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiC5B,CAAC,CAAkB,CAAC;IACzB,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function withBossSessionLock<T>(callback: () => Promise<T>): Promise<T>;
2
+ //# sourceMappingURL=boss_session_lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss_session_lock.d.ts","sourceRoot":"","sources":["../../src/common/boss_session_lock.ts"],"names":[],"mappings":"AAgGA,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAyCnF"}
@@ -0,0 +1,121 @@
1
+ import { open, readFile, rm } from 'node:fs/promises';
2
+ import { hostname } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { sleepRandom } from '../browser/timing.js';
5
+ import { CACHE_DIR, ensureAppDataLayout } from '../config.js';
6
+ const SESSION_LOCK_FILE = join(CACHE_DIR, 'session.lock');
7
+ const SESSION_LOCK_WAIT_MAX_MS = 30_000;
8
+ const SESSION_LOCK_POLL_MS = 250;
9
+ function buildSessionLockMeta() {
10
+ return {
11
+ pid: process.pid,
12
+ createdAt: Date.now(),
13
+ hostname: hostname(),
14
+ cwd: process.cwd(),
15
+ command: process.argv.join(' ').trim(),
16
+ };
17
+ }
18
+ async function readSessionLockMeta() {
19
+ try {
20
+ const raw = await readFile(SESSION_LOCK_FILE, 'utf8');
21
+ const parsed = JSON.parse(raw);
22
+ if (typeof parsed.pid !== 'number' ||
23
+ typeof parsed.createdAt !== 'number' ||
24
+ typeof parsed.hostname !== 'string' ||
25
+ typeof parsed.cwd !== 'string' ||
26
+ typeof parsed.command !== 'string') {
27
+ return null;
28
+ }
29
+ return {
30
+ pid: parsed.pid,
31
+ createdAt: parsed.createdAt,
32
+ hostname: parsed.hostname,
33
+ cwd: parsed.cwd,
34
+ command: parsed.command,
35
+ };
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ async function processExists(pid) {
42
+ if (!Number.isInteger(pid) || pid <= 0) {
43
+ return false;
44
+ }
45
+ try {
46
+ process.kill(pid, 0);
47
+ return true;
48
+ }
49
+ catch (error) {
50
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : '';
51
+ return code === 'EPERM';
52
+ }
53
+ }
54
+ async function clearStaleSessionLockIfNeeded() {
55
+ const meta = await readSessionLockMeta();
56
+ if (!meta) {
57
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
58
+ return;
59
+ }
60
+ if (meta.hostname !== hostname()) {
61
+ return;
62
+ }
63
+ if (await processExists(meta.pid)) {
64
+ return;
65
+ }
66
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
67
+ }
68
+ function formatSessionLockOwner(meta) {
69
+ if (!meta) {
70
+ return 'unknown';
71
+ }
72
+ const ageSeconds = Math.max(0, Math.floor((Date.now() - meta.createdAt) / 1000));
73
+ return [
74
+ 'pid=' + meta.pid,
75
+ 'host=' + meta.hostname,
76
+ 'age=' + ageSeconds + 's',
77
+ meta.command ? 'cmd=' + meta.command : '',
78
+ ]
79
+ .filter(Boolean)
80
+ .join(', ');
81
+ }
82
+ export async function withBossSessionLock(callback) {
83
+ ensureAppDataLayout();
84
+ const deadline = Date.now() + SESSION_LOCK_WAIT_MAX_MS;
85
+ while (true) {
86
+ try {
87
+ const handle = await open(SESSION_LOCK_FILE, 'wx');
88
+ let lockCreated = false;
89
+ try {
90
+ await handle.writeFile(JSON.stringify(buildSessionLockMeta()), 'utf8');
91
+ lockCreated = true;
92
+ }
93
+ finally {
94
+ await handle.close().catch(() => { });
95
+ }
96
+ if (!lockCreated) {
97
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
98
+ throw new Error('Boss session lock creation failed.');
99
+ }
100
+ try {
101
+ return await callback();
102
+ }
103
+ finally {
104
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
105
+ }
106
+ }
107
+ catch (error) {
108
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : '';
109
+ if (code !== 'EEXIST') {
110
+ throw error;
111
+ }
112
+ await clearStaleSessionLockIfNeeded();
113
+ if (Date.now() >= deadline) {
114
+ const meta = await readSessionLockMeta();
115
+ throw new Error('Boss session is busy for more than 30s. Lock owner: ' + formatSessionLockOwner(meta));
116
+ }
117
+ await sleepRandom(SESSION_LOCK_POLL_MS, SESSION_LOCK_POLL_MS);
118
+ }
119
+ }
120
+ }
121
+ //# sourceMappingURL=boss_session_lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss_session_lock.js","sourceRoot":"","sources":["../../src/common/boss_session_lock.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@
5
5
  import type { Page } from 'puppeteer-core';
6
6
  /**
7
7
  * 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
8
- * 会先按 URL 确保落在沟通页 `/web/chat/index`,再校验侧栏;回调内可再导航到职位/推荐等业务路由。
8
+ * 会先按 URL 确保落在 `/web/chat/*` 主壳页(已在主壳子页则保留原路径,否则跳回沟通页 `/web/chat/index`),
9
+ * 再校验侧栏;回调内可再导航到职位/推荐等业务路由。
9
10
  */
10
11
  export declare function withBossSessionPage<T>(callback: (page: Page) => Promise<T>): Promise<T>;
11
12
  //# sourceMappingURL=boss_session_page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boss_session_page.d.ts","sourceRoot":"","sources":["../../src/common/boss_session_page.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAsIpD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA0D7F"}
1
+ {"version":3,"file":"boss_session_page.d.ts","sourceRoot":"","sources":["../../src/common/boss_session_page.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA4IpD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4D7F"}
@@ -1,9 +1,10 @@
1
- import { BOSS_CHAT_INDEX_URL, isBossChatIndexUrl } from './auth.js';
1
+ import { BOSS_CHAT_INDEX_URL, isBossChatShellUrl } from './auth.js';
2
2
  import { hideAgentOperatingIndicator, showAgentOperatingIndicator, } from '../browser/agent_operating_indicator.js';
3
3
  import { ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, } from '../browser/browser_session.js';
4
4
  import { CONTEXT_DESTROY_RETRY_MS } from '../browser/human_delay.js';
5
5
  import { sleepRandom } from '../browser/timing.js';
6
6
  import { installBossPageGuards } from './boss_page_guards.js';
7
+ import { withBossSessionLock } from './boss_session_lock.js';
7
8
  const SHOULD_DISABLE_JS = process.env.BOSS_BROWSER_DISABLE_JS === 'true' || process.env.BOSS_BROWSER_DISABLE_JS === '1';
8
9
  /** 设为 `1` / `true` 时不注入顶栏滚动提示(调试或截图对比用)。 */
9
10
  const SKIP_AGENT_OPERATING_OVERLAY = process.env.BOSS_CLI_NO_AGENT_OVERLAY === '1' ||
@@ -54,9 +55,14 @@ async function readMenuListSnapshot(page) {
54
55
  return { exists: true, signature: entries.join("|") };
55
56
  })()`));
56
57
  }
57
- /** 先按 URL 判断:非 `/web/chat/index` 则进入沟通页,再交由 {@link ensureMenuListStableAfterLoad} 查 `.menu-list` */
58
- async function ensureBossChatIndexUrlBeforeMenuList(page) {
59
- if (isBossChatIndexUrl(page.url())) {
58
+ /**
59
+ * 先按 URL 判断:不在 Boss 已登录主壳页(`/web/chat/*`)时跳到沟通页 `/web/chat/index`,
60
+ * 再交由 {@link ensureMenuListStableAfterLoad} 查 `.menu-list`。
61
+ * 已经在 `/web/chat/recommend`、`/web/chat/aiform` 等主壳子页时直接跳过 goto,
62
+ * 避免触发"先回到聊天页再切回业务页"的额外跳转。
63
+ */
64
+ async function ensureBossChatShellUrlBeforeMenuList(page) {
65
+ if (isBossChatShellUrl(page.url())) {
60
66
  return;
61
67
  }
62
68
  await page.goto(BOSS_CHAT_INDEX_URL, { waitUntil: 'load', timeout: 60_000 });
@@ -95,60 +101,63 @@ async function ensureMenuListStableAfterLoad(page) {
95
101
  }
96
102
  /**
97
103
  * 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
98
- * 会先按 URL 确保落在沟通页 `/web/chat/index`,再校验侧栏;回调内可再导航到职位/推荐等业务路由。
104
+ * 会先按 URL 确保落在 `/web/chat/*` 主壳页(已在主壳子页则保留原路径,否则跳回沟通页 `/web/chat/index`),
105
+ * 再校验侧栏;回调内可再导航到职位/推荐等业务路由。
99
106
  */
100
107
  export async function withBossSessionPage(callback) {
101
- const isContextDestroyed = (e) => {
102
- const msg = e instanceof Error ? e.message : String(e);
103
- return (msg.includes('Execution context was destroyed') ||
104
- msg.includes('Cannot find context with specified id') ||
105
- msg.includes('Most likely because of a navigation'));
106
- };
107
- const maxAttempts = 2;
108
- let lastErr;
109
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
110
- try {
111
- await ensureBrowserSession();
112
- const browser = getBrowserRef();
113
- if (!browser) {
114
- throw new Error('无法获取浏览器实例。');
115
- }
116
- let page = getPageRef();
117
- if (!page || page.isClosed()) {
118
- page = (await pickExistingPage(browser)) ?? (await browser.newPage());
119
- }
120
- setSessionPage(page);
121
- await page.bringToFront();
122
- await installBossPageGuards(page);
123
- await ensureBossChatIndexUrlBeforeMenuList(page);
124
- if (SHOULD_DISABLE_JS) {
125
- await page.setJavaScriptEnabled(false);
126
- }
127
- await ensureMenuListStableAfterLoad(page);
128
- if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
129
- await showAgentOperatingIndicator(page).catch(() => {
130
- /* 注入失败不阻断业务 */
131
- });
132
- }
108
+ return withBossSessionLock(async () => {
109
+ const isContextDestroyed = (e) => {
110
+ const msg = e instanceof Error ? e.message : String(e);
111
+ return (msg.includes('Execution context was destroyed') ||
112
+ msg.includes('Cannot find context with specified id') ||
113
+ msg.includes('Most likely because of a navigation'));
114
+ };
115
+ const maxAttempts = 2;
116
+ let lastErr;
117
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
133
118
  try {
134
- return await callback(page);
135
- }
136
- finally {
119
+ await ensureBrowserSession();
120
+ const browser = getBrowserRef();
121
+ if (!browser) {
122
+ throw new Error('无法获取浏览器实例。');
123
+ }
124
+ let page = getPageRef();
125
+ if (!page || page.isClosed()) {
126
+ page = (await pickExistingPage(browser)) ?? (await browser.newPage());
127
+ }
128
+ setSessionPage(page);
129
+ await page.bringToFront();
130
+ await installBossPageGuards(page);
131
+ await ensureBossChatShellUrlBeforeMenuList(page);
132
+ if (SHOULD_DISABLE_JS) {
133
+ await page.setJavaScriptEnabled(false);
134
+ }
135
+ await ensureMenuListStableAfterLoad(page);
137
136
  if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
138
- await hideAgentOperatingIndicator(page);
137
+ await showAgentOperatingIndicator(page).catch(() => {
138
+ /* 注入失败不阻断业务 */
139
+ });
140
+ }
141
+ try {
142
+ return await callback(page);
143
+ }
144
+ finally {
145
+ if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
146
+ await hideAgentOperatingIndicator(page);
147
+ }
139
148
  }
140
149
  }
141
- }
142
- catch (e) {
143
- lastErr = e;
144
- if (attempt < maxAttempts - 1 && isContextDestroyed(e)) {
145
- // Boss 页面偶发跳转/重渲染会销毁执行上下文;短暂等待并重试一次即可。
146
- await sleepRandom(CONTEXT_DESTROY_RETRY_MS.min, CONTEXT_DESTROY_RETRY_MS.max);
147
- continue;
150
+ catch (e) {
151
+ lastErr = e;
152
+ if (attempt < maxAttempts - 1 && isContextDestroyed(e)) {
153
+ // Boss 页面偶发跳转/重渲染会销毁执行上下文;短暂等待并重试一次即可。
154
+ await sleepRandom(CONTEXT_DESTROY_RETRY_MS.min, CONTEXT_DESTROY_RETRY_MS.max);
155
+ continue;
156
+ }
157
+ throw e;
148
158
  }
149
- throw e;
150
159
  }
151
- }
152
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
160
+ throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
161
+ });
153
162
  }
154
163
  //# sourceMappingURL=boss_session_page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boss_session_page.js","sourceRoot":"","sources":["../../src/common/boss_session_page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boss_session_page.js","sourceRoot":"","sources":["../../src/common/boss_session_page.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ const CLOSE_C_RESUME_PANEL_SCRIPT = `(() => {
19
19
  var node = iframe ? iframe.parentElement : null;
20
20
  for (var i = 0; i < 12 && node; i++) {
21
21
  var closeBtn = node.querySelector(
22
- '.boss-popup__close, .drawer-close, .icon-close, .btn-quxiao',
22
+ '.boss-popup__close, .drawer-close, .icon-close, .close-btn, .btn-quxiao',
23
23
  );
24
24
  if (closeBtn) {
25
25
  closeBtn.click();
@@ -12,7 +12,7 @@ export declare function selectAiFormJob(page: Page, keyword: string): Promise<st
12
12
  /** 深度搜索页当前选中的岗位文案(无则「默认」) */
13
13
  export declare function readAiFormSelectedJobLabel(page: Page): Promise<string>;
14
14
  /**
15
- * 在深度搜索(aiform)主文档中按姓名或序号打开在线简历预览(与 {@link clickGreetDeepSearch} 同一卡片集合,排除「继续沟通」)。
15
+ * 在深度搜索(aiform)主文档中按姓名打开在线简历预览(与 {@link clickGreetDeepSearch} 同一卡片集合,排除「继续沟通」)。
16
16
  */
17
17
  export declare function openDeepSearchResumePreview(page: Page, target: string): Promise<boolean>;
18
18
  export declare function readDeepSearchGeekList(page: Page): Promise<DeepSearchGeekItem[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"deep-search.d.ts","sourceRoot":"","sources":["../../src/toolset/deep-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAgB3C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWxD;AAkBD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE;AAgvBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0ElF;AAED,6BAA6B;AAC7B,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkE9F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4BtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAoBxF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuFnG;AAeD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDlB;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCvF"}
1
+ {"version":3,"file":"deep-search.d.ts","sourceRoot":"","sources":["../../src/toolset/deep-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAgB3C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWxD;AAkBD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE;AAgvBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0ElF;AAED,6BAA6B;AAC7B,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2D9F;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4BtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAoBxF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgFnG;AAeD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDlB;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCvF"}
@@ -767,7 +767,7 @@ export async function readAiFormSelectedJobLabel(page) {
767
767
  })()`));
768
768
  }
769
769
  /**
770
- * 在深度搜索(aiform)主文档中按姓名或序号打开在线简历预览(与 {@link clickGreetDeepSearch} 同一卡片集合,排除「继续沟通」)。
770
+ * 在深度搜索(aiform)主文档中按姓名打开在线简历预览(与 {@link clickGreetDeepSearch} 同一卡片集合,排除「继续沟通」)。
771
771
  */
772
772
  export async function openDeepSearchResumePreview(page, target) {
773
773
  const raw = target.trim();
@@ -784,18 +784,11 @@ export async function openDeepSearchResumePreview(page, target) {
784
784
  return !chatLabel.includes("继续沟通");
785
785
  });
786
786
  if (cards.length === 0) return false;
787
-
788
- const idxNum = Number.parseInt(raw, 10);
789
- var targetCard = null;
790
- if (Number.isFinite(idxNum) && idxNum >= 1 && idxNum <= cards.length) {
791
- targetCard = cards[idxNum - 1];
792
- } else {
793
- targetCard =
794
- cards.find((item) => {
795
- const name = norm(item.querySelector(".geek-name")?.textContent);
796
- return name === raw || name.includes(raw);
797
- }) ?? null;
798
- }
787
+ const targetCard =
788
+ cards.find((item) => {
789
+ const name = norm(item.querySelector(".geek-name")?.textContent);
790
+ return name === raw || name.includes(raw);
791
+ }) ?? null;
799
792
  if (!targetCard) return false;
800
793
 
801
794
  function tryOpen(el) {
@@ -904,18 +897,11 @@ export async function clickGreetDeepSearch(page, target) {
904
897
  if (cards.length === 0) {
905
898
  return { kind: "all_continue" };
906
899
  }
907
-
908
- const idxNum = Number.parseInt(raw, 10);
909
- let targetCard = null;
910
- if (Number.isFinite(idxNum) && idxNum >= 1 && idxNum <= cards.length) {
911
- targetCard = cards[idxNum - 1];
912
- } else {
913
- targetCard =
914
- cards.find((item) => {
915
- const name = norm(item.querySelector(".geek-name")?.textContent);
916
- return name === raw || name.includes(raw);
917
- }) ?? null;
918
- }
900
+ const targetCard =
901
+ cards.find((item) => {
902
+ const name = norm(item.querySelector(".geek-name")?.textContent);
903
+ return name === raw || name.includes(raw);
904
+ }) ?? null;
919
905
  if (!targetCard) {
920
906
  return { kind: "not_found", target: raw };
921
907
  }
@@ -947,7 +933,7 @@ export async function clickGreetDeepSearch(page, target) {
947
933
  case 'all_continue':
948
934
  throw new Error('当前列表均为「继续沟通」状态,已无待打招呼人选(与 boss deep-search 列表展示一致)。');
949
935
  case 'not_found':
950
- throw new Error(`未在可打招呼的深度搜索列表中找到目标:${result.target}(「继续沟通」人选已排除,请用 boss deep-search 核对序号与姓名)。`);
936
+ throw new Error(`未在可打招呼的深度搜索列表中找到目标:${result.target}(「继续沟通」人选已排除,请用 boss deep-search 核对姓名)。`);
951
937
  case 'no_btn':
952
938
  throw new Error(`候选人 ${result.name} 缺少「打招呼」按钮,无法执行。`);
953
939
  case 'not_greet':