lasso-mcp 1.28.0 → 1.29.1

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 (52) hide show
  1. package/README.en.md +4 -2
  2. package/README.md +4 -2
  3. package/dist/browse/HighRiskGate.d.ts +4 -3
  4. package/dist/browse/HighRiskGate.d.ts.map +1 -1
  5. package/dist/browse/HighRiskGate.js +13 -6
  6. package/dist/browse/HighRiskGate.js.map +1 -1
  7. package/dist/browse/cdp-actions.d.ts +15 -0
  8. package/dist/browse/cdp-actions.d.ts.map +1 -1
  9. package/dist/browse/cdp-actions.js +21 -0
  10. package/dist/browse/cdp-actions.js.map +1 -1
  11. package/dist/browse/input-guard.d.ts +98 -0
  12. package/dist/browse/input-guard.d.ts.map +1 -0
  13. package/dist/browse/input-guard.js +198 -0
  14. package/dist/browse/input-guard.js.map +1 -0
  15. package/dist/browse/steps-types.d.ts +5 -0
  16. package/dist/browse/steps-types.d.ts.map +1 -1
  17. package/dist/channels/BrowseChannel.d.ts +11 -0
  18. package/dist/channels/BrowseChannel.d.ts.map +1 -1
  19. package/dist/channels/BrowseChannel.js +192 -3
  20. package/dist/channels/BrowseChannel.js.map +1 -1
  21. package/dist/doctor/doctor.d.ts +1 -1
  22. package/dist/doctor/doctor.js +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/tools/browse.d.ts +8 -0
  25. package/dist/tools/browse.d.ts.map +1 -1
  26. package/dist/tools/browse.js +17 -2
  27. package/dist/tools/browse.js.map +1 -1
  28. package/dist/tools/descriptions.d.ts.map +1 -1
  29. package/dist/tools/descriptions.js +17 -5
  30. package/dist/tools/descriptions.js.map +1 -1
  31. package/dist/types.d.ts +22 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/doc/README.md +12 -4
  34. package/doc/bugs/11-2026-09-17-/350/276/223/345/205/245/344/277/235/346/212/244/345/261/202/350/257/201/344/274/252-type/345/216/237/350/257/255/350/241/245/351/275/220/344/270/216/350/257/232/345/256/236/344/277/241/345/217/267/345/206/263/350/256/256.md +200 -0
  35. package/doc/bugs//345/256/236/346/234/272/346/212/245/345/221/212-20260917/344/270/213/345/215/210-/350/257/201/346/215/256-01-/351/246/226/351/241/265/346/227/240/351/252/214/350/257/201/347/240/201.png +0 -0
  36. package/doc/bugs//345/256/236/346/234/272/346/212/245/345/221/212-20260917/344/270/213/345/215/210-/350/257/201/346/215/256-02-/345/200/274/350/256/276/345/205/245/345/220/216-VLM/347/241/256/350/256/244/345/226/265/350/231/216.png +0 -0
  37. package/doc/bugs//345/256/236/346/234/272/346/212/245/345/221/212-20260917/344/270/213/345/215/210-/350/257/201/346/215/256-03-/347/211/251/347/220/206/347/202/271/345/207/273/345/220/216-/345/200/274/350/242/253/346/270/205.png +0 -0
  38. package/doc/bugs//345/256/236/346/234/272/346/212/245/345/221/212-20260917/344/270/213/345/215/210-/350/257/201/346/215/256-04-/345/205/250/351/223/276/351/207/215/350/275/275/345/220/216-/345/233/236/345/210/260/345/210/235/345/247/213/346/200/201.png +0 -0
  39. package/doc/bugs//345/256/236/346/234/272/346/212/245/345/221/212-20260917/344/270/213/345/215/210-/350/276/223/345/205/245/344/277/235/346/212/244/345/261/202/346/213/246/346/210/252-/346/234/252/345/210/260/350/276/276/346/273/221/345/235/227-v1.28.0.md +165 -0
  40. package/doc/governance/13-/345/220/210/346/210/220/350/276/223/345/205/245/344/274/246/347/220/206/350/276/271/347/225/214/345/243/260/346/230/216.md +69 -0
  41. package/doc/usage/02-TROUBLESHOOTING.md +34 -0
  42. package/package.json +1 -1
  43. package/src/browse/HighRiskGate.ts +13 -6
  44. package/src/browse/cdp-actions.ts +21 -0
  45. package/src/browse/input-guard.ts +213 -0
  46. package/src/browse/steps-types.ts +5 -0
  47. package/src/channels/BrowseChannel.ts +237 -4
  48. package/src/doctor/doctor.ts +1 -1
  49. package/src/index.ts +1 -1
  50. package/src/tools/browse.ts +18 -2
  51. package/src/tools/descriptions.ts +17 -5
  52. package/src/types.ts +18 -0
package/README.en.md CHANGED
@@ -212,7 +212,7 @@ Goes to the Internet Archive (Wayback Machine) to find the last archived copy of
212
212
 
213
213
  ## Install
214
214
 
215
- **Current version v1.28.0** (changelog in the collapsed block at the end of this section).
215
+ **Current version v1.29.1** (changelog in the collapsed block at the end of this section).
216
216
 
217
217
  Prerequisites: Node.js ≥ 20 + Claude Code (or any MCP-capable client).
218
218
 
