@joohw/boss-cli 0.4.0 → 0.4.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.
Files changed (109) hide show
  1. package/README.md +169 -172
  2. package/dist/browser/agent_operating_indicator.js +51 -51
  3. package/dist/browser/human_delay.d.ts +2 -0
  4. package/dist/browser/human_delay.d.ts.map +1 -1
  5. package/dist/browser/human_delay.js +4 -0
  6. package/dist/browser/human_delay.js.map +1 -1
  7. package/dist/cli/cliRouter.js +42 -42
  8. package/dist/common/auth.js +49 -49
  9. package/dist/common/boss_paywall_popup.js +87 -87
  10. package/dist/common/boss_session_lock.d.ts.map +1 -1
  11. package/dist/common/boss_session_lock.js +7 -1
  12. package/dist/common/boss_session_lock.js.map +1 -1
  13. package/dist/common/boss_session_page.d.ts +2 -2
  14. package/dist/common/boss_session_page.d.ts.map +1 -1
  15. package/dist/common/boss_session_page.js +18 -29
  16. package/dist/common/boss_session_page.js.map +1 -1
  17. package/dist/common/boss_sidebar_nav.js +25 -26
  18. package/dist/common/boss_sidebar_nav.js.map +1 -1
  19. package/dist/common/c_resume_capture.d.ts +1 -0
  20. package/dist/common/c_resume_capture.d.ts.map +1 -1
  21. package/dist/common/c_resume_capture.js +69 -32
  22. package/dist/common/c_resume_capture.js.map +1 -1
  23. package/dist/ocr/resume_ocr.d.ts.map +1 -1
  24. package/dist/ocr/resume_ocr.js +4 -1
  25. package/dist/ocr/resume_ocr.js.map +1 -1
  26. package/dist/toolset/action.d.ts.map +1 -1
  27. package/dist/toolset/action.js +11 -7
  28. package/dist/toolset/action.js.map +1 -1
  29. package/dist/toolset/chat.d.ts.map +1 -1
  30. package/dist/toolset/chat.js +246 -230
  31. package/dist/toolset/chat.js.map +1 -1
  32. package/dist/toolset/deep-search.d.ts.map +1 -1
  33. package/dist/toolset/deep-search.js +289 -265
  34. package/dist/toolset/deep-search.js.map +1 -1
  35. package/dist/toolset/greet.d.ts.map +1 -1
  36. package/dist/toolset/greet.js +1 -6
  37. package/dist/toolset/greet.js.map +1 -1
  38. package/dist/toolset/jd.d.ts.map +1 -1
  39. package/dist/toolset/jd.js +132 -136
  40. package/dist/toolset/jd.js.map +1 -1
  41. package/dist/toolset/list.d.ts.map +1 -1
  42. package/dist/toolset/list.js +52 -45
  43. package/dist/toolset/list.js.map +1 -1
  44. package/dist/toolset/preview.d.ts.map +1 -1
  45. package/dist/toolset/preview.js +6 -8
  46. package/dist/toolset/preview.js.map +1 -1
  47. package/dist/toolset/recommend.d.ts.map +1 -1
  48. package/dist/toolset/recommend.js +222 -196
  49. package/dist/toolset/recommend.js.map +1 -1
  50. package/dist/toolset/send.d.ts.map +1 -1
  51. package/dist/toolset/send.js +6 -9
  52. package/dist/toolset/send.js.map +1 -1
  53. package/package.json +65 -65
  54. package/dist/browser/auth.d.ts +0 -33
  55. package/dist/browser/auth.d.ts.map +0 -1
  56. package/dist/browser/auth.js +0 -137
  57. package/dist/browser/auth.js.map +0 -1
  58. package/dist/browser/c_resume_capture.d.ts +0 -11
  59. package/dist/browser/c_resume_capture.d.ts.map +0 -1
  60. package/dist/browser/c_resume_capture.js +0 -76
  61. package/dist/browser/c_resume_capture.js.map +0 -1
  62. package/dist/browser/chat.d.ts +0 -7
  63. package/dist/browser/chat.d.ts.map +0 -1
  64. package/dist/browser/chat.js +0 -155
  65. package/dist/browser/chat.js.map +0 -1
  66. package/dist/browser/withLoggedInPage.d.ts +0 -7
  67. package/dist/browser/withLoggedInPage.d.ts.map +0 -1
  68. package/dist/browser/withLoggedInPage.js +0 -19
  69. package/dist/browser/withLoggedInPage.js.map +0 -1
  70. package/dist/facebook-cli/index.d.ts +0 -2
  71. package/dist/facebook-cli/index.d.ts.map +0 -1
  72. package/dist/facebook-cli/index.js +0 -2
  73. package/dist/facebook-cli/index.js.map +0 -1
  74. package/dist/toolset/c_resume_capture.d.ts +0 -11
  75. package/dist/toolset/c_resume_capture.d.ts.map +0 -1
  76. package/dist/toolset/c_resume_capture.js +0 -76
  77. package/dist/toolset/c_resume_capture.js.map +0 -1
  78. package/dist/toolset/chat_action.d.ts +0 -7
  79. package/dist/toolset/chat_action.d.ts.map +0 -1
  80. package/dist/toolset/chat_action.js +0 -355
  81. package/dist/toolset/chat_action.js.map +0 -1
  82. package/dist/toolset/list_candidates.d.ts +0 -4
  83. package/dist/toolset/list_candidates.d.ts.map +0 -1
  84. package/dist/toolset/list_candidates.js +0 -120
  85. package/dist/toolset/list_candidates.js.map +0 -1
  86. package/dist/toolset/list_positions.d.ts +0 -9
  87. package/dist/toolset/list_positions.d.ts.map +0 -1
  88. package/dist/toolset/list_positions.js +0 -41
  89. package/dist/toolset/list_positions.js.map +0 -1
  90. package/dist/toolset/open_chat.d.ts +0 -3
  91. package/dist/toolset/open_chat.d.ts.map +0 -1
  92. package/dist/toolset/open_chat.js +0 -423
  93. package/dist/toolset/open_chat.js.map +0 -1
  94. package/dist/toolset/recommend_greet.d.ts +0 -2
  95. package/dist/toolset/recommend_greet.d.ts.map +0 -1
  96. package/dist/toolset/recommend_greet.js +0 -27
  97. package/dist/toolset/recommend_greet.js.map +0 -1
  98. package/dist/toolset/search.d.ts +0 -24
  99. package/dist/toolset/search.d.ts.map +0 -1
  100. package/dist/toolset/search.js +0 -682
  101. package/dist/toolset/search.js.map +0 -1
  102. package/dist/toolset/send_message.d.ts +0 -12
  103. package/dist/toolset/send_message.d.ts.map +0 -1
  104. package/dist/toolset/send_message.js +0 -214
  105. package/dist/toolset/send_message.js.map +0 -1
  106. package/dist/toolset/skill.d.ts +0 -13
  107. package/dist/toolset/skill.d.ts.map +0 -1
  108. package/dist/toolset/skill.js +0 -85
  109. package/dist/toolset/skill.js.map +0 -1
