@joohw/boss-cli 0.1.4 → 0.1.5

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 (77) hide show
  1. package/README.md +13 -20
  2. package/dist/browser/auth.d.ts +0 -1
  3. package/dist/browser/auth.d.ts.map +1 -1
  4. package/dist/browser/auth.js +3 -19
  5. package/dist/browser/auth.js.map +1 -1
  6. package/dist/browser/browser_session.d.ts +4 -0
  7. package/dist/browser/browser_session.d.ts.map +1 -1
  8. package/dist/browser/browser_session.js +27 -14
  9. package/dist/browser/browser_session.js.map +1 -1
  10. package/dist/browser/cdp_browser.d.ts +10 -0
  11. package/dist/browser/cdp_browser.d.ts.map +1 -1
  12. package/dist/browser/cdp_browser.js +219 -11
  13. package/dist/browser/cdp_browser.js.map +1 -1
  14. package/dist/browser/chat.d.ts.map +1 -1
  15. package/dist/browser/chat.js +5 -3
  16. package/dist/browser/chat.js.map +1 -1
  17. package/dist/browser/human_delay.d.ts +88 -0
  18. package/dist/browser/human_delay.d.ts.map +1 -0
  19. package/dist/browser/human_delay.js +52 -0
  20. package/dist/browser/human_delay.js.map +1 -0
  21. package/dist/browser/index.d.ts +3 -1
  22. package/dist/browser/index.d.ts.map +1 -1
  23. package/dist/browser/index.js +3 -1
  24. package/dist/browser/index.js.map +1 -1
  25. package/dist/browser/timing.d.ts +7 -0
  26. package/dist/browser/timing.d.ts.map +1 -0
  27. package/dist/browser/timing.js +34 -0
  28. package/dist/browser/timing.js.map +1 -0
  29. package/dist/cli/banner.d.ts.map +1 -1
  30. package/dist/cli/banner.js +43 -9
  31. package/dist/cli/banner.js.map +1 -1
  32. package/dist/cli/cliRouter.d.ts.map +1 -1
  33. package/dist/cli/cliRouter.js +81 -63
  34. package/dist/cli/cliRouter.js.map +1 -1
  35. package/dist/cli/index.js +14 -1
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/config.d.ts +9 -0
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +25 -0
  40. package/dist/config.js.map +1 -1
  41. package/dist/ocr/baidu_ocr.d.ts +11 -0
  42. package/dist/ocr/baidu_ocr.d.ts.map +1 -0
  43. package/dist/ocr/baidu_ocr.js +76 -0
  44. package/dist/ocr/baidu_ocr.js.map +1 -0
  45. package/dist/ocr/index.d.ts +3 -0
  46. package/dist/ocr/index.d.ts.map +1 -0
  47. package/dist/ocr/index.js +3 -0
  48. package/dist/ocr/index.js.map +1 -0
  49. package/dist/ocr/resume_ocr.d.ts +13 -0
  50. package/dist/ocr/resume_ocr.d.ts.map +1 -0
  51. package/dist/ocr/resume_ocr.js +35 -0
  52. package/dist/ocr/resume_ocr.js.map +1 -0
  53. package/dist/toolset/index.d.ts +12 -2
  54. package/dist/toolset/index.d.ts.map +1 -1
  55. package/dist/toolset/index.js +11 -4
  56. package/dist/toolset/index.js.map +1 -1
  57. package/dist/toolset/list_candidates.d.ts.map +1 -1
  58. package/dist/toolset/list_candidates.js +12 -19
  59. package/dist/toolset/list_candidates.js.map +1 -1
  60. package/dist/toolset/login.d.ts.map +1 -1
  61. package/dist/toolset/login.js +7 -4
  62. package/dist/toolset/login.js.map +1 -1
  63. package/dist/toolset/open_chat.d.ts +4 -1
  64. package/dist/toolset/open_chat.d.ts.map +1 -1
  65. package/dist/toolset/open_chat.js +365 -25
  66. package/dist/toolset/open_chat.js.map +1 -1
  67. package/dist/toolset/send_message.d.ts +11 -1
  68. package/dist/toolset/send_message.d.ts.map +1 -1
  69. package/dist/toolset/send_message.js +120 -21
  70. package/dist/toolset/send_message.js.map +1 -1
  71. package/dist/toolset/skill.d.ts +13 -0
  72. package/dist/toolset/skill.d.ts.map +1 -0
  73. package/dist/toolset/skill.js +85 -0
  74. package/dist/toolset/skill.js.map +1 -0
  75. package/package.json +5 -2
  76. package/skills/README.md +11 -0
  77. package/skills/boss-cli/SKILL.md +58 -0