@@ -227,8 +227,10 @@ Restart Claude Code → `/mcp` → `lasso ✓ Connected`. **That's the one line
227
227
  **Deterministic render browser for other AI tools (render tier)**: if you use rendering tools like media-gen-mcp that demand "same input → same pixels", one line after installing lasso — `npx -y lasso-mcp render-chrome --ensure` — brings up a deterministic headless Chrome on port 9224 (frozen flag snapshot + isolated temp profile) and prints the `wsEndpoint` for the consumer to attach to; **the browser keeps running even if the consumer process is SIGKILLed** (lifecycle owned by lasso), and it is idle-reaped after 10 minutes with its profile cleaned up (tunable via `LASSO_RENDER_IDLE_MS`). Companions: `render-chrome --status` introspection / `--stop` (honors `LASSO_RENDER_PORT`: an explicit valid port stops only that port, unset = all render records, an invalid value exits 1; global teardown remains `chrome-stop --modes render`) / `render-chrome doctor [--clean]` orphan & stale-profile sweep (dry-run by default; honors `LASSO_RENDER_PORT` like `--stop`: an explicit valid port scopes the orphan scan, unset = full scan, an invalid value exits 1; in-use instances with a touch heartbeat within 10 minutes are exempt from orphan judgment). **Multiple parallel acceptance agents on one machine** (whose independent teardown commands would kill each other's instances) need a three-env namespace: `LASSO_RENDER_PORT` + `LASSO_LAUNCHED_CHROMES_PATH` + `LASSO_RENDER_GUARDIAN_PID_PATH` — with all three set, parallel agents are mutually invisible; see the full recipe and teardown discipline in [doc/渲染档-并行验收隔离配方.md](doc/渲染档-并行验收隔离配方.md) (Chinese).
228
228
 
229
229
  <details>
230
- <summary>📋 Changelog (v1.8 → v1.28.0 — click to see what each version changed)</summary>
230
+ <summary>📋 Changelog (v1.8 → v1.29.1 — click to see what each version changed)</summary>
231
231
 
232
+ - **v1.29.1**: release fix — v1.29.0's npm package carried a stale dist (published without rebuilding after the version bump, so `doctor` reported 1.28.0); this version rebuilds before publishing, zero content change. Lesson locked in: after the version triple, always `npm run build` before publish.
233
+ - **v1.29.0**: input-primitive completion + honest-signal batch — the "input guard layer" falsification re-analysis, doc/bugs/11) — the afternoon field report's P0 verdict ("tm.aliyun.com's input guard instantly clears programmatically set values") was **falsified** by a controlled white-box re-analysis: the real mechanism is the **state-integrity semantics of a React 16/17 controlled component** (script writes don't fire onChange → on blur/commit the framework rewrites the DOM back to the committed state — the value survives until blur, it does not vanish in milliseconds; the "six attacks all failed" was an observation-surface error: the submit went through `window.open` into a NEW tab, the original page's URL never changes → `wait url_contains` is structurally blind, while the uid-path fill completed a real search end-to-end that same day). Deliverables: (1) **`type` / `press` input-primitive completion** (the missing third of the click/fill/type triad): `action:"type"` + `selectors:{<uid|ref>:<text>}` — per-key dispatch through the CDP `Input.dispatchKeyEvent` **trusted input pipeline** (marked `isTrusted:true` by the browser, enters the framework input pipeline, React onChange fires normally, survives blur; same tier as Playwright's `page.keyboard.type()`; long texts are also per-key — covering the fault line where fill's uid path flips to an untrusted JS bulk-set path at ≥100 chars); **append semantics** (= Playwright `page.type`; fill replaces); ref-path focus-receipt failure reports `type_focus_failed` (didnt — no guessing); `action:"press"` + `key:"Enter"` (modifiers split + failure-release guaranteed upstream) — implemented as mappings onto the locked upstream `type_text`/`press_key` tools (no direct CDP); submitKey is NOT exposed (submissions go explicitly through a follow-up press/click — a two-step chain is more auditable). (2) **`input_guard_suspected` honest signal** (advisory, eviction-sentinel paradigm): the ref fill/type path embeds three probes (non-native value setter installed / ~250ms in-page readback mismatch / React tracker divergence) — a hit attaches the signal + a hint with three legal exits (switch to the trusted type pipeline / re-extract for the snapshot-uid path / ask the user to type physically); **signal only, NEVER auto-reroutes** (no automatic primitive switch/retry/channel change), probes are pure reads with zero side effects (synthesizing blur for probing is forbidden). (3) **wait-timeout observation-surface teaching**: `wait_timeout` errors gain a window.open new-tab teaching sentence (the original page's URL never changes — this timeout shape now carries its attribution clue) + TROUBLESHOOTING §2.19 (including the `navigate → wait{selector} → fill → press/click` chain recipe; the fill-timing-race hypothesis was falsified with no reproducer — no defensive code written). (4) **no_reload semantics clarification**: the describe gains the "this is NOT a skip-navigation flag" clause (substantially different URLs always navigate; identical URLs never navigate at all — that's url rule 2, unrelated to this flag) + §2.20 four-row behavior matrix + a semantics-pinning spec (description and behavior now pinned together by tests). (5) **governance/13 synthetic-input ethics boundary declaration**: the sanctioned face = standard primitives + honest signals + the trust-ladder doc; **Rejected-by-design** = keystroke-rhythm randomization/human-mimicry delays, `_valueTracker` spoofing, accessor un-hooking, isTrusted forgery, and every wrapper that "makes fill look like human typing" (deceiving site-side mechanisms ≠ input capability; only an explicit, item-by-item user ruling can overturn it). Stance: **the wall is there and we tell you** — only two legal ways through (switch to the trusted primitive, or ask the user to type physically); lasso never decides to attack the wall for you. (6) HighRiskGate gains the `type` branch: RTE-blacklisted elements block type exactly like fill (closing the rename-bypass gap; press has no DOM target and stays evaluate-tier unblocked, documented). (7) Upstream-contract dead list gains `type_text`/`press_key` (P10 pre-gate false-red fix) + explicit description budget-cap re-baselining (fleet 59,850 / HEADLESS 13,900 / L2 2,300→2,450 — §5.1-3 single-topic cap-raise discipline). (8) Local input-guard fixture regression (opt-in `LASSO_TEST_INPUT_GUARD=1`, bound to 127.0.0.1): all three mechanism families check-typed + type/uid paths verified to survive blur.
232
234
  - **v1.28.0**: the kill-silent-failure batch after the cgEvent delivery "break" was falsified (driven by the trademark-site slider field report, doc/bugs/10) — white-box verdict: the HID delivery chain is intact (a controlled counter page produced a full `isTrusted:true` sequence); the real culprit is concurrent physical input racing plus a blind judgment method, so the deliverable is not "fix delivery" but "make the failure visible": ① **landing receipts for coordinate mouse actions**: `desktop act` click/move/drag (scroll with x,y likewise) each echo `cursor_after{x,y}` + `landed` (the real cursor is read back after the final post, 0.5pt tolerance) — **not landed → that action gets `ok:false` + `cgevent_no_landing`** (previously "API worked, zero effect" was silent); ② **physical-input racing warning**: dispatch-level `physical_input.attribution` (idle/synthetic/physical) — `physical` = a mouse event later than our own synthetic post was detected (the user is physically operating; just resend — worked never flips on this, signal not policy); ③ **honest TCC probing**: macOS<15 no longer fakes "dimension absent" — the raw IOHID PostEvent probe reports four states (Undefined is a real third state and delivery is proven to work under it; per-process attribution recorded honestly), **gate semantics unchanged** (<15 never rejects on IOHID); ④ **doctor #22 delivery selftest** (opt-in `LASSO_DOCTOR_INPUT_SELFTEST=1`: moves your cursor 7px and restores it — off by default, agents cannot trigger it; cursor read-back judgment, unambiguous); ⑤ **desktop screenshot writes to disk by default** (browse-channel parity: `/tmp/lasso-screenshot-<uuid>.png`, path only — previously a full-screen 860KB base64 blob blew the token budget; `inline_base64:true` restores the old behavior). Ethical red line: synthetic input only gets "detect and report honestly" — no capability to bypass user input monitoring is introduced. Rejected: PostToPid targeting (SOTA counter-evidence: PID-targeted mouse events are silently dropped by AppKit) / in-act pixel diff / in-act auto-retry.
233
235
  - **v1.28.0**: bugs/10 browse/docs half — evaluate return-value contract + anti-bot detection-surface docs batch, BUG-10, driven by the trademark-site slider campaign, doc/bugs/10) — (1) 🔴 **corrective behavior change (the silent-wrong-value face)**: `evaluate`'s `options.js` gains two expression routes — previously a **single-line bare expression** (`JSON.stringify({...})`, `document.title`) got wrapped as a statement body, the expression's value swallowed by the statement → **always undefined**; a **parenthesized expression** (`({a:1})`) got passed through as a function expression, upstream evaluating it to an object → **`fn is not a function`** (real-machine report P2: a hidden contract that took two trial-and-error calls to discover). Both shapes are now auto-wrapped as expression bodies and their **VALUE is returned**; the three existing forms (function expression passthrough / IIFE wrapping / statement body) are byte-identical (statement bodies still require an explicit `return`); (2) **errors as teaching**: a statement body returning undefined now echoes `data.js_form:"statement_body"` + `js_form_hint` (one sentence on WHY it is undefined and how to fix it); upstream `is not a function` errors get the same hint appended; (3) the tool description's evaluate section gains a RETURNS contract clause ("THREE forms … All work" was false for expression shapes — that description gap WAS P2); (4) `browse_headless`/`browse_headed` descriptions gain a "**click worked ≠ submission accepted**" NOTE + TROUBLESHOOTING §2.18 (tm.aliyun.com layered interception profile: home layer now open / submission layer silently swallowed on headless, slider captcha on headed — verify submissions with `wait url_contains`/`text` or `extract`, never trust the act receipt). This entry is part 2 (the browse/docs half); the same batch's part 1 (rust/desktop half: cgEvent delivery receipts / doctor self-test / desktop screenshots to disk) is the v1.28.0 entry above.
