@joohw/boss-cli 0.3.5 → 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 (113) hide show
  1. package/README.md +11 -14
  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 +10 -10
  8. package/dist/cli/cliRouter.js.map +1 -1
  9. package/dist/common/auth.js +49 -49
  10. package/dist/common/boss_paywall_popup.js +87 -87
  11. package/dist/common/boss_session_lock.d.ts +2 -0
  12. package/dist/common/boss_session_lock.d.ts.map +1 -0
  13. package/dist/common/boss_session_lock.js +127 -0
  14. package/dist/common/boss_session_lock.js.map +1 -0
  15. package/dist/common/boss_session_page.d.ts +2 -2
  16. package/dist/common/boss_session_page.d.ts.map +1 -1
  17. package/dist/common/boss_session_page.js +66 -74
  18. package/dist/common/boss_session_page.js.map +1 -1
  19. package/dist/common/boss_sidebar_nav.js +25 -26
  20. package/dist/common/boss_sidebar_nav.js.map +1 -1
  21. package/dist/common/c_resume_capture.d.ts +1 -0
  22. package/dist/common/c_resume_capture.d.ts.map +1 -1
  23. package/dist/common/c_resume_capture.js +69 -32
  24. package/dist/common/c_resume_capture.js.map +1 -1
  25. package/dist/ocr/resume_ocr.d.ts.map +1 -1
  26. package/dist/ocr/resume_ocr.js +4 -1
  27. package/dist/ocr/resume_ocr.js.map +1 -1
  28. package/dist/toolset/action.d.ts.map +1 -1
  29. package/dist/toolset/action.js +11 -7
  30. package/dist/toolset/action.js.map +1 -1
  31. package/dist/toolset/chat.d.ts.map +1 -1
  32. package/dist/toolset/chat.js +246 -230
  33. package/dist/toolset/chat.js.map +1 -1
  34. package/dist/toolset/deep-search.d.ts +1 -1
  35. package/dist/toolset/deep-search.d.ts.map +1 -1
  36. package/dist/toolset/deep-search.js +291 -281
  37. package/dist/toolset/deep-search.js.map +1 -1
  38. package/dist/toolset/greet.d.ts.map +1 -1
  39. package/dist/toolset/greet.js +2 -7
  40. package/dist/toolset/greet.js.map +1 -1
  41. package/dist/toolset/jd.d.ts.map +1 -1
  42. package/dist/toolset/jd.js +134 -142
  43. package/dist/toolset/jd.js.map +1 -1
  44. package/dist/toolset/list.d.ts.map +1 -1
  45. package/dist/toolset/list.js +52 -45
  46. package/dist/toolset/list.js.map +1 -1
  47. package/dist/toolset/preview.d.ts.map +1 -1
  48. package/dist/toolset/preview.js +7 -9
  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 +223 -210
  53. package/dist/toolset/recommend.js.map +1 -1
  54. package/dist/toolset/send.d.ts.map +1 -1
  55. package/dist/toolset/send.js +6 -9
  56. package/dist/toolset/send.js.map +1 -1
  57. package/package.json +65 -63
  58. package/dist/browser/auth.d.ts +0 -33
  59. package/dist/browser/auth.d.ts.map +0 -1
  60. package/dist/browser/auth.js +0 -137
  61. package/dist/browser/auth.js.map +0 -1
  62. package/dist/browser/c_resume_capture.d.ts +0 -11
  63. package/dist/browser/c_resume_capture.d.ts.map +0 -1
  64. package/dist/browser/c_resume_capture.js +0 -76
  65. package/dist/browser/c_resume_capture.js.map +0 -1
  66. package/dist/browser/chat.d.ts +0 -7
  67. package/dist/browser/chat.d.ts.map +0 -1
  68. package/dist/browser/chat.js +0 -155
  69. package/dist/browser/chat.js.map +0 -1
  70. package/dist/browser/withLoggedInPage.d.ts +0 -7
  71. package/dist/browser/withLoggedInPage.d.ts.map +0 -1
  72. package/dist/browser/withLoggedInPage.js +0 -19
  73. package/dist/browser/withLoggedInPage.js.map +0 -1
  74. package/dist/facebook-cli/index.d.ts +0 -2
  75. package/dist/facebook-cli/index.d.ts.map +0 -1
  76. package/dist/facebook-cli/index.js +0 -2
  77. package/dist/facebook-cli/index.js.map +0 -1
  78. package/dist/toolset/c_resume_capture.d.ts +0 -11
  79. package/dist/toolset/c_resume_capture.d.ts.map +0 -1
  80. package/dist/toolset/c_resume_capture.js +0 -76
  81. package/dist/toolset/c_resume_capture.js.map +0 -1
  82. package/dist/toolset/chat_action.d.ts +0 -7
  83. package/dist/toolset/chat_action.d.ts.map +0 -1
  84. package/dist/toolset/chat_action.js +0 -355
  85. package/dist/toolset/chat_action.js.map +0 -1
  86. package/dist/toolset/list_candidates.d.ts +0 -4
  87. package/dist/toolset/list_candidates.d.ts.map +0 -1
  88. package/dist/toolset/list_candidates.js +0 -120
  89. package/dist/toolset/list_candidates.js.map +0 -1
  90. package/dist/toolset/list_positions.d.ts +0 -9
  91. package/dist/toolset/list_positions.d.ts.map +0 -1
  92. package/dist/toolset/list_positions.js +0 -41
  93. package/dist/toolset/list_positions.js.map +0 -1
  94. package/dist/toolset/open_chat.d.ts +0 -3
  95. package/dist/toolset/open_chat.d.ts.map +0 -1
  96. package/dist/toolset/open_chat.js +0 -423
  97. package/dist/toolset/open_chat.js.map +0 -1
  98. package/dist/toolset/recommend_greet.d.ts +0 -2
  99. package/dist/toolset/recommend_greet.d.ts.map +0 -1
  100. package/dist/toolset/recommend_greet.js +0 -27
  101. package/dist/toolset/recommend_greet.js.map +0 -1
  102. package/dist/toolset/search.d.ts +0 -24
  103. package/dist/toolset/search.d.ts.map +0 -1
  104. package/dist/toolset/search.js +0 -682
  105. package/dist/toolset/search.js.map +0 -1
  106. package/dist/toolset/send_message.d.ts +0 -12
  107. package/dist/toolset/send_message.d.ts.map +0 -1
  108. package/dist/toolset/send_message.js +0 -214
  109. package/dist/toolset/send_message.js.map +0 -1
  110. package/dist/toolset/skill.d.ts +0 -13
  111. package/dist/toolset/skill.d.ts.map +0 -1
  112. package/dist/toolset/skill.js +0 -85
  113. package/dist/toolset/skill.js.map +0 -1
