Commit Graph

1215 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 eae129ac51 test: build the dynamic action via model_validate for static analysis 2026-09-04 16:25:41 -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 aaeded1c0a test: narrow restored file type for pyright (Base64BinaryFile); ruff format 2026-09-04 12:51:18 -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 24dc68f9ea test: update filesystem validation for supported image extensions 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 743f630923 test: satisfy MCP handler context typing 2026-09-03 20:24:29 -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
Magnus Müller 1346f8caf4 Merge branch 'main' into fix/session-handler-registration 2026-09-03 11:06:15 -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 b2507091aa test: cover aliased schema keyword fields 2026-08-30 14:56:47 -07:00
MagMueller c48b1c9928 fix(llm): preserve schema-keyword field names 2026-08-30 14:48:44 -07:00
MagMueller 442455465b Merge remote-tracking branch 'origin/main' into agency/cloud-skill-v4
# Conflicts:
#	tests/ci/test_browser_use_skill_install_docs.py
2026-08-30 10:01:11 -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 edfccc4078 test(openrouter): assert request parameters are forwarded 2026-08-29 11:08:31 -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
MagMueller 7ed622f0de test: cover all retired browser commands 2026-08-28 22:48:56 -07:00
MagMueller 5525c08c54 docs: migrate remote browser skill to CLI 3.0 2026-08-28 22:48:56 -07:00
MagMueller 295a57d957 docs(cloud): add API v4 skill reference
Signed-off-by: MagMueller <mamagnus00@gmail.com>
2026-08-28 19:31:53 -07:00
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 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