234
236
  - **v1.27.1**: tool-examples batch (consumer-facing self-description) — fixes "callers learn by trial and error": previously only 1 of 18 tools carried a copyable example, the rest were rules-only prose (proven by seven consumer reports). ① **13 call examples landed in tool descriptions** (visible end-to-end via `tools/list`, every one reverse-engineered from a real trial-and-error incident); ② **errors as teaching** — high-frequency errors embed the correct call shape (Rust "did you mean" style); ③ full schema `.describe()` coverage (previously zero field descriptions repo-wide); ④ **four anti-drift gates** — verbatim anchor / consent-prefix anchor / call-shape⊆schema / budget cap. Pure interface self-description, zero behavior change; blind-test 8/8 + 9/9 mutations killed. System doc in doc/usage/04.
package/README.md CHANGED
@@ -221,7 +221,7 @@ macOS 上能控 Finder / Mail / Safari / Notes / 系统设置等任何原生 app
221
221
 
222
222
  ## 安装
223
223
 
224
- **当前版本 v1.28.0**(更新日志见本节末尾折叠块)。
224
+ **当前版本 v1.29.1**(更新日志见本节末尾折叠块)。
225
225
 
226
226
  前提:Node.js ≥ 20 + Claude Code(或任何支持 MCP 的客户端)。
227
227
 
@@ -236,8 +236,10 @@ claude mcp add lasso -- npx -y lasso-mcp
236
236
  **给其它 AI 工具当确定性渲染浏览器(渲染档)**:如果你在用 media-gen-mcp 这类要求「同一输入必须产出同一像素」的渲染工具,装好 lasso 后只需一行 `npx -y lasso-mcp render-chrome --ensure`——它会在 9224 端口拉起一个确定性 headless Chrome(冻结旗标快照 + 独立临时 profile),输出消费方直连用的 `wsEndpoint`;**消费方进程被强杀浏览器也照常存活**(生命周期归属 lasso),空闲 10 分钟自动回收并连带清理 profile(`LASSO_RENDER_IDLE_MS` 可调)。配套:`render-chrome --status` 自省 / `--stop` 收尾(认 `LASSO_RENDER_PORT`:显式设 port 只收该 port,未设=全部 render 记录,非法值 exit 1;全局收口仍可用 `chrome-stop --modes render`)/ `render-chrome doctor [--clean]` 孤儿与陈年 profile 清理(默认只报告;认 `LASSO_RENDER_PORT`,同 `--stop`:显式设 port 只判该 port,未设=全扫,非法值 exit 1;touch 心跳 10 分钟内的在用实例豁免不判孤儿)。**同机多 agent 并行验收**(多个 agent 各自清场会互杀对方实例)需配三 env 契命名空间隔离:`LASSO_RENDER_PORT` + `LASSO_LAUNCHED_CHROMES_PATH` + `LASSO_RENDER_GUARDIAN_PID_PATH`,配齐后并行互不可见,配方与清场纪律见 [doc/渲染档-并行验收隔离配方.md](doc/渲染档-并行验收隔离配方.md)。
237
237
 
238
238
  <details>
239
- <summary>📋 更新日志(v1.8 → v1.28.0,点开看每版改了什么)</summary>
239
+ <summary>📋 更新日志(v1.8 → v1.29.1,点开看每版改了什么)</summary>
240
240
 
241
+ - **v1.29.1**:发版修正——v1.29.0 的 npm 包携带了旧 dist(版本转正后未重 build 即 publish,`doctor` 自报 1.28.0);本版重 build 后发布,内容零变化。教训固化:版本三处改后必须 `npm run build` 再 publish。
242
+ - **v1.29.0**(bug11:输入原语补齐 + 诚实信号批——「输入保护层」证伪重析,doc/bugs/11)——下午实机报告判定的 P0「tm.aliyun.com 输入保护层瞬间清除程序化设值」经白盒受控重析**证伪**:真机理是 React 16/17 受控组件的**状态完整性语义**(脚本写入不触发 onChange → blur/commit 时框架把 DOM 回写为已提交状态——值存活到 blur,非「毫秒级消失」;「六路全败」实为观察面错误:submit 走 `window.open` 开新 tab、原页 URL 永不变 → `wait url_contains` 结构性失明,而 uid 路 fill 当天全链路完成真实搜索)。本批交付物:① **`type` / `press` 输入原语补齐**(click/fill/type 三原语的第三缺):`action:"type"` + `selectors:{<uid|ref>:<text>}`——逐字派发走 CDP `Input.dispatchKeyEvent` **可信输入管道**(浏览器标记 `isTrusted:true`,进框架输入管道、React onChange 正常触发、blur 后存活;与 Playwright `page.keyboard.type()` 同级;长文本亦逐字——覆盖 fill uid 路 ≥100 字符翻转进 JS 批量设值不可信管道的断层);**追加语义**(=Playwright `page.type`,fill 才是替换);ref 路 focus 回执失败显式报 `type_focus_failed`(didnt 档,不猜);`action:"press"` + `key:"Enter"`(修饰键由上游拆解 + 失败释放保证)——实现为对已锁定上游 `type_text`/`press_key` 的映射(禁 CDP 直连);不暴露 submitKey(提交显式走后续 press/click,两步链更可审计)。② **`input_guard_suspected` 诚实信号**(advisory,驱逐哨兵同范式):ref 路填充/键入内嵌三探针(value setter 非原生安装态 / ~250ms 页内读回不一致 / React tracker 分叉)——命中即附信号 + hint 三条合法出路(换 type 可信管道 / 重 extract 走快照 uid 路 / 请用户物理输入);**只供信号绝不自动改道**(不自动换原语/重试/通道),探测纯读零副作用(禁为探测合成 blur)。③ **wait 超时观察面教学**:`wait_timeout` 错误追加 window.open 新 tab 教学句(原选中页 URL 永不变——该形态超时首次自带归因线索)+ TROUBLESHOOTING §2.19 新 tab 观察面(含 `navigate → wait{selector} → fill → press/click` 链配方;fill 时序竞争假说无 reproducer 证伪登记,不写防御代码)。④ **no_reload 语义澄清**:describe 补「不是跳过导航旗标」句(实质不同 URL 恒导航;同 URL 恒零导航是 url 规则 2、与本键无关)+ §2.20 行为矩阵四行 + 语义钉 spec(描述与行为从此被测试钉死为一体)。⑤ **governance/13 合成输入伦理边界声明**:正面面 = 标准原语 + 诚实信号 + 信任阶梯文档;**Rejected-by-design** = 键入节奏随机化/人类拟态延迟、`_valueTracker` 欺骗、accessor 反劫持、isTrusted 伪造、「让 fill 看起来像人输入」的一切包装(欺骗站点侧机制 ≠ 输入能力;仅用户显式逐条裁决可推翻)。立场:**墙在那里我们告诉你**——穿墙只有两种合法形态(换可信原语 / 请用户物理输入),绝不替用户决定攻墙。⑥ **HighRiskGate 补 `type` 分支**:RTE 黑名单元素上 type 与 fill 同拦(封「换 action 名绕过 identity 通道守卫」口径裂缝;press 无 DOM 目标与 evaluate 同档不拦,注释文档化)。⑦ 上游契约死列表补 `type_text`/`press_key`(P10 前置门假红修复)+ 描述预算帽显式提帽(fleet 59,850 / HEADLESS 13,900 / L2 2,300→2,450——§5.1-3 独立单主题提帽纪律)。⑧ 本地保护层 fixture 回归(opt-in `LASSO_TEST_INPUT_GUARD=1`,绑 127.0.0.1):三型机制(受控回写/accessor 劫持/异步重置)check 型对号 + type/uid 路 blur 后存活全实证。
241
243
  - **v1.28.0**(未发布预写 · 上半:bugs/10 rust/desktop 半——桌面投递回执批):cgEvent 投递「断裂」证伪后的**消灭静默失败**批(商标站滑块实机报告驱动,doc/bugs/10)——白盒定谳:HID 投递链完好(受控计数器页产出完整 `isTrusted:true` 序列),真凶是并发物理输入竞争 + 判定法盲区,故交付物不是「修投递」而是让失败可见:① **坐标鼠标动作落地回执**:`desktop act` 的 click/move/drag(带 x,y 的 scroll 同)每个动作回 `cursor_after{x,y}` + `landed`(最终 post 后读回真实光标,容差 0.5pt)——**未落地 → 该动作 `ok:false` + `cgevent_no_landing`**(此前「API worked 实际零效果」是静默的);② **物理竞争警示**:dispatch 级 `physical_input.attribution`(idle/synthetic/physical)——`physical` = 检测到晚于本进程合成 post 的鼠标事件(用户在物理操作,重发即可;worked 不因此翻转,信号不策略);③ **TCC 探测诚实化**:macOS<15 不再假报「无此维度」——IOHID PostEvent 原始探测四态直报(Undefined 是真实第三态且该状态下投递实证可用;per-process 归因如实入档),**门控语义零变化**(<15 永不因 IOHID 拒绝);④ **doctor #22 投递自检**(opt-in `LASSO_DOCTOR_INPUT_SELFTEST=1`:移动你的光标 7px 后复位——默认关,agent 不可触发;光标读回判读,无歧义);⑤ **desktop screenshot 默认落盘**(对齐 browse 通道:`/tmp/lasso-screenshot-<uuid>.png` 只回路径——此前全屏 860KB base64 直塞爆 token;`inline_base64:true` 恢复旧行为)。伦理红线:合成输入只做「检测与诚实报告」,不引入任何绕过用户输入监控的能力。Rejected:PostToPid 定向(SOTA 反证 PID 定向鼠标被 AppKit 静默丢弃)/ act 内置像素 diff / act 内自动重试。