@@ -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;
@@ -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":"AAmGA,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4CnF"}
@@ -0,0 +1,127 @@
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
+ if (!(await processExists(meta.pid))) {
62
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
63
+ }
64
+ return;
65
+ }
66
+ if (await processExists(meta.pid)) {
67
+ return;
68
+ }
69
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
70
+ }
71
+ function formatSessionLockOwner(meta) {
72
+ if (!meta) {
73
+ return 'unknown';
74
+ }
75
+ const ageSeconds = Math.max(0, Math.floor((Date.now() - meta.createdAt) / 1000));
76
+ return [
77
+ 'pid=' + meta.pid,
78
+ 'host=' + meta.hostname,
79
+ 'age=' + ageSeconds + 's',
80
+ meta.command ? 'cmd=' + meta.command : '',
81
+ ]
82
+ .filter(Boolean)
83
+ .join(', ');
84
+ }
85
+ export async function withBossSessionLock(callback) {
86
+ ensureAppDataLayout();
87
+ const deadline = Date.now() + SESSION_LOCK_WAIT_MAX_MS;
88
+ while (true) {
89
+ try {
90
+ const handle = await open(SESSION_LOCK_FILE, 'wx');
91
+ let lockCreated = false;
92
+ try {
93
+ await handle.writeFile(JSON.stringify(buildSessionLockMeta()), 'utf8');
94
+ lockCreated = true;
95
+ }
96
+ finally {
97
+ await handle.close().catch(() => { });
98
+ }
99
+ if (!lockCreated) {
100
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
101
+ throw new Error('Boss session lock creation failed.');
102
+ }
103
+ try {
104
+ return await callback();
105
+ }
106
+ finally {
107
+ await rm(SESSION_LOCK_FILE, { force: true }).catch(() => { });
108
+ }
109
+ }
110
+ catch (error) {
111
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : '';
112
+ if (code !== 'EEXIST') {
113
+ throw error;
114
+ }
115
+ await clearStaleSessionLockIfNeeded();
116
+ if (Date.now() >= deadline) {
117
+ const meta = await readSessionLockMeta();
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);
122
+ }
123
+ await sleepRandom(SESSION_LOCK_POLL_MS, SESSION_LOCK_POLL_MS);
124
+ }
125
+ }
126
+ }
127
+ //# 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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"}
@@ -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;AA2IpD;;;;GAIG;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;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"}
@@ -4,6 +4,7 @@ import { ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, } from
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' ||
@@ -38,25 +39,25 @@ function normalizeMenuText(raw) {
38
39
  return (raw ?? '').replace(/\s+/g, ' ').trim();
39
40
  }
