Files
UHD_Media_Tool/packages/adapters/src/browser
rootandClaude Opus 5.5 47bd04aec0 fix(adapters,security): S-4 rss/browser redaction use the shared contracts key table
- contracts: isSensitiveQueryParam (whole-name match on SENSITIVE_QUERY_PARAMS
  or isSensitiveKey), the single source for query credential names
- rss/redact: drop local SENSITIVE_QUERY_KEYS; param checks go through
  isSensitiveQueryParam (+ caller extras); REDACTED re-exported from contracts
- browser/redact: CREDENTIAL_PARAM built from SENSITIVE_QUERY_PARAMS, JSON keys
  also checked with isSensitiveKey; keeps only its own rules (path passkey,
  cookie names, a11y password fields); remove stray regex statement
- redact-consistency.test: 24 credential spellings (pass_key, c_secure_pass,
  refresh_token, password, uid_key, auth, ...) masked by contracts, rss and
  browser alike; plain params untouched; rss extract/unredact round-trip

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 00:45:56 +08:00
..

browser

BrowserProvider 合同(provider.ts)及其实现:业务侧访问浏览器服务只走这套接口。产品浏览器能力对接用户已有的 camofox-browser;Playwright 只用于前端截图测试,不是产品浏览器能力。设计说明见 docs/design/browser-provider.md。

  • camofox/:camofox-browser 适配器。按 jo-inc/camofox-browser master openapi.json(1.17.0)与 README 实现,Authorization: Bearer <CAMOFOX_ACCESS_KEY>,凭据每次请求经 BrowserSecretResolver 解出,不缓存、不入日志。camofox userId = 本项目 profileKey(站点/账号隔离),sessionKey = browser_session.id。
  • none.ts:默认实现(未配置浏览器),能力全关,动作报 unavailable。
  • redact.ts:redactSnapshot / redactBrowserUrl,快照与地址进入模型前遮蔽密码框值、Cookie 值、含 passkey/token 的 URL。
  • profile-lock.ts:同一 profile 串行锁(进程内内存实现;多进程部署换持久化实现,接口不变)。
  • budget.ts:导航域名白名单(含子域),非 http(s) 拒绝。

v0.1 已实现

health(/health,免认证,503 → degraded)、capabilities(静态声明;probe: true 读上游 /openapi.json 推导,缺端点即降级)、openSession(POST /tabs)、navigate(POST /tabs/{id}/navigate,预算内重试 5xx/超时/网络错误)、snapshot(GET /tabs/{id}/snapshot?format=text,字节预算截断 + 脱敏)、screenshot(GET /tabs/{id}/screenshot,JSON base64 或二进制图片;登录页/含凭据地址标 modelSafe: false)。

M2(当前抛 BrowserError('not_implemented'))

方法 上游候选端点 待办
closeSession DELETE /sessions/{userId} 与 browser_session 持久化、租约释放一起落地
listSessions GET /tabs?userId= 上游只列标签页,会话清单以 DB 为准,需对账
click / type POST /tabs/{id}/click / type / select 接凭证代理(TypeInput.kind = 'secret');README 示例 pressEnter 与 OpenAPI submit 字段名不一致,需核验
extract POST /tabs/{id}/extract(JSON Schema + x-ref) 需先 snapshot 建 ref 表
waitForDownload GET /tabs/{id}/downloads?includeData&consume&maxBytes 产物落 blob 暂存 + sha256,交后端核验
acquireControl / releaseControl 无(上游无接管 API) 服务层以 browser_control_lease 持久化;画面/输入通道待 VNC 原型

仅对 mock 与上游文档验证,未连接真实实例。