@joohw/boss-cli 0.1.8 → 0.1.9
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.
- package/AGENTS.md +25 -25
- package/README.md +34 -19
- package/dist/browser/agent_operating_indicator.d.ts +9 -0
- package/dist/browser/agent_operating_indicator.d.ts.map +1 -0
- package/dist/browser/agent_operating_indicator.js +92 -0
- package/dist/browser/agent_operating_indicator.js.map +1 -0
- package/dist/browser/c_resume_capture.d.ts +11 -0
- package/dist/browser/c_resume_capture.d.ts.map +1 -0
- package/dist/browser/c_resume_capture.js +76 -0
- package/dist/browser/c_resume_capture.js.map +1 -0
- package/dist/browser/chat.d.ts +3 -3
- package/dist/browser/chat.d.ts.map +1 -1
- package/dist/browser/chat.js +20 -4
- package/dist/browser/chat.js.map +1 -1
- package/dist/browser/human_delay.d.ts +5 -0
- package/dist/browser/human_delay.d.ts.map +1 -1
- package/dist/browser/human_delay.js +5 -0
- package/dist/browser/human_delay.js.map +1 -1
- package/dist/browser/index.d.ts +3 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +3 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/viewport_temp.d.ts +15 -0
- package/dist/browser/viewport_temp.d.ts.map +1 -0
- package/dist/browser/viewport_temp.js +78 -0
- package/dist/browser/viewport_temp.js.map +1 -0
- package/dist/cli/banner.js +1 -1
- package/dist/cli/cliRouter.d.ts.map +1 -1
- package/dist/cli/cliRouter.js +32 -13
- package/dist/cli/cliRouter.js.map +1 -1
- package/dist/common/boss_paywall_popup.d.ts +16 -0
- package/dist/common/boss_paywall_popup.d.ts.map +1 -0
- package/dist/common/boss_paywall_popup.js +140 -0
- package/dist/common/boss_paywall_popup.js.map +1 -0
- package/dist/common/boss_sidebar_nav.d.ts +6 -0
- package/dist/common/boss_sidebar_nav.d.ts.map +1 -0
- package/dist/common/boss_sidebar_nav.js +37 -0
- package/dist/common/boss_sidebar_nav.js.map +1 -0
- package/dist/common/c_resume_capture.d.ts +11 -0
- package/dist/common/c_resume_capture.d.ts.map +1 -0
- package/dist/common/c_resume_capture.js +76 -0
- package/dist/common/c_resume_capture.js.map +1 -0
- package/dist/toolset/action.d.ts +1 -1
- package/dist/toolset/action.d.ts.map +1 -1
- package/dist/toolset/action.js +192 -152
- package/dist/toolset/action.js.map +1 -1
- package/dist/toolset/c_resume_capture.d.ts +11 -0
- package/dist/toolset/c_resume_capture.d.ts.map +1 -0
- package/dist/toolset/c_resume_capture.js +76 -0
- package/dist/toolset/c_resume_capture.js.map +1 -0
- package/dist/toolset/chat.d.ts.map +1 -1
- package/dist/toolset/chat.js +4 -3
- package/dist/toolset/chat.js.map +1 -1
- package/dist/toolset/deep-search.d.ts +24 -0
- package/dist/toolset/deep-search.d.ts.map +1 -0
- package/dist/toolset/deep-search.js +1039 -0
- package/dist/toolset/deep-search.js.map +1 -0
- package/dist/toolset/greet.d.ts.map +1 -1
- package/dist/toolset/greet.js +30 -10
- package/dist/toolset/greet.js.map +1 -1
- package/dist/toolset/index.d.ts +13 -1
- package/dist/toolset/index.d.ts.map +1 -1
- package/dist/toolset/index.js +13 -7
- package/dist/toolset/index.js.map +1 -1
- package/dist/toolset/jd.d.ts.map +1 -1
- package/dist/toolset/jd.js +4 -35
- package/dist/toolset/jd.js.map +1 -1
- package/dist/toolset/list.d.ts +6 -0
- package/dist/toolset/list.d.ts.map +1 -1
- package/dist/toolset/list.js +36 -60
- package/dist/toolset/list.js.map +1 -1
- package/dist/toolset/login.d.ts.map +1 -1
- package/dist/toolset/login.js +2 -5
- package/dist/toolset/login.js.map +1 -1
- package/dist/toolset/recommend.d.ts +12 -0
- package/dist/toolset/recommend.d.ts.map +1 -1
- package/dist/toolset/recommend.js +144 -45
- package/dist/toolset/recommend.js.map +1 -1
- package/dist/toolset/search.d.ts +23 -1
- package/dist/toolset/search.d.ts.map +1 -1
- package/dist/toolset/search.js +556 -48
- package/dist/toolset/search.js.map +1 -1
- package/dist/toolset/send.js +2 -2
- package/dist/toolset/send.js.map +1 -1
- package/package.json +2 -2
package/AGENTS.md
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# 项目协作规则
|
|
2
|
-
|
|
3
|
-
## 基本原则
|
|
4
|
-
|
|
5
|
-
- 禁止添加任何回退逻辑(fallback)。
|
|
6
|
-
- 禁止添加掩盖根因的“胶水代码”。
|
|
7
|
-
- 默认采用单一路径、可预测行为;未经明确要求,不引入隐式分支。
|
|
8
|
-
|
|
9
|
-
## 失败处理
|
|
10
|
-
|
|
11
|
-
- 失败应直接暴露,不做静默兜底。
|
|
12
|
-
- 错误信息必须清晰、可定位,日志应包含关键上下文。
|
|
13
|
-
- 发现问题优先修复根因,不通过绕路方案规避。
|
|
14
|
-
|
|
15
|
-
## 变更约束
|
|
16
|
-
|
|
17
|
-
- 小步修改,保持最小必要改动。
|
|
18
|
-
- 不在未被要求的范围内扩散改动。
|
|
19
|
-
- 规则优先级:用户明确要求 > 本文件约束。
|
|
20
|
-
|
|
21
|
-
## Puppeteer evaluate 约束(重要)
|
|
22
|
-
|
|
23
|
-
- 在工具代码中,避免使用 `page.evaluate(() => { ... })` / `page.waitForFunction(() => { ... })` 的函数写法。
|
|
24
|
-
- 统一改为字符串脚本写法(如 `page.evaluate("(() => { ... })()")`),避免构建后注入辅助符号导致浏览器上下文报错 `__name is not defined`。
|
|
25
|
-
- 出现 `__name is not defined` 时,优先检查最近新增的 evaluate / waitForFunction 回调并改成字符串脚本,不要加兜底掩盖问题。
|
|
1
|
+
# 项目协作规则
|
|
2
|
+
|
|
3
|
+
## 基本原则
|
|
4
|
+
|
|
5
|
+
- 禁止添加任何回退逻辑(fallback)。
|
|
6
|
+
- 禁止添加掩盖根因的“胶水代码”。
|
|
7
|
+
- 默认采用单一路径、可预测行为;未经明确要求,不引入隐式分支。
|
|
8
|
+
|
|
9
|
+
## 失败处理
|
|
10
|
+
|
|
11
|
+
- 失败应直接暴露,不做静默兜底。
|
|
12
|
+
- 错误信息必须清晰、可定位,日志应包含关键上下文。
|
|
13
|
+
- 发现问题优先修复根因,不通过绕路方案规避。
|
|
14
|
+
|
|
15
|
+
## 变更约束
|
|
16
|
+
|
|
17
|
+
- 小步修改,保持最小必要改动。
|
|
18
|
+
- 不在未被要求的范围内扩散改动。
|
|
19
|
+
- 规则优先级:用户明确要求 > 本文件约束。
|
|
20
|
+
|
|
21
|
+
## Puppeteer evaluate 约束(重要)
|
|
22
|
+
|
|
23
|
+
- 在工具代码中,避免使用 `page.evaluate(() => { ... })` / `page.waitForFunction(() => { ... })` 的函数写法。
|
|
24
|
+
- 统一改为字符串脚本写法(如 `page.evaluate("(() => { ... })()")`),避免构建后注入辅助符号导致浏览器上下文报错 `__name is not defined`。
|
|
25
|
+
- 出现 `__name is not defined` 时,优先检查最近新增的 evaluate / waitForFunction 回调并改成字符串脚本,不要加兜底掩盖问题。
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# boss-cli
|
|
2
2
|
|
|
3
|
-
在终端里使用的 Boss 直聘沟通页自动化工具:**登录**、**候选人列表**、**打开会话**、**发送消息**,以及读取本地 `~/.boss-cli/jd`
|
|
3
|
+
在终端里使用的 Boss 直聘沟通页自动化工具:**登录**、**候选人列表**、**打开会话**、**发送消息**,以及读取本地 `~/.boss-cli/jd` 岗位说明。本仓库是**纯 CLI**(不内置对话式 Agent),可由脚本或外层 Agent 通过子进程调用。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
发布版本以 npm 为准;本地可执行 `boss version`(或 `ver`、`-v`、`--version`)查看当前版本并比对 registry 最新版。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -15,19 +15,29 @@
|
|
|
15
15
|
|
|
16
16
|
## 安装与本地运行
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
### 全局安装(推荐)
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npm install -g @joohw/boss-cli
|
|
21
|
+
npm install -g @joohw/boss-cli@latest
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
### 权限不足时
|
|
25
|
+
|
|
26
|
+
若全局安装报权限错误(例如无法写入 npm 全局目录),可:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
sudo npm install -g @joohw/boss-cli@latest
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
业务数据仍会落在用户目录下的 `~/.boss-cli/`(含 JD、简历截图等缓存),与是否使用 `sudo` 安装无冲突。
|
|
33
|
+
|
|
34
|
+
安装后查看使用说明:
|
|
25
35
|
|
|
26
36
|
```bash
|
|
27
37
|
boss help
|
|
28
38
|
```
|
|
29
39
|
|
|
30
|
-
|
|
40
|
+
### 从源码
|
|
31
41
|
|
|
32
42
|
```bash
|
|
33
43
|
npm install
|
|
@@ -43,25 +53,30 @@ npm run build
|
|
|
43
53
|
与 `boss help` 一致:
|
|
44
54
|
|
|
45
55
|
|
|
46
|
-
| 用法
|
|
47
|
-
|
|
|
48
|
-
| `boss`
|
|
49
|
-
| `boss help`
|
|
50
|
-
| `boss
|
|
51
|
-
| `boss
|
|
52
|
-
| `boss
|
|
53
|
-
| `boss
|
|
54
|
-
| `boss
|
|
55
|
-
| `boss
|
|
56
|
-
| `boss
|
|
56
|
+
| 用法 | 说明 |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `boss` | 交互模式 |
|
|
59
|
+
| `boss help` | 打印帮助 |
|
|
60
|
+
| `boss version` / `ver` / `-v` / `--version` | 显示当前版本并检查 npm 是否有更新 |
|
|
61
|
+
| `boss login` | 打开登录页(不校验登录状态;需自行完成登录) |
|
|
62
|
+
| `boss list [--unread]` | 读取「全部」聊天列表候选人;`--unread` 仅显示未读 |
|
|
63
|
+
| `boss chat <姓名> [--strict]` | 打开指定联系人会话(须为已建立联系的候选人);默认包含匹配,`--strict` 为精确匹配 |
|
|
64
|
+
| `boss action <操作> [--remark <备注>]` | 在当前聊天页已打开候选人详情时执行操作;操作见下 |
|
|
65
|
+
| `boss send [--text <内容>] [-t <内容>]` | 仅向当前会话发送文本消息 |
|
|
66
|
+
| `boss positions` | 读取当前职位列表(含开放/待开放/已关闭) |
|
|
67
|
+
| `boss jd <名称或序号>` | 抓取职位详情并缓存为 `~/.boss-cli/jd` 下同名 `.md` |
|
|
68
|
+
| `boss deep-search [岗位]` / `boss deep-search set ...` | 「深度搜索」:读列表或带岗触发「立即匹配」;`set` 仅配置表单条件 |
|
|
69
|
+
| `boss recommend [岗位关键字]` | 进入推荐页读取推荐列表;可传岗位关键字做模糊匹配切换 |
|
|
70
|
+
| `boss greet <姓名或序号>` | 在推荐页对指定候选人点击「打招呼」(有次数成本,请谨慎使用) |
|
|
71
|
+
|
|
72
|
+
**`action` 可用操作**:`resume`、`not-fit`、`remark`、`agree-resume`、`history`、`exchange-wechat`。操作为 `remark` 时必须提供 `--remark <备注>`。
|
|
57
73
|
|
|
58
|
-
旧名仍可用:`list-candidates`、`open-chat`、`send-message`、`list-positions`。
|
|
59
74
|
|
|
60
75
|
**交互模式**
|
|
61
76
|
|
|
62
77
|
- 支持单引号/双引号包裹含空格的参数。
|
|
63
78
|
- 启动时 banner 会展示当前版本号与 GitHub/Issue 提示,命令执行期间会显示纯字符处理动画。
|
|
64
|
-
- 输入 `help` 查看帮助,`exit` / `quit` 退出;**Ctrl+C**
|
|
79
|
+
- 输入 `help` 查看帮助,`version` / `ver` 查看版本与更新提示,`exit` / `quit` 退出;**Ctrl+C** 正常退出
|
|
65
80
|
|
|
66
81
|
---
|
|
67
82
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Page } from 'puppeteer-core';
|
|
2
|
+
/**
|
|
3
|
+
* 全屏半透明彩虹蒙层(呼吸式明暗脉冲),文案视口居中;`pointer-events: none` 不拦截页面点击与自动化操作。
|
|
4
|
+
* 与 {@link hideAgentOperatingIndicator} 成对使用。
|
|
5
|
+
*/
|
|
6
|
+
export declare function showAgentOperatingIndicator(page: Page): Promise<void>;
|
|
7
|
+
/** 移除 {@link showAgentOperatingIndicator} 注入的样式与全屏蒙层(幂等)。 */
|
|
8
|
+
export declare function hideAgentOperatingIndicator(page: Page): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=agent_operating_indicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_operating_indicator.d.ts","sourceRoot":"","sources":["../../src/browser/agent_operating_indicator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK3C;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF3E;AAED,6DAA6D;AAC7D,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const OVERLAY_ID = '__boss_cli_agent_operating__';
|
|
2
|
+
const STYLE_ID = '__boss_cli_agent_operating_style__';
|
|
3
|
+
/**
|
|
4
|
+
* 全屏半透明彩虹蒙层(呼吸式明暗脉冲),文案视口居中;`pointer-events: none` 不拦截页面点击与自动化操作。
|
|
5
|
+
* 与 {@link hideAgentOperatingIndicator} 成对使用。
|
|
6
|
+
*/
|
|
7
|
+
export async function showAgentOperatingIndicator(page) {
|
|
8
|
+
await page.evaluate((ids) => {
|
|
9
|
+
const { overlay, style: styleId } = ids;
|
|
10
|
+
if (document.getElementById(overlay)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const styleEl = document.createElement('style');
|
|
14
|
+
styleEl.id = styleId;
|
|
15
|
+
styleEl.textContent = `
|
|
16
|
+
@keyframes boss-cli-breathe {
|
|
17
|
+
0%,
|
|
18
|
+
100% {
|
|
19
|
+
opacity: 0.82;
|
|
20
|
+
filter: brightness(0.96) saturate(0.95);
|
|
21
|
+
}
|
|
22
|
+
50% {
|
|
23
|
+
opacity: 1;
|
|
24
|
+
filter: brightness(1.05) saturate(1.05);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
#${overlay} {
|
|
28
|
+
position: fixed;
|
|
29
|
+
inset: 0;
|
|
30
|
+
width: 100vw;
|
|
31
|
+
height: 100vh;
|
|
32
|
+
height: 100dvh;
|
|
33
|
+
z-index: 2147483647;
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
box-sizing: border-box;
|
|
37
|
+
background:
|
|
38
|
+
radial-gradient(ellipse 80% 60% at 50% 45%, rgba(255, 255, 255, 0.07) 0%, transparent 55%),
|
|
39
|
+
linear-gradient(
|
|
40
|
+
125deg,
|
|
41
|
+
rgba(255, 89, 94, 0.22) 0%,
|
|
42
|
+
rgba(255, 146, 76, 0.18) 16%,
|
|
43
|
+
rgba(255, 202, 58, 0.16) 32%,
|
|
44
|
+
rgba(197, 224, 99, 0.14) 46%,
|
|
45
|
+
rgba(138, 201, 38, 0.15) 54%,
|
|
46
|
+
rgba(25, 130, 196, 0.2) 70%,
|
|
47
|
+
rgba(106, 76, 147, 0.18) 84%,
|
|
48
|
+
rgba(185, 103, 255, 0.2) 100%
|
|
49
|
+
);
|
|
50
|
+
animation: boss-cli-breathe 2.6s ease-in-out infinite;
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
justify-content: center;
|
|
54
|
+
padding: 1rem;
|
|
55
|
+
}
|
|
56
|
+
#${overlay} .boss-cli-agent-label {
|
|
57
|
+
max-width: min(36rem, 92vw);
|
|
58
|
+
font: 600 14px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
59
|
+
color: #ffffff;
|
|
60
|
+
letter-spacing: 0.02em;
|
|
61
|
+
text-align: center;
|
|
62
|
+
text-shadow:
|
|
63
|
+
0 0 12px rgba(0, 0, 0, 0.55),
|
|
64
|
+
0 1px 4px rgba(0, 0, 0, 0.45);
|
|
65
|
+
}
|
|
66
|
+
`;
|
|
67
|
+
const bar = document.createElement('div');
|
|
68
|
+
bar.id = overlay;
|
|
69
|
+
bar.setAttribute('role', 'status');
|
|
70
|
+
bar.setAttribute('aria-live', 'polite');
|
|
71
|
+
const label = document.createElement('div');
|
|
72
|
+
label.className = 'boss-cli-agent-label';
|
|
73
|
+
label.textContent = 'boss-cli 正在操作您的浏览器 请稍候';
|
|
74
|
+
bar.appendChild(label);
|
|
75
|
+
const root = document.body ?? document.documentElement;
|
|
76
|
+
root.appendChild(styleEl);
|
|
77
|
+
root.appendChild(bar);
|
|
78
|
+
}, { overlay: OVERLAY_ID, style: STYLE_ID });
|
|
79
|
+
}
|
|
80
|
+
/** 移除 {@link showAgentOperatingIndicator} 注入的样式与全屏蒙层(幂等)。 */
|
|
81
|
+
export async function hideAgentOperatingIndicator(page) {
|
|
82
|
+
try {
|
|
83
|
+
await page.evaluate((ids) => {
|
|
84
|
+
document.getElementById(ids.overlay)?.remove();
|
|
85
|
+
document.getElementById(ids.style)?.remove();
|
|
86
|
+
}, { overlay: OVERLAY_ID, style: STYLE_ID });
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* 页面已关闭或导航中时不抛 */
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agent_operating_indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_operating_indicator.js","sourceRoot":"","sources":["../../src/browser/agent_operating_indicator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAClD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAU;IAC1D,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,GAAuC,EAAE,EAAE;QAC1C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACxC,IAAI,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;QACrB,OAAO,CAAC,WAAW,GAAG;;;;;;;;;;;;WAYjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA6BP,OAAO;;;;;;;;;;OAUX,CAAC;QAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACjB,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,sBAAsB,CAAC;QACzC,KAAK,CAAC,WAAW,GAAG,wBAAwB,CAAC;QAE7C,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,EACD,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CACzC,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAU;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,GAAuC,EAAE,EAAE;YAC1C,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YAC/C,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/C,CAAC,EACD,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Page } from 'puppeteer-core';
|
|
2
|
+
/** 截图文件名安全段(与 toolset/action 一致) */
|
|
3
|
+
export declare function safeResumeScreenshotFileBase(name: string): string;
|
|
4
|
+
/** 关闭含 `c-resume` iframe 的弹层(聊天「在线简历」与推荐「预览」共用)。 */
|
|
5
|
+
export declare function closeCResumePanel(page: Page): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* 在已出现 `c-resume` iframe 的页面上,对 iframe 整框截图并关闭弹层。
|
|
8
|
+
* `preOpenViewport` 为打开弹层前 `page.viewport()` 的快照(与在线简历截图一致)。
|
|
9
|
+
*/
|
|
10
|
+
export declare function captureCResumeIframeToFile(page: Page, preOpenViewport: Awaited<ReturnType<Page['viewport']>>, absPath: string): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=c_resume_capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c_resume_capture.d.ts","sourceRoot":"","sources":["../../src/browser/c_resume_capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAI3C,oCAAoC;AACpC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,oDAAoD;AACpD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjE;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EACtD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAmClB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { sleepRandom } from './timing.js';
|
|
2
|
+
import { resumeHeight, setTempHeight } from './viewport_temp.js';
|
|
3
|
+
/** 截图文件名安全段(与 toolset/action 一致) */
|
|
4
|
+
export function safeResumeScreenshotFileBase(name) {
|
|
5
|
+
const t = name.replace(/[/\\?%*:|"<>]/g, '_').trim().slice(0, 64);
|
|
6
|
+
return t.length > 0 ? t : 'candidate';
|
|
7
|
+
}
|
|
8
|
+
/** 关闭含 `c-resume` iframe 的弹层(聊天「在线简历」与推荐「预览」共用)。 */
|
|
9
|
+
export async function closeCResumePanel(page) {
|
|
10
|
+
try {
|
|
11
|
+
await page.evaluate(() => {
|
|
12
|
+
const wraps = Array.from(document.querySelectorAll('.boss-popup__wrapper'));
|
|
13
|
+
for (const w of wraps) {
|
|
14
|
+
if (w.querySelector('iframe[src*="c-resume"], iframe[src*="frame/c-resume"]')) {
|
|
15
|
+
const c = w.querySelector('.boss-popup__close');
|
|
16
|
+
if (c) {
|
|
17
|
+
c.click();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const iframe = document.querySelector('iframe[src*="c-resume"], iframe[src*="frame/c-resume"]');
|
|
23
|
+
let node = iframe?.parentElement ?? null;
|
|
24
|
+
for (let i = 0; i < 12 && node; i++) {
|
|
25
|
+
const c = node.querySelector('.boss-popup__close, .drawer-close, .icon-close');
|
|
26
|
+
if (c) {
|
|
27
|
+
c.click();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
node = node.parentElement;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
await sleepRandom(200, 450);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
/* ignore */
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 在已出现 `c-resume` iframe 的页面上,对 iframe 整框截图并关闭弹层。
|
|
41
|
+
* `preOpenViewport` 为打开弹层前 `page.viewport()` 的快照(与在线简历截图一致)。
|
|
42
|
+
*/
|
|
43
|
+
export async function captureCResumeIframeToFile(page, preOpenViewport, absPath) {
|
|
44
|
+
try {
|
|
45
|
+
await setTempHeight(page, preOpenViewport);
|
|
46
|
+
await sleepRandom(100, 320);
|
|
47
|
+
const iframe = await page.$('iframe[src*="c-resume"], iframe[src*="frame/c-resume"]');
|
|
48
|
+
if (!iframe) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
await iframe.evaluate((el) => {
|
|
52
|
+
el.scrollIntoView({ block: 'start', inline: 'nearest' });
|
|
53
|
+
});
|
|
54
|
+
const box = await iframe.boundingBox();
|
|
55
|
+
if (!box) {
|
|
56
|
+
await iframe.dispose();
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
await iframe.screenshot({
|
|
61
|
+
path: absPath,
|
|
62
|
+
type: 'png',
|
|
63
|
+
captureBeyondViewport: true,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
await iframe.dispose();
|
|
68
|
+
}
|
|
69
|
+
await closeCResumePanel(page);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
await resumeHeight(page, preOpenViewport);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=c_resume_capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c_resume_capture.js","sourceRoot":"","sources":["../../src/browser/c_resume_capture.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/chat.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Page } from 'puppeteer-core';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
|
|
4
|
+
* 不主动导航到固定路由;具体业务页由调用方自行要求。
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function withBossSessionPage<T>(callback: (page: Page) => Promise<T>): Promise<T>;
|
|
7
7
|
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/browser/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/browser/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAsGpD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsD7F"}
|
package/dist/browser/chat.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { hideAgentOperatingIndicator, showAgentOperatingIndicator, } from './agent_operating_indicator.js';
|
|
1
2
|
import { ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage } from './browser_session.js';
|
|
2
3
|
import { CONTEXT_DESTROY_RETRY_MS } from './human_delay.js';
|
|
3
4
|
import { sleepRandom } from './timing.js';
|
|
4
5
|
const SHOULD_DISABLE_JS = process.env.BOSS_BROWSER_DISABLE_JS === 'true' || process.env.BOSS_BROWSER_DISABLE_JS === '1';
|
|
6
|
+
/** 设为 `1` / `true` 时不注入顶栏滚动提示(调试或截图对比用)。 */
|
|
7
|
+
const SKIP_AGENT_OPERATING_OVERLAY = process.env.BOSS_CLI_NO_AGENT_OVERLAY === '1' ||
|
|
8
|
+
process.env.BOSS_CLI_NO_AGENT_OVERLAY === 'true';
|
|
5
9
|
async function pickExistingPage(browser) {
|
|
6
10
|
const pages = (await browser.pages()).filter((p) => !p.isClosed());
|
|
7
11
|
if (pages.length === 0)
|
|
@@ -71,10 +75,10 @@ async function ensureMenuListStableAfterLoad(page) {
|
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
78
|
+
* 在已连接浏览器、且当前页为 Boss 已登录主壳(含侧栏 `.menu-list` 稳定)的前提下执行回调。
|
|
79
|
+
* 不主动导航到固定路由;具体业务页由调用方自行要求。
|
|
76
80
|
*/
|
|
77
|
-
export async function
|
|
81
|
+
export async function withBossSessionPage(callback) {
|
|
78
82
|
const isContextDestroyed = (e) => {
|
|
79
83
|
const msg = e instanceof Error ? e.message : String(e);
|
|
80
84
|
return (msg.includes('Execution context was destroyed') ||
|
|
@@ -100,7 +104,19 @@ export async function withChatPage(callback) {
|
|
|
100
104
|
await page.setJavaScriptEnabled(false);
|
|
101
105
|
}
|
|
102
106
|
await ensureMenuListStableAfterLoad(page);
|
|
103
|
-
|
|
107
|
+
if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
|
|
108
|
+
await showAgentOperatingIndicator(page).catch(() => {
|
|
109
|
+
/* 注入失败不阻断业务 */
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
return await callback(page);
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
if (!SHOULD_DISABLE_JS && !SKIP_AGENT_OPERATING_OVERLAY) {
|
|
117
|
+
await hideAgentOperatingIndicator(page);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
104
120
|
}
|
|
105
121
|
catch (e) {
|
|
106
122
|
lastErr = e;
|
package/dist/browser/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/browser/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/browser/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,11 @@ export declare const ONLINE_RESUME_IFRAME_APPEAR_MS: {
|
|
|
76
76
|
readonly min: 600;
|
|
77
77
|
readonly max: 1600;
|
|
78
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* 点击后等待 c-resume iframe 出现、或判定为付费墙弹层的上限(毫秒)。
|
|
81
|
+
* 仅在未出现付费墙时才会接近该时长;若先出现付费墙会提前结束(见 `waitForCResumeIframeOrPaywall`)。
|
|
82
|
+
*/
|
|
83
|
+
export declare const ONLINE_RESUME_IFRAME_WAIT_MAX_MS = 12000;
|
|
79
84
|
/** iframe 出现后等待简历区域渲染 */
|
|
80
85
|
export declare const ONLINE_RESUME_IFRAME_SETTLE_MS: {
|
|
81
86
|
readonly min: 1800;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human_delay.d.ts","sourceRoot":"","sources":["../../src/browser/human_delay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,iCAAiC;AACjC,eAAO,MAAM,mBAAmB;;;CAAoC,CAAC;AAErE,qBAAqB;AACrB,eAAO,MAAM,wBAAwB;;;CAAmC,CAAC;AAEzE,yBAAyB;AACzB,eAAO,MAAM,uBAAuB;;;CAAkC,CAAC;AAEvE,0BAA0B;AAC1B,eAAO,MAAM,4BAA4B;;;CAAmC,CAAC;AAE7E,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB;;;CAAiC,CAAC;AAEnE,qBAAqB;AACrB,eAAO,MAAM,kBAAkB;;;CAAmC,CAAC;AAEnE,mBAAmB;AACnB,eAAO,MAAM,YAAY;;;CAAkC,CAAC;AAE5D,uBAAuB;AACvB,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,gBAAgB;AAChB,eAAO,MAAM,mBAAmB;;;CAAkC,CAAC;AAEnE,cAAc;AACd,eAAO,MAAM,mBAAmB;;;CAAiC,CAAC;AAElE,oBAAoB;AACpB,eAAO,MAAM,kBAAkB;;;CAAiC,CAAC;AAEjE,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB;;;CAAkC,CAAC;AAEnE,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB;;;CAAoC,CAAC;AAEvE,yBAAyB;AACzB,eAAO,MAAM,2BAA2B;;;CAAmC,CAAC;AAE5E,6BAA6B;AAC7B,eAAO,MAAM,0BAA0B;;;CAAkC,CAAC;AAE1E,4BAA4B;AAC5B,eAAO,MAAM,8BAA8B;;;CAAmC,CAAC;AAE/E,yBAAyB;AACzB,eAAO,MAAM,8BAA8B;;;CAAoC,CAAC;AAEhF;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
1
|
+
{"version":3,"file":"human_delay.d.ts","sourceRoot":"","sources":["../../src/browser/human_delay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,iCAAiC;AACjC,eAAO,MAAM,mBAAmB;;;CAAoC,CAAC;AAErE,qBAAqB;AACrB,eAAO,MAAM,wBAAwB;;;CAAmC,CAAC;AAEzE,yBAAyB;AACzB,eAAO,MAAM,uBAAuB;;;CAAkC,CAAC;AAEvE,0BAA0B;AAC1B,eAAO,MAAM,4BAA4B;;;CAAmC,CAAC;AAE7E,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB;;;CAAiC,CAAC;AAEnE,qBAAqB;AACrB,eAAO,MAAM,kBAAkB;;;CAAmC,CAAC;AAEnE,mBAAmB;AACnB,eAAO,MAAM,YAAY;;;CAAkC,CAAC;AAE5D,uBAAuB;AACvB,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,gBAAgB;AAChB,eAAO,MAAM,mBAAmB;;;CAAkC,CAAC;AAEnE,cAAc;AACd,eAAO,MAAM,mBAAmB;;;CAAiC,CAAC;AAElE,oBAAoB;AACpB,eAAO,MAAM,kBAAkB;;;CAAiC,CAAC;AAEjE,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB;;;CAAkC,CAAC;AAEnE,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB;;;CAAoC,CAAC;AAEvE,yBAAyB;AACzB,eAAO,MAAM,2BAA2B;;;CAAmC,CAAC;AAE5E,6BAA6B;AAC7B,eAAO,MAAM,0BAA0B;;;CAAkC,CAAC;AAE1E,4BAA4B;AAC5B,eAAO,MAAM,8BAA8B;;;CAAmC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,yBAAyB;AACzB,eAAO,MAAM,8BAA8B;;;CAAoC,CAAC;AAEhF;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -31,6 +31,11 @@ export const CHAT_HISTORY_DIALOG_WAIT_MS = { min: 500, max: 1400 };
|
|
|
31
31
|
export const CHAT_HISTORY_TAB_SWITCH_MS = { min: 350, max: 900 };
|
|
32
32
|
/** 点击「在线简历」后等待 iframe 出现 */
|
|
33
33
|
export const ONLINE_RESUME_IFRAME_APPEAR_MS = { min: 600, max: 1600 };
|
|
34
|
+
/**
|
|
35
|
+
* 点击后等待 c-resume iframe 出现、或判定为付费墙弹层的上限(毫秒)。
|
|
36
|
+
* 仅在未出现付费墙时才会接近该时长;若先出现付费墙会提前结束(见 `waitForCResumeIframeOrPaywall`)。
|
|
37
|
+
*/
|
|
38
|
+
export const ONLINE_RESUME_IFRAME_WAIT_MAX_MS = 12_000;
|
|
34
39
|
/** iframe 出现后等待简历区域渲染 */
|
|
35
40
|
export const ONLINE_RESUME_IFRAME_SETTLE_MS = { min: 1800, max: 4200 };
|
|
36
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human_delay.js","sourceRoot":"","sources":["../../src/browser/human_delay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"human_delay.js","sourceRoot":"","sources":["../../src/browser/human_delay.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './timing.js';
|
|
5
5
|
export * from './human_delay.js';
|
|
6
|
+
export { hideAgentOperatingIndicator, showAgentOperatingIndicator, } from './agent_operating_indicator.js';
|
|
7
|
+
export { resumeHeight, setTempHeight, snapshotBossPageViewport, type BossViewportSnapshot, } from './viewport_temp.js';
|
|
6
8
|
export { connectBrowser, createPageCDPSession, defaultViewportFromEnv, LAUNCH_ARGS_ALLOW_ALL_CORS, LAUNCH_ARGS_LESS_AUTOMATION, type ConnectBrowserOptions, wasLastChromeLaunchHeadless, } from './cdp_browser.js';
|
|
7
9
|
export { detachBrowserSession, disconnectBrowserSession, ensureAndGetBrowser, ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, } from './browser_session.js';
|
|
8
10
|
export * from './auth.js';
|
|
9
|
-
export {
|
|
11
|
+
export { withBossSessionPage } from './chat.js';
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/browser/index.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './timing.js';
|
|
5
5
|
export * from './human_delay.js';
|
|
6
|
+
export { hideAgentOperatingIndicator, showAgentOperatingIndicator, } from './agent_operating_indicator.js';
|
|
7
|
+
export { resumeHeight, setTempHeight, snapshotBossPageViewport, } from './viewport_temp.js';
|
|
6
8
|
export { connectBrowser, createPageCDPSession, defaultViewportFromEnv, LAUNCH_ARGS_ALLOW_ALL_CORS, LAUNCH_ARGS_LESS_AUTOMATION, wasLastChromeLaunchHeadless, } from './cdp_browser.js';
|
|
7
9
|
export { detachBrowserSession, disconnectBrowserSession, ensureAndGetBrowser, ensureBrowserSession, getBrowserRef, getPageRef, setSessionPage, } from './browser_session.js';
|
|
8
10
|
export * from './auth.js';
|
|
9
|
-
export {
|
|
11
|
+
export { withBossSessionPage } from './chat.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAE3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAE3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Page } from 'puppeteer-core';
|
|
2
|
+
type ViewportState = Awaited<ReturnType<Page['viewport']>>;
|
|
3
|
+
export type BossViewportSnapshot = NonNullable<ViewportState>;
|
|
4
|
+
/**
|
|
5
|
+
* 供临时拉高/恢复视口使用。未设置 Puppeteer 固定视口时 `page.viewport()` 常为 `null`;
|
|
6
|
+
* 若此时仍用 {@link defaultViewportFromEnv}(如 1280×1200)恢复,会改掉用户真实窗口对应的布局视口。
|
|
7
|
+
* 在打开弹层/截图**之前**调用,用页面 `innerWidth`/`innerHeight` 作为恢复基准。
|
|
8
|
+
*/
|
|
9
|
+
export declare function snapshotBossPageViewport(page: Page): Promise<BossViewportSnapshot>;
|
|
10
|
+
/** 截图前临时拉高视口高度;`prev` 一般为进入流程前 `await page.viewport()` 的快照。 */
|
|
11
|
+
export declare function setTempHeight(page: Page, prev: ViewportState, heightPx?: number): Promise<void>;
|
|
12
|
+
/** 与 {@link setTempHeight} 配对,恢复截图前的视口。 */
|
|
13
|
+
export declare function resumeHeight(page: Page, prev: ViewportState): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=viewport_temp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport_temp.d.ts","sourceRoot":"","sources":["../../src/browser/viewport_temp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAM3C,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;AAwC9D;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2BxF;AAED,+DAA+D;AAC/D,wBAAsB,aAAa,CACjC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,aAAa,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,2CAA2C;AAC3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { defaultViewportFromEnv } from './cdp_browser.js';
|
|
2
|
+
/** 临时拉高视口时的默认高度(CSS px)。可用 `BOSS_RESUME_SCREENSHOT_VIEWPORT_HEIGHT` 覆盖。 */
|
|
3
|
+
const DEFAULT_TEMP_VIEWPORT_HEIGHT_PX = 5000;
|
|
4
|
+
function resolvedTempHeightPx(heightPx) {
|
|
5
|
+
if (heightPx !== undefined) {
|
|
6
|
+
return heightPx;
|
|
7
|
+
}
|
|
8
|
+
const envH = Number.parseInt(process.env.BOSS_RESUME_SCREENSHOT_VIEWPORT_HEIGHT?.trim() ?? '', 10);
|
|
9
|
+
return Number.isFinite(envH) && envH > 0 ? envH : DEFAULT_TEMP_VIEWPORT_HEIGHT_PX;
|
|
10
|
+
}
|
|
11
|
+
function dimensionsForTempHeight(prev, heightPx) {
|
|
12
|
+
const height = resolvedTempHeightPx(heightPx);
|
|
13
|
+
const base = defaultViewportFromEnv();
|
|
14
|
+
return {
|
|
15
|
+
width: prev?.width ?? base.width,
|
|
16
|
+
height,
|
|
17
|
+
deviceScaleFactor: prev?.deviceScaleFactor ?? 1,
|
|
18
|
+
isMobile: prev?.isMobile ?? false,
|
|
19
|
+
hasTouch: prev?.hasTouch ?? false,
|
|
20
|
+
isLandscape: prev?.isLandscape ?? false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function dimensionsAfterResume(prev) {
|
|
24
|
+
if (prev) {
|
|
25
|
+
return prev;
|
|
26
|
+
}
|
|
27
|
+
const d = defaultViewportFromEnv();
|
|
28
|
+
return {
|
|
29
|
+
width: d.width,
|
|
30
|
+
height: d.height,
|
|
31
|
+
deviceScaleFactor: 1,
|
|
32
|
+
isMobile: false,
|
|
33
|
+
hasTouch: false,
|
|
34
|
+
isLandscape: false,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 供临时拉高/恢复视口使用。未设置 Puppeteer 固定视口时 `page.viewport()` 常为 `null`;
|
|
39
|
+
* 若此时仍用 {@link defaultViewportFromEnv}(如 1280×1200)恢复,会改掉用户真实窗口对应的布局视口。
|
|
40
|
+
* 在打开弹层/截图**之前**调用,用页面 `innerWidth`/`innerHeight` 作为恢复基准。
|
|
41
|
+
*/
|
|
42
|
+
export async function snapshotBossPageViewport(page) {
|
|
43
|
+
const v = await page.viewport();
|
|
44
|
+
if (v) {
|
|
45
|
+
return {
|
|
46
|
+
width: v.width,
|
|
47
|
+
height: v.height,
|
|
48
|
+
deviceScaleFactor: v.deviceScaleFactor ?? 1,
|
|
49
|
+
isMobile: v.isMobile ?? false,
|
|
50
|
+
hasTouch: v.hasTouch ?? false,
|
|
51
|
+
isLandscape: v.isLandscape ?? false,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const dims = await page.evaluate(() => ({
|
|
55
|
+
width: window.innerWidth,
|
|
56
|
+
height: window.innerHeight,
|
|
57
|
+
dpr: window.devicePixelRatio || 1,
|
|
58
|
+
}));
|
|
59
|
+
const width = Math.max(320, Math.round(dims.width));
|
|
60
|
+
const height = Math.max(240, Math.round(dims.height));
|
|
61
|
+
return {
|
|
62
|
+
width,
|
|
63
|
+
height,
|
|
64
|
+
deviceScaleFactor: dims.dpr,
|
|
65
|
+
isMobile: false,
|
|
66
|
+
hasTouch: false,
|
|
67
|
+
isLandscape: width > height,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** 截图前临时拉高视口高度;`prev` 一般为进入流程前 `await page.viewport()` 的快照。 */
|
|
71
|
+
export async function setTempHeight(page, prev, heightPx) {
|
|
72
|
+
await page.setViewport(dimensionsForTempHeight(prev, heightPx));
|
|
73
|
+
}
|
|
74
|
+
/** 与 {@link setTempHeight} 配对,恢复截图前的视口。 */
|
|
75
|
+
export async function resumeHeight(page, prev) {
|
|
76
|
+
await page.setViewport(dimensionsAfterResume(prev));
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=viewport_temp.js.map
|