242
244
  - **v1.28.0**(未发布预写 · 下半:bugs/10 browse/docs 半——evaluate 返回值契约 + 反爬检测面文档批,BUG-10,商标站滑块战役驱动,doc/bugs/10)——① 🔴 **修正型行为变更(静默错值面)**:`evaluate` 的 `options.js` 新增两条表达式路由——此前传**单行裸表达式**(`JSON.stringify({...})`、`document.title`)会被包进语句体,表达式值被语句吞掉 → **恒 undefined**;传**括号表达式**(`({a:1})`)会被当函数表达式透传,上游求值为对象 → **报 `fn is not a function`**(实机报告 P2:两次调用试错才暴露的隐藏契约)。现在这两类入参自动包成表达式体箭头,**值直达**;既有三形态(函数表达式透传 / IIFE 包裹 / 语句体)字节级不变(语句体仍须显式 `return`);② **错误即教学**:语句体 + 返回 undefined 时响应附 `data.js_form:"statement_body"` + `js_form_hint`(一句说清「为什么是 undefined」与怎么改);上游 `is not a function` 错误文案同款追加;③ 工具描述 evaluate 段补 RETURNS 契约句(「THREE forms … All work」对表达式形态为假——描述缺口即 P2 本体);④ `browse_headless`/`browse_headed` 描述 NOTE 新增「**click worked ≠ 提交被接受**」标注 + TROUBLESHOOTING 新增 §2.18 tm.aliyun.com 分层拦截面实测(首页层已放行 / 提交层 headless 静默吞、headed 弹滑块——判定提交成败用 `wait url_contains`/`text` 或 `extract`,不能信 act 回执)。本条为下半(browse/docs 半);同批上半(rust/desktop 半:cgEvent 投递回执 / doctor 自检 / desktop 截图落盘)见上一条 v1.28.0。
243
245
  - **v1.27.1**:工具示例体系批(消费方接口自描述完善)——修复「调用者靠试错学用法」:此前 18 个工具只有 1 个含可抄示例,其余全是规则散文(七家消费方报告的试错考古实证)。本批:① **13 个调用示例进工具 description**(agent 经 `tools/list` 端到端可见——内容全部从真实试错事故反推:navigate+screenshot 一步/evaluate current-page/驱逐信号响应/freshProfile/browse_headed consent 等);② **错误即教学**:`unknown_action` / 无会话等高频错误内嵌正确调用形态(学 Rust "did you mean");③ schema 全量 `.describe()` 补齐(action enum 值说明——此前全仓零 field 描述);④ **防漂移四道闸**:示例逐字锚 / consent 前缀锚 / call-shape⊆schema / 预算帽。纯接口自描述增强零行为变更;盲测 8/8 + 9/9 变异全杀。体系文档见 doc/usage/04。
