Commit Graph

5312 Commits

Author SHA1 Message Date
MagMueller 215572442d fix: sanitize evaluate source history 2026-09-04 17:20:03 -07:00
MagMueller 5145852597 fix: retain evaluate source in agent history 2026-09-04 17:20:03 -07:00
MagMueller 571947dce9 fix: preserve evaluate JavaScript source 2026-09-04 17:20:03 -07:00
Mohil-Ahuja 63d13371fb fix(agent): redact sensitive data nested below list boundaries in saved history
AgentHistory._filter_sensitive_data_from_dict only recursed one level into
lists: a string or dict directly inside a list was filtered, but a list inside
a list (or any deeper container) was returned untouched. An action parameter
shaped like {"input": {"rows": [["token-123"]]}} was therefore written to the
history file with the secret intact.

Replace the hand-rolled one-level walk with a single recursive value
dispatcher that handles str/dict/list/tuple, mirroring how
Registry._replace_sensitive_data walks params on the injection side, so the
redaction and injection paths cover the same container shapes.

Fixes #5623
2026-09-04 16:25:41 -07:00
MagMueller d828d83d7a docs(tools): list jpeg in binary image support 2026-09-04 12:52:09 -07:00
MagMueller 9c2641832a binary write: validate magic bytes + no ghost file on failed write (cubic review)
- Reject valid base64 that isn't actually an image (e.g. aGVsbG8= -> b'hello'),
  and reject correct image bytes under the wrong extension (magic mismatch), so
  upload flows never receive a corrupt file.
- Register a new file in self.files only after a successful write, so a rejected
  binary write leaves no ghost entry in list_files()/state.
- Binary files cannot be appended (base64 fragments would corrupt).
- Strengthen tests: content-integrity round-trip, non-image base64, wrong-magic,
  and no-ghost assertions.
2026-09-04 12:51:18 -07:00
MagMueller 257bcfd5f2 filesystem: let write_file create tiny binary images (png/gif/jpg/webp) from base64
Upload-validation flows were unwinnable: the agent's file tools are text-only, so
'upload a photo/gif' tasks could never be attempted. write_file now accepts small
image extensions where content is the base64 of a valid image (a 1x1 PNG is ~92
base64 chars, ~23 tokens); the bytes are decoded and written to disk so the file
is a real, uploadable image.

- Base64BinaryFile writes decoded BYTES (not base64 text) to disk; read() returns
  a '[binary png file, N bytes]' stub so base64 never enters the prompt (describe()
  runs every step).
- Strict base64 decode: invalid content is rejected with an error and no file is
  created, so a corrupt 'image' can't slip through upload's file_size>0 check.
- Registered in _file_types (so upload_file.get_file resolves it by basename) and
  from_state (so restored sessions keep it); pruned from UNSUPPORTED_BINARY_EXTENSIONS.