package/dist/config.d.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * 多数 Agent 客户端约定的 skills 根目录(如 `~/.agents/skills`)。
3
+ * 可用 `BOSS_AGENT_SKILLS_DIR` 设为绝对路径以覆盖。
4
+ */
5
+ export declare function getAgentSkillsDir(): string;
1
6
  /** 应用主目录(业务数据在 .cache 下) */
2
7
  export declare const APP_HOME: string;
3
8
  /** 存放岗位 JD 的目录(每个岗位一个 .md 文件) */
@@ -8,6 +13,10 @@ export declare const JD_DIR: string;
8
13
  export declare const CACHE_DIR: string;
9
14
  /** Puppeteer 用户数据目录(与 CDP 启动默认目录一致) */
10
15
  export declare const BROWSER_USER_DATA_DIR: string;
16
+ /** `chat` 抓取在线简历时对 iframe 区域截图保存目录 */
17
+ export declare const RESUME_SCREENSHOTS_DIR: string;
18
+ /** 在线简历截图经 OCR 后的纯文本保存目录(与截图同名 `.txt`) */
19
+ export declare const RESUME_OCR_DIR: string;
11
20
  /** 确保 `~/.boss-cli/.cache` 目录存在(幂等) */
12
21
  export declare function ensureAppDataLayout(): void;
