v1.0.48

xnx3/translatev1.0.48Aug 5, 2026by github-actions[bot]

AI Summary

A substantial update for Skyvern introducing code-first browser recording, artifact timeline visualization, and significant security hardening for artifact URLs and MCP dependencies.

Key Highlights

  • Security hardening: Gate artifact URL re-minting and redact signatures
  • New feature: Code-first browser recording (opt-in)
  • New feature: Artifact timeline tab in browser sessions
  • New feature: Browser Profiles management with refresh-in-place

New Features

  • Record agent actions for workflow replay
  • Artifact timeline tab for browser sessions
  • Browser Profiles management (refresh, role badges)
  • Code-first browser recording (opt-in)

Full Release Notes

## What's Changed

Version bumped from 1.0.50 to 1.0.48

### Recent Changes
- Capture post-run page evidence from the run's own browser session (SKY-14254) (#8229) (b50f02566)
- Add the selector engines Skyvern's producers emit to skycdp (SKY-14071) (#8217) (6a6b6383e)

**Full Changelog**: https://github.com/Skyvern-AI/skyvern/compare/v1.0.50...v1.0.48


## What's Changed
* chore(deps): bump mcp to 1.28.1 to fix 3 high-severity Dependabot alerts by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7496
* Refuse Copilot drafts whose entire output contract is a null blocker (SKY-12539) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7497
* Gate artifact URL re-minting to Skyvern signed content URLs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7499
* feat(SKY-12550): record what an agent does in the browser so it can be replayed as a workflow by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7498
* Import externally recorded eval runs into the eval dashboard by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7502
* [SKY-12553] Add per-gate Copilot author-time log-only registry by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7503
* Strip metadata from signed artifact URLs and redact signature params from logs and traces by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7504
* Redact signed/presigned artifact URL params from webhook delivery logs (SKY-12624) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7505
* feat(SKY-12600): add an artifact timeline tab to browser sessions (run view for MCP-driven sessions) by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7506
* fix(SKY-12545): keep credentialed terminal actions past login by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7507
* SKY-12593: load legacy copilot criteria-set rows via tolerant decode, fail closed on drift by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7508
* fix(SKY-12590): treat off-schema OTP parser output as 400, not retryable 502 by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7509
* fix: offer the Skyvern credential source outside the cloud shell by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7510
* feat(browser): OSS browser-engine registry/adapter foundation (SKY-12007) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7511
* Render-validate copilot code blocks at the persist seam (SKY-12591) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7512
* Show unsaved workflow changes and change summaries in Studio (SKY-12442) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7513
* refactor: extract _is_org_flag_enabled so org-bucketed flag gates stop being copy-pasted by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7514
* test(SKY-12634): stop two select tests racing a real wall clock under CI load by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7515
* fix(SKY-12399): shadow-DOM-aware incremental dropdown detection with scoped fallback by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7516
* fix(SKY-12399): verify masked input commits, retype on empty/placehol… by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7517
* fix: run background work when FastAPI BackgroundTasks is unavailable by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7518
* docs(SKY-12601): make MCP element-ref lifetime truthful per transport (stdio vs hosted HTTP) by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7519
* fix(SKY-12399): surface a diagnostic when a submit click does not advance the form by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7520
* feat(SKY-12153): fallback credentials with automatic run retry by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7521
* feat(SKY-12612): batch run-heal-summary endpoint for run-list outcome-risk by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7523
* fix(SKY-12661): route select-verification prompts through LLM_CONFIG_BY_PROMPT_TYPE by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7524
* feat(SKY-12612): run-list outcome-risk marker by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7526
* fix(SKY-12400): verify autocomplete commit on all selection paths with polled suggestion detection by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7525
* Converge Copilot author-time metadata-gate rejects to a typed terminal (SKY-12594) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7527
* fix(SKY-12153): address codex review on fallback credentials (follow-up to #13599) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7528
* test: stop hand-quoted Playwright snippets from drifting back into the MCP tools by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7529
* Scope the public eval artifact lookup to the eval org (SKY-12639 follow-up) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7530
* fix(SKY-12398): verify text-input commit with fallback ladder and repeated-action circuit breaker by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7531
* Arm an escalating convergence directive when Copilot authors code blocks without metadata (SKY-11949) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7533
* feat: code-first browser recording (opt-in feature preview) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7534
* feat(SKY-12505): ADR + hexagonal scaffold for the Python CDP proxy service by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7535
* Add CDP proxy benchmark harness: direct vs proxied on identical workloads (SKY-12503) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7536
* Add the command-interception middleware seam for custom CDP-op implementations (SKY-12535) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7537
* Harden skyvern-api parsing/validation boundaries (SKY-12523, SKY-12625, SKY-12515) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7539
* Reject ambiguous xpath-fallback element resolution (SKY-12606, SKY-12605, SKY-12635) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7540
* Classify transient LLM upstream failures as retryable (SKY-12620) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7541
* Support org-level CDP operation denylists (SKY-12538) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7542
* Guard undefined block parameters in workflow editor (SKY-12405) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7543
* fix(SKY-12530): don't remove shared workflow-run context on SDK run_action cleanup by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7545
* Production entrypoint, health/drain, and cloud image for the CDP proxy (SKY-12533) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7546
* Honor CDP proxy denylist env knobs in production; second-signal fast drain exit (SKY-12533) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7547
* feat(SKY-12649): Browser Profiles Refresh-in-place, role badges, used-by delete guards by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7548
* SKY-12309: Avoid failing successful Copilot runs when an optional blocker is absent by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7549
* feat(SKY-12649): browser profile usage endpoint + atomic delete used-by guard by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7550
* fix(SKY-12701): disable OTLP trace export on Hetzner temporal workers and quiet exporter logs by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7552
* Gate durable Copilot authoring on scout goal-reach; arm the freehand reject by selector provenance (SKY-12547) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7556
* Copilot: stop unbounded retry loops on code-block turns — end with an honest failure message or a corrective hint (SKY-12711) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7557
* SKY-12548: Copilot: carry a typed binding directive across author-time declared-input rejects so the next attempt converges by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7564
* SKY-12588: withhold block runs while declared workflow inputs are wired to nothing (stacked on #13549) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7565
* Preserve delivered-unverified Copilot output (SKY-12614) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7566
* SKY-12613: Add selection-shaped routes to the typed binding corrective by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7567
* fix(SKY-12715): accept template variables in HTTP Request block URL validation by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7569
* fix(SKY-12143): recover credential inputs corrupted by the fill+type caret race (rotation + truncation) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7570
* feat(browser): pin one browser engine per logical run (SKY-12007) [2/5] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7571
* feat: land run-level tagging workstream by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7259
* Classify page-analysis timeouts as page-load timeouts (SKY-12629) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7538
* Guard element ops against incompatible element types (SKY-12687, SKY-12566, SKY-12673) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7544
* SKY-12561: Remove unreachable submit rung binding channel by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7568
* chore(security): non-security md5 flag in copilot schema test and npm ignore-scripts for proxy js_clients fixture by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7572
* test(browser): engine-owner cancellation and cleanup races (SKY-12007) [3/5] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7573
* Reject malformed MCP tool arguments with a clear error (SKY-12666) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7574
* Add paused to the public RunStatus enum (SKY-12549) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7576
* Bound max_screenshot_scrolls to prevent workflow_runs integer overflow (SKY-12445) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7575
* feat(browser): terminal cleanup for standalone script browsers (SKY-12007) [4/5] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7577
* fix(SKY-12698): auto-wire workflow parameters into code blocks on code-only create/update by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7578
* Remove the CDP proxy service and proxy configuration from the package by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7583
* DB-back the Odysseys runtime/tokens/cost panel (drop the hardcoded dataset) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7582
* feat(SKY-12490): clean up browser profile folders orphaned by hard-killed local MCP servers by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7580
* Accept phone numbers that country-aware fields rewrite with an explicit +1 (SKY-11718) by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7585
* feat(SKY-12443): make studio run-view JSON blocks searchable by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7586
* feat(SKY-12676): show every browser action live on the session Timeline for MCP sessions by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7587
* chore(deps): bump axios from 1.16.1 to 1.18.0 in /skyvern-frontend in the npm_and_yarn group across 1 directory by @dependabot[bot] in https://github.com/Skyvern-AI/skyvern/pull/7584
* Remove obsolete standalone container definition by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7588
* feat(SKY-11571): let collapse feature flags target individual workflows by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7589
* Revert the six flag-gated agent-handler verification PRs for SKY-12398/12399/12400 by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7590
* security: bump brace-expansion, js-yaml, and Pillow to fix eleven Dependabot alerts by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7592
* security: bump brace-expansion and Pillow to patched versions by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7591
* fix(SKY-12240): scope failure reason to one place per surface by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7595
* Stop rejecting valid requested outputs after copying errors by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7596
* feat(browser): cloud per-run engine resolver + fail-closed engines (SKY-12007) [5/5] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7597
* fix(SKY-12245): disable double-click zoom on the workflow editor canvas by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7598
* fix(SKY-12246): respect canvas lock for studio block expand/collapse by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7599
* chore(SKY-12746): rename studio run-view sections to Run inputs/Run outputs by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7600
* fix(SKY-12242): fill studio browser media pane edge-to-edge by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7601
* Studio block detail: render status via the shared StatusBadge pill by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7602
* Replace the Workday static script (deterministic) + flag-gated code-mode rollout by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7603
* Restyle the studio action-detail failure block to the app's destructive convention by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7604
* chore(SKY-12238): rename studio Run CTA "Run agent" to "Run" by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7605
* Rename Studio header CTA "Agent Inputs" to "Inputs" (SKY-12237) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7606
* fix(SKY-11513): link studio title to runs page with a blended edit button by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7607
* feat(SKY-12766): surface run id on copilot block_progress frames by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7608
* feat(SKY-12766): render copilot test-run action rows live during runs by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7609
* feat(SKY-11258): stream code-block actions live via idempotent upsert by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7610
* Restore SKY-12240 failure-scope FE changes reverted by #13707 by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7611
* Suppress recurring Playwright collected-object teardown log burst (SKY-12701) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7612
* Stop recording completed Copilot runs with registered outputs as failures (SKY-12765) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7613
* feat(SKY-12138): default-enable copilot credential-pause kill-switch by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7614
* Copilot: the log-only feature flag can now disable any draft-blocking check, not just 3 of 7 by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7616
* feat(SKY-12788): add Gemini 3.5 Flash Lite and Gemini 3.6 Flash model support by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7617
* feat(SKY-12771): add Agent filter to Run History page by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7618
* Set up MCP without leaving the app by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7619
* Revert "Replace the Workday static script (deterministic) + flag-gated code-mode rollout" by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7620
* fix(SKY-12490): retry profile creation when startup sweep tombstones a freshly locked dir by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7621
* eval.skyvern.com improvements by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7615
* workday runs onto the deterministic script by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7622
* Resolve Copilot bare-word entrypoints from verified evidence by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7624
* security: bump body-parser, dompurify, fast-uri, pyasn1, setuptools to fix 11 Dependabot alerts by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7627
* Supersede stale markerless pinned scripts with the current static module (SKY-12657) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7625
* SKY-12811 Let the copilot keep exploring until it finds every value the request asked for by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7628
* SKY-12760: Ask for login credentials at turn start, not end-of-turn by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7629
* SKY-12732: Stop the copilot from putting real passwords into generated login code by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7630
* fix(SKY-12743): add opt-in popup grace for file-download clicks by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7631
* Keep required steps in generated browser workflows by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7632
* fix(SKY-12786): lower expected CDP frame publisher logs by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7633
* test(SKY-12575): cover delimiter-broken JSON in the LLM href-render repair path by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7634
* fix(SKY-12817): support hover instructions in single-action task parsing by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7635
* fix(SKY-12710): scope domUtils.js injection to avoid page global collisions by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7636
* Recover and classify stale frame/element targets in typing and frame resolution (SKY-12618, SKY-12558) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7637
* fix(SKY-9971): bound transient download observation gaps by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7638
* test(guard): close aliased ImportFrom submodule bypass in browser-object identity guard by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7639
* Remove the outputs indicator dot from the Studio v2 Outputs toggle (SKY-12793) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7640
* perf(frontend): drop duplicate run-status poll on run view by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7641
* feat(SKY-12792): cue the studio title as a link to past runs by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7642
* Render Workflow Studio run-view block prompts as prose, not code (SKY-12797) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7643
* feat(SKY-12798): render the studio run view at /runs/{wr} by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7644
* Keep copilot test-run action rows visible at the terminal turn by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7645
* feat(SKY-12773): show created/queued/started/finished run timing in the Studio run summary by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7646
* Bind per-run browser engine's error families to its selection by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7647
* Keep a credential named earlier in the conversation approved when the user confirms (SKY-12812) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7648
* fix(copilot): converge repeated metadata rejects (SKY-12763) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7649
* Handle optional custom-selection misses gracefully; keep required misses typed (SKY-12678, SKY-12631, SKY-12514, SKY-12700) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7650
* Capture inline data URL downloads as files by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7651
* Show human-in-the-loop approve/reject buttons in both run views (SKY-12802) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7652
* Classify element screenshot capture failures (SKY-12519, SKY-12517, SKY-12477) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7653
* feat(SKY-12835): responsive StatusBadge — collapse to icon-only under container width pressure by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7654
* Show an instant rotating placeholder in the copilot chat after send by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7655
* Fall back select-verification prompts to the secondary LLM instead of the main model by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7657
* Make the copilot's terminal credential ask recoverable by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7656
* Classify auth-gated Copilot actions as login intent so the credential prompt fires at turn start by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7658
* Show the test-run count on the copilot not-confirmed checklist stub by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7659
* fix(SKY-12831): co-locate copilot run-tool narration + name unmapped tools (SKY-12385) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7660
* Deterministic Workday script: fix widget fills + offline regression suite (SKY-12657) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7661
* feat(SKY-12794): keep studio Code a run-view tab; editor Visual/YAML as shared toggles by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7662
* fix(SKY-12848): ignore unmatched VNC touch releases by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7663
* fix(SKY-12416): re-resolve visibility after navigation by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7666
* Add a Past Runs tab to Studio and label the run pane "Run: wr_…" (SKY-12796) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7667
* Bound workflow copilot debug HTML before prompts by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7664
* Wait for disabled controls before browser actions (SKY-12518) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7665
* feat(SKY-12843): eval dashboard screenshot gallery with per-step narration + rubric breakdown by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7669
* SKY-12564 Parameterize witnessed account and month in download filenames by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7670
* Assemble a shadow terminal outcome envelope per copilot turn by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7671
* Sync OpenAPI reference from production by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7672
* Truthful stop copy and honest run-outcome rendering in copilot chat by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7673
* Resolve ambiguous typing targets before input (SKY-12707) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7674
* Route vendor hosted-browser sessions through the CDP proxy behind a flag by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7675
* Add a screenshot side-effect hook to the CDP proxy: capture core, config source, artifact sink by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7676
* Only upload live-view screenshots while someone is actually watching by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7677
* Re-authenticate an expired integration connection in place (SKY-12572) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7680
* Copilot chat reads run-outcome facts from the terminal envelope (SKY-12853 FE) by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7682
* Copilot uses a saved credential matching the login site automatically; credential create/update APIs accept tested_url by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7683
* Let Copilot finish a login it was allowed to start (SKY-12867) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7684
* SKY-12415 Keep date-driven row selection stable as lists change by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7686
* Render the copilot terminal reply from the finalized outcome envelope, behind a flag by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7681
* SKY-12733 Stop correct “no” answers from failing completed workflows by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7688
* Keep real passwords out of generated login code, and stop endless safety-check retries (SKY-12866) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7689
* fix(SKY-12641): give the LLM clear no-file-download feedback by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7690
* Classify scrape timeouts by the run's selected browser engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7691
* Route unsafe checkbox blockers through verified fallback by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7692
* SKY-12858 Copilot: list the steps a draft workflow is missing, and add them back after repeated omissions by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7695
* Stop PBS OTLP span-export error bursts caused by brief node-local collector blips (SKY-12925) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7694
* fix(SKY-12864): tell MCP agents when code-only rejections come from org policy by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7693
* Stop replaying custom-select clicks that may have already changed the page by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7696
* MCP-created code blocks default to the new code block editor experience by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7697
* Deduplicate the MCP block walk and store empty code block goals as NULL by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7698
* SKY-12916 Let Copilot safely continue through login and verification pages by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7699
* Log the copilot terminal render decision per turn (SKY-12853) by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7700
* SKY-12918 Copilot: remember the site from the first message when a follow-up doesn't repeat it by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7701
* Save the workflow instead of giving up when Copilot already found the value (SKY-12907) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7703
* Bound feature-flag flip staleness to snapshot sync (SKY-12962) by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/7704
* Remove retired Fern documentation and media (SKY-12972) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7705
* Resolve the output-contract pass path through the single actuation resolver (SKY-12907) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7706
* Classify code-block heal errors by selected engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7707
* Classify vendor CDP errors by selected engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7709
* Classify incremental-tree analysis timeouts by the run's selected browser engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7710
* Classify cached-script timeouts by selected engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7708
* Let Copilot use credentials saved without a login URL (SKY-12959) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7711
* Workday submit: require positive confirmation before marking submitted (SKY-12657) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7712
* SKY-12933 Copilot: build the login step from what the scout demonstrated by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7713
* SKY-12917 Make Copilot credential resolution exhaustive by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7714
* SKY-12957 Copilot: stop asking the user to confirm outputs the request contract already pinned by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7715
* Use current credential scope in deferral gates by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7716
* Add an always-on per-iteration TODO list to the copilot agent prompt by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7717
* Gate AI-fallback completion for the Workday submit block (SKY-12992) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7718
* Keep Copilot tool calls paired during context pruning by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7719
* Remove 34 unreferenced documentation media files by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7721
* docs: serve documentation media from jsDelivr (SKY-12977) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7722
* Stop video-path future poisoning from killing workflow activities and finalize interrupted runs (SKY-12852) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7723
* Remember the target site across turns, including after a cancel (SKY-12968) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7737
* fix(SKY-12998): route verified copilot fixes through the review gate by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7739
* Scan tests/unit for the url-substring anti-pattern before it reaches OSS CodeQL by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7743
* Remove docs/pr-screenshots (internal PR evidence, not docs) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7744
* security: bump body-parser to 1.20.6 to fix two Dependabot alerts by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7626
* Sync OpenAPI reference from production by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7749
* security: bump auth-stack, next, sharp, brace-expansion, postcss, jupyterlab (Dependabot) by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7747
* Charge 10 credits per OTP-code parse by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7750
* SKY-12974 Copilot: stop rejecting a saved credential at author time; redact at the log and database seams by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7751
* Add a pure, fail-closed policy core for browser actions by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7753
* Stop banning evaluate in Copilot-authored code blocks; fail closed on unparseable drafts (SKY-13043) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7754
* SKY-12945 Copilot: route the code-authoring guardrail's give-up into the accept-or-build step by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7740
* Add Claude Opus 5 as a selectable model (SKY-13026) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7741
* fix(log-noise): downgrade handled screenshot-timeout from error to warning by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7757
* Bound Redis connect-retry cost and fail open on the browser-address quarantine path by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7766
* Type into the nested input when a card field's wrapper isn't directly fillable (SKY-12448) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7773
* Recover blocked inline PDF downloads when no download event fires by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7774
* Classify non-script post-dispatch click timeouts by selected engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7772
* SKY-12981: invalidate a failed loop block's output to prevent stale prior-iteration reuse by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7775
* CI fix: stabilize test_paused_loop_does_not_trip_total_timeout_on_resume by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7786
* Store blank OTP run-scoping ids as NULL instead of empty strings (SKY-13060) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7784
* SKY-13061: reach reCAPTCHA v2 anchor inside its frame by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7787
* Repair malformed MCP list and timeout arguments by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7765
* Compatibility hotfix: put the input-text runtime hint on the base Action model (SKY-13013) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7777
* Route Workday login to the agent; keep fill/submit deterministic (SKY-12657) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7778
* Copilot: stop discarding saved drafts for reasons the save path only steers on (SKY-13125) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7794
* feat(browser-firewall): hydrate destination facts for forms, tabs, and dialogs (SKY-12875) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7767
* fix: log best-effort error-detection fallbacks at warning not error by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7760
* SKY-13030 Copilot: work out which email address to sign in with instead of demanding a password that cannot exist by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7761
* CI fix: restore monotonic-clock stabilization reverted by #7794 by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7797
* Cap sensitive-artifact TTLs in storage presigned URLs too (SKY-12527) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7789
* Temporarily disable destination-fact capture to stop resolved-URL amplification (SKY-12875) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7770
* SKY-13105 Bound the page read that could hang an entire copilot turn by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7796
* SKY-13000 Copilot: a plain single-value extraction verifies as success instead of "not independently verified" by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7779
* Clarify destination-fact security constraints by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7780
* Stream large captured downloads to disk instead of replaying the body (SKY-12642) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7804
* Bind richer per-selected-engine browser error families (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7801
* Route page.py evaluate/context-loss recovery through the selected browser engine (RUS-5) [R4a] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7811
* Route CDP retry/connection classification through the selected engine (RUS-5) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7810
* feat: backend activity-driven persistent browser session lease renewal (SKY-10833, SKY-13045) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7813
* migrate dom.py catch sites to selected-engine error identity (SKY-12007) [R5] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7812
* Let copilot exploration solve login CAPTCHAs via the shared solve ladder (SKY-12967) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7755
* Fetch a sign-in code from an email address alone, keeping code-vs-link (SKY-13031) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7756
* Allow clicking through conditional branches in read-only workflow canvases (SKY-12861) by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7758
* fix(log-noise): downgrade expected frontend-disconnect in message channel stream by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7759
* SKY-11100: add compute task-type to task_v2 (code-as-action synthesis) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7798
* Eval dashboard: difficulty pills, perf-vs-cost quadrant, copyable task titles by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7799
* Cap screenshot and recording URL lifetime at one hour (SKY-12527) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7788
* SKY-13032 Copilot: only three named checks may refuse to save a workflow; delete the rest by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7791
* Copilot acts on a page by selector only, and reports why an action failed by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7792
* Raise cloud storage block limit to 300 files by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7793
* Report element-tree share and actual drop count when a prompt exceeds the token ceiling (SKY-12350) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7820
* Reject knowably invalid Bitwarden item IDs at workflow run creation by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7819
* Reap orphaned upstream browser sessions from outside the process that holds them (SKY-13158) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7821
* Persist webhook_failure_reason when webhook delivery raises, and name the exception in delivery logs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7818
* Hide Tags, Scripts, and Custom LLMs sections from the API reference (SKY-13151) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7817
* Make row actions visible with a shared kebab + context-menu component (SKY-12955) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7816
* Let normal-select reach 100% without breaking sibling select experiments' control groups by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7815
* Fix end timestamps in code-only runs: finalize uploaded recordings, stamp action times (SKY-13145, SKY-13142) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7814
* Fix finally block failure propagation (SKY-13122) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7809
* Stop rationing copilot page inspection and show the page after acting by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7808
* SKY-13107 Refuse to type a saved credential's secret into a page field by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7807
* Stop logging closed browser targets as screenshot errors (SKY-13058) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7823
* Stop logging an expected analytics serving-table absence as an error by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7824
* SKY-13104 Report page controls the copilot can actually act on by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7806
* SKY-13109 Give block authoring the steps the copilot's scout already demonstrated by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7805
* Stabilize download handler timing tests by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7803
* Stop the unsaved-changes dialog from exiting its navigation blocker twice (SKY-13124) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7825
* Validate the create-from-prompt response shape at the boundary (SKY-13154) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7826
* Fail the run-timeline query when the API returns a non-array payload (SKY-13162) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7827
* Fix failing compute-task safety test on main by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7800
* Delete the copilot repair ceiling: a stuck repair is reported, not a reason to end the turn (SKY-13108) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7802
* Classify closed browser targets during screenshot capture (SKY-12906) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7795
* Show complete six-digit labels on the run outcomes chart by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7783
* Validate destinations on two unguarded browser navigation paths (SKY-13113) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7828
* Route download.path() awaiters through shielded resolve_artifact_path (SKY-12982) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7829
* Revert defineProperty export helper to plain assignment in injected-script wrapper (SKY-12875) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7831
* Redact secret values from exception text at the reporting seams (SKY-12626) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7832
* Polish studio run pane failure UX (SKY-13141) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7830
* SKY-12543: Guard checkbox label fallback from interactive descendants by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7833
* fix: preserve unparsed OTP content for agent-time resolution by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7834
* fix(SKY-12735): preserve open ARIA popups from screenshot-scroll dismissal by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7837
* migrate handler.py canary-critical error catches to selected-engine APIs (SKY-12007) [R6] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7835
* Read adopted-session blob downloads from every open browser tab (SKY-12621) by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7838
* Clarify browser session defaults and CAPTCHA solver trade-offs in docs by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7836
* fix(RUS-5): thread selected engine through handler readbacks by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7839
* Render Google Sheets destination dropdown options as single A - Header lines (SKY-13180) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7840
* Fix sequential child runs failing with missing browser page (SKY-13182) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7841
* Route scheduled-run finalizers to the derived run id; classify non-timeout activity failures (SKY-12983) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7842
* fix(RUS-5): thread selected browser engine into remaining elements by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7843
* Scope the task generation cache to the requesting organization (SKY-13102) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/7844
* feat: support browser session startup URL by @sardortaylakov in https://github.com/Skyvern-AI/skyvern/pull/7029
* [SKY-12229] Bump mistune to >=3.3.0 for CVE-2026-49851 by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7785
* Restore a local dev path for copilot code-block test runs by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7856
* fix(RUS-5): classify page boundary engine errors by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7861
* fix: ignore unresolved OTP placeholders by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7859
* Collect complete rows from server-windowed virtualized grids by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7863
* feat: enable raw OTP fallback by default, remove TOTP_RAW_FALLBACK_ENABLED by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7866
* feat(SKY-12845): serialize workflow runs by credential (core, non-scheduled) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7865
* fix(openapi): remove orphaned raw TOTP response component by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7867
* SKY-13134: deploy lightweight worker in automatic staging rollout by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7868
* Show what the copilot actually did in its activity feed (SKY-13203) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7869
* SKY-13202 Let the copilot see connected Google and Microsoft accounts by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7871
* Report Copilot test-run failures honestly, and remember ones no later run retried (SKY-13206) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7873
* Resolve Copilot credentials when the login page appears, not only at turn start (SKY-13200) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7878
* fix(RUS-5): preserve pinned selection in handler cleanup paths by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7879
* Give copilot-written sign-in code time to load a slow page (SKY-13208) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7885
* Make Copilot GPT-5.6 cache writes reusable and observable by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7888
* Copilot: credit working runs and retire the authoring guards that failed them by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7845
* build(deps): non-default rustwright dependency group + lock guard (RUS-5) [R1] by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7870
* Match the Azure OpenAI host, not a URL substring by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7898
* Parse ZIP unzip-only: File Parser always outputs extracted file list for ZIPs (SKY-13279) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7899
* Copy icon on hover for every JSON tree viewer node (SKY-13286) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7900
* API docs sync: cap browser session lifetime at 4 hours by @mintlify[bot] in https://github.com/Skyvern-AI/skyvern/pull/7887
* SKY-13243 Generalize 2FA email scanning into a source registry with Outlook support by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7901
* Recover adopted-session blob downloads by reading bytes at the download event (SKY-12621) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7902
* Stop a Python comment from killing an entire code block (SKY-13300) by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/7903
* Overlay the hover drag grip on the block card gutter instead of reserving header space (SKY-13289) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7904
* SKY-13244 Select a connected email account as the 2FA identifier (re-land) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7905
* Increase loop block iteration limit from 500 to 1000 (SKY-13310) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7907
* SKY-13245 Add Magic Link tab to the Credentials page (re-land) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7908
* Reconcile the strict synthesis partition at one accounting point (SKY-13207) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7909
* Keep a Copilot turn in the chat when the server restarts mid-turn (SKY-13205) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7911
* Deliver the download instead of shipping a draft the build test disproved (SKY-13230) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7914
* Report code-block browser failures by their real cause, not as unsupported operations by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7913
* Tell the user when a copilot turn runs out of time, and log every timeout (SKY-13249) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7927
* Split login from data extraction when the scout demonstrated a credentialed flow by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7934
* Route reasoning_effort via extra_body on the partner-hosted DeepSeek config (SKY-12750) by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7938
* Route non-mutating requests to answer-only Copilot turns by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7939
* Redact secrets in run artifacts: HAR/console scrubbing, LLM-boundary redaction, visual input masking (SKY-11822) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7940
* Let an MCP agent wait on two page states at once (SKY-13252) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7941
* Count the two-state wait as an observation (SKY-13252 follow-up) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7942
* Attach at-failure screenshot and final URL to failed code blocks (SKY-13250) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7943
* Expose 1Password and Bitwarden MCP endpoints by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7945
* Fix Cmd+V paste into the VNC live browser stream on macOS (SKY-13324) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7944
* fix(credentials): delete-path follow-ups from #14215 review (SKY-13271) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7946
* Add a Gemini API flex-tier config for gemini-3.1-flash-lite by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7949
* Add LLM experiment launch gates: OpenRouter provider routing, pinned DeepSeek 0731 key, multi-arm analyzer by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7950
* Materialize the updated row before commit so artifact URI writes stop raising MissingGreenlet (SKY-13354) by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7951
* fix: log per-poll OTP webhook fetch failure at warning not error by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7952
* fix(tasks): cancel-button gating, webhook-replay runId, google-oauth valid flag by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7953
* Downgrade setup_workflow_run client-4xx failures from error+traceback to warning (SKY-13284) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7954
* Add per-workflow Mask Secrets advanced setting (SKY-11822) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7955
* Use the existing runaway guard for the download-handler wait timeouts by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7958
* fix(SKY-13182): recover a live tab-less inherited browser instead of orphaning it by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7960
* Redact bearer auth headers and serialized payloads from error logs (SKY-13195) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7961
* Validate shared browser navigation destinations and revalidate redirect hops (SKY-13112) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7962
* Bind the URL-matched saved credential when the agent observes a login page (SKY-13293) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7966
* Bind credential fill to the live page origin by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7967
* Let organizations default their runs to custom Smart/Fast LLMs from settings (SKY-13343) by @suchintan in https://github.com/Skyvern-AI/skyvern/pull/7968
* Document unbound credential denial and remove the credential-fill test shim by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7969
* Bind protected references to trusted consumers (SKY-12876) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7970
* Constrain DOM reads and inventory browser-effect sinks by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7971
* SKY-13353 Follow Copilot test runs in Live Browser by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/7972
* fix(frontend): stop reporting GitHub star-count rate-limit as a client error by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/7974
* fix(SKY-13335): emit secure CodeBlock runner telemetry on the success path by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7975
* Return standalone (dedented) code from the MCP code-block synthesize tool (#SKY-13336) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7976
* Add flag-gated skip of the check-user-goal LLM call for cached-script runs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7977
* Fail run closed when the CodeBlock auto-provisioned browser session cannot be created (#SKY-13334) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7978
* Fix browser session download fail-silents (SKY-13385) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7979
* Bind terminal persistence and webhook callbacks (SKY-12887) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7980
* Deliver the MCP user-agent header so MCP-triggered runs persist trigger_type=mcp by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7982
* SKY-13097 Apply billing + rate-limit guards to task endpoints by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7984
* SKY-13100 Bound gzip decompression in browser recording processing by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7985
* Revert "Add flag-gated skip of the check-user-goal LLM call for cached-script runs" by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7986
* fix(SKY-13101): documented webhook verifier now rejects forged signatures by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7987
* Bound destination-fact resolution work and re-enable capture (SKY-12875) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7988
* Resolve the effective form action once and stop nested budget replenish (SKY-12875) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7989
* Add live view to the browser infrastructure capability table by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7991
* Block internal navigation hops before the browser follows them (SKY-13377) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7992
* feat(SKY-12845): credential run-sequentially toggle in edit UI by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7995
* Execute the deterministic custom-select collapse for input_text entries with strict entry-scoped verification by @marcmuon in https://github.com/Skyvern-AI/skyvern/pull/7996
* Probe inherited-browser transport liveness before reusing a page-less browser by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/7997
* Move New profile to the top of the browser-profile dropdown by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7998
* Keep the copilot Explore phase active while the scout is still logging in by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/7999
* Show the centered loading indicator while a run resolves (SKY-13416) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8000
* Exclude login-cookie sidecars from fresh browser profiles (start_fresh cross-org leak) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8001
* Resolve the login-block credential the same way at run setup and mid-run by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8002
* Recover soft-deleted Key Vault secrets before updates by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8003
* Revert "Block internal navigation hops before the browser follows them (SKY-13377)" by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/8004
* Scope the Copilot sandbox gate to code-bearing drafts and make the refusal terminal by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8005
* Give recorded and compute-generated code blocks the new code block shape (SKY-13185) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8006
* Recover adopted-session statement downloads from live and transient PDF blobs (SKY-12621) by @LawyZheng in https://github.com/Skyvern-AI/skyvern/pull/8007
* Add atomic one-shot browser effect approvals by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8008
* Shared destructive-confirm dialog primitive + standardized wording (SKY-12989) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8009
* Bound LLM provider calls on the direct client path with a real wall-clock deadline by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/8010
* Register OpenAI-direct and Azure GPT-5.6 rates from separate tables by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/8011
* Return a card-connected credential as a typed id and bind its login origin (SKY-13432) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8013
* Pin vendor identity non-disclosure across customer-facing surfaces (SKY-13266) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7990
* Skip the empty-downloads S3 LIST fallback for post-cutover runs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/7983
* Route script-assist LLM calls through the per-prompt model config flag by @cindehaa in https://github.com/Skyvern-AI/skyvern/pull/8015
* Persist vendor live-view metadata securely by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8014
* Drop never-deployed CDP route env overrides and share one rollout gate by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8017
* limit workflow status fetch concurrency by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8018
* Fail fast on oversized workflow branch context by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8016
* Retain vendor browser recordings after session teardown (SKY-13262) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8019
* fix: keep second status batch unbounded in workflow status response by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8020
* Capture downloads from adopted vendor browser sessions (SKY-13263) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8021
* Fix MCP-created sessions for code-only workflows (#SKY-13338) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8022
* Freeze the wall clock in the select-option widened-shape test (SKY-12634) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8023
* Restore the message field and organization_id on foreign stdlib log records by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8024
* fix(SKY-13415): hide the copilot rollup chevron when expansion adds no content by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8025
* Show a searchable org-credential picker for copilot credential asks (SKY-12832) by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8026
* fix: reap browser sessions whose runnable owner type cannot be resolved by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8027
* Fix email OTP code persistence, expected-type enforcement, and sign-in link recall by @celalzamanoglu in https://github.com/Skyvern-AI/skyvern/pull/8028
* Return the number a user asked for, not the one beside it (SKY-13226) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8029
* Carry the typed CodeBlock runner error code onto the block result (SKY-13469) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8030
* Stacked: cross-process PBS reads (SKY-13473), fail-closed script execution, vendor teardown budget by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8032
* Open a tab when a code block's browser session has none (SKY-13338) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8033
* Retry a CodeBlock browser session that times out starting instead of failing the run by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8034
* fix: emit copilot session ID in CodeBlock logs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8035
* Give each code-block engine its own failure reason when it cannot open a tab (SKY-13338) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8036
* Validate deployed script content before persistence (SKY-13066) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/8037
* Require explicit cloud URL opt-in by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8038
* Validate caller-supplied CDP addresses and withhold the org key from remote endpoints (SKY-13067) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/8039
* Prefer the Playwright error name in tab-open failure reasons (SKY-13338 follow-up) by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8042
* Validate navigation destinations in the MCP browser tools (SKY-13070) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/8041
* fix(SKY-13502): report a closed browser session as closed instead of high demand by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8043
* Stabilize screencast timeout test by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8044
* Validate browser navigation destinations (SKY-13070) by @trevor-cheung in https://github.com/Skyvern-AI/skyvern/pull/8045
* test: preserve SKY-13495 review coverage in the OSS-synced tree by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8046
* Enforce administrator roles on sensitive organization APIs by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8047
* Revert "Enforce administrator roles on sensitive organization APIs" by @AronPerez in https://github.com/Skyvern-AI/skyvern/pull/8050
* Refuse non-http(s) navigation URLs before consulting DNS (SKY-13070) by @pedrohsdb in https://github.com/Skyvern-AI/skyvern/pull/8051
* Use the saved login someone picked, instead of asking for it again (SKY-13483) by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8052
* SKY-10678 Let a diagnosis turn repair the run it just read by @andrewneilson in https://github.com/Skyvern-AI/skyvern/pull/8053
* Bump version to 1.0.48 by @wintonzheng in https://github.com/Skyvern-AI/skyvern/pull/8031

## New Contributors
* @sardortaylakov made their first contribution in https://github.com/Skyvern-AI/skyvern/pull/7029

**Full Changelog**: https://github.com/Skyvern-AI/skyvern/compare/v1.0.47...v1.0.48