Skip to content

Alert fix 15#8

Open
dshaikh-godaddy wants to merge 190 commits intoComposioHQ:masterfrom
gdcorp-engineering:alert-fix-15
Open

Alert fix 15#8
dshaikh-godaddy wants to merge 190 commits intoComposioHQ:masterfrom
gdcorp-engineering:alert-fix-15

Conversation

@dshaikh-godaddy
Copy link
Copy Markdown

No description provided.

vyung-godaddy and others added 30 commits November 12, 2025 11:45
- Rebrand from Atlas to GoDaddy ANS Chat Sidebar
- Add support for Anthropic Claude and OpenAI providers
- Implement browser automation tools for Anthropic (navigate, click, type, screenshot)
- Add custom base URL and model name configuration
- Implement per-tab isolated chat history
- Add automatic page context extraction
- Fix auto-scroll during streaming responses
- Update header to show correct provider/model

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Fixed MCP tool execution by bypassing broken client.callTool() method in AI SDK.
The AI SDK's experimental_createMCPClient has a bug where client.callTool() hangs
forever with StreamableHTTPClientTransport. Implemented workaround using direct
transport.send() with onmessage handler.

Changes:
- mcp-service.ts: Rewrote executeToolCall() to use transport layer directly
- mcp-tool-router.ts: Added formatToolsForAnthropic() to unwrap jsonSchema
- trusted-business-service.ts: Fixed URL extraction from protocolExtensions.mcp.remotes[0].url
- anthropic-browser-tools.ts: Added AbortSignal validation
- anthropic-service.ts: Added AbortSignal validation
- sidepanel.tsx: Added MCP initialization for browser tools, fixed missing onComplete parameter
- types.ts: Added serverUrl to MCPConnection interface
- test-mcp-client.mjs: Test script proving transport.send() works in 33ms

Result: MCP tools now execute successfully, returning "Quack Time - A Duck Blog" in 33ms.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Settings Page Updates:
- Renamed "Custom Base URL" to "GoCode URL" with consistent width
- Renamed "Anthropic API Key" to "GoCode Key" (static label for all providers)
- Made GoCode URL and GoCode Key labels static regardless of provider selection
- Hidden Composio API Key field from UI
- Removed provider-specific help text from GoCode Key field
- Updated service count from "400+" to "115 Million" in Business Services
- Added Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) to model selection
- Fixed field widths: GoCode URL, GoCode Key, and ANS API Token now use same width

Sidepanel Updates:
- Added MODEL_DISPLAY_NAMES mapping for friendly model names
- Added getModelDisplayName() helper function
- Updated chat header to show friendly model names (e.g., "Claude Sonnet 4.5")
- Applied display names to browser tools mode and warning banners

Result: Cleaner UI with consistent naming and proper model display names

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
## A2A Protocol Support
- Add A2A service with direct HTTP POST to /invoke endpoint
- Implement site detection and automatic agent matching
- Add trusted agent badge UI with opt-in/out control
- Filter A2A servers from MCP connection process
- Support domain matching with/without www prefix
- Convert agent names for display (www-godaddy-com -> www.godaddy.com)
- Initialize A2A service on extension load
- Route all messages to site's A2A agent when opted in
- Update trusted badge on URL changes via chrome.tabs.onUpdated

## Browser Tools Fixes
- Fix tool call format: keep content as arrays instead of stringified JSON
- Add smart input detection: automatically find and click search boxes when nothing is focused
- Limit conversation history to 6 recent messages to prevent context overflow
- Reduce page context from 3000 to 800 chars in browser tools mode

## UX Improvements
- Add loading state for input field: show "Loading settings..." until ready
- Disable input/submit until settings are loaded to prevent lost messages
- Fix infinite loop in useEffect by using empty dependency array and refs
- Remove unnecessary settings check from trusted agent detection

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
## Context Management Improvements
- Reduce initial history to 2 messages (only keep last user message)
- Reduce loop limit to 6 messages during tool execution
- Reduce page context from 500 to 300 chars in browser tools mode
- Add in-loop trimming to prevent context accumulation

## Remove Screenshot Tool
- Remove screenshot tool from Anthropic browser tools
- Screenshots consume 50K-150K tokens each (25-75% of 200K context!)
- Anthropic uses text-based navigation, not vision
- Only Gemini Computer Use needs screenshots for visual element location

## Better Error Messages
- Show clear "Context limit exceeded. Please start a new chat" message
- Replace cryptic API error with user-friendly guidance

This change provides massive context savings and eliminates the "Input is too long"
errors that were blocking multi-step browser automation tasks.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Added persistent blue border overlay and "Take Over Control" button to give
users clear visual indication when AI is controlling the browser.

Key Features:
- Blue border (#007AFF) with subtle glow effect around browser window
- "Take Over Control" button centered at bottom of page
- Overlay appears immediately when ANY browser tool executes
- Overlay persists throughout entire automation session
- Overlay survives page navigations by re-showing after each action
- Overlay disappears only when automation completes or user clicks button

Implementation:
- content.ts: Overlay creation/destruction functions with DOM ready checks
- sidepanel.tsx: Show overlay before every browser tool execution
- sidepanel.tsx: Re-show overlay after every tool (handles navigation)
- sidepanel.tsx: Hide overlay on completion, error, or user abort
- Works with both Anthropic and Gemini browser tools

User Experience:
- Clear visual feedback during automation (blue border)
- Non-intrusive design (pointer-events: none on border)
- Single-click abort button for immediate control takeover
- Overlay maintains visibility across page navigations and all actions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Auto-scroll improvements:
- Fixed messagesEndRef placement - moved inside scrollable container
- Increased scroll threshold from 100px to 200px for more aggressive auto-scroll
- Added block: 'end' parameter for more reliable bottom scrolling
- Added incremental message updates in Gemini Computer Use
- Messages now update after each text chunk and tool execution
- Auto-scroll triggers more frequently during browser automation

Click accuracy improvements:
- Added smart input detection when clicking near search boxes
- Searches for input fields inside clicked containers
- Finds nearby inputs within 100px radius when coordinates are inaccurate
- Auto-adjusts coordinates to center of found input field
- Explicitly focuses input fields after clicking
- Uses distance calculation for fuzzy targeting

User Experience:
- Chat automatically stays scrolled to bottom during automation
- Users no longer need to manually scroll to see latest messages
- Search box clicks are much more accurate (e.g., Amazon search)
- Works even when coordinates are slightly off target

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Added manual-trigger workflow for building Dev, Test, and Prod environments:

Workflow features:
- Manual trigger from GitHub Actions tab
- Environment selection dropdown (dev, test, prod)
- Passes BUILD_ENV variable to npm run build
- Uploads artifacts to GitHub for download
- 30-day artifact retention
- Build summary with environment info

Build output structure:
- Dev builds → artifacts/Dev/
- Test builds → artifacts/Test/
- Prod builds → artifacts/Prod/

Vite config updates:
- Reads BUILD_ENV from environment variable (defaults to 'dev')
- Outputs to artifacts/{env}/ based on BUILD_ENV
- Makes BUILD_ENV available in extension via import.meta.env.BUILD_ENV
- Logs build environment and output directory

Local usage:
BUILD_ENV=dev npm run build   → artifacts/Dev/
BUILD_ENV=test npm run build  → artifacts/Test/
BUILD_ENV=prod npm run build  → artifacts/Prod/

GitHub Actions usage:
1. Go to Actions tab on GitHub
2. Select "Build Extension" workflow
3. Click "Run workflow"
4. Select environment (dev/test/prod)
5. Download artifact: extension-{env}-{run_number}.zip

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Restructured README to prioritize GoDaddy ANS use case:

Features section:
- Highlighted browser automation and ANS integration
- Moved Composio to last as optional feature

Getting Started section:
- Split into two clear paths:
  1. For GoDaddy Employees (ANS Extension)
     - VPN connection steps
     - ANS authentication via www.dev-godaddy.com
     - GoCode and ANS credential setup
  2. For Developers (Building from Source)
     - BUILD_ENV environment variable usage
     - Multi-environment build instructions

Composio content:
- Moved to separate section at end
- "For Composio Users (Tool Router Mode)"
- Includes prerequisites, setup, and usage examples
- Composio-specific resources grouped together

References:
- Removed Composio links (now in Composio section)
- Added GoDaddy ANS documentation link

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ron browser

- Add support for Google Gemini, Anthropic Claude, and OpenAI in chat mode
- Implement Anthropic computer use capabilities for browse mode
- Fix GoCode API endpoint compatibility with custom base URLs
- Update IPC handlers to pass provider, model, and baseURL parameters
- Refactor ComputerUseService to route between Gemini and Anthropic implementations
- Add Anthropic Messages API integration with computer_20241022 tool
- Map Anthropic computer actions (left_click, type, key) to browser automation
- Update preload bridge and renderer services for multi-provider support
- Install @ai-sdk/anthropic and @ai-sdk/openai packages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use app.getAppPath() instead of __dirname for production builds
- Fixes blank screen issue when loading from asar archive
- Properly load renderer HTML and preload script in packaged app
- Add dev tools in production mode for debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add isDestroyed() check before cleaning up BrowserView
- Wrap cleanup in try-catch to handle already-destroyed objects
- Fixes "Object has been destroyed" error on app close

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add magical blue overlay (50% opacity) with sparkle effects when browser actions occur
- Compact tool execution messages with smaller font and reduced spacing
- Add color differentiation for page context in user messages (blue scrollable box)
- Fix message fragmentation - AI responses now flow as unified text
- Compact JSON formatting for tool parameters (single line instead of multi-line)
- Version bumped to 1.1.9

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add ZIP packaging for easy distribution
- Create both ZIP and unzipped artifact uploads
- Organize artifacts by environment (dev/test/prod)
- Add comprehensive build summary with:
  - Version and build number info
  - Download instructions
  - Installation steps for Chrome
- Extend artifact retention to 90 days

This makes it easier for users to find and download the correct
build artifacts from the GitHub Actions UI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Fix ZIP path from artifacts directory (use ../../ instead of ../../../)
- Add validation to check artifacts directory exists
- Add helpful error messages if build artifacts are missing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add Home page with overview and quick links
- Add Installation guide for end users
- Add Building guide for different environments
- Add Architecture documentation with system diagrams
- Add Artifacts guide for GitHub Actions downloads
- Add Development guide for contributors
- Add README with upload instructions

Wiki content covers:
- Installation from artifacts and source
- Build process for dev/test/prod
- Technical architecture and data flow
- Artifact download and usage
- Development workflow and code style
- Common issues and troubleshooting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Change browserToolsEnabled initial state from false to true
- Browser automation tools (navigate, click, type, scroll) now active on startup
- Users can still disable via the ○/◉ button in sidebar if needed
- Update version to 1.2.0

This improves the default user experience by enabling computer use
capabilities without requiring manual activation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add dynamic job name showing environment (e.g., "Build Extension - prod")
- Update version in build summary from 1.1.9 to 1.2.0
- Makes it easier to identify build jobs in GitHub Actions UI

Before: All jobs showed "Build Extension"
After: Jobs show "Build Extension - dev", "Build Extension - test", "Build Extension - prod"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add run-name field to display environment in workflow run list
- This makes "Build Extension - dev/test/prod" visible in the Actions UI
- Previous change only affected job name within the run details

The run-name field controls what appears in the GitHub Actions
workflow runs list, making it easy to identify which environment
was built at a glance.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Change browserToolsEnabled initial state from true back to false
- Users must explicitly enable browser tools by clicking the ○ button
- Update version to 1.2.1
- Update workflow build summary to show 1.2.1

This provides a safer default experience, requiring users to opt-in
to browser automation capabilities rather than having them active
immediately on startup.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add ABORT_ALL_BROWSER_OPERATIONS message type
- Background script sets abort flag when user clicks "Take Over"
- All browser operations (navigate, click, type, scroll) check abort flag
- Operations return "Operation aborted by user" error if flag is set
- Abort flag clears automatically after 1 second
- Update version to 1.2.2

When users click "Take Over Control", the extension now:
1. Aborts the AI API call (existing)
2. Sets abort flag in background script (new)
3. Prevents any queued browser operations from executing (new)
4. Hides the browser overlay (existing)

This gives users immediate control and stops all pending automation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add isUserAborted flag in content script
- Block overlay from showing for 5 seconds after "Take Over" is clicked
- Immediately hide overlay before sending abort message
- Add parentNode check before removing elements
- Enhanced logging for debugging overlay behavior
- Update version to 1.2.3

This fixes the issue where the overlay would remain visible or
reappear after clicking "Take Over Control". The abort flag
prevents any new overlay requests from showing for 5 seconds,
giving the user full control.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Log received click coordinates (x, y)
- Log viewport dimensions
- Log document scroll position
- Log element found at coordinates
- Version 1.2.4

This will help diagnose why clicks are happening at incorrect
positions. Check browser console (F12) when AI attempts to click
to see the coordinate information.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- When AI clicks near an input, find the largest visible input field
- Search all visible inputs/textareas/contenteditable elements
- Select the largest one by area (likely the main chat input)
- Update coordinates to center of found input
- Add enhanced logging for debugging
- Version 1.2.5

This helps when AI is clicking blindly without screenshots by
automatically finding and targeting the most prominent input field
on the page when coordinates miss the actual input.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add screenshot tool to Anthropic browser tools
- Format screenshot results as base64 images for Claude vision API
- Enable Claude to see the page before clicking/interacting
- This fixes blind clicking issues where AI guesses coordinates
- Version 1.3.0

With screenshots, Claude can:
- See where UI elements are located
- Click accurately on buttons, inputs, etc.
- Navigate complex interfaces visually
- Provide better context-aware interactions

The AI will now automatically take screenshots when needed
to understand page layout before performing actions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed system prompt instructing Claude to take screenshots
- Enforce workflow: screenshot → analyze → click → type
- Tell Claude to ALWAYS screenshot before clicking or typing
- Provide step-by-step interaction instructions
- Version 1.3.1

New workflow Claude will follow:
1. Navigate to URL (if needed)
2. Take screenshot to see the page
3. Identify target element coordinates from screenshot
4. Click at those coordinates
5. Type text (if needed)

This ensures Claude uses its vision capabilities proactively
instead of guessing coordinates blindly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add GET_VIEWPORT_SIZE handler in content script
- Pass viewport dimensions (width, height, devicePixelRatio) with screenshot
- Include viewport info in text description to Claude
- Tell Claude exact coordinate bounds: (0,0) to (width,height)
- Version 1.3.2

This fixes coordinate mismatch issues where Claude sees a screenshot
but doesn't know the actual viewport size, causing clicks to be
off-target. Now Claude knows the exact bounds for coordinates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add red/yellow circle marker at exact click coordinates
- Shows for 3 seconds where Claude is trying to click
- Log devicePixelRatio to diagnose scaling issues
- Version 1.3.3

This helps diagnose coordinate mismatch issues by showing
exactly where the extension thinks Claude is clicking.
If the marker appears in the wrong place, it indicates a
coordinate scaling or interpretation problem.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add detailed CRITICAL COORDINATE INSTRUCTIONS in system prompt
- Explain coordinate system with multiple examples
- Tell Claude to measure from top-left and estimate center points
- Add comprehensive coordinate guide with each screenshot
- Include corner coordinates and center point calculations
- Emphasize clicking CENTER of elements, not edges
- Version 1.4.0

System prompt now includes:
- Visual coordinate examples (top-right, center, etc.)
- Step-by-step workflow for measuring in screenshots
- Explicit instruction to retry with adjusted coordinates if needed

Screenshot results now include:
- All corner coordinates labeled
- Center point calculated
- Clear X/Y axis explanations
- Step-by-step clicking instructions

This should dramatically improve Claude's ability to click accurately
by teaching it how to measure and estimate coordinates from screenshots.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
BREAKING CHANGE: Changed browser automation workflow to prefer HTML DOM methods

Changes:
- Added new `clickElement` tool that uses CSS selectors or text content to find elements
- Enhanced `click` action in content script to support text-based element searching
- Searches through buttons, links, inputs, and elements with onclick/aria-label
- Updated system prompt to instruct Claude to try DOM methods FIRST before screenshots
- Enhanced `getPageContext` to include interactive elements with their selectors
- Screenshots are now only used as fallback when DOM methods fail

Benefits:
- More reliable clicking (CSS selectors don't depend on viewport coordinates)
- More efficient (no need to process/send large screenshots for every action)
- Lower token costs (screenshots consume ~1,500-2,000 tokens each)
- Works better with dynamic content and responsive layouts

Version: 1.4.0 → 1.5.0
dshaikh-godaddy and others added 30 commits December 10, 2025 15:09
…rowser-tools-prompts

Refactor: Consolidate browserToolsEnabled conditionals and New Prompt
- Move overlay from browser window to sidepanel for persistent visibility
- Overlay now persists during page navigation (no longer disappears on page reload)
- Remove dependency on content script for overlay display
- Simplify overlay show/hide logic (no longer needs to communicate with content script)
- Overlay appears immediately when automation starts
- Add 'Stop' button in sidepanel overlay to abort automation
- Remove browser window overlay completely for cleaner UX
- Add wasAborted flag to track execution state
- Check abort signal before starting each turn
- Check abort signal before making API calls
- Handle AbortError gracefully in fetch error handler
- Ensure execution can be cancelled at any point during automation
Changes:
- Click: Use single targeted click instead of aggressive 5x clicks + parent + children
- Enter key: Add combobox/dropdown detection to skip button clicking for react-select
- Enter key: Limit submit button search to search inputs only
- Screenshot: Resize before saving so saved file matches what Claude sees
- Screenshot: Move resize logic to background.ts, remove duplicate in anthropic-browser-tools.ts
…o-sidepanel

Move browser automation overlay to sidepanel and improve abort functionality
Fix click and Enter key handling to prevent unintended interactions
…rowser-tools-prompts

Fix inconsistent AI behavior in browser automation tool verification
fixed the issue with starting at new line
Previously, prepareMessagesWithSeparateHistory was only called once at the
start of streamAnthropicWithBrowserTools. During the tool execution loop,
new page contexts from getPageContext would accumulate without being stripped.

Now the function is also called after each loop iteration to ensure only the
last N page contexts (default: 2) retain full DOM content.
The Anthropic API requires every tool_use block to have a corresponding
tool_result block. The previous fix replaced the entire message content
with a string, breaking the tool_use/tool_result pairing.

Now we:
- Keep the array structure of message content
- Keep tool_result type and tool_use_id intact
- Only summarize the inner 'content' field of large page contexts
- Preserve small action results (success/fail) unchanged
- Replace images with placeholder text instead of removing entirely
The chat history length trimming was removing entire messages, causing
the agent to lose conversation context. Now we:
- Keep ALL messages (no message count trimming in this function)
- Only strip the large page context DATA from old messages
- Preserve the tool_result structure with summarized content
- Let Loop Message History handle any message count limits separately

This ensures the agent maintains full conversation context while still
saving tokens by compressing old DOM/screenshot data.
Since we now keep all messages and only strip page context content,
the Chat History Length setting is no longer needed. Removed:
- Setting UI control in settings.tsx
- Type definition in types.ts
- Updated comments to clarify the feature is for page context stripping only
These settings were causing the agent to lose conversation context by
trimming messages entirely. With page context stripping now working:

- ALL messages are kept for full conversation context
- Only page context DATA (large DOM/screenshots) is compressed
- The API will naturally error if context gets too large

Removed from:
- anthropic-browser-tools.ts: Initial and loop message trimming logic
- settings.tsx: Both UI controls removed
- types.ts: conversationHistoryLength and conversationLoopHistoryLength
- electron-browser/: Same changes for Electron version
- wiki-content/Architecture.md: Updated documentation
Images from screenshots are nested inside tool_result.content as an array:
  [{type: 'text', ...}, {type: 'image', ...}]

Updated hasPageContext() and summarizePageContextPreservingStructure():
- Now checks for images inside tool_result.content arrays
- Strips images from nested content, keeping only text summary
- Preserves tool_result structure for API compatibility
The retry logic was clicking buttons twice:
1. First click → dropdown opens
2. 200ms later → second click → dropdown closes!

Fixed by:
- Detecting dropdown/toggle triggers (aria-haspopup, aria-expanded, role=combobox)
- Skipping retry click for dropdown elements
- Only retry for explicit submit buttons (type=submit or contains 'submit'/'save')

This prevents the toggle behavior from closing dropdowns immediately.
The function prepareMessagesWithSeparateHistory() takes 2 parameters:
  (messages, pageContextHistoryLength)

But it was being called with 3 parameters:
  (messages, 0, PAGE_CONTEXT_HISTORY_LENGTH)

This caused pageContextHistoryLength=0, which made slice(0,-0)=slice(0,0)
return an empty array, so nothing was ever stripped!

Fixed both call sites to pass the correct parameters.
Many websites check document.hasFocus() before rendering dropdowns.
When the sidepanel is active, the main page loses focus and dropdowns
won't render or will immediately close.

Implemented hybrid fix:
1. background.ts: Focus the browser window via chrome.windows.update()
   before sending EXECUTE_ACTION to content script (50ms delay for OS)
2. content.ts: Call window.focus() + document.body.focus() at the start
   of dispatchClickSequence() as a fallback
3. Also dispatch focusin event to notify the page that it has focus
4. Blur any active element that might be stealing focus
Improve conversation memory and fix browser automation issues
Fix: avoid GitHub Actions run-shell injection by using env vars
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants