Commit Graph
7 Commits
Author SHA1 Message Date
admin fd9c902bcc chore(技能): 浏览器起法收敛为「会话后台任务」+ 关窗即停手;补索引与自测清理
- browser-harness/SKILL.md:§1 起法整段重写为「只允许这一种 —— 本会话的后台任务」(字面命令/
  为什么只许这一种/守卫语义/已知代价/起不来对照表);§3 补一条排障 —— 认进程命令行与它自己的日志,
  ⛔ 别信 pid 父链;**「删掉脚本」≠「停掉进程」**(依据 2026-10-10 实测:孤儿守卫在脚本已删后仍把浏览器拉回)
- browser-harness/agent-workspace/bh_chrome_keepalive.py:守卫语义分两档 —— Chrome 正常关窗(rc=0) ⇒ 停手退出;
  异常退出(rc≠0) ⇒ 重拉(依据:用户手关被无条件拉回,连关三次弹三次)
- session-mechanism/scripts/selftest.py:删掉重复定义的 `t_check_cooldown_no_pileup`(两段逐字相同);自测 PASS 109 / FAIL 0
- session-mechanism/references/humanizer-en/SKILL.md:与顶层 `humanizer` 技能同名冲突 ⇒ 去掉本包这份的注册
  (`user-invocable: false` + `disable-model-invocation: true`),6 个文件正文一字未动
- session-mechanism/references/01-文档索引.md:补登 `04-决策方法论.md`/`dsh-decision-method/`/`作业规矩/`/`humanizer-en/`
2026-10-10 23:25:36 +08:00
admin fe37c94096 browser-harness:把「Windows 起浏览器」的可抄三步写进正文,启动器随包
其他会话反馈(用户转述):「技能里写了,但说得不完整——这就是我反复踩坑的原因。
正文只写了『起实例 = 丢进常驻后台任务』,没给能直接抄的命令,也没说 Windows 上该用哪个启动器;
真正能跑的入口在技能外的另一个文件里;我照正文起,没做永不退出的循环 ⇒ 任务一结束 Chrome 被连坐。」

真因(读到代码才看清,两节自相矛盾):
- §1 说「要丢进常驻后台任务、且一直不退出」,§2 却直接给了一条 **同步** 的 `chrome.exe` 命令。
  照 §2 抄 ⇒ 父进程一退 Chrome 立刻死(实测 `WinError 10061`)。
- 起法真正落在**工作区根**的 `bh_chrome_keepalive.py`(`while True` 守端口那段),而那支脚本**不在技能包里**。

改动
- 新增 `agent-workspace/bh_chrome_keepalive.py`(随包的可复制启动器,行为沿用已实测那支):
  幂等(端口已在听 ⇒ 立刻退出)· `while True` 守子进程、退出就重起 · 僵死态**只记日志不自动重启**(保住现场)·
  起 Chrome 前清代理 env · `DETACHED|NO_WINDOW|NEW_PROCESS_GROUP` ·
  参数化 `--port/--chrome/--profile/--log/--proxy`(默认值与线上一致;`--proxy` 对应文档里那条 socks5)。
- `SKILL.md` §1 改写成**可直接抄的三步**:复制启动器 → `pythonw.exe` 起 → 计划任务兜(动作也用 pythonw、
  5 分钟一次、MultipleInstances=IgnoreNew;`schtasks.exe` 在本机黑名单 ⇒ 走 PowerShell ScheduledTasks);
  另给校验两条(netstat / curl --noproxy)。
- `SKILL.md` §2 加前置说明:那条 `chrome.exe` 是**启动器脚本内部的那一步**,用途是看懂与排障;
  并补 `--proxy` 的用法。
- 顶部那颗「起实例」子弹由「细节见 §1,本处不复述」改成「三步见 §1」——**从"叮嘱"改成"给命令"**。
- 表述按 2026-10-09 的「一律用肯定表述」写:先写要什么(永不退出的循环 / 保住现场),
  把踩过的坑放括号里当依据;僵死态那两条由「别把 A 当成 B」改成正向判据「两条都过才叫可用」。

验证
- `--help` 正常;`--chrome Z:/不存在` ⇒ rc=2 且不起浏览器(守卫)。
- 真机幂等:9223 正在听 ⇒ 跑它 rc=0、日志 `port 9223 already listening ⇒ exit (idempotent)`、端口数不变(没新起浏览器)。
- ⚠️ 已知不一致(本次不改,见次日报告):contentm_agent 工作区根的部署副本与 `tmp/bh_keep_chrome.py`
  仍是旧的非参数化版本;本次只把**源**落进技能包。
2026-10-10 16:26:18 +08:00
admin c36a3f4a50 browser-harness 第一屏:把「起实例要丢后台任务」提上来(用户点破「每会开浏览器都要错一次」)
用户原话:「后台任务开启 浏览器,这个是不是也要写入规则,每会开浏览器都要错一次」。