- Text write_file, PDF/DOCX rendering, and other binary rejections unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-04 12:51:18 -07:00
MagMueller afbc714a60 fix: report unknown MCP tools as errors 2026-09-03 20:23:43 -07:00
MagMueller b1ae95ec81 chore: pin release dependencies for 0.13.10 2026-09-03 20:17:35 -07:00
MagMueller 0e0983e30e Release 0.13.9 with Browser Harness 0.1.12 2026-09-03 18:26:02 -07:00
Magnus Müller 780274dc69 Merge branch 'main' into fix/session-handler-registration 2026-09-03 11:08:54 -07:00
Magnus Müller f4e2bb1f74 Merge branch 'main' into fix/issue-4471-fail-fast-browser-startup 2026-09-03 11:06:16 -07:00
Magnus Müller 1346f8caf4 Merge branch 'main' into fix/session-handler-registration 2026-09-03 11:06:15 -07:00
Magnus Müller 57f60e4cf6 Merge branch 'main' into fix/issue-4471-fail-fast-browser-startup 2026-09-03 11:03:22 -07:00
Magnus Müller 3042d8c1df Merge branch 'main' into fix/session-handler-registration 2026-09-03 11:03:22 -07:00
Magnus Müller 4e09955e57 Merge branch 'main' into r266/direct-interactive-image-context 2026-09-03 11:03:22 -07:00
Magnus Müller 501e49ccc7 Merge branch 'main' into r266/direct-interactive-image-context 2026-09-03 09:00:45 -07:00
Magnus Müller b78b3fcebd Merge branch 'main' into fix/session-handler-registration 2026-09-03 09:00:42 -07:00
Magnus Müller 8043fec5e6 Merge branch 'main' into fix/5569-send-keys-plus 2026-09-02 22:44:36 -07:00
Magnus Müller f3a6becbf0 Merge branch 'main' into fix/switch-tab-error-reporting 2026-09-02 17:34:56 -07:00
Magnus Müller 3b12a946cc Keep sensitive live values out of the snapshot and surface checked state
Review follow-up: password, file, hidden, payment (cc-*) and one-time-code
fields never get their live value stored on EnhancedSnapshotNode, so it
cannot leak through __json__. Checkbox and radio inputs now show their live
checked state as the checked attribute.
2026-09-01 19:25:39 -07:00
Magnus Müller 5ffd3090ad Show the live value of pre-filled inputs to the agent
DOM attributes only carry the static value=... written in the HTML. When
JavaScript, autofill, or a framework fills a field, the value lives in the
element property, which DOMSnapshot exposes as inputValue/textValue. The
agent saw such fields as empty and retyped or skipped them (#5647).

Read inputValue, textValue, and inputChecked from the snapshot, keep them on
EnhancedSnapshotNode, and surface the live value as the value attribute for
input and textarea nodes. Password, file, and hidden inputs are left alone.

Fixes #5647
2026-09-01 19:25:39 -07:00
MagMueller ca69ebdf89 Merge remote-tracking branch 'origin/main' into agency/fix-openrouter-5598 2026-08-31 17:36:52 -07:00
Saurav Panda be76e6ccee fix(orcarouter): resolve the API key explicitly instead of inheriting OPENAI_API_KEY
AsyncOpenAI falls back to OPENAI_API_KEY when api_key is unset, so
ChatOrcaRouter(model=...) with no key authenticated its requests to
api.orcarouter.ai with the user's OpenAI credentials. The shipped example
hit this path whenever ORCAROUTER_API_KEY was unset, and .env.example
documented a variable that nothing read.

Resolve api_key from the constructor then ORCAROUTER_API_KEY, and raise
ModelProviderError(401) when neither is set, matching ChatMistral.
2026-08-31 16:02:22 -07:00
Saurav Panda cf4aeaae8d Merge branch 'main' into add-orcarouter-provider 2026-08-31 15:54:27 -07:00
Growth Radar QA df2701e524 fix(browser): preserve default Chrome arg order 2026-08-31 13:15:27 -07:00
MagMueller e0737a614f fix(vercel): preserve provider error status 2026-08-30 23:23:18 -07:00
MagMueller fb916aec56 fix(vercel): require gateway credentials 2026-08-30 23:16:08 -07:00
MagMueller 7d123b7628 Merge branch 'main' into agency/fix-openrouter-5598 2026-08-30 23:16:08 -07:00
Magnus Müller fa780c8e50 Merge branch 'main' into r266/storage-state-utf8 2026-08-30 23:04:21 -07:00
Magnus Müller e785b615d2 Merge branch 'main' into codex/fix-agent-download-path-order 2026-08-30 22:47:23 -07:00
Magnus Müller c05a826af8 Merge branch 'main' into codex/fix-url-negation-boundaries 2026-08-30 19:17:36 -07:00
Magnus Müller 90eb2b42de Merge branch 'main' into fix/bedrock-zero-retries 2026-08-30 19:14:28 -07:00
Magnus Müller ad03ce5e32 Merge branch 'main' into codex/fix-url-negation-boundaries 2026-08-30 17:17:30 -07:00
MagMueller c48b1c9928 fix(llm): preserve schema-keyword field names 2026-08-30 14:48:44 -07:00
Magnus Müller 6a2b0f4f6c Merge branch 'main' into fix_gemini_system_in_user_drops_parts 2026-08-30 02:51:07 -07:00
Magnus Müller 34d7978da9 Merge branch 'main' into fix/issue-5420-honor-browser-use-headless 2026-08-30 02:26:44 -07:00
Saurav Panda 05ea3bd2c9 Merge branch 'main' into add-orcarouter-provider 2026-08-29 15:37:01 -07:00
MagMueller f356f2ed3e fix(openrouter): validate client and response inputs 2026-08-29 10:57:03 -07:00
Aniket Wagh a266399645 fix(llm/google): keep the first user message when include_system_in_user is set 2026-08-29 20:27:38 +05:30
Saurav Panda 4df55bb2bc Merge branch 'main' into fix_url_trailing_bracket_truncation 2026-08-28 17:16:41 -07:00
Ronit Sawaiyan 230881a49b Merge branch 'main' into fix/5569-send-keys-plus 2026-08-29 02:07:43 +05:30
Magnus Müller 281cbc8c74 Merge branch 'main' into fix/issue-5366 2026-08-28 13:26:58 -07:00
Saurav Panda 8a5a3000e0 Merge branch 'main' into fix/5568-tuple-sensitive-data 2026-08-28 12:22:28 -07:00
MagMueller 6de522cb9a docs: sync generated Browser Harness skill 2026-08-28 12:22:03 -07:00
Saurav Panda ab7fd48f63 Merge branch 'main' into fix/5568-tuple-sensitive-data 2026-08-28 12:20:13 -07:00
IENVYshanks 2b56dc8f59 test(browser): validate literal plus CDP key events 2026-08-28 23:08:25 +05:30
Magnus Müller 30b5aca5b0 Merge branch 'main' into fix/issue-5366 2026-08-28 02:25:57 -07:00
r266-tech 81a472a3e2 fix(dom): expose image context for directly clickable images 2026-08-28 09:07:07 +00:00
IENVYshanks 0a6e427c6f fix(browser): support literal plus in send_keys 2026-08-28 11:25:30 +05:30