@joohw/boss-cli 0.1.5 → 0.1.7

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 (55) hide show
  1. package/dist/browser/browser_session.d.ts.map +1 -1
  2. package/dist/browser/browser_session.js +38 -0
  3. package/dist/browser/browser_session.js.map +1 -1
  4. package/dist/browser/cdp_browser.d.ts +1 -2
  5. package/dist/browser/cdp_browser.d.ts.map +1 -1
  6. package/dist/browser/cdp_browser.js +29 -5
  7. package/dist/browser/cdp_browser.js.map +1 -1
  8. package/dist/browser/chat.d.ts +2 -2
  9. package/dist/browser/chat.d.ts.map +1 -1
  10. package/dist/browser/chat.js +48 -18
  11. package/dist/browser/chat.js.map +1 -1
  12. package/dist/browser/index.d.ts +0 -1
  13. package/dist/browser/index.d.ts.map +1 -1
  14. package/dist/browser/index.js +0 -1
  15. package/dist/browser/index.js.map +1 -1
  16. package/dist/cli/cliRouter.d.ts.map +1 -1
  17. package/dist/cli/cliRouter.js +69 -19
  18. package/dist/cli/cliRouter.js.map +1 -1
  19. package/dist/toolset/action.d.ts +7 -0
  20. package/dist/toolset/action.d.ts.map +1 -0
  21. package/dist/toolset/action.js +433 -0
  22. package/dist/toolset/action.js.map +1 -0
  23. package/dist/toolset/chat.d.ts +4 -0
  24. package/dist/toolset/chat.d.ts.map +1 -0
  25. package/dist/toolset/chat.js +434 -0
  26. package/dist/toolset/chat.js.map +1 -0
  27. package/dist/toolset/chat_action.d.ts +7 -0
  28. package/dist/toolset/chat_action.d.ts.map +1 -0
  29. package/dist/toolset/chat_action.js +355 -0
  30. package/dist/toolset/chat_action.js.map +1 -0
  31. package/dist/toolset/index.d.ts +13 -6
  32. package/dist/toolset/index.d.ts.map +1 -1
  33. package/dist/toolset/index.js +20 -6
  34. package/dist/toolset/index.js.map +1 -1
  35. package/dist/toolset/jd.d.ts +10 -0
  36. package/dist/toolset/jd.d.ts.map +1 -0
  37. package/dist/toolset/jd.js +418 -0
  38. package/dist/toolset/jd.js.map +1 -0
  39. package/dist/toolset/list.d.ts +4 -0
  40. package/dist/toolset/list.d.ts.map +1 -0
  41. package/dist/toolset/list.js +156 -0
  42. package/dist/toolset/list.js.map +1 -0
  43. package/dist/toolset/open_chat.d.ts +1 -4
  44. package/dist/toolset/open_chat.d.ts.map +1 -1
  45. package/dist/toolset/open_chat.js +66 -164
  46. package/dist/toolset/open_chat.js.map +1 -1
  47. package/dist/toolset/search.d.ts +2 -0
  48. package/dist/toolset/search.d.ts.map +1 -0
  49. package/dist/toolset/search.js +174 -0
  50. package/dist/toolset/search.js.map +1 -0
  51. package/dist/toolset/send.d.ts +12 -0
  52. package/dist/toolset/send.d.ts.map +1 -0
  53. package/dist/toolset/send.js +214 -0
  54. package/dist/toolset/send.js.map +1 -0
  55. package/package.json +1 -1