核实结论:**规则本来就写了** ——「### 1. 🔴 浏览器要由常驻后台任务开着」写得很细(沙箱连带杀子进程、
同步调用起的会立刻死、做法是常驻任务守端口)。**问题在位置**:它挂在
「## 用 browser-harness 调 AI 工具(ChatGPT 等)的提问方法」下面,标题把适用范围限成了"调 AI 工具"
⇒ 干别的活(如③段闸门取证)按目录根本翻不到 ⇒ 每次重踩。本轮又踩一次:用同步方式起实例,
`netstat` 查不到 9223、`curl` 无响应。

改法(两处):
1、第一屏「本机(用户明令)」段加 🔴🔴 一条 —— 起实例=丢进常驻后台任务,⛔ 别在同步调用里起;
   写明症状(`netstat` 查不到 9223 / `curl` 报 `WinError 10061`)与做法,细节指向 §1,⛔ 不复述。
2、顺带修一处**上轮编辑留下的结构错位**:`⇒ 必须起独立实例:BU_CDP_URL=…` 原属
   「⛔ 不附着用户日常 Chrome」那条的收尾,上轮被接到了"一类任务一个标签"条下面 ⇒ 已归位。
2026-10-09 07:20:03 +08:00
admin 4ae1d0e79e browser-harness:补「僵死态」的识别与处置(用户选 B)
用户令 B:⛔ 不动保活脚本,只把僵死态的识别写进常驻实例那节的排查里。

- 位置:「🔴 浏览器要由常驻后台任务开着」那节末尾(讲的就是那个常驻实例的健康)
- 僵死态定义:**端口不应答、进程还活着**;判据**两条一起看**(netstat 无 LISTENING + tasklist 仍有那个 pid)
- 处置:**只能重启实例**,⛔ 不在原地反复重试连接
- 记明**保活脚本兜不住它**:`bh_keep_chrome.py` 那类只做 socket 探端口,对僵死态既不判也不重启
  (实测 2026-10-09 `06:56:11 port not answering (pid alive=True)` → `07:06:49` 进程才退出)

背景:2026-10-09 早上实例被反复开标签堆到僵死,用户手动关掉全部会话;同轮已加严标签纪律(见 `b7ba89d`)。
2026-10-09 07:19:15 +08:00
admin b7ba89dadc browser-harness:标签纪律从「一个页面」加严到「一类任务只开一个并复用」(用户 10-09 令)
用户原话:「一类任务只允许 开一个标签页并复用,禁止反复开标签页」。
起因:2026-10-09 早上实测一次**整机卡死**,用户手动关掉全部会话。

现场读数(保活日志 E:/ProgramData/AIProject/contentm_agent/tmp/_bh_chrome.log):
- `06:56:11 port 9223 not answering (pid alive=True)` —— 端口不应答、进程却还活着(僵死态)
- 直到 `07:06:49 chrome exited ⇒ relaunch` 才退出
- ⚠️ 保活脚本 `bh_keep_chrome.py` 只看端口 ⇒ 这种僵死态它查不出、也救不回

改法(两处,单一可信源):
1、第 30 行那条**升级**为「一类任务只开一个标签页并复用,⛔ 禁止反复开」——
   补进卡死实测读数,并给出「一类任务」的定义(同一个原型/同一轮站点调研/同一批数据抓取),
   复用清单在原五条基础上加一条「换到同任务的另一个页面 ⇒ 也优先在同一标签里 goto_url()」。
2、第一屏「本机(用户明令)」段**加一条指针**(🔴🔴 两级),只讲严重性并指向上面那条,⛔ 不复述细则。
2026-10-09 07:11:22 +08:00
admin 44d42b0943 browser-harness:补两条浏览器复用纪律(用户当场点破)+ 入库积压的「调 AI 工具提问方法」
- 🔴 先探测、能复用就复用:动手第一件事查 9223 上有没有已在跑的实例,
  有就直接连(netstat / curl /json/version 两种探法),⛔ 不再起第二个。
  专治「为了量一次尺寸就另起一个 headless 实例」这类小活
  (用户原话:「为什么要重新开浏览器,先检查之前是否开过浏览能否复用」)
- 🔴 一个页面只开一个标签:同一页面全程一个标签,换路由改 hash、换视口走 Emulation,
  只有并排对比两个不同页面才开第二个、用完立刻关;收工前 list_tabs() 复核,
  不给自己留尾巴、也不关别人的页
  (用户原话:「后续调试网页 一个页面开一个标签就行了不要反复开」)
- ⛔ 别自建取数通道:要 DOM 数值就用 js(...),别为「量一个高度」另写脚本去起 Chrome

同文件另有 2026-10-07 定案的「用 browser-harness 调 AI 工具(ChatGPT 等)的提问方法」一节,
一直是未提交状态,随本次一并入库(常驻后台任务守端口、独立实例 9223、profile 复用保登录态)。
2026-10-08 22:22:01 +08:00
admin 777f7fe5d0 重开仓库内容:改推五个技能(browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)
按授权清空原有内容后重新提交(原 oil-ui-pro 一并移出,可从历史恢复)。
browser-harness 剔除 .venv 等运行环境;根 .gitignore 补记 .venv/ 与 node_modules/。
2026-10-07 16:06:02 +08:00