前言¶
在 DSH 里跑智能体时,专用 Edge(CDP 9227)往往会不断打开页面做检索、登录或预览。窗口和标签页一多,内存和焦点都被占满,手动关页又打断调试节奏。常见做法是凭习惯偶尔清一批,但很难稳定遵守「保留正在看的、刚开的、命中规则的」这类约束。
下面介绍社区插件 dsh-browser-tabs(维护者 0changandui0,分类:客户端)。它在标签页或单窗数量超过可配置上限时,按固定优先级自动关闭闲置、重复、报错和最老的页面,并通过设置页提供阈值、预演与手动清理;只关标签页,不关浏览器窗口。
这是什么¶
dsh-browser-tabs 是 DSH 的浏览器标签页管家:面向 DSH 专用浏览器,通过 CDP 连接 http://127.0.0.1:9227,在后台周期性检查标签数量,超限后分批关闭,同时保护正在使用、刚打开、每窗最新以及命中保留正则的页面。
插件版本在仓库 package.json 中为 0.2.0,许可证 MIT。社区目录页:https://www.skillhub.cn/plugins/0changandui0/dsh-browser-tabs;源码与说明:https://github.com/0changandui0/dsh-browser-tabs。SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,可按需从市场或 GitHub 安装。
核心功能¶
自动清理策略¶
默认每 30 秒(intervalMs)巡检一次;两次真正关闭之间至少间隔 90 秒(cooldownMs)。满足以下任一条件即视为超限:
- 单个窗口标签数超过
maxTabsPerWindow(默认 8) - 全部窗口标签合计超过
maxTabsTotal(默认 12)
超限后按顺序挑选关闭对象,每轮最多 maxClosePerRun(默认 3)个:
- 空白页 / 新标签页(如
about:blank、edge://newtab) - 报错页(含
error.html、chrome-error、/404) - 重复 URL(同一地址多开时只留一份)
- 最老的普通页
以下情况默认不关闭:
- 页面可见或有焦点(
document.visibilityState、document.hasFocus());读不到可见性时按「正在用」保守处理 - 2 分钟内新开的标签(
minAgeMs,默认 120000) - 每个窗口保留最新的
keepRecentPerWindow个(默认 1) - 命中
keepPatterns的 URL(出厂默认含抖音推荐流douyin.com/?recommend=1) - 每个窗口至少保留
minTabsPerWindow个(默认 1) - 浏览器服务在
activeGuardMs(默认 120 秒)内仍有操作(依据$DSH_HOME/browser-service/ops.jsonl的 mtime)时,自动清理让路 - 窗口最小化时不再整窗保护:仍保留有焦点、最新及至少 1 个标签;后台自动化在 120 秒内仍有操作时同样让路
closeExtraWindows 默认为 false,当前仅预留配置,不会自动关多余窗口;maxWindows 同样只作配置保留。
两个工具¶
browser_tabs_status:只读。查看当前标签页/窗口数量、是否超限,以及每个页面被保留的原因。browser_tabs_clean:默认dryRun=true,只预演不关闭;dryRun=false才会真正关标签。force=true可忽略「浏览器刚被操作过」的保护。手动清理不受autoClose和冷却时间限制。
设置页¶
路径:设置 → 浏览器标签页。页面上可查看当前标签页/窗口数、是否超限、各页保留原因,并修改:
- 自动清理总开关、巡检时是否实际关闭(
enabled、autoClose) - 巡检间隔、清理冷却、活跃让路时间窗
- 每窗口/合计上限、每轮最多关闭数、新标签保护时长、每窗保留最新个数
- 保留正则(一行一个)
「保存设置」写入 $DSH_HOME/browser-tabs/settings.json 并立即重设定时器;该文件优先级高于 cordis.patch.yml 出厂默认。「预演一次」只计算不关闭;「立即清理」执行前会再次确认。手动清理默认先预演,不会一按就关。
配置与数据文件¶
常用配置项(默认值在 cordis.patch.yml,设置页保存项在 settings.json 且优先级更高):
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true | 总开关 |
autoClose |
true | false 时定时器只看不关,仅手动工具可关 |
cdpUrl |
http://127.0.0.1:9227 | DSH 浏览器调试口 |
maxTabsPerWindow |
8 | 单窗口上限 |
maxTabsTotal |
12 | 全部窗口合计上限 |
maxClosePerRun |
3 | 每轮最多关闭数 |
minAgeMs |
120000 | 新标签保护期 |
keepRecentPerWindow |
1 | 每窗口保留最新个数 |
keepPatterns |
含抖音推荐流 | 正则数组,命中则不关 |
intervalMs / cooldownMs |
30000 / 90000 | 巡检间隔 / 关闭冷却 |
activeGuardMs |
120000 | 浏览器服务活跃让路时间窗 |
数据目录:$DSH_HOME/browser-tabs/(示例路径 D:\dsh-data\browser-tabs),含 state.json(标签首次出现时间、清理统计)、history.jsonl(真实关闭记录)、settings.json、boot.log(加载确认)。
安装与启用¶
从插件市场:打开 设置 → 插件市场,搜索「浏览器标签页」或 dsh-browser-tabs。
从 GitHub 安装(命令来自仓库 README):
dsh plugin --profile desktop add github:0changandui0/dsh-browser-tabs
装完后将 dsh-browser-tabs 加入 profile 的 dsh.profile.bundles,热重载配置即可;设置页位于 设置 → 浏览器标签页。
临时关闭:在 cordis.patch.yml 中将 enabled 或 autoClose 设为 false 并保存。彻底卸载:从 dsh.profile.bundles 移除该包名,并删除依赖与 $DSH_HOME/browser-tabs/ 目录。
典型用法¶
- 日常依赖自动巡检:保持
enabled与autoClose为 true,按默认单窗 8、合计 12 运行;智能体频繁开页时由插件按优先级收尾。 - 调阈值与保留规则:在设置页改
maxTabsPerWindow、maxTabsTotal,或在保留正则中追加一行 pattern(例如固定监控页、文档页),保存后立即生效。 - 先看再关:在设置页点「预演一次」,或在工具侧调用
browser_tabs_clean且保持dryRun=true,确认将被关闭的标签列表后再设dryRun=false执行。 - 排查状态:调用
browser_tabs_status查看是否超限,以及每个标签因何被保留,便于与智能体开页行为对照。
适用场景与注意¶
适合长期在 DSH desktop profile 中使用专用浏览器、且标签页容易堆积的开发者或智能体工作流。插件以当前 DSH 进程权限运行,会通过 CDP 关闭标签;安装前应阅读源码与 MIT 许可证,确认 keepPatterns 与上限符合自己的页面习惯。
若浏览器在 activeGuardMs 内仍有自动化操作,自动清理会主动让路,避免与正在进行的任务冲突;需要立即清理时可用手动工具并视情况使用 force=true,仍建议先预演。
结尾¶
dsh-browser-tabs 把「标签过多时的关闭顺序」和「正在用/刚开/规则保留」写进可配置策略,并给出设置页与只读/预演工具,减少手动扫关标签的负担。进一步了解可访问社区目录页 https://www.skillhub.cn/plugins/0changandui0/dsh-browser-tabs 与 GitHub 仓库 https://github.com/0changandui0/dsh-browser-tabs。