13
22
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,QAA+B,CAAC;AAErD,iCAAiC;AACjC,eAAO,MAAM,MAAM,QAAuB,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,SAAS,QAA2B,CAAC;AAElD,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,QAAkC,CAAC;AAIrE,uCAAuC;AACvC,wBAAgB,mBAAmB,IAAI,IAAI,CAc1C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED,4BAA4B;AAC5B,eAAO,MAAM,QAAQ,QAA+B,CAAC;AAErD,iCAAiC;AACjC,eAAO,MAAM,MAAM,QAAuB,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,SAAS,QAA2B,CAAC;AAElD,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,QAAkC,CAAC;AAErE,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,QAAwC,CAAC;AAE5E,0CAA0C;AAC1C,eAAO,MAAM,cAAc,QAAyB,CAAC;AAIrD,uCAAuC;AACvC,wBAAgB,mBAAmB,IAAI,IAAI,CAwB1C"}
package/dist/config.js CHANGED
@@ -2,6 +2,17 @@
2
2
  import { existsSync, mkdirSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  import { homedir } from 'os';
5
+ /**
6
+ * 多数 Agent 客户端约定的 skills 根目录(如 `~/.agents/skills`)。
7
+ * 可用 `BOSS_AGENT_SKILLS_DIR` 设为绝对路径以覆盖。
8
+ */
9
+ export function getAgentSkillsDir() {
10
+ const raw = process.env.BOSS_AGENT_SKILLS_DIR?.trim();
11
+ if (raw && raw.length > 0) {
12
+ return raw;
13
+ }
14
+ return join(homedir(), '.agents', 'skills');
15
+ }
5
16
  /** 应用主目录(业务数据在 .cache 下) */
6
17
  export const APP_HOME = join(homedir(), '.boss-cli');
7
18
  /** 存放岗位 JD 的目录(每个岗位一个 .md 文件) */
@@ -12,6 +23,10 @@ export const JD_DIR = join(APP_HOME, 'jd');
12
23
  export const CACHE_DIR = join(APP_HOME, '.cache');
13
24
  /** Puppeteer 用户数据目录(与 CDP 启动默认目录一致) */
14
25
  export const BROWSER_USER_DATA_DIR = join(CACHE_DIR, 'browser-data');
26
+ /** `chat` 抓取在线简历时对 iframe 区域截图保存目录 */
27
+ export const RESUME_SCREENSHOTS_DIR = join(CACHE_DIR, 'resume-screenshots');
28
+ /** 在线简历截图经 OCR 后的纯文本保存目录(与截图同名 `.txt`) */
29
+ export const RESUME_OCR_DIR = join(CACHE_DIR, 'ocr');
15
30
  let appDataLayoutReady = false;
16
31
  /** 确保 `~/.boss-cli/.cache` 目录存在(幂等) */
17
32
  export function ensureAppDataLayout() {
@@ -28,5 +43,15 @@ export function ensureAppDataLayout() {
28
43
  if (!existsSync(JD_DIR)) {
29
44
  mkdirSync(JD_DIR, { recursive: true });
30
45
  }
46
+ if (!existsSync(RESUME_SCREENSHOTS_DIR)) {
47
+ mkdirSync(RESUME_SCREENSHOTS_DIR, { recursive: true });
48
+ }
49
+ if (!existsSync(RESUME_OCR_DIR)) {
50
+ mkdirSync(RESUME_OCR_DIR, { recursive: true });
51
+ }
52
+ const agentSkills = getAgentSkillsDir();
53
+ if (!existsSync(agentSkills)) {
54
+ mkdirSync(agentSkills, { recursive: true });
55
+ }
31
56
  }
32
57
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAErD,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAElD,uCAAuC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAErE,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,uCAAuC;AACvC,MAAM,UAAU,mBAAmB;IACjC,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,kBAAkB,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACvC,SAAS,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACtD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAErD,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAElD,uCAAuC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAErE,sCAAsC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAE5E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,uCAAuC;AACvC,MAAM,UAAU,mBAAmB;IACjC,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,kBAAkB,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACvC,SAAS,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACxC,SAAS,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 百度 AI 开放平台:OAuth + 通用文字识别(高精度含位置版 accurate_basic)。
3
+ * 需在环境变量中配置 `API_KEY`、`SECRET_KEY`(与百度控制台一致)。
4
+ * @see https://ai.baidu.com/ai-doc/OCR/zk3h7xz52
5
+ */
6
+ export declare function isBaiduOcrConfigured(): boolean;
7
+ /** 获取 access_token(带简单内存缓存,过期前 1 分钟刷新)。 */
8
+ export declare function getBaiduAccessToken(): Promise<string>;
9
+ /** 对整张 PNG/JPG 做高精度识别,返回合并文本(按行拼接)。 */
10
+ export declare function baiduOcrImageBase64(imageBase64: string): Promise<string>;
11
+ //# sourceMappingURL=baidu_ocr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baidu_ocr.d.ts","sourceRoot":"","sources":["../../src/ocr/baidu_ocr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAID,2CAA2C;AAC3C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CA4C3D;AAID,uCAAuC;AACvC,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC9E"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * 百度 AI 开放平台:OAuth + 通用文字识别(高精度含位置版 accurate_basic)。
3
+ * 需在环境变量中配置 `API_KEY`、`SECRET_KEY`(与百度控制台一致)。
4
+ * @see https://ai.baidu.com/ai-doc/OCR/zk3h7xz52
5
+ */
6
+ const BAIDU_TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token';
7
+ const BAIDU_OCR_ACCURATE_BASIC = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic';
8
+ function apiKey() {
9
+ return process.env.API_KEY?.trim() || process.env.BOSS_BAIDU_API_KEY?.trim();
10
+ }
11
+ function secretKey() {
12
+ return process.env.SECRET_KEY?.trim() || process.env.BOSS_BAIDU_SECRET_KEY?.trim();
13
+ }
14
+ export function isBaiduOcrConfigured() {
15
+ return !!(apiKey() && secretKey());
16
+ }
17
+ let cachedToken = null;
18
+ /** 获取 access_token(带简单内存缓存,过期前 1 分钟刷新)。 */
19
+ export async function getBaiduAccessToken() {
20
+ const client_id = apiKey();
21
+ const client_secret = secretKey();
22
+ if (!client_id || !client_secret) {
23
+ throw new Error('缺少百度 OCR 凭证:请设置 API_KEY 与 SECRET_KEY(或 BOSS_BAIDU_API_KEY / BOSS_BAIDU_SECRET_KEY)');
24
+ }
25
+ const now = Date.now();
26
+ if (cachedToken && now < cachedToken.expiresAtMs - 60_000) {
27
+ return cachedToken.token;
28
+ }
29
+ const u = new URL(BAIDU_TOKEN_URL);
30
+ u.searchParams.set('grant_type', 'client_credentials');
31
+ u.searchParams.set('client_id', client_id);
32
+ u.searchParams.set('client_secret', client_secret);
33
+ const res = await fetch(u.toString(), {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Content-Type': 'application/json',
37
+ Accept: 'application/json',
38
+ },
39
+ });
40
+ const data = (await res.json());
41
+ if (!res.ok || !data.access_token) {
42
+ throw new Error(`百度 OAuth 失败: ${res.status} ${data.error ?? ''} ${data.error_description ?? JSON.stringify(data)}`);
43
+ }
44
+ const expiresInSec = typeof data.expires_in === 'number' ? data.expires_in : 2592000;
45
+ cachedToken = {
46
+ token: data.access_token,
47
+ expiresAtMs: now + expiresInSec * 1000,
48
+ };
49
+ return data.access_token;
50
+ }
51
+ /** 对整张 PNG/JPG 做高精度识别,返回合并文本(按行拼接)。 */
52
+ export async function baiduOcrImageBase64(imageBase64) {
53
+ const token = await getBaiduAccessToken();
54
+ const url = new URL(BAIDU_OCR_ACCURATE_BASIC);
55
+ url.searchParams.set('access_token', token);
56
+ const body = new URLSearchParams();
57
+ body.set('image', imageBase64);
58
+ body.set('language_type', 'CHN_ENG');
59
+ const res = await fetch(url.toString(), {
60
+ method: 'POST',
61
+ headers: {
62
+ 'Content-Type': 'application/x-www-form-urlencoded',
63
+ Accept: 'application/json',
64
+ },
65
+ body: body.toString(),
66
+ });
67
+ const data = (await res.json());
68
+ if (!res.ok || (data.error_code !== undefined && data.error_code !== 0)) {
69
+ throw new Error(`百度 OCR 失败: ${res.status} ${data.error_msg ?? JSON.stringify(data)}`);
70
+ }
71
+ const lines = (data.words_result ?? [])
72
+ .map((r) => (r.words ?? '').trim())
73
+ .filter((s) => s.length > 0);
74
+ return lines.join('\n').trim();
75
+ }
76
+ //# sourceMappingURL=baidu_ocr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baidu_ocr.js","sourceRoot":"","sources":["../../src/ocr/baidu_ocr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { getBaiduAccessToken, isBaiduOcrConfigured } from './baidu_ocr.js';
2
+ export { isResumeOcrEnabled, ocrResumePngToTextFile } from './resume_ocr.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ocr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getBaiduAccessToken, isBaiduOcrConfigured } from './baidu_ocr.js';
2
+ export { isResumeOcrEnabled, ocrResumePngToTextFile } from './resume_ocr.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ocr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 是否对在线简历截图做 OCR。关闭:`BOSS_RESUME_OCR=0`。
3
+ * 开启时需配置百度 `API_KEY` + `SECRET_KEY`(在线识别,无本地引擎)。
4
+ */
5
+ export declare function isResumeOcrEnabled(): boolean;
6
+ /**
7
+ * 对简历区域 PNG 调用百度 OCR,将结果写入 `~/.boss-cli/.cache/ocr/`(与截图同名 `.txt`)。
8
+ */
9
+ export declare function ocrResumePngToTextFile(pngAbsPath: string): Promise<{
10
+ textPath: string;
11
+ text: string;
12
+ }>;
13
+ //# sourceMappingURL=resume_ocr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume_ocr.d.ts","sourceRoot":"","sources":["../../src/ocr/resume_ocr.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C;AAKD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB5G"}
@@ -0,0 +1,35 @@
1
+ import { basename, join } from 'node:path';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
+ import { ensureAppDataLayout, RESUME_OCR_DIR } from '../config.js';
4
+ import { baiduOcrImageBase64, isBaiduOcrConfigured } from './baidu_ocr.js';
5
+ /**
6
+ * 是否对在线简历截图做 OCR。关闭:`BOSS_RESUME_OCR=0`。
7
+ * 开启时需配置百度 `API_KEY` + `SECRET_KEY`(在线识别,无本地引擎)。
8
+ */
9
+ export function isResumeOcrEnabled() {
10
+ const v = process.env.BOSS_RESUME_OCR?.trim().toLowerCase();
11
+ return v !== '0' && v !== 'false' && v !== 'no';
12
+ }
13
+ /** 串行执行 OCR,避免并发请求交错 */
14
+ let ocrChain = Promise.resolve();
15
+ /**
16
+ * 对简历区域 PNG 调用百度 OCR,将结果写入 `~/.boss-cli/.cache/ocr/`(与截图同名 `.txt`)。
17
+ */
18
+ export async function ocrResumePngToTextFile(pngAbsPath) {
19
+ ensureAppDataLayout();
20
+ if (!isBaiduOcrConfigured()) {
21
+ throw new Error('已开启简历 OCR(BOSS_RESUME_OCR),但未配置百度密钥:请设置 API_KEY 与 SECRET_KEY(或 BOSS_BAIDU_API_KEY / BOSS_BAIDU_SECRET_KEY)。');
22
+ }
23
+ const base = basename(pngAbsPath).replace(/\.png$/i, '.txt');
24
+ const textPath = join(RESUME_OCR_DIR, base);
25
+ const run = async () => {
26
+ const buf = await readFile(pngAbsPath);
27
+ const text = await baiduOcrImageBase64(buf.toString('base64'));
28
+ await writeFile(textPath, text.endsWith('\n') ? text : `${text}\n`, 'utf8');
29
+ return { textPath, text };
30
+ };
31
+ const p = ocrChain.then(run);
32
+ ocrChain = p.catch(() => { });
33
+ return p;
34
+ }
35
+ //# sourceMappingURL=resume_ocr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume_ocr.js","sourceRoot":"","sources":["../../src/ocr/resume_ocr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3E;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC;AAClD,CAAC;AAED,wBAAwB;AACxB,IAAI,QAAQ,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAAkB;IAC7D,mBAAmB,EAAE,CAAC;IACtB,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAE5C,MAAM,GAAG,GAAG,KAAK,IAAiD,EAAE;QAClE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAgD,CAAC;AAC1D,CAAC"}
@@ -1,7 +1,17 @@
1
+ import { type ChatOpenAction } from './open_chat.js';
2
+ import { type SendAction } from './send_message.js';
3
+ export type { SendAction } from './send_message.js';
4
+ export type { ChatOpenAction };
1
5
  export declare function implLogin(): Promise<string>;
2
6
  export declare function implListCandidates(): Promise<string>;
3
7
  export declare function implListUnreadCandidates(): Promise<string>;
4
- export declare function implOpenChat(candidateName: string, exact: boolean): Promise<string>;
5
- export declare function implSendMessage(text: string, alsoRequestResume: boolean): Promise<string>;
8
+ export declare function implOpenChat(candidateName: string, exact: boolean, options?: {
9
+ action?: ChatOpenAction;
10
+ }): Promise<string>;
11
+ export declare function implSendMessage(params: {
12
+ text: string;
13
+ action?: SendAction;
14
+ }): Promise<string>;
6
15
  export declare function implListPositions(): Promise<string>;
16
+ export declare function implSkill(tail: string[]): Promise<string>;
7
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toolset/index.ts"],"names":[],"mappings":"AAQA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhE;AAED,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toolset/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIxE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEhE;AAED,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GACpC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D"}
@@ -4,6 +4,7 @@ import { runGetCandidateList } from './list_candidates.js';
4
4
  import { runListOpenPositions } from './list_positions.js';
5
5
  import { runOpenCandidateChat } from './open_chat.js';
6
6
  import { runSendChatMessage } from './send_message.js';
7
+ import { implSkillCli } from './skill.js';
7
8
  import { withChatPage } from '../browser/index.js';
8
9
  export async function implLogin() {
9
10
  return runLogin();
@@ -14,13 +15,19 @@ export async function implListCandidates() {
14
15
  export async function implListUnreadCandidates() {
15
16
  return runGetCandidateList({ unreadOnly: true });
16
17
  }
17
- export async function implOpenChat(candidateName, exact) {
18
- return withChatPage(async (page) => runOpenCandidateChat(page, candidateName, exact));
18
+ export async function implOpenChat(candidateName, exact, options) {
19
+ return withChatPage(async (page) => runOpenCandidateChat(page, candidateName, exact, options));
19
20
  }
20
- export async function implSendMessage(text, alsoRequestResume) {
21
- return runSendChatMessage(text, alsoRequestResume);
21
+ export async function implSendMessage(params) {
22
+ return runSendChatMessage({
23
+ text: params.text || undefined,
24
+ action: params.action,
25
+ });
22
26
  }
23
27
  export async function implListPositions() {
24
28
  return runListOpenPositions();
25
29
  }
30
+ export async function implSkill(tail) {
31
+ return implSkillCli(tail);
32
+ }
26
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/toolset/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,mBAAmB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,aAAqB,EAAE,KAAc;IACtE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,iBAA0B;IAE1B,OAAO,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/toolset/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAuB,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAmB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,mBAAmB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,aAAqB,EACrB,KAAc,EACd,OAAqC;IAErC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAGrC;IACC,OAAO,kBAAkB,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list_candidates.d.ts","sourceRoot":"","sources":["../../src/toolset/list_candidates.ts"],"names":[],"mappings":"AA2DA,wBAAsB,mBAAmB,CACvC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,CAAC,CAgGjB"}
1
+ {"version":3,"file":"list_candidates.d.ts","sourceRoot":"","sources":["../../src/toolset/list_candidates.ts"],"names":[],"mappings":"AA+DA,wBAAsB,mBAAmB,CACvC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,CAAC,CA0FjB"}
@@ -1,7 +1,4 @@
1
- import { createWaitManualLoginRequiredText, isBossChatIndexUrl, withChatPage } from '../browser/index.js';
2
- function delay(ms) {
3
- return new Promise((resolve) => setTimeout(resolve, ms));
4
- }
1
+ import { createWaitManualLoginRequiredText, isBossChatIndexUrl, LIST_FILTER_GAP_MS, LIST_MIN_BEFORE_EMPTY_OK_MS, LIST_POLL_MS, sleepRandom, withChatPage, } from '../browser/index.js';
5
2
  async function waitForCandidateListSettled(page, opts) {
6
3
  const start = Date.now();
7
4
  let prev = -1;
@@ -24,7 +21,7 @@ async function waitForCandidateListSettled(page, opts) {
24
21
  return;
25
22
  }
26
23
  }
27
- await new Promise((r) => setTimeout(r, opts.pollMs));
24
+ await sleepRandom(opts.pollMsMin, opts.pollMsMax);
28
25
  }
29
26
  }
30
27
  async function clickChatFilterTabAll(page) {
@@ -46,7 +43,6 @@ export async function runGetCandidateList(opts = {}) {
46
43
  return await withChatPage(async (page) => {
47
44
  const currentUrl = page.url();
48
45
  if (!isBossChatIndexUrl(currentUrl)) {
49
- console.error(`[boss-cli] candidate_list not_chat_list url=${currentUrl}`);
50
46
  throw new Error('请先进入聊天列表页(/web/chat/index)再获取候选人列表。');
51
47
  }
52
48
  await page.waitForFunction(`(() => {
@@ -57,16 +53,17 @@ export async function runGetCandidateList(opts = {}) {
57
53
  const list = document.querySelector(".chat-list, .chat-item-list, .geek-list");
58
54
  const hasItems = document.querySelectorAll(".geek-item").length > 0;
59
55
  return !!list || hasItems;
60
- })()`, { timeout: 8_000 });
56
+ })()`, { timeout: 12_000 });
61
57
  await clickChatFilterTabAll(page);
62
- await delay(520);
63
- await delay(450);
58
+ await sleepRandom(LIST_FILTER_GAP_MS.min, LIST_FILTER_GAP_MS.max);
59
+ await sleepRandom(LIST_FILTER_GAP_MS.min, LIST_FILTER_GAP_MS.max);
64
60
  await clickChatFilterTabAll(page);
65
- await delay(520);
61
+ await sleepRandom(LIST_FILTER_GAP_MS.min, LIST_FILTER_GAP_MS.max);
66
62
  await waitForCandidateListSettled(page, {
67
- timeoutMs: 10_000,
68
- pollMs: 220,
69
- minMsBeforeEmptyOk: 2_800,
63
+ timeoutMs: 14_000,
64
+ pollMsMin: LIST_POLL_MS.min,
65
+ pollMsMax: LIST_POLL_MS.max,
66
+ minMsBeforeEmptyOk: LIST_MIN_BEFORE_EMPTY_OK_MS,
70
67
  });
71
68
  const items = (await page.evaluate(`(() => {
72
69
  const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
@@ -87,7 +84,6 @@ export async function runGetCandidateList(opts = {}) {
87
84
  const candidates = items.filter((it) => it.name);
88
85
  const withUnread = candidates.filter((it) => it.unreadCount > 0).length;
89
86
  const visible = unreadOnly ? candidates.filter((it) => it.unreadCount > 0) : candidates;
90
- console.error(`[boss-cli] candidate_list extracted=${candidates.length} withUnreadBadge=${withUnread}`);
91
87
  const lines = visible.map((it, idx) => {
92
88
  const base = `${idx + 1}. ${it.name}${it.job ? `|${it.job}` : ''}`;
93
89
  const meta = [
@@ -99,13 +95,11 @@ export async function runGetCandidateList(opts = {}) {
99
95
  .join('|');
100
96
  return meta ? `${base}|${meta}` : base;
101
97
  });
102
- const logText = lines.length > 0 ? lines.join('\n') : '(empty)';
103
- console.error(`[boss-cli] candidate_list count=${visible.length}\n${logText}`);
104
98
  const previewText = lines.length > 0 ? `候选人明细:\n${lines.join('\n')}` : '候选人明细:暂无。';
105
99
  return [
106
100
  unreadOnly
107
- ? `已获取未读候选人(全部),共 ${visible.length} 条;原始列表共 ${candidates.length} 条;其中 ${withUnread} 人有未读角标。`
108
- : `已获取候选人列表(全部),共 ${candidates.length} 条;其中 ${withUnread} 人有未读角标。`,
101
+ ? `未读筛选:共 ${visible.length} 人(全部列表 ${candidates.length} 人中有未读角标者 ${withUnread} 人)。`
102
+ : `沟通列表共 ${candidates.length} 人,其中 ${withUnread} 人有未读消息。`,
109
103
  previewText,
110
104
  ]
111
105
  .filter(Boolean)
@@ -114,7 +108,6 @@ export async function runGetCandidateList(opts = {}) {
114
108
  }
115
109
  catch (e) {
116
110
  const message = e instanceof Error ? e.message : String(e);
117
- console.error(`[boss-cli] candidate_list error: ${message}`);
118
111
  if (e instanceof Error) {
119
112
  if (e.message.includes('浏览器会话尚未初始化')) {
120
113
  throw new Error(createWaitManualLoginRequiredText('获取候选人列表'));
@@ -1 +1 @@
1
- {"version":3,"file":"list_candidates.js","sourceRoot":"","sources":["../../src/toolset/list_candidates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list_candidates.js","sourceRoot":"","sources":["../../src/toolset/list_candidates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/toolset/login.ts"],"names":[],"mappings":"AAuCA;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CA4ChD"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/toolset/login.ts"],"names":[],"mappings":"AAyCA;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAiDhD"}
@@ -1,4 +1,4 @@
1
- import { disconnectBrowserSession, ensureAndGetBrowser, ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, } from '../browser/index.js';
1
+ import { detachBrowserSession, disconnectBrowserSession, ensureAndGetBrowser, ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, wasLastChromeLaunchHeadless, } from '../browser/index.js';
2
2
  const BOSS_LOGIN_URL = 'https://www.zhipin.com/web/user/?ka=header-login';
3
3
  async function pickExistingPage(browser) {
4
4
  const pages = (await browser.pages()).filter((p) => !p.isClosed());
@@ -34,7 +34,8 @@ export async function runLogin() {
34
34
  const existing = getBrowserRef();
35
35
  try {
36
36
  const args = existing?.process?.()?.spawnargs ?? [];
37
- const isHeadless = args.some((a) => typeof a === 'string' && a.startsWith('--headless'));
37
+ const isHeadless = wasLastChromeLaunchHeadless() ||
38
+ args.some((a) => typeof a === 'string' && a.startsWith('--headless'));
38
39
  if (existing?.connected && isHeadless) {
39
40
  await disconnectBrowserSession().catch(() => { });
40
41
  }
@@ -64,11 +65,13 @@ export async function runLogin() {
64
65
  setSessionPage(page);
65
66
  await page.bringToFront();
66
67
  await page.goto(BOSS_LOGIN_URL, { waitUntil: 'load', timeout: 60_000 });
67
- // 不做任何登录校验:只把浏览器打开到登录页,后续命令会复用该会话。
68
+ await detachBrowserSession();
69
+ // 不做任何登录校验:只把浏览器打开到登录页;立即断开 CDP,CLI 不与浏览器进程长期绑定。
68
70
  return [
69
71
  '✅ 已打开登录页',
70
72
  '请在浏览器中自行完成登录(扫码/验证码/人机验证等)。',
71
- '登录完成后直接在终端运行其它命令即可(例如:boss list-candidates / boss open-chat ...)。',
73
+ 'CLI 已与浏览器断开连接(窗口可继续操作)。',
74
+ '登录完成后请手动关闭浏览器窗口',
72
75
  `登录页:${BOSS_LOGIN_URL}`,
73
76
  ].join('\n');
74
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/toolset/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/toolset/login.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAE1E,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;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,6CAA6C;IAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GACd,2BAA2B,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QACxE,IAAI,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,CAAC;YACtC,MAAM,wBAAwB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,IAAI,OAAO,GAAmB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,mBAAmB,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,oBAAoB,EAAE,CAAC;YAC7B,OAAO,GAAG,aAAa,EAAE,IAAI,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,IAAI,GAAgB,UAAU,EAAE,IAAI,IAAI,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAExE,MAAM,oBAAoB,EAAE,CAAC;IAE7B,iDAAiD;IACjD,OAAO;QACL,UAAU;QACV,6BAA6B;QAC7B,yBAAyB;QACzB,iBAAiB;QACjB,OAAO,cAAc,EAAE;KACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import type { Page } from 'puppeteer-core';
2
- export declare function runOpenCandidateChat(page: Page, candidateName: string, exact?: boolean): Promise<string>;
2
+ export type ChatOpenAction = 'online-resume';
3
+ export declare function runOpenCandidateChat(page: Page, candidateName: string, exact?: boolean, options?: {
4
+ action?: ChatOpenAction;
5
+ }): Promise<string>;
3
6
  //# sourceMappingURL=open_chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"open_chat.d.ts","sourceRoot":"","sources":["../../src/toolset/open_chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,UAAO,GACX,OAAO,CAAC,MAAM,CAAC,CAgNjB"}
1
+ {"version":3,"file":"open_chat.d.ts","sourceRoot":"","sources":["../../src/toolset/open_chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA0U3C,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC;AAE7C,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,UAAO,EACZ,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GACpC,OAAO,CAAC,MAAM,CAAC,CA0QjB"}