40
41
  async function readMenuListSnapshot(page) {
41
- return (await page.evaluate(`(() => {
42
- const root = document.querySelector(".menu-list");
43
- if (!root) {
44
- return { exists: false, signature: "" };
45
- }
46
- const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
47
- const links = Array.from(root.querySelectorAll("dl > dt > a"));
48
- const entries = links.map((a) => {
49
- const href = a.getAttribute("href") ?? "";
50
- const labelNode = a.querySelector(".menu-item-content span");
51
- const label = norm(labelNode?.textContent || a.textContent || "");
52
- return label + "::" + href;
53
- });
54
- 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("|") };
55
56
  })()`));
56
57
  }
57
58
  /**
58
59
  * 先按 URL 判断:不在 Boss 已登录主壳页(`/web/chat/*`)时跳到沟通页 `/web/chat/index`,
59
- * 再交由 {@link ensureMenuListStableAfterLoad} 查 `.menu-list`。
60
+ * 再交由 {@link ensureMenuListMountedAfterLoad} 查 `.menu-list`。
60
61
  * 已经在 `/web/chat/recommend`、`/web/chat/aiform` 等主壳子页时直接跳过 goto,
61
62
  * 避免触发"先回到聊天页再切回业务页"的额外跳转。
62
63
  */
@@ -66,7 +67,7 @@ async function ensureBossChatShellUrlBeforeMenuList(page) {
66
67
  }
67
68
  await page.goto(BOSS_CHAT_INDEX_URL, { waitUntil: 'load', timeout: 60_000 });
68
69
  }