@@ -0,0 +1,434 @@
1
+ import { CHAT_HISTORY_DIALOG_WAIT_MS, CHAT_HISTORY_TAB_SWITCH_MS, isBossChatIndexUrl, MOUSE_CLICK_PRESS_MS, OPEN_CHAT_AFTER_ROW_CLICK_MS, OPEN_CHAT_SCROLL_GAP_MS, randomIntInclusive, sleepRandom, } from '../browser/index.js';
2
+ function chatRoleTag(from) {
3
+ switch (from) {
4
+ case 'friend':
5
+ return '[candidate]';
6
+ case 'myself':
7
+ return '[you]';
8
+ case 'system':
9
+ return '[system]';
10
+ default:
11
+ return '[unknown]';
12
+ }
13
+ }
14
+ /**
15
+ * 打开「沟通记录」弹窗,依次读取「同事沟通」「我的沟通」列表,关闭弹窗。
16
+ * 未找到入口时返回 null(视为暂无同事沟通记录,不输出该段)。
17
+ */
18
+ async function fetchColleagueChatHistorySection(page) {
19
+ const clicked = await page.evaluate(() => {
20
+ function norm(v) {
21
+ return (v ?? '').replace(/\s+/g, ' ').trim();
22
+ }
23
+ const tooltips = Array.from(document.querySelectorAll('.chat-tooltip-custom'));
24
+ for (const el of tooltips) {
25
+ if (!norm(el.textContent).includes('沟通记录'))
26
+ continue;
27
+ const host = el.closest('span.icon') ?? el.closest('span') ?? el.parentElement;
28
+ if (host) {
29
+ host.click();
30
+ return true;
31
+ }
32
+ el.click();
33
+ return true;
34
+ }
35
+ const uses = Array.from(document.querySelectorAll('use'));
36
+ for (const u of uses) {
37
+ const h = u.getAttribute('href') ||
38
+ u.getAttributeNS('http://www.w3.org/1999/xlink', 'href') ||
39
+ '';
40
+ if (h.includes('icon-chat-history')) {
41
+ const p = u.closest('span.icon') ?? u.parentElement?.parentElement;
42
+ if (p) {
43
+ p.click();
44
+ return true;
45
+ }
46
+ }
47
+ }
48
+ return false;
49
+ });
50
+ if (!clicked) {
51
+ return null;
52
+ }
53
+ try {
54
+ await page.waitForSelector('.boss-dialog__body .chat-history-process', { timeout: 12_000 });
55
+ }
56
+ catch {
57
+ return '(已点击「沟通记录」,但弹窗未在预期时间内出现。)';
58
+ }
59
+ await sleepRandom(CHAT_HISTORY_DIALOG_WAIT_MS.min, CHAT_HISTORY_DIALOG_WAIT_MS.max);
60
+ const scrapeRows = () => page.evaluate(() => {
61
+ function norm(v) {
62
+ return (v ?? '').replace(/\s+/g, ' ').trim();
63
+ }
64
+ const root = document.querySelector('.chat-history-process');
65
+ if (!root)
66
+ return [];
67
+ return Array.from(root.querySelectorAll('.record li'))
68
+ .map((li) => ({
69
+ action: norm(li.querySelector('.action')?.textContent),
70
+ operat: norm(li.querySelector('.operat')?.textContent),
71
+ }))
72
+ .filter((x) => x.action || x.operat);
73
+ });
74
+ const clickTab = (label) => page.evaluate((lab) => {
75
+ function norm(v) {
76
+ return (v ?? '').replace(/\s+/g, ' ').trim();
77
+ }
78
+ const root = document.querySelector('.chat-history-process');
79
+ if (!root)
80
+ return;
81
+ const spans = Array.from(root.querySelectorAll('.tab-hd span'));
82
+ const sp = spans.find((s) => norm(s.textContent) === lab);
83
+ if (sp && !sp.classList.contains('selected')) {
84
+ sp.click();
85
+ }
86
+ }, label);
87
+ await clickTab('同事沟通');
88
+ await sleepRandom(CHAT_HISTORY_TAB_SWITCH_MS.min, CHAT_HISTORY_TAB_SWITCH_MS.max);
89
+ const rowsColleague = await scrapeRows();
90
+ await clickTab('我的沟通');
91
+ await sleepRandom(CHAT_HISTORY_TAB_SWITCH_MS.min, CHAT_HISTORY_TAB_SWITCH_MS.max);
92
+ const rowsMine = await scrapeRows();
93
+ const fmt = (label, rows) => {
94
+ const lines = [`[${label}]`];
95
+ if (rows.length === 0) {
96
+ lines.push('(暂无)');
97
+ return lines;
98
+ }
99
+ rows.forEach((r, i) => {
100
+ const line = [r.action, r.operat].filter(Boolean).join(' | ');
101
+ lines.push(`${i + 1}. ${line}`);
102
+ });
103
+ return lines;
104
+ };
105
+ const parts = [];
106
+ parts.push(...fmt('同事沟通', rowsColleague));
107
+ parts.push('');
108
+ parts.push(...fmt('我的沟通', rowsMine));
109
+ await closeChatHistoryPopup(page);
110
+ return parts.join('\n');
111
+ }
112
+ export async function runGetCommunicationHistory(page) {
113
+ const currentUrl = page.url();
114
+ if (!isBossChatIndexUrl(currentUrl)) {
115
+ throw new Error('请先进入聊天列表页(/web/chat/index)并打开候选人聊天。');
116
+ }
117
+ const inCandidateChat = await page.$('.base-info-single-container');
118
+ if (!inCandidateChat) {
119
+ throw new Error('请先打开候选人聊天详情页,再执行“沟通记录”操作。');
120
+ }
121
+ let historyBlock = null;
122
+ try {
123
+ historyBlock = await fetchColleagueChatHistorySection(page);
124
+ }
125
+ catch {
126
+ historyBlock = null;
127
+ }
128
+ if (historyBlock === null) {
129
+ return '未找到「沟通记录」入口,或当前候选人暂无可读取记录。';
130
+ }
131
+ return ['同事/我的沟通记录:', '', historyBlock].join('\n');
132
+ }
133
+ /** 关闭「沟通记录」弹层(优先点 Boss 提供的 popup 关闭钮) */
134
+ async function closeChatHistoryPopup(page) {
135
+ try {
136
+ const selectors = [
137
+ '.boss-popup__wrapper.chat-history .boss-popup__close',
138
+ '.boss-dialog__wrapper.chat-history .boss-popup__close',
139
+ '.boss-popup__wrapper.boss-dialog.chat-history .boss-popup__close',
140
+ ];
141
+ let btn = null;
142
+ for (const sel of selectors) {
143
+ btn = await page.$(sel);
144
+ if (btn)
145
+ break;
146
+ }
147
+ if (btn) {
148
+ await btn.click();
149
+ }
150
+ else {
151
+ await page.evaluate(() => {
152
+ const root = document.querySelector('.boss-popup__wrapper.chat-history') ||
153
+ document.querySelector('.boss-dialog__wrapper.chat-history');
154
+ const c = root?.querySelector('.boss-popup__close') ?? document.querySelector('.boss-popup__close');
155
+ if (c) {
156
+ c.click();
157
+ }
158
+ });
159
+ }
160
+ await sleepRandom(250, 550);
161
+ const popupWrap = await page.$('.boss-popup__wrapper.chat-history');
162
+ if (popupWrap) {
163
+ await page.evaluate(() => {
164
+ const root = document.querySelector('.boss-popup__wrapper.chat-history') ||
165
+ document.querySelector('.boss-dialog__wrapper.chat-history');
166
+ const c = root?.querySelector('.boss-popup__close') ?? document.querySelector('.boss-popup__close');
167
+ c?.click();
168
+ });
169
+ await sleepRandom(150, 350);
170
+ }
171
+ }
172
+ catch {
173
+ /* ignore */
174
+ }
175
+ }
176
+ async function fetchCandidateSummary(page) {
177
+ const scraped = (await page.evaluate(`(() => {
178
+ const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
179
+ const root = document.querySelector(".base-info-single-container");
180
+ if (!root) {
181
+ throw new Error("未找到候选人详情容器(.base-info-single-container)。");
182
+ }
183
+ const name = norm(root.querySelector(".name-box")?.textContent);
184
+ const active = norm(root.querySelector(".high-light-orange.active-time span")?.textContent);
185
+ const basicFacts = Array.from(root.querySelectorAll(".base-info-single-detial > div"))
186
+ .filter((el) => !el.classList.contains("name-contet") && !el.classList.contains("active-time"))
187
+ .map((el) => norm(el.textContent))
188
+ .filter((v) => v.length > 0);
189
+ const recentExperience = Array.from(
190
+ root.querySelectorAll(".experience-content.detail-list .work-content .value"),
191
+ )
192
+ .map((el) => norm(el.textContent))
193
+ .filter((v) => v.length > 0);
194
+ const communicationPosition = norm(
195
+ root.querySelector(".position-item .position-name")?.textContent,
196
+ );
197
+ const expectation = norm(root.querySelector(".position-item.expect .value.job")?.textContent);
198
+ const remark = norm(
199
+ root.querySelector(".label-remark-content .remark span:last-child")?.textContent,
200
+ );
201
+ return {
202
+ name,
203
+ active,
204
+ basicFacts,
205
+ recentExperience,
206
+ communicationPosition,
207
+ expectation,
208
+ remark,
209
+ };
210
+ })()`));
211
+ return scraped;
212
+ }
213
+ export async function runOpenCandidateChat(page, candidateName, exact = true) {
214
+ const targetName = candidateName.trim();
215
+ try {
216
+ const currentUrl = page.url();
217
+ if (!isBossChatIndexUrl(currentUrl)) {
218
+ throw new Error('请先进入聊天列表页(/web/chat/index)再打开候选人聊天。');
219
+ }
220
+ const norm = (v) => (v ?? '').replace(/\s+/g, ' ').trim();
221
+ const matcher = (value) => exact ? value === targetName : value.includes(targetName);
222
+ let targetWrap = null;
223
+ let foundName = '';
224
+ const maxScrollRounds = 40;
225
+ for (let round = 0; round < maxScrollRounds && !targetWrap; round++) {
226
+ const wraps = await page.$$('.geek-item-wrap');
227
+ for (const wrap of wraps) {
228
+ const nameText = await wrap
229
+ .$eval('.geek-name', (el) => (el.textContent ?? '').trim())
230
+ .catch(() => '');
231
+ const candidate = norm(nameText);
232
+ if (!candidate)
233
+ continue;
234
+ if (matcher(candidate)) {
235
+ targetWrap = wrap;
236
+ foundName = candidate;
237
+ break;
238
+ }
239
+ }
240
+ if (targetWrap)
241
+ break;
242
+ const scrollState = (await page.evaluate(`(() => {
243
+ const first = document.querySelector(".geek-item-wrap");
244
+ if (!first) return { moved: false, atEnd: true };
245
+ let node = first.parentElement;
246
+ let scroller = null;
247
+ while (node) {
248
+ const style = window.getComputedStyle(node);
249
+ const overflowY = style.overflowY;
250
+ const canScroll =
251
+ (overflowY === "auto" || overflowY === "scroll") &&
252
+ node.scrollHeight > node.clientHeight;
253
+ if (canScroll) {
254
+ scroller = node;
255
+ break;
256
+ }
257
+ node = node.parentElement;
258
+ }
259
+ if (!scroller) return { moved: false, atEnd: true };
260
+ const prev = scroller.scrollTop;
261
+ const step = Math.max(160, Math.floor(scroller.clientHeight * 0.8));
262
+ scroller.scrollTop = Math.min(scroller.scrollTop + step, scroller.scrollHeight);
263
+ const moved = scroller.scrollTop !== prev;
264
+ const atEnd = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2;
265
+ return { moved, atEnd };
266
+ })()`));
267
+ if (!scrollState.moved || scrollState.atEnd) {
268
+ break;
269
+ }
270
+ await sleepRandom(OPEN_CHAT_SCROLL_GAP_MS.min, OPEN_CHAT_SCROLL_GAP_MS.max);
271
+ }
272
+ if (!targetWrap) {
273
+ throw new Error(`未在聊天列表中找到候选人:${targetName}`);
274
+ }
275
+ try {
276
+ await targetWrap.evaluate((el) => {
277
+ const row = el.querySelector('.geek-item') ?? el;
278
+ row.scrollIntoView({ behavior: 'instant', block: 'center', inline: 'nearest' });
279
+ row.click();
280
+ });
281
+ }
282
+ catch {
283
+ const box = await targetWrap.boundingBox();
284
+ if (!box) {
285
+ throw new Error(`已定位候选人 ${foundName},但元素不可点击。`);
286
+ }
287
+ await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2, {
288
+ delay: randomIntInclusive(MOUSE_CLICK_PRESS_MS.min, MOUSE_CLICK_PRESS_MS.max),
289
+ });
290
+ }
291
+ await sleepRandom(OPEN_CHAT_AFTER_ROW_CLICK_MS.min, OPEN_CHAT_AFTER_ROW_CLICK_MS.max);
292
+ const selected = await targetWrap
293
+ .$eval('.geek-item', (el) => el.classList.contains('selected'))
294
+ .catch(() => false);
295
+ try {
296
+ await page.waitForSelector('.base-info-single-container', { timeout: 12_000 });
297
+ await page.waitForFunction(`((name) => {
298
+ const text = document.querySelector(".base-info-single-container .name-box")?.textContent ?? "";
299
+ return text.replace(/\\s+/g, " ").trim().includes(name);
300
+ })`, { timeout: 12_000 }, foundName || targetName);
301
+ await page.waitForFunction(`(() => {
302
+ const list = document.querySelector(".chat-message-list");
303
+ if (!list) return false;
304
+ const items = list.querySelectorAll(".message-item");
305
+ if (!items || items.length === 0) return false;
306
+ const hasText = Array.from(items).some((item) => {
307
+ const txt =
308
+ item.querySelector(".item-friend .text span")?.textContent ??
309
+ item.querySelector(".item-myself .text span")?.textContent ??
310
+ item.querySelector(".item-system .message-card-top-title")?.textContent ??
311
+ "";
312
+ return txt.replace(/\\s+/g, " ").trim().length > 0;
313
+ });
314
+ return hasText;
315
+ })()`, { timeout: 16_000 });
316
+ }
317
+ catch {
318
+ throw new Error(`已尝试点击 ${foundName}(selected=${String(selected)}),但未检测到对应聊天详情面板。`);
319
+ }
320
+ let fullMessages = [];
321
+ let hasFriendResumeAttachment = false;
322
+ try {
323
+ const scraped = (await page.evaluate(`(() => {
324
+ const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
325
+ /** Boss 系统里的「消息优先提醒」增值服务条,对业务无意义,过滤掉 */
326
+ function isBossPriorityUpsellSystemText(text) {
327
+ return norm(text).indexOf("优先提醒") !== -1;
328
+ }
329
+ const items = Array.from(document.querySelectorAll(".chat-message-list .message-item"));
330
+ let currentTime = "";
331
+ const messages = [];
332
+ let hasFriendResumeAttachment = false;
333
+ for (const item of items) {
334
+ const timeNode = item.querySelector(".message-time .time");
335
+ if (timeNode) {
336
+ const t = norm(timeNode.textContent);
337
+ if (t) currentTime = t;
338
+ }
339
+ const friendRoot = item.querySelector(".item-friend");
340
+ let friendText = "";
341
+ if (friendRoot) {
342
+ friendText = norm(friendRoot.querySelector(".text > span")?.textContent);
343
+ if (!friendText) {
344
+ const resumeIcon = friendRoot.querySelector(".resume-icon");
345
+ const title = norm(friendRoot.querySelector(".message-card-top-title")?.textContent);
346
+ const cardBtn = norm(friendRoot.querySelector(".message-card-buttons .card-btn")?.textContent);
347
+ if (resumeIcon) hasFriendResumeAttachment = true;
348
+ if (title || cardBtn) {
349
+ const parts = [];
350
+ if (title) parts.push(title);
351
+ if (cardBtn) parts.push(cardBtn);
352
+ friendText = parts.length ? parts.join(" · ") : "";
353
+ }
354
+ if (!friendText) friendText = norm(friendRoot.querySelector(".text")?.textContent);
355
+ }
356
+ }
357
+ const myselfText = norm(item.querySelector(".item-myself .text span")?.textContent);
358
+ const systemText =
359
+ norm(item.querySelector(".item-system .message-card-top-title")?.textContent) ||
360
+ norm(item.querySelector(".item-system .text span")?.textContent);
361
+ if (friendText) {
362
+ messages.push({ text: friendText, time: currentTime, from: "friend" });
363
+ } else if (myselfText) {
364
+ messages.push({ text: myselfText, time: currentTime, from: "myself" });
365
+ } else if (systemText) {
366
+ if (!isBossPriorityUpsellSystemText(systemText)) {
367
+ messages.push({ text: systemText, time: currentTime, from: "system" });
368
+ }
369
+ }
370
+ }
371
+ return { messages, hasFriendResumeAttachment };
372
+ })()`));
373
+ fullMessages = scraped.messages;
374
+ hasFriendResumeAttachment = scraped.hasFriendResumeAttachment;
375
+ }
376
+ catch {
377
+ /* 抓取消息失败时仍返回摘要,不刷屏 stderr */
378
+ }
379
+ const detailLines = fullMessages.map((m) => {
380
+ const tag = chatRoleTag(m.from);
381
+ const timePart = m.time ? ` ${m.time}` : '';
382
+ return `${tag}${timePart} ${m.text}`.trimEnd();
383
+ });
384
+ const resumeStatus = hasFriendResumeAttachment ? '已获取' : '未获取';
385
+ const summary = await fetchCandidateSummary(page);
386
+ const out = [
387
+ `成功进入候选人聊天:${foundName}`,
388
+ `简历获取状态: ${resumeStatus}`,
389
+ ];
390
+ const summaryLines = [];
391
+ const summaryName = summary.name || foundName || targetName;
392
+ summaryLines.push(`姓名: ${summaryName}`);
393
+ if (summary.active) {
394
+ summaryLines.push(`活跃状态: ${summary.active}`);
395
+ }
396
+ if (summary.basicFacts.length > 0) {
397
+ summaryLines.push(`基本信息: ${summary.basicFacts.join(' / ')}`);
398
+ }
399
+ if (summary.communicationPosition) {
400
+ summaryLines.push(`沟通职位: ${summary.communicationPosition}`);
401
+ }
402
+ if (summary.expectation) {
403
+ summaryLines.push(`期望: ${summary.expectation}`);
404
+ }
405
+ if (summary.recentExperience.length > 0) {
406
+ summaryLines.push('近期经历:');
407
+ summary.recentExperience.forEach((it, idx) => {
408
+ summaryLines.push(`${idx + 1}. ${it}`);
409
+ });
410
+ }
411
+ if (summaryLines.length > 0) {
412
+ out.push('', '人才摘要:', '', ...summaryLines);
413
+ }
414
+ if (summary.remark) {
415
+ out.push('', `备注: ${summary.remark}`);
416
+ }
417
+ out.push('', '完整聊天消息:');
418
+ if (detailLines.length > 0) {
419
+ out.push('', ...detailLines);
420
+ }
421
+ else {
422
+ out.push('', '(暂无)');
423
+ }
424
+ return out.join('\n');
425
+ }
426
+ catch (e) {
427
+ const message = e instanceof Error ? e.message : String(e);
428
+ if (e instanceof Error) {
429
+ throw e;
430
+ }
431
+ throw new Error(`打开候选人聊天失败:${message}`);
432
+ }
433
+ }
434
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/toolset/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ export type ChatPageAction = 'online-resume' | 'not-fit' | 'remark';
3
+ export declare function runChatActionOnCurrentConversation(page: Page, options: {
4
+ action: ChatPageAction;
5
+ remark?: string;
6
+ }): Promise<string>;
7
+ //# sourceMappingURL=chat_action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat_action.d.ts","sourceRoot":"","sources":["../../src/toolset/chat_action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAoX3C,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpE,wBAAsB,kCAAkC,CACtD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,MAAM,CAAC,CA8BjB"}