@@ -102,10 +102,11 @@ export declare class HighRiskGate {
102
102
  * 3. 跑 evaluate_script:定位目标元素 + 查祖先是否命中 HIGH_RISK_PATTERNS
103
103
  * 4. 任何异常 → blocked=false + reason="gate_error:*"(保守放过)
104
104
  *
105
- * 目标选择策略(与 BrowseChannel 的 doClick / doFill 实际签名对齐):
105
+ * 目标选择策略(与 BrowseChannel 的 doClick / doFill / doType 实际签名对齐):
106
106
  * - click : selectors.click 是 a11y uid
107
- * - fill : selectors 是 { uid: value, ... } 多字段 flat map;取首个 key 当目标
108
- * - 其他副作用 action:暂无 DOM 目标概念 → 直接放过(让 channel 报错)
107
+ * - fill/type : selectors 是 { uid: value, ... } 多字段 flat map;取首个 key 当目标
108
+ * (D-ζ / doc/bugs/11:type 与 fill 同形同语义,同拦——防换名绕 gate)
109
+ * - 其他副作用 action(press 单 key 无 DOM 目标等)→ 直接放过(让 channel 报错)
109
110
  *
110
111
  * @returns blocked=true 时,reason 形如 "high_risk_pattern:rte",evidence 为祖先 outerHTML 片段
111
112
  */
@@ -1 +1 @@
1
- {"version":3,"file":"HighRiskGate.d.ts","sourceRoot":"","sources":["../../src/browse/HighRiskGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWtE,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAMC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAO/C,CAAC;AAKH;;;;;;;GAOG;AACH,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC;;;;;OAKG;gBAEgB,cAAc,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EACxC,eAAe,GAAE,eAAe,GAAG,IAAW;IAGjE;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuG1D;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyCtD"}
1
+ {"version":3,"file":"HighRiskGate.d.ts","sourceRoot":"","sources":["../../src/browse/HighRiskGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWtE,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAMC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAO/C,CAAC;AAKH;;;;;;;GAOG;AACH,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IARlC;;;;;OAKG;gBAEgB,cAAc,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EACxC,eAAe,GAAE,eAAe,GAAG,IAAW;IAGjE;;;;;;;;;;;;;;;;;OAiBG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA6G1D;AAKD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyCtD"}
@@ -80,10 +80,11 @@ export class HighRiskGate {
80
80
  * 3. 跑 evaluate_script:定位目标元素 + 查祖先是否命中 HIGH_RISK_PATTERNS
81
81
  * 4. 任何异常 → blocked=false + reason="gate_error:*"(保守放过)
82
82
  *
83
- * 目标选择策略(与 BrowseChannel 的 doClick / doFill 实际签名对齐):
83
+ * 目标选择策略(与 BrowseChannel 的 doClick / doFill / doType 实际签名对齐):
84
84
  * - click : selectors.click 是 a11y uid
85
- * - fill : selectors 是 { uid: value, ... } 多字段 flat map;取首个 key 当目标
86
- * - 其他副作用 action:暂无 DOM 目标概念 → 直接放过(让 channel 报错)
85
+ * - fill/type : selectors 是 { uid: value, ... } 多字段 flat map;取首个 key 当目标
86
+ * (D-ζ / doc/bugs/11:type 与 fill 同形同语义,同拦——防换名绕 gate)
87
+ * - 其他副作用 action(press 单 key 无 DOM 目标等)→ 直接放过(让 channel 报错)
87
88
  *
88
89
  * @returns blocked=true 时,reason 形如 "high_risk_pattern:rte",evidence 为祖先 outerHTML 片段
89
90
  */
@@ -97,14 +98,20 @@ export class HighRiskGate {
97
98
  if (step.action === "click") {
98
99
  target = step.selectors?.click;
99
100
  }
100
- else if (step.action === "fill") {
101
- // fill 的 selectors 是 flat { uid: value, ... };取首个 key(任意一个都需过 gate)
101
+ else if (step.action === "fill" || step.action === "type") {
102
+ // fill/type 的 selectors 是 flat { uid: value, ... };取首个 key(任意一个都需过 gate)。
103
+ // D-ζ(doc/bugs/11,2026-09-17):type 与 fill selectors 同形同语义——必须
104
+ // 同分支同拦,否则 RTE 黑名单元素 fill 被 high_risk_pattern:rte 拦、type 直填
105
+ // 放行 =「换 action 名绕过 identity 通道守卫」的口径裂缝(RTE/contenteditable
106
+ // 恰是 type 最可靠的目标类——fill 的 JS 设值在 contenteditable 最弱)。
102
107
  const keys = step.selectors ? Object.keys(step.selectors) : [];
103
108
  if (keys.length > 0)
104
109
  target = keys[0];
105
110
  }
106
111
  else {
107
- // 其他副作用 action(v0.3 仅 click / fill 有 DOM 目标)→ 不拦
112
+ // 其他副作用 action → 不拦。press 无 DOM 目标(单 key 入参,打在当前焦点
113
+ // 上)——与 evaluate 同档不拦;Enter 打在已聚焦 RTE 上不可评估目标是已知
114
+ // 接受面(doc/bugs/11 D-ζ 注释文档化此边界,非疏漏)。
108
115
  return { blocked: false };
109
116
  }
110
117
  if (!target) {
@@ -1 +1 @@
1
- {"version":3,"file":"HighRiskGate.js","sourceRoot":"","sources":["../../src/browse/HighRiskGate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HighRiskGate.js","sourceRoot":"","sources":["../../src/browse/HighRiskGate.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,21 @@ export declare const CDP_UPSTREAM_TOOL_NAMES: Readonly<{
57
57
  console_log: "list_console_messages";
58
58
  /** evaluate_script(既有 doEvaluate 在 BrowseChannel.ts;此处仅记录名用于历史探测) */
59
59
  evaluate_script: "evaluate_script";
60
+ /**
61
+ * doc/bugs/11 决议 B(2026-09-17):键盘输入原语映射——上游 1.7.0/1.9.0
62
+ * input.js 均暴露(§0 断言 1-3 白盒核实)。type_text → Puppeteer
63
+ * keyboard.type(逐字 CDP Input.dispatchKeyEvent,isTrusted:true——与
64
+ * Playwright page.keyboard.type() 同级的**标准输入原语**);唯一能进框架
65
+ * 输入管道(React onChange 触发)的键入路径。禁绕过上游自建
66
+ * dispatchKeyEvent 循环(INV-6 + 上游锁定纪律——映射即可)。
67
+ */
68
+ type_text: "type_text";
69
+ /**
70
+ * press_key → 修饰键 down/press/up + **失败释放保证**(上游 input.js :527-560
71
+ * finally 内 toReversed() 逐个 up——#2309:失败 press 不残留逻辑按下的修饰键)。
72
+ * key 契约与上游逐字一致("Enter" / "Control+A"——tokens 由上游 parseKey 拆解)。
73
+ */
74
+ press_key: "press_key";
60
75
  }>;
61
76
  /**
62
77
  * P10(v1.18.1,得到实战问题集 P10):lasso action → 上游工具名(BrowseChannel
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-actions.d.ts","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;IAClC,wEAAwE;;IAExE;;;;;OAKG;;IAEH,+BAA+B;;IAE/B;;;OAGG;;IAEH,qEAAqE;;EAErE,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAInE,CAAC;AAuBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,KAAK,CACzB,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAsChC;AAKD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAiChC;AAED,uDAAuD;AACvD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAqBD;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAqBhC;AAED,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAwB/D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC9D,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,CAAC,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,EAAE,CASL;AAED,+CAA+C;AAC/C,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAuBD"}
1
+ {"version":3,"file":"cdp-actions.d.ts","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;IAClC,wEAAwE;;IAExE;;;;;OAKG;;IAEH,+BAA+B;;IAE/B;;;OAGG;;IAEH,qEAAqE;;IAErE;;;;;;;OAOG;;IAEH;;;;OAIG;;EAEH,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUnE,CAAC;AAuBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,KAAK,CACzB,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAsChC;AAKD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAiChC;AAED,uDAAuD;AACvD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAqBD;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,SAAS,CAC7B,CAAC,EAAE,SAAS,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAqBhC;AAED,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAwB/D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC9D,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,CAAC,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,EAAE,CASL;AAED,+CAA+C;AAC/C,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAuBD"}
@@ -32,6 +32,21 @@ export const CDP_UPSTREAM_TOOL_NAMES = Object.freeze({
32
32
  console_log: "list_console_messages",
33
33
  /** evaluate_script(既有 doEvaluate 在 BrowseChannel.ts;此处仅记录名用于历史探测) */
34
34
  evaluate_script: "evaluate_script",
35
+ /**
36
+ * doc/bugs/11 决议 B(2026-09-17):键盘输入原语映射——上游 1.7.0/1.9.0
37
+ * input.js 均暴露(§0 断言 1-3 白盒核实)。type_text → Puppeteer
38
+ * keyboard.type(逐字 CDP Input.dispatchKeyEvent,isTrusted:true——与
39
+ * Playwright page.keyboard.type() 同级的**标准输入原语**);唯一能进框架
40
+ * 输入管道(React onChange 触发)的键入路径。禁绕过上游自建
41
+ * dispatchKeyEvent 循环(INV-6 + 上游锁定纪律——映射即可)。
42
+ */
43
+ type_text: "type_text",
44
+ /**
45
+ * press_key → 修饰键 down/press/up + **失败释放保证**(上游 input.js :527-560
46
+ * finally 内 toReversed() 逐个 up——#2309:失败 press 不残留逻辑按下的修饰键)。
47
+ * key 契约与上游逐字一致("Enter" / "Control+A"——tokens 由上游 parseKey 拆解)。
48
+ */
49
+ press_key: "press_key",
35
50
  });
36
51
  /**
37
52
  * P10(v1.18.1,得到实战问题集 P10):lasso action → 上游工具名(BrowseChannel
@@ -44,6 +59,12 @@ export const ACTION_TO_UPSTREAM_TOOL = Object.freeze({
44
59
  pdf: CDP_UPSTREAM_TOOL_NAMES.pdf,
45
60
  network: CDP_UPSTREAM_TOOL_NAMES.network_log,
46
61
  console: CDP_UPSTREAM_TOOL_NAMES.console_log,
62
+ /**
63
+ * doc/bugs/11 决议 B(D-β):type/press 入表即自动获得 P10 前置门
64
+ * (上游工具缺失 → 导航前诚实 didnt)——对抗旧上游/假想漂移零额外代码。
65
+ */
66
+ type: CDP_UPSTREAM_TOOL_NAMES.type_text,
67
+ press: CDP_UPSTREAM_TOOL_NAMES.press_key,
47
68
  });
48
69
  /**
49
70
  * P10:上游工具缺失探测在 BrowseChannel.isUpstreamToolMissing(per-client
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-actions.js","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdp-actions.js","sourceRoot":"","sources":["../../src/browse/cdp-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * input-guard(doc/bugs/11 决议 C,2026-09-17)
3
+ *
4
+ * 站点输入保护层的**诚实信号**:三探针的 in-page evaluate 表达式构造
5
+ * (extract-refs.ts 同范式纯函数模块——expr 构造,无 SDK 依赖、无 IO)。
6
+ *
7
+ * 机理背景(bugs/11 §0 白盒定谳):下午报告的「输入保护层瞬间清除」不成立;
8
+ * 真实机制是框架/引擎的状态完整性语义——脚本写入(element.value= / 合成事件)
9
+ * 不进框架输入管道(React onChange 不触发),blur/commit 时框架把 DOM 回写为
10
+ * 已提交状态(值「消失」)。经可信管道(CDP Input 域逐字派发,isTrusted:true)
11
+ * 键入的值 blur 后存活。三探针把这道墙显式化(此前 fill 报 worked、值静默消失
12
+ * ——失败模式不可见是 lasso 的可观测性欠账):
13
+ *
14
+ * - G1 安装态 value_setter_non_native:el 自身有 value own property(实例级
15
+ * accessor 劫持)或原型链 value 访问器不含 [native code]
16
+ * - G2 生效态 fill_readback_mismatch:填充/键入后延时读回 ≠ 所设值
17
+ * (MutationObserver/异步重置族)
18
+ * - G3 受控分叉 react_tracker_divergence:React _valueTracker 分叉
19
+ * (tracker.getValue() !== el.value——受控回写,tm.aliyun.com 本体机理)
20
+ *
21
+ * 红线(决议 §C.3,驱逐哨兵同款):
22
+ * - **只供信号,绝不自动改道**——检测到保护层不自动换 type/不重试/不换通道;
23
+ * hint 里的换路指引是指令不是行动
24
+ * - 探针纯读(G1/G3 纯属性检查;G2 的 250ms 等待在页内 sleep,不发事件、
25
+ * **不 blur**、不 focus 别处——blur 会触发提交/校验)
26
+ * - 信号路径零 FallbackDecider 调用、零 spawn、零页面副作用
27
+ *
28
+ * 值守区 = 信任阶梯第 2 层(doFill ref 路 / doType ref 路;BrowseChannel 消费)。
29
+ * uid 路 v1 不探(第 1 层可信管道——快照解析探针的成本>增值,如实文档化边界)。
30
+ */
31
+ /** G1:value setter 非原生(实例 own property / 原型链非 [native code] 访问器)。 */
32
+ export declare const GUARD_CHECK_G1 = "value_setter_non_native";
33
+ /** G2:填充/键入值延时读回不符(异步重置族)。 */
34
+ export declare const GUARD_CHECK_G2 = "fill_readback_mismatch";
35
+ /** G3:React _valueTracker 分叉(受控回写族)。 */
36
+ export declare const GUARD_CHECK_G3 = "react_tracker_divergence";
37
+ /** G2 的页内延时(ms)——异步重置族的观察窗(决议 §C.1 ~250ms)。 */
38
+ export declare const GUARD_READBACK_DELAY_MS = 250;
39
+ /**
40
+ * 决议 C.1 三探针 expr(doFill ref 路 / doType ref 路共用——一次 in-page
41
+ * evaluate 全探,纯读 + 页内 250ms sleep)。
42
+ *
43
+ * 输入:entries = [{ ref, value, pre? }](value = 刚填充/键入的期望值;
44
+ * pre = 键入前的元素读回——**type 追加语义专用**,见下)。
45
+ * 返回 JSON 字符串 { ok, guards: [{ ref, checks: [...] }] }——guards 只含
46
+ * 有命中的字段(全负 = 空数组 = 无信号)。expr 抛错 → { ok:false }(探测
47
+ * 失败不是保护层证据,调用方按 best-effort 无信号处理)。
48
+ *
49
+ * G2 双语义(对抗复审 r1,2026-09-17):type 是 **append**(describe 明示
50
+ * "appends to existing text — fill replaces")——非空字段上 type 后
51
+ * cur = pre + text ≠ text,若沿用 fill 的精确读回判据(cur ≠ value)会在
52
+ * **值完全存活**时系统性误报 G2(假信号)。故:
53
+ * - fill 模式(pre 缺席/null):G2 ⇔ cur !== value(精确读回——replace 语义)
54
+ * - type 模式(pre 为字符串):G2 ⇔ cur === pre(存活语义——typed keys
55
+ * **全拒**才报,与 hint 终态分支 "if typed keys are also rejected" 对齐;
56
+ * cur 有任何变化即不claim——advisory 诚实优先于覆盖率)
57
+ */
58
+ export declare function buildGuardProbeExpr(entries: Array<{
59
+ ref: string;
60
+ value: string;
61
+ pre?: string | null;
62
+ }>): string;
63
+ /**
64
+ * 决议 B.1 ref 路 focus expr:定位 → el.focus() → 回读
65
+ * document.activeElement === el 作 focus 回执(上游 type_text 的文档化前置
66
+ * 「previously focused input」)。miss → { ok:false, reason:"ref_stale" }。
67
+ *
68
+ * 回执携带 pre = focus 后(= 键入前最后一刻)的元素读回(value/textContent,
69
+ * 同 probe 的 readback 判定式;两者皆非 → null)。对抗复审 r1(2026-09-17):
70
+ * type 是 append 语义,G2 存活判据需要键入前的基线——pre 在 focus 后读取
71
+ * (focus 处理器若改值也计入基线,与 type_text 的写入点零距离)。
72
+ *
73
+ * 注意:focus() 打在**目标自身**上(键入前置),不是探测行为——决议 §C.3
74
+ * 禁的是「为探测合成 blur / focus 别处」。
75
+ */
76
+ export declare function buildRefFocusExpr(ref: string): string;
77
+ /**
78
+ * 探针结果形状(parseEvalResult 解出的脚本返回值)。guards 只含有命中的字段。
79
+ */
80
+ export interface GuardProbeResult {
81
+ ok?: boolean;
82
+ guards?: Array<{
83
+ ref: string;
84
+ checks: string[];
85
+ }>;
86
+ reason?: string;
87
+ }
88
+ /**
89
+ * 探针结果 → 信号对象(决议 C.2 回显形状)。无命中/探测失败 → null(best-effort:
90
+ * 探测失败不是保护层证据)。checks = 全字段并集去重(G1→G2→G3 固定序),
91
+ * target = 命中字段 ref 逗号连缀(ref 身份,非 uid——uid 路 v1 不探)。
92
+ */
93
+ export declare function toSignal(v: GuardProbeResult | undefined, now?: () => number): {
94
+ checks: string[];
95
+ target: string;
96
+ at_ms: number;
97
+ } | null;
98
+ //# sourceMappingURL=input-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-guard.d.ts","sourceRoot":"","sources":["../../src/browse/input-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qEAAqE;AACrE,eAAO,MAAM,cAAc,4BAA4B,CAAC;AACxD,8BAA8B;AAC9B,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,wCAAwC;AACxC,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD,+CAA+C;AAC/C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AA2C3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GAClE,MAAM,CAuCR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0BrD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,CAAC,EAAE,gBAAgB,GAAG,SAAS,EAC/B,GAAG,GAAE,MAAM,MAAiB,GAC3B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU5D"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * input-guard(doc/bugs/11 决议 C,2026-09-17)
3
+ *
4
+ * 站点输入保护层的**诚实信号**:三探针的 in-page evaluate 表达式构造
5
+ * (extract-refs.ts 同范式纯函数模块——expr 构造,无 SDK 依赖、无 IO)。
6
+ *
7
+ * 机理背景(bugs/11 §0 白盒定谳):下午报告的「输入保护层瞬间清除」不成立;
8
+ * 真实机制是框架/引擎的状态完整性语义——脚本写入(element.value= / 合成事件)
9
+ * 不进框架输入管道(React onChange 不触发),blur/commit 时框架把 DOM 回写为
10
+ * 已提交状态(值「消失」)。经可信管道(CDP Input 域逐字派发,isTrusted:true)
11
+ * 键入的值 blur 后存活。三探针把这道墙显式化(此前 fill 报 worked、值静默消失
12
+ * ——失败模式不可见是 lasso 的可观测性欠账):
13
+ *
14
+ * - G1 安装态 value_setter_non_native:el 自身有 value own property(实例级
15
+ * accessor 劫持)或原型链 value 访问器不含 [native code]
16
+ * - G2 生效态 fill_readback_mismatch:填充/键入后延时读回 ≠ 所设值
17
+ * (MutationObserver/异步重置族)
18
+ * - G3 受控分叉 react_tracker_divergence:React _valueTracker 分叉
19
+ * (tracker.getValue() !== el.value——受控回写,tm.aliyun.com 本体机理)
20
+ *
21
+ * 红线(决议 §C.3,驱逐哨兵同款):
22
+ * - **只供信号,绝不自动改道**——检测到保护层不自动换 type/不重试/不换通道;
23
+ * hint 里的换路指引是指令不是行动
24
+ * - 探针纯读(G1/G3 纯属性检查;G2 的 250ms 等待在页内 sleep,不发事件、
25
+ * **不 blur**、不 focus 别处——blur 会触发提交/校验)
26
+ * - 信号路径零 FallbackDecider 调用、零 spawn、零页面副作用
27
+ *
28
+ * 值守区 = 信任阶梯第 2 层(doFill ref 路 / doType ref 路;BrowseChannel 消费)。
29
+ * uid 路 v1 不探(第 1 层可信管道——快照解析探针的成本>增值,如实文档化边界)。
30
+ */
31
+ /** G1:value setter 非原生(实例 own property / 原型链非 [native code] 访问器)。 */
32
+ export const GUARD_CHECK_G1 = "value_setter_non_native";
33
+ /** G2:填充/键入值延时读回不符(异步重置族)。 */
34
+ export const GUARD_CHECK_G2 = "fill_readback_mismatch";
35
+ /** G3:React _valueTracker 分叉(受控回写族)。 */
36
+ export const GUARD_CHECK_G3 = "react_tracker_divergence";
37
+ /** G2 的页内延时(ms)——异步重置族的观察窗(决议 §C.1 ~250ms)。 */
38
+ export const GUARD_READBACK_DELAY_MS = 250;
39
+ /** ref 定位片段(extract-refs.ts refQuerySnippet 同式;模块私有,禁跨文件耦合)。 */
40
+ function refQuerySnippet(refVar) {
41
+ return `document.querySelector('[data-lasso-uid="' + CSS.escape(${refVar}) + '"]')`;
42
+ }
43
+ /** G1/G3 探针函数片段(嵌入各 expr;纯读——禁事件派发/blur/focus)。 */
44
+ function probeFunctionsSnippet() {
45
+ return `
46
+ function g1(el) {
47
+ try {
48
+ if (Object.prototype.hasOwnProperty.call(el, "value")) return true;
49
+ var p = Object.getPrototypeOf(el);
50
+ while (p) {
51
+ var d = Object.getOwnPropertyDescriptor(p, "value");
52
+ if (d) {
53
+ if (d.set && String(d.set).indexOf("[native code]") < 0) return true;
54
+ break;
55
+ }
56
+ p = Object.getPrototypeOf(p);
57
+ }
58
+ } catch (e) {}
59
+ return false;
60
+ }
61
+ function g3(el) {
62
+ try {
63
+ if ("_valueTracker" in el && el._valueTracker &&
64
+ typeof el._valueTracker.getValue === "function") {
65
+ return String(el._valueTracker.getValue()) !== String(el.value);
66
+ }
67
+ } catch (e) {}
68
+ return false;
69
+ }
70
+ function readback(el) {
71
+ if (el.tagName === "INPUT" || el.tagName === "TEXTAREA" || "value" in el) {
72
+ return String(el.value == null ? "" : el.value);
73
+ }
74
+ if (el.isContentEditable) return String(el.textContent || "");
75
+ return null;
76
+ }`;
77
+ }
78
+ /**
79
+ * 决议 C.1 三探针 expr(doFill ref 路 / doType ref 路共用——一次 in-page
80
+ * evaluate 全探,纯读 + 页内 250ms sleep)。
81
+ *
82
+ * 输入:entries = [{ ref, value, pre? }](value = 刚填充/键入的期望值;
83
+ * pre = 键入前的元素读回——**type 追加语义专用**,见下)。
84
+ * 返回 JSON 字符串 { ok, guards: [{ ref, checks: [...] }] }——guards 只含
85
+ * 有命中的字段(全负 = 空数组 = 无信号)。expr 抛错 → { ok:false }(探测
86
+ * 失败不是保护层证据,调用方按 best-effort 无信号处理)。
87
+ *
88
+ * G2 双语义(对抗复审 r1,2026-09-17):type 是 **append**(describe 明示
89
+ * "appends to existing text — fill replaces")——非空字段上 type 后
90
+ * cur = pre + text ≠ text,若沿用 fill 的精确读回判据(cur ≠ value)会在
91
+ * **值完全存活**时系统性误报 G2(假信号)。故:
92
+ * - fill 模式(pre 缺席/null):G2 ⇔ cur !== value(精确读回——replace 语义)
93
+ * - type 模式(pre 为字符串):G2 ⇔ cur === pre(存活语义——typed keys
94
+ * **全拒**才报,与 hint 终态分支 "if typed keys are also rejected" 对齐;
95
+ * cur 有任何变化即不claim——advisory 诚实优先于覆盖率)
96
+ */
97
+ export function buildGuardProbeExpr(entries) {
98
+ return `async () => {
99
+ try {
100
+ var entries = ${JSON.stringify(entries)};
101
+ var DELAY_MS = ${GUARD_READBACK_DELAY_MS};${probeFunctionsSnippet()}
102
+ await new Promise(function (res) { setTimeout(res, DELAY_MS); });
103
+ var guards = [];
104
+ for (var i = 0; i < entries.length; i++) {
105
+ var ref = entries[i].ref;
106
+ var expected = entries[i].value;
107
+ var pre = (typeof entries[i].pre === "string") ? entries[i].pre : null;
108
+ var el = null;
109
+ try { el = ${refQuerySnippet("ref")}; } catch (e) { el = null; }
110
+ if (!el) continue;
111
+ var checks = [];
112
+ var cur = readback(el);
113
+ if (cur !== null) {
114
+ if (g1(el)) checks.push(${JSON.stringify(GUARD_CHECK_G1)});
115
+ if (pre === null) {
116
+ if (cur !== expected) checks.push(${JSON.stringify(GUARD_CHECK_G2)});
117
+ } else if (cur === pre) {
118
+ checks.push(${JSON.stringify(GUARD_CHECK_G2)});
119
+ }
120
+ if (g3(el)) checks.push(${JSON.stringify(GUARD_CHECK_G3)});
121
+ } else if (el.isContentEditable) {
122
+ var curT = String(el.textContent || "");
123
+ if (pre === null) {
124
+ if (curT !== expected) checks.push(${JSON.stringify(GUARD_CHECK_G2)});
125
+ } else if (curT === pre) {
126
+ checks.push(${JSON.stringify(GUARD_CHECK_G2)});
127
+ }
128
+ }
129
+ if (checks.length > 0) guards.push({ ref: ref, checks: checks });
130
+ }
131
+ return JSON.stringify({ ok: true, guards: guards });
132
+ } catch (e) {
133
+ return JSON.stringify({ ok: false, guards: [], reason: "eval_error:" + String(e) });
134
+ }
135
+ }`;
136
+ }
137
+ /**
138
+ * 决议 B.1 ref 路 focus expr:定位 → el.focus() → 回读
139
+ * document.activeElement === el 作 focus 回执(上游 type_text 的文档化前置
140
+ * 「previously focused input」)。miss → { ok:false, reason:"ref_stale" }。
141
+ *
142
+ * 回执携带 pre = focus 后(= 键入前最后一刻)的元素读回(value/textContent,
143
+ * 同 probe 的 readback 判定式;两者皆非 → null)。对抗复审 r1(2026-09-17):
144
+ * type 是 append 语义,G2 存活判据需要键入前的基线——pre 在 focus 后读取
145
+ * (focus 处理器若改值也计入基线,与 type_text 的写入点零距离)。
146
+ *
147
+ * 注意:focus() 打在**目标自身**上(键入前置),不是探测行为——决议 §C.3
148
+ * 禁的是「为探测合成 blur / focus 别处」。
149
+ */
150
+ export function buildRefFocusExpr(ref) {
151
+ return `() => {
152
+ try {
153
+ var ref = ${JSON.stringify(ref)};
154
+ var el = null;
155
+ try { el = ${refQuerySnippet("ref")}; } catch (e) { el = null; }
156
+ if (!el) return JSON.stringify({ ok: false, reason: "ref_stale" });
157
+ el.focus();
158
+ var pre = null;
159
+ try {
160
+ if (el.tagName === "INPUT" || el.tagName === "TEXTAREA" || "value" in el) {
161
+ pre = String(el.value == null ? "" : el.value);
162
+ } else if (el.isContentEditable) {
163
+ pre = String(el.textContent || "");
164
+ }
165
+ } catch (e2) { pre = null; }
166
+ return JSON.stringify({
167
+ ok: true,
168
+ focused: document.activeElement === el,
169
+ tag: (el.tagName || "").toLowerCase(),
170
+ pre: pre
171
+ });
172
+ } catch (e) {
173
+ return JSON.stringify({ ok: false, reason: "eval_error:" + String(e) });
174
+ }
175
+ }`;
176
+ }
177
+ /**
178
+ * 探针结果 → 信号对象(决议 C.2 回显形状)。无命中/探测失败 → null(best-effort:
179
+ * 探测失败不是保护层证据)。checks = 全字段并集去重(G1→G2→G3 固定序),
180
+ * target = 命中字段 ref 逗号连缀(ref 身份,非 uid——uid 路 v1 不探)。
181
+ */
182
+ export function toSignal(v, now = Date.now) {
183
+ if (!v?.ok || !Array.isArray(v.guards) || v.guards.length === 0)
184
+ return null;
185
+ const order = [GUARD_CHECK_G1, GUARD_CHECK_G2, GUARD_CHECK_G3];
186
+ const seen = new Set();
187
+ for (const g of v.guards)
188
+ for (const c of g.checks ?? [])
189
+ seen.add(c);
190
+ const checks = order.filter((c) => seen.has(c));
191
+ if (checks.length === 0)
192
+ return null;
193
+ const refs = v.guards.map((g) => g.ref).filter(Boolean);
194
+ if (refs.length === 0)
195
+ return null;
196
+ return { checks, target: refs.join(","), at_ms: now() };
197
+ }
198
+ //# sourceMappingURL=input-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-guard.js","sourceRoot":"","sources":["../../src/browse/input-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,yBAAyB,CAAC;AACxD,8BAA8B;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AACvD,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAEzD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,gEAAgE;AAChE,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,2DAA2D,MAAM,WAAW,CAAC;AACtF,CAAC;AAED,mDAAmD;AACnD,SAAS,qBAAqB;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BH,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAmE;IAEnE,OAAO;;sBAEa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;uBACtB,uBAAuB,IAAI,qBAAqB,EAAE;;;;;;;;qBAQpD,eAAe,CAAC,KAAK,CAAC;;;;;oCAKP,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;gDAElB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;0BAEpD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;oCAEpB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;iDAIjB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;0BAErD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;;;;;;;IASpD,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO;;kBAES,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;mBAElB,eAAe,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;IAoBrC,CAAC;AACL,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,CAA+B,EAC/B,MAAoB,IAAI,CAAC,GAAG;IAE5B,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAC1D,CAAC"}
@@ -99,6 +99,11 @@ export interface Step {
99
99
  selectors?: Record<string, string>;
100
100
  /** evaluate action 用 */
101
101
  js?: string;
102
+ /**
103
+ * doc/bugs/11 决议 B.2:press step 的键/组合键("Enter" / "Control+A"——
104
+ * 顶层 options.key 同一键,executeStep 原样透传 doPress)。
105
+ */
106
+ key?: string;
102
107
  /** 每步可附 postcondition(12 §1.1B outcomeAfterCheck) */
103
108
  expect?: ExpectCondition;
104
109
  /** per-step timeout(默认 30000) */
@@ -1 +1 @@
1
- {"version":3,"file":"steps-types.d.ts","sourceRoot":"","sources":["../../src/browse/steps-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAKD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,OAAO,EAAE,OAAO,GAAG,aAAa,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;CAC5E;AAKD;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wBAAwB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EACF,sBAAsB,GACtB,YAAY,GACZ,iBAAiB,GACjB,cAAc,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC"}
1
+ {"version":3,"file":"steps-types.d.ts","sourceRoot":"","sources":["../../src/browse/steps-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAKD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,OAAO,EAAE,OAAO,GAAG,aAAa,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;CAC5E;AAKD;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wBAAwB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EACF,sBAAsB,GACtB,YAAY,GACZ,iBAAiB,GACjB,cAAc,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC"}