Logo of LexmountLexmount Browser
BlogDocs
Logo of LexmountLexmount Browser
Logo of LexmountLexmount Browser

Elastic cloud browser infrastructure for AI agents

GitHubGitHubEmail

Product

  • Features
  • Quick Start
  • Templates
  • Pricing
  • FAQ

Resources

  • Blog
  • Documentation
  • Changelog
  • Roadmap

Company

  • About
  • Contact
  • Waitlist

Legal

  • Cookie Policy
  • Privacy Policy
  • Terms of Service

© 2026 Lexmount Browser All Rights Reserved.

Testing and debugging

Diagnose a live webpage with DeepSeek Harness

Use the native Lexmount DSH Bundle to measure a 500ms SLA, retain text and replay evidence, and separate browser facts, deployed-source facts, and inference without image input.

Complete setup
Example · Native DSH tools measure dynamic input latency and generate a triage report
Example · Native DSH tools measure dynamic input latency and generate a triage report

Setup

Before the first run, install the Lexmount Browser Bundle into the DSH Web profile.

Node.js ≥ 22.14Supported · macOS Apple Silicon / Windows x64Preview
1

Install the Lexmount Browser Bundle

Terminal
corepack install --global pnpm@11.22.0
corepack enable pnpm
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web add @lexmount/dsh-browser@next
2

Start or restart DSH Web

Terminal
npx --yes @deepseek-ai/dsh@0.1.0-rc.6 web

A new Bundle is not hot-loaded. If DSH Web is running, stop it with Ctrl+C in its original terminal, run the start command above, then copy the task prompt.

View Prompt

Integration options

Copy to DSH after the Bundle is loaded
Use only native Lexmount tools already loaded in this DSH process for webpage navigation and interaction. DSH's built-in read-only file and Git inspection may be used only to determine whether the current workspace is related to the target source.

Compatibility constraint: the current DeepSeek model does not accept image input. Do not call lexmount_browser_screenshot or any tool that returns image content to the model, and do not generate PNG, JPEG, or GIF files. All evidence must come from text/DOM results returned by lexmount_browser_snapshot, values returned by lexmount_browser_evaluate, Recording metadata, and text/JSON files. Recording is retained for human replay only; do not read it, extract frames, or attach its content to the conversation.

Preflight: if lexmount_doctor is unavailable, stop with SETUP_REQUIRED and tell the user to run npx --yes @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web add @lexmount/dsh-browser@next, restart DSH Web, and resend this prompt. Do not install the Bundle into the running process or switch browser providers.

If the tool exists, call lexmount_doctor first. When credentials are missing, call lexmount_auth_login and wait for browser authorization, then call lexmount_doctor again. Continue only when it is ready.

Task: validate a dynamic UI performance report against Selenium's official test page at https://www.selenium.dev/selenium/web/dynamic.html . After clicking “Reveal a new input,” the #revealed input must become visible within 500ms; more than 500ms reproduces the SLA violation. The official reference source is https://github.com/SeleniumHQ/selenium/blob/trunk/common/src/web/dynamic.html .

Flow:
1. Create artifacts/dsh-dynamic-ui-triage in the working directory. If it exists, append a timestamp instead of overwriting prior results.
2. Call lexmount_session_create to create exactly one temporary normal-mode Session with Recording enabled, and confirm that Recording is active. Open the target URL and use text/DOM results from lexmount_browser_snapshot to verify that #reveal exists and #revealed is initially hidden. Write the URL, accessed_at_utc, selector presence, visibility, and relevant DOM text to evidence/01-before.json.
3. Do not use a fixed sleep. First use lexmount_browser_evaluate to install a read-only timing probe: capture performance.now() during the #reveal click event and use a MutationObserver to record when #revealed becomes visible. Then click #reveal with lexmount_browser_click and use a bounded evaluate to read elapsed_ms. Write the timing start, end, elapsed_ms, sla_ms, and violated fields to evidence/02-timing.json. Call lexmount_browser_snapshot again to verify that the input is visible, then write its visibility and relevant DOM text to evidence/03-after.json.
4. Use lexmount_browser_evaluate to extract the smallest script text containing reveal() and setTimeout from the live DOM, and write it to evidence/04-deployed-source.txt. Then open the official GitHub reference source above, locate the corresponding function in text returned by lexmount_browser_snapshot, and write it to evidence/05-reference-source.txt. Record the former as a deployed_source_fact and the latter as a reference_source_fact. Do not assume the repository trunk is the exact deployed commit.
5. Inspect the current workspace Git remote read-only. Record workspace_code_facts with file paths and line numbers only when it clearly points to SeleniumHQ/selenium and common/src/web/dynamic.html exists. Otherwise set workspace_relation to unrelated or unknown and do not scan unrelated local code.
6. Write report.md, report.json, evidence/*.json, and evidence/*.txt. report.json must separate browser_facts, deployed_source_facts, reference_source_facts, workspace_code_facts, hypotheses, recommended_next_steps, recording, and cleanup. Return REPRODUCED when elapsed_ms is greater than 500 and NOT_REPRODUCED otherwise. In either case, do not describe the test page's intentional delay as an unknown production incident.

Acceptance: doctor is ready; Recording is confirmed; no tool returning image content was called; text evidence exists for the click and timing; elapsed_ms is finite; 01-before.json, 02-timing.json, and 03-after.json are present, non-empty, and parseable; 04-deployed-source.txt and 05-reference-source.txt are present and non-empty; both reports exist and are non-empty; report.json parses; every fact has an evidence category; the Session is closed; and the Recording is retained. Return PARTIAL_SUCCESS if cleanup fails.

Cleanup: on success, failure, timeout, or cancellation, close only the Session created by this task. Do not close pre-existing Sessions, delete the Recording, modify code, or perform purchases, publishing, deletion, or any other irreversible action.

Return only status, REPRODUCED / NOT_REPRODUCED, elapsed_ms, the SLA threshold, first failed step, report directory, text evidence file count, Recording retention, cleanup result, and a sanitized error summary. Do not expose API keys, Project IDs, Session IDs, Recording IDs, connection URLs, or OAuth details.