69
- async function ensureMenuListStableAfterLoad(page) {
70
+ async function ensureMenuListMountedAfterLoad(page) {
70
71
  await page.waitForFunction(`(() => document.readyState === "complete" || document.readyState === "interactive")()`, { timeout: 12_000 });
71
72
  try {
72
73
  await page.waitForFunction(`(() => !!document.querySelector(".menu-list"))()`, { timeout: MENU_LIST_MOUNT_TIMEOUT_MS });
@@ -86,75 +87,66 @@ async function ensureMenuListStableAfterLoad(page) {
86
87
  if (!normalizeMenuText(first.signature)) {
87
88
  throw new Error('检测到 .menu-list 但菜单内容为空,当前页面状态异常。');
88
89
  }
89
- const stableWindowMs = 3_000;
90
- const pollMs = 300;
91
- const deadline = Date.now() + stableWindowMs;
92
- const expected = first.signature;
93
- while (Date.now() < deadline) {
94
- await sleepRandom(pollMs, pollMs);
95
- const snap = await readMenuListSnapshot(page);
96
- if (!snap.exists || snap.signature !== expected) {
97
- throw new Error('登录状态校验失败,页面可能还未登录,请登录后再试');
98
- }
99
- }
100
90
  }
101
91
  /**
102
- * 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
92
+ * 在已连接浏览器、且当前页为 Boss 主壳(含侧栏 `.menu-list`)的前提下执行回调。
103
93
  * 会先按 URL 确保落在 `/web/chat/*` 主壳页(已在主壳子页则保留原路径,否则跳回沟通页 `/web/chat/index`),
104
94
  * 再校验侧栏;回调内可再导航到职位/推荐等业务路由。
105
95
  */
106
96
  export async function withBossSessionPage(callback) {
107
- const isContextDestroyed = (e) => {
108
- const msg = e instanceof Error ? e.message : String(e);
109
- return (msg.includes('Execution context was destroyed') ||
110
- msg.includes('Cannot find context with specified id') ||
111
- msg.includes('Most likely because of a navigation'));
112
- };
113
- const maxAttempts = 2;
114
- let lastErr;
115
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
116
- try {
117
- await ensureBrowserSession();
118
- const browser = getBrowserRef();
119
- if (!browser) {
120
- throw new Error('无法获取浏览器实例。');
121
- }
122
- let page = getPageRef();
123
- if (!page || page.isClosed()) {
124
- page = (await pickExistingPage(browser)) ?? (await browser.newPage());
125
- }
126
- setSessionPage(page);
127
- await page.bringToFront();
128
- await installBossPageGuards(page);
129
- await ensureBossChatShellUrlBeforeMenuList(page);
130
- if (SHOULD_DISABLE_JS) {
131
- await page.setJavaScriptEnabled(false);
132
- }
133
- await ensureMenuListStableAfterLoad(page);
134
- if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
135
- await showAgentOperatingIndicator(page).catch(() => {
136
- /* 注入失败不阻断业务 */
137
- });
138
- }
97
+ return withBossSessionLock(async () => {
98
+ const isContextDestroyed = (e) => {
99
+ const msg = e instanceof Error ? e.message : String(e);
100
+ return (msg.includes('Execution context was destroyed') ||
101
+ msg.includes('Cannot find context with specified id') ||
102
+ msg.includes('Most likely because of a navigation'));
103
+ };
104
+ const maxAttempts = 2;
105
+ let lastErr;
106
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
139
107
  try {
140
- return await callback(page);
141
- }
142
- finally {
108
+ await ensureBrowserSession();
109
+ const browser = getBrowserRef();
110
+ if (!browser) {
111
+ throw new Error('无法获取浏览器实例。');
112
+ }
113
+ let page = getPageRef();
114
+ if (!page || page.isClosed()) {
115
+ page = (await pickExistingPage(browser)) ?? (await browser.newPage());
116
+ }
117
+ setSessionPage(page);
118
+ await page.bringToFront();
119
+ await installBossPageGuards(page);
120
+ await ensureBossChatShellUrlBeforeMenuList(page);
121
+ if (SHOULD_DISABLE_JS) {
122
+ await page.setJavaScriptEnabled(false);
123
+ }
124
+ await ensureMenuListMountedAfterLoad(page);
143
125
  if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
144
- await hideAgentOperatingIndicator(page);
126
+ await showAgentOperatingIndicator(page).catch(() => {
127
+ /* 注入失败不阻断业务 */
128
+ });
129
+ }
130
+ try {
131
+ return await callback(page);
132
+ }
133
+ finally {
134
+ if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
135
+ await hideAgentOperatingIndicator(page);
136
+ }
145
137
  }
146
138
  }
147
- }
148
- catch (e) {
149
- lastErr = e;
150
- if (attempt < maxAttempts - 1 && isContextDestroyed(e)) {
151
- // Boss 页面偶发跳转/重渲染会销毁执行上下文;短暂等待并重试一次即可。
152
- await sleepRandom(CONTEXT_DESTROY_RETRY_MS.min, CONTEXT_DESTROY_RETRY_MS.max);
153
- continue;
139
+ catch (e) {
140
+ lastErr = e;
141
+ if (attempt < maxAttempts - 1 && isContextDestroyed(e)) {
142
+ // Boss 页面偶发跳转/重渲染会销毁执行上下文;短暂等待并重试一次即可。
143
+ await sleepRandom(CONTEXT_DESTROY_RETRY_MS.min, CONTEXT_DESTROY_RETRY_MS.max);
144
+ continue;
145
+ }
146
+ throw e;
154
147
  }
155
- throw e;
156
148
  }
157
- }
158
- throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
149
+ throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
150
+ });
159
151
  }
160
152
  //# 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":"AAKA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,iBAAiB,GACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAC;AAEhG,4CAA4C;AAC5C,MAAM,4BAA4B,GAChC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG;IAC7C,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM,CAAC;AAEnD,wDAAwD;AACxD,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C,KAAK,UAAU,gBAAgB,CAAC,OAAgB;IAC9C,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACd,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC;AAOD,SAAS,iBAAiB,CAAC,GAA8B;IACvD,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAU;IAC5C,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;OAcvB,CAAC,CAAqB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oCAAoC,CAAC,IAAU;IAC5D,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IACD,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,IAAU;IACrD,MAAM,IAAI,CAAC,eAAe,CACxB,uFAAuF,EACvF,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,eAAe,CACxB,kDAAkD,EAClD,EAAE,OAAO,EAAE,0BAA0B,EAAE,CACxC,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GACZ,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,KAAK,0BAA0B,GAAG,IAAI,0CAA0C,CACjF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;IAEjC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,QAAoC;IAC/E,MAAM,kBAAkB,GAAG,CAAC,CAAU,EAAW,EAAE;QACjD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC/C,GAAG,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACrD,GAAG,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CACpD,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,IAAI,OAAgB,CAAC;IACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,GAAgB,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,oCAAoC,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,6BAA6B,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,CAAC,iBAAiB,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACxD,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACjD,eAAe;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,iBAAiB,IAAI,CAAC,4BAA4B,EAAE,CAAC;oBACxD,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,CAAC;YACZ,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,uCAAuC;gBACvC,MAAM,WAAW,CAAC,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC;gBAC9E,SAAS;YACX,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,MAAM,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,CAAC"}
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"}