@@ -72,55 +72,55 @@ export function isWebUserLoginUrl(url) {
72
72
  * 必须在页面里执行的探测脚本(纯字符串)。
73
73
  * `tsx`/esbuild 转译 `page.evaluate(() => { ... })` 时可能注入 `__name(...)`,序列化到浏览器后会报 `__name is not defined`。
74
74
  */
75
- const PROBE_LOGGED_IN_SIGNALS_SCRIPT = `(() => {
76
- function isNick(t) {
77
- const s = t.replace(/\\s+/g, " ").trim();
78
- if (s.length < 2 || s.length > 64) return false;
79
- return !/^(我要登录|登录|注册|登录\\/注册)$/u.test(s);
80
- }
81
- var hasNickname = false;
82
- var nickSelectors = [
83
- ".user-name",
84
- "span.user-name",
85
- "[class*='user-name']",
86
- ".label-name",
87
- ".nav-user .name",
88
- ".nav-user-name",
89
- "a.nav-user",
90
- ".header-nav [class*='name']",
91
- ];
92
- var si, i, els, el, t;
93
- for (si = 0; si < nickSelectors.length; si++) {
94
- els = document.querySelectorAll(nickSelectors[si]);
95
- for (i = 0; i < els.length; i++) {
96
- el = els[i];
97
- t = (el.textContent || "").trim();
98
- if (isNick(t)) {
99
- hasNickname = true;
100
- break;
101
- }
102
- }
103
- if (hasNickname) break;
104
- }
105
- var navRoots = [];
106
- var navSels = ["header", ".nav-header", ".nav-wrap", ".top-header", "#header", ".header", ".navbar"];
107
- var j, ne;
108
- for (j = 0; j < navSels.length; j++) {
109
- ne = document.querySelector(navSels[j]);
110
- if (ne instanceof HTMLElement) navRoots.push(ne);
111
- }
112
- var navLoginCta = false;
113
- for (i = 0; i < navRoots.length; i++) {
114
- if (/\\b我要登录\\b/u.test(navRoots[i].innerText || "")) {
115
- navLoginCta = true;
116
- break;
117
- }
118
- }
119
- var bodyText = document.body instanceof HTMLElement ? document.body.innerText || "" : "";
120
- var hasLogoutHint =
121
- /\\b退出登录\\b/u.test(bodyText) ||
122
- !!document.querySelector("a[href*='logout'], a[href*='signout'], [data-url*='logout']");
123
- return { hasNickname: hasNickname, navLoginCta: navLoginCta, hasLogoutHint: hasLogoutHint };
75
+ const PROBE_LOGGED_IN_SIGNALS_SCRIPT = `(() => {
76
+ function isNick(t) {
77
+ const s = t.replace(/\\s+/g, " ").trim();
78
+ if (s.length < 2 || s.length > 64) return false;
79
+ return !/^(我要登录|登录|注册|登录\\/注册)$/u.test(s);
80
+ }
81
+ var hasNickname = false;
82
+ var nickSelectors = [
83
+ ".user-name",
84
+ "span.user-name",
85
+ "[class*='user-name']",
86
+ ".label-name",
87
+ ".nav-user .name",
88
+ ".nav-user-name",
89
+ "a.nav-user",
90
+ ".header-nav [class*='name']",
91
+ ];
92
+ var si, i, els, el, t;
93
+ for (si = 0; si < nickSelectors.length; si++) {
94
+ els = document.querySelectorAll(nickSelectors[si]);
95
+ for (i = 0; i < els.length; i++) {
96
+ el = els[i];
97
+ t = (el.textContent || "").trim();
98
+ if (isNick(t)) {
99
+ hasNickname = true;
100
+ break;
101
+ }
102
+ }
103
+ if (hasNickname) break;
104
+ }
105
+ var navRoots = [];
106
+ var navSels = ["header", ".nav-header", ".nav-wrap", ".top-header", "#header", ".header", ".navbar"];
107
+ var j, ne;
108
+ for (j = 0; j < navSels.length; j++) {
109
+ ne = document.querySelector(navSels[j]);
110
+ if (ne instanceof HTMLElement) navRoots.push(ne);
111
+ }
112
+ var navLoginCta = false;
113
+ for (i = 0; i < navRoots.length; i++) {
114
+ if (/\\b我要登录\\b/u.test(navRoots[i].innerText || "")) {
115
+ navLoginCta = true;
116
+ break;
117
+ }
118
+ }
119
+ var bodyText = document.body instanceof HTMLElement ? document.body.innerText || "" : "";
120
+ var hasLogoutHint =
121
+ /\\b退出登录\\b/u.test(bodyText) ||
122
+ !!document.querySelector("a[href*='logout'], a[href*='signout'], [data-url*='logout']");
123
+ return { hasNickname: hasNickname, navLoginCta: navLoginCta, hasLogoutHint: hasLogoutHint };
124
124
  })()`;
125
125
  async function probeLoggedInSignals(page) {
126
126
  return (await page.evaluate(PROBE_LOGGED_IN_SIGNALS_SCRIPT));
@@ -2,30 +2,30 @@ import { GREET_PAYWALL_WAIT_MAX_MS, ONLINE_RESUME_IFRAME_WAIT_MAX_MS } from '../
2
2
  import { sleepRandom } from '../browser/timing.js';
3
3
  import { frameHasVisibleCResumeIframe } from './c_resume_capture.js';
4
4
  /** 付费墙仅在主文档轮询(遮罩层挂在顶层);与 {@link describeBossPaywallPopupIfPresent} 判定一致 */
5
- const HAS_PAYWALL_SCRIPT = `(() => {
6
- const roots = Array.from(
7
- document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
8
- );
9
- for (const root of roots) {
10
- if (!(root instanceof HTMLElement)) continue;
11
- const st = window.getComputedStyle(root);
12
- if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
13
- continue;
14
- }
15
- const rect = root.getBoundingClientRect();
16
- if (rect.width < 20 || rect.height < 20) continue;
17
- const hasVipUi = root.querySelector(
18
- ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
19
- );
20
- const text = (root.textContent || "").replace(/\\s+/g, " ");
21
- const hasPayText =
22
- /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
23
- text,
24
- );
25
- if (!hasVipUi && !hasPayText) continue;
26
- return true;
27
- }
28
- return false;
5
+ const HAS_PAYWALL_SCRIPT = `(() => {
6
+ const roots = Array.from(
7
+ document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
8
+ );
9
+ for (const root of roots) {
10
+ if (!(root instanceof HTMLElement)) continue;
11
+ const st = window.getComputedStyle(root);
12
+ if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
13
+ continue;
14
+ }
15
+ const rect = root.getBoundingClientRect();
16
+ if (rect.width < 20 || rect.height < 20) continue;
17
+ const hasVipUi = root.querySelector(
18
+ ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
19
+ );
20
+ const text = (root.textContent || "").replace(/\\s+/g, " ");
21
+ const hasPayText =
22
+ /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
23
+ text,
24
+ );
25
+ if (!hasVipUi && !hasPayText) continue;
26
+ return true;
27
+ }
28
+ return false;
29
29
  })()`;
30
30
  /**
31
31
  * 轮询直到出现 c-resume iframe、或出现付费墙、或超时。
@@ -74,36 +74,36 @@ export async function waitForBossPaywallPopup(page, timeoutMs = GREET_PAYWALL_WA
74
74
  * 则点击关闭按钮以恢复页面可操作状态。返回是否执行了关闭。
75
75
  */
76
76
  export async function closeBossPaywallPopupIfPresent(page) {
77
- const closed = (await page.evaluate(`(() => {
78
- const roots = Array.from(
79
- document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
80
- );
81
- for (const root of roots) {
82
- if (!(root instanceof HTMLElement)) continue;
83
- const st = window.getComputedStyle(root);
84
- if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
85
- continue;
86
- }
87
- const rect = root.getBoundingClientRect();
88
- if (rect.width < 20 || rect.height < 20) continue;
89
- const hasVipUi = root.querySelector(
90
- ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
91
- );
92
- const text = (root.textContent || "").replace(/\\s+/g, " ");
93
- const hasPayText =
94
- /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
95
- text,
96
- );
97
- if (!hasVipUi && !hasPayText) continue;
98
- const closeBtn = root.querySelector(
99
- ".boss-popup__close, .boss-dialog__close, .drawer-close, .icon-close",
100
- );
101
- if (closeBtn instanceof HTMLElement) {
102
- closeBtn.click();
103
- return true;
104
- }
105
- }
106
- return false;
77
+ const closed = (await page.evaluate(`(() => {
78
+ const roots = Array.from(
79
+ document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
80
+ );
81
+ for (const root of roots) {
82
+ if (!(root instanceof HTMLElement)) continue;
83
+ const st = window.getComputedStyle(root);
84
+ if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
85
+ continue;
86
+ }
87
+ const rect = root.getBoundingClientRect();
88
+ if (rect.width < 20 || rect.height < 20) continue;
89
+ const hasVipUi = root.querySelector(
90
+ ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
91
+ );
92
+ const text = (root.textContent || "").replace(/\\s+/g, " ");
93
+ const hasPayText =
94
+ /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
95
+ text,
96
+ );
97
+ if (!hasVipUi && !hasPayText) continue;
98
+ const closeBtn = root.querySelector(
99
+ ".boss-popup__close, .boss-dialog__close, .drawer-close, .icon-close",
100
+ );
101
+ if (closeBtn instanceof HTMLElement) {
102
+ closeBtn.click();
103
+ return true;
104
+ }
105
+ }
106
+ return false;
107
107
  })()`));
108
108
  if (closed) {
109
109
  await sleepRandom(220, 480);
@@ -116,39 +116,39 @@ export async function closeBossPaywallPopupIfPresent(page) {
116
116
  * @param purpose `greet` 时将「查看在线简历」类措辞改为适合打招呼的说明。
117
117
  */
118
118
  export async function describeBossPaywallPopupIfPresent(page, purpose = 'resume') {
119
- const msg = (await page.evaluate(`(() => {
120
- const roots = Array.from(
121
- document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
122
- );
123
- for (const root of roots) {
124
- if (!(root instanceof HTMLElement)) continue;
125
- const st = window.getComputedStyle(root);
126
- if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
127
- continue;
128
- }
129
- const rect = root.getBoundingClientRect();
130
- if (rect.width < 20 || rect.height < 20) continue;
131
- const hasVipUi = root.querySelector(
132
- ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
133
- );
134
- const text = (root.textContent || "").replace(/\\s+/g, " ");
135
- const hasPayText =
136
- /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
137
- text,
138
- );
139
- if (!hasVipUi && !hasPayText) continue;
140
- const h = root.querySelector("h3.title, h4.title, .card-header .title");
141
- const title = (h?.textContent || "").replace(/\\s+/g, " ").trim();
142
- if (title) {
143
- return (
144
- "页面出现付费弹层(" +
145
- title +
146
- "),可能需开通 VIP 或购买权益后才能查看在线简历。"
147
- );
148
- }
149
- return "页面出现 VIP/付费购买弹层,可能需开通权益后才能查看在线简历。";
150
- }
151
- return null;
119
+ const msg = (await page.evaluate(`(() => {
120
+ const roots = Array.from(
121
+ document.querySelectorAll(".boss-popup__wrapper, .boss-dialog__wrapper"),
122
+ );
123
+ for (const root of roots) {
124
+ if (!(root instanceof HTMLElement)) continue;
125
+ const st = window.getComputedStyle(root);
126
+ if (st.display === "none" || st.visibility === "hidden" || Number(st.opacity) < 0.05) {
127
+ continue;
128
+ }
129
+ const rect = root.getBoundingClientRect();
130
+ if (rect.width < 20 || rect.height < 20) continue;
131
+ const hasVipUi = root.querySelector(
132
+ ".block-vip2, .vip2-layout, .payment-layout-v2, .rights-table-vip, .qrcode-v1, .pay-wrap-qrcode-v1, .panel-deadline",
133
+ );
134
+ const text = (root.textContent || "").replace(/\\s+/g, " ");
135
+ const hasPayText =
136
+ /VIP账号|商品需付|直豆|扫码支付|请使用.*支付宝|请使用.*微信|增值服务协议|VIP\\s*\\d+项|限时特惠|直豆抵扣/.test(
137
+ text,
138
+ );
139
+ if (!hasVipUi && !hasPayText) continue;
140
+ const h = root.querySelector("h3.title, h4.title, .card-header .title");
141
+ const title = (h?.textContent || "").replace(/\\s+/g, " ").trim();
142
+ if (title) {
143
+ return (
144
+ "页面出现付费弹层(" +
145
+ title +
146
+ "),可能需开通 VIP 或购买权益后才能查看在线简历。"
147
+ );
148
+ }
149
+ return "页面出现 VIP/付费购买弹层,可能需开通权益后才能查看在线简历。";
150
+ }
151
+ return null;
152
152
  })()`));
153
153
  if (!msg || purpose === 'resume') {
154
154
  return msg;
@@ -1 +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"}
1
+ {"version":3,"file":"boss_session_lock.d.ts","sourceRoot":"","sources":["../../src/common/boss_session_lock.ts"],"names":[],"mappings":"AAmGA,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4CnF"}
@@ -58,6 +58,9 @@ async function clearStaleSessionLockIfNeeded() {
58
58
  return;
59
59
  }
60
60
  if (meta.hostname !== hostname()) {
61
+ if (!(await processExists(meta.pid))) {
62
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
63
+ }
61
64
  return;
62
65
  }
63
66
  if (await processExists(meta.pid)) {
@@ -112,7 +115,10 @@ export async function withBossSessionLock(callback) {
112
115
  await clearStaleSessionLockIfNeeded();
113
116
  if (Date.now() >= deadline) {
114
117
  const meta = await readSessionLockMeta();
115
- throw new Error('Boss session is busy for more than 30s. Lock owner: ' + formatSessionLockOwner(meta));
118
+ throw new Error('Boss session is busy for more than 30s. Lock owner: ' +
119
+ formatSessionLockOwner(meta) +
120
+ '. If stale, delete ' +
121
+ SESSION_LOCK_FILE);
116
122
  }
117
123
  await sleepRandom(SESSION_LOCK_POLL_MS, SESSION_LOCK_POLL_MS);
118
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"boss_session_lock.js","sourceRoot":"","sources":["../../src/common/boss_session_lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boss_session_lock.js","sourceRoot":"","sources":["../../src/common/boss_session_lock.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Boss B 端「已登录主壳」会话:选页、必要时进入沟通页、侧栏 `.menu-list` 探测与稳定检测,
2
+ * Boss B 端「主壳」会话:选页、必要时进入沟通页、侧栏 `.menu-list` 探测,
3
3
  * 再执行 {@link withBossSessionPage} 回调。与 `src/toolset/chat.ts`(按姓名打开会话等业务)无关。
4
4
  */
5
5
  import type { Page } from 'puppeteer-core';
6
6
  /**
7
- * 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
7
+ * 在已连接浏览器、且当前页为 Boss 主壳(含侧栏 `.menu-list`)的前提下执行回调。
8
8
  * 会先按 URL 确保落在 `/web/chat/*` 主壳页(已在主壳子页则保留原路径,否则跳回沟通页 `/web/chat/index`),
9
9
  * 再校验侧栏;回调内可再导航到职位/推荐等业务路由。
10
10
  */
@@ -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;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
+ {"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;AA+HpD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4D7F"}
@@ -39,25 +39,25 @@ function normalizeMenuText(raw) {
39
39
  return (raw ?? '').replace(/\s+/g, ' ').trim();
40
40
  }
41
41
  async function readMenuListSnapshot(page) {
42
- return (await page.evaluate(`(() => {
43
- const root = document.querySelector(".menu-list");
44
- if (!root) {
45
- return { exists: false, signature: "" };
46
- }
47
- const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
48
- const links = Array.from(root.querySelectorAll("dl > dt > a"));
49
- const entries = links.map((a) => {
50
- const href = a.getAttribute("href") ?? "";
51
- const labelNode = a.querySelector(".menu-item-content span");
52
- const label = norm(labelNode?.textContent || a.textContent || "");
53
- return label + "::" + href;
54
- });
55
- return { exists: true, signature: entries.join("|") };
42
+ return (await page.evaluate(`(() => {
43
+ const root = document.querySelector(".menu-list");
44
+ if (!root) {
45
+ return { exists: false, signature: "" };
46
+ }
47
+ const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
48
+ const links = Array.from(root.querySelectorAll("dl > dt > a"));
49
+ const entries = links.map((a) => {
50
+ const href = a.getAttribute("href") ?? "";
51
+ const labelNode = a.querySelector(".menu-item-content span");
52
+ const label = norm(labelNode?.textContent || a.textContent || "");
53
+ return label + "::" + href;
54
+ });
55
+ return { exists: true, signature: entries.join("|") };
56
56
  })()`));
57
57
  }
58
58
  /**
59
59
  * 先按 URL 判断:不在 Boss 已登录主壳页(`/web/chat/*`)时跳到沟通页 `/web/chat/index`,
60
- * 再交由 {@link ensureMenuListStableAfterLoad} 查 `.menu-list`。
60
+ * 再交由 {@link ensureMenuListMountedAfterLoad} 查 `.menu-list`。
61
61
  * 已经在 `/web/chat/recommend`、`/web/chat/aiform` 等主壳子页时直接跳过 goto,
62
62
  * 避免触发"先回到聊天页再切回业务页"的额外跳转。
63
63
  */
@@ -67,7 +67,7 @@ async function ensureBossChatShellUrlBeforeMenuList(page) {
67
67
  }
68
68
  await page.goto(BOSS_CHAT_INDEX_URL, { waitUntil: 'load', timeout: 60_000 });
69
69
  }
70
- async function ensureMenuListStableAfterLoad(page) {
70
+ async function ensureMenuListMountedAfterLoad(page) {
71
71
  await page.waitForFunction(`(() => document.readyState === "complete" || document.readyState === "interactive")()`, { timeout: 12_000 });
72
72
  try {
73
73
  await page.waitForFunction(`(() => !!document.querySelector(".menu-list"))()`, { timeout: MENU_LIST_MOUNT_TIMEOUT_MS });
@@ -87,20 +87,9 @@ async function ensureMenuListStableAfterLoad(page) {
87
87
  if (!normalizeMenuText(first.signature)) {
88
88
  throw new Error('检测到 .menu-list 但菜单内容为空,当前页面状态异常。');
89
89
  }
90
- const stableWindowMs = 3_000;
91
- const pollMs = 300;
92
- const deadline = Date.now() + stableWindowMs;
93
- const expected = first.signature;
94
- while (Date.now() < deadline) {
95
- await sleepRandom(pollMs, pollMs);
96
- const snap = await readMenuListSnapshot(page);
97
- if (!snap.exists || snap.signature !== expected) {
98
- throw new Error('登录状态校验失败,页面可能还未登录,请登录后再试');
99
- }
100
- }
101
90
  }
102
91
  /**
103
- * 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
92
+ * 在已连接浏览器、且当前页为 Boss 主壳(含侧栏 `.menu-list`)的前提下执行回调。
104
93
  * 会先按 URL 确保落在 `/web/chat/*` 主壳页(已在主壳子页则保留原路径,否则跳回沟通页 `/web/chat/index`),
105
94
  * 再校验侧栏;回调内可再导航到职位/推荐等业务路由。
106
95
  */
@@ -132,7 +121,7 @@ export async function withBossSessionPage(callback) {
132
121
  if (SHOULD_DISABLE_JS) {
133
122
  await page.setJavaScriptEnabled(false);
134
123
  }
135
- await ensureMenuListStableAfterLoad(page);
124
+ await ensureMenuListMountedAfterLoad(page);
136
125
  if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
137
126
  await showAgentOperatingIndicator(page).catch(() => {
138
127
  /* 注入失败不阻断业务 */
@@ -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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"}
@@ -3,35 +3,34 @@ const SIDEBAR_NAV_WAIT_MS = 15_000;
3
3
  * 点击 Boss 左侧 `.menu-list` 中的菜单项,并等待导航到给定 pathname(如 `/web/chat/index`)。
4
4
  */
5
5
  export async function clickBossSidebarMenuToPath(page, menuLabel, targetPath) {
6
- const clicked = (await page.evaluate(({ label, path }) => {
7
- const norm = (v) => (v ?? '').replace(/\s+/g, '');
8
- const links = Array.from(document.querySelectorAll('.menu-list a'));
9
- const target = links.find((a) => {
10
- const href = a.getAttribute('href') ?? '';
11
- if (href.includes(path)) {
12
- return true;
13
- }
14
- const text = norm(a.querySelector('.menu-item-content span')?.textContent ?? a.textContent);
15
- return text.includes(label);
16
- });
17
- if (!(target instanceof HTMLElement)) {
18
- return false;
6
+ const clicked = (await page.evaluate(`(({ label, path }) => {
7
+ const norm = (v) => (v ?? "").replace(/\\s+/g, "");
8
+ const links = Array.from(document.querySelectorAll(".menu-list a"));
9
+ const target = links.find((a) => {
10
+ const href = a.getAttribute("href") ?? "";
11
+ if (href.includes(path)) {
12
+ return true;
19
13
  }
20
- target.scrollIntoView({ block: 'center', inline: 'nearest' });
21
- target.click();
22
- return true;
23
- }, { label: menuLabel, path: targetPath }));
14
+ const text = norm(a.querySelector(".menu-item-content span")?.textContent ?? a.textContent);
15
+ return text.includes(label);
16
+ });
17
+ if (!(target instanceof HTMLElement)) {
18
+ return false;
19
+ }
20
+ target.scrollIntoView({ block: "center", inline: "nearest" });
21
+ target.click();
22
+ return true;
23
+ })`, { label: menuLabel, path: targetPath }));
24
24
  if (!clicked) {
25
25
  throw new Error(`未找到侧边栏菜单“${menuLabel}”,无法跳转到 ${targetPath}。`);
26
26
  }
27
- await page.waitForFunction((path) => {
28
- try {
29
- const p = window.location.pathname.replace(/\/+$/, '') || '/';
30
- return p === path;
31
- }
32
- catch {
33
- return false;
34
- }
35
- }, { timeout: SIDEBAR_NAV_WAIT_MS }, targetPath);
27
+ await page.waitForFunction(`((path) => {
28
+ try {
29
+ const p = window.location.pathname.replace(/\\/+$/, "") || "/";
30
+ return p === path;
31
+ } catch {
32
+ return false;
33
+ }
34
+ })`, { timeout: SIDEBAR_NAV_WAIT_MS }, targetPath);
36
35
  }
37
36
  //# sourceMappingURL=boss_sidebar_nav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boss_sidebar_nav.js","sourceRoot":"","sources":["../../src/common/boss_sidebar_nav.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAU,EACV,SAAiB,EACjB,UAAkB;IAElB,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAClC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,CAAC,CAA4B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CACvC,CAAY,CAAC;IAEd,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,WAAW,UAAU,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,CAAC,eAAe,CACxB,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;YAC9D,OAAO,CAAC,KAAK,IAAI,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EACD,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAChC,UAAU,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"boss_sidebar_nav.js","sourceRoot":"","sources":["../../src/common/boss_sidebar_nav.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAU,EACV,SAAiB,EACjB,UAAkB;IAElB,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAClC;;;;;;;;;;;;;;;;;OAiBG,EACH,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CACvC,CAAY,CAAC;IAEd,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,WAAW,UAAU,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,CAAC,eAAe,CACxB;;;;;;;OAOG,EACH,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAChC,UAAU,CACX,CAAC;AACJ,CAAC"}
@@ -10,6 +10,7 @@ export declare function closeCResumePanel(page: Page): Promise<void>;
10
10
  * 在任意 frame(含主 frame、`recommendFrame` 等)中查找已挂载且尺寸可见的 c-resume iframe。
11
11
  */
12
12
  export declare function findVisibleCResumeIframeHandle(page: Page): Promise<ElementHandle<Element> | null>;
13
+ export declare function waitForVisibleCResumeIframeReady(page: Page, timeoutMs?: number): Promise<boolean>;
13
14
  /**
14
15
  * 在已出现 `c-resume` iframe 的页面上,对 iframe 整框截图并关闭弹层。
15
16
  * `preOpenViewport` 为打开弹层前的视口快照,请用 `snapshotBossPageViewport(page)`(`page.viewport()` 常为 null 时勿直接用默认尺寸)。
@@ -1 +1 @@
1
- {"version":3,"file":"c_resume_capture.d.ts","sourceRoot":"","sources":["../../src/common/c_resume_capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAIjE,gEAAgE;AAChE,eAAO,MAAM,wBAAwB,EACnC,4DAAiE,CAAC;AAqCpE,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAMjF;AAED,8BAA8B;AAC9B,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,iHAAiH;AACjH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAajE;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAevG;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EACtD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAmClB"}
1
+ {"version":3,"file":"c_resume_capture.d.ts","sourceRoot":"","sources":["../../src/common/c_resume_capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAIjE,gEAAgE;AAChE,eAAO,MAAM,wBAAwB,EACnC,4DAAiE,CAAC;AAqCpE,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAMjF;AAED,8BAA8B;AAC9B,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,iHAAiH;AACjH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAajE;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAevG;AAED,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,IAAI,EACV,SAAS,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC,CAkClB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EACtD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAmClB"}