fix(dashboard): implement interrupt button with proper icon and backend endpoint#139
Merged
khaliqgant merged 5 commits intomainfrom Jan 11, 2026
Merged
fix(dashboard): implement interrupt button with proper icon and backend endpoint#139khaliqgant merged 5 commits intomainfrom
khaliqgant merged 5 commits intomainfrom
Conversation
- XTermLogViewer: Change overflow-hidden to overflow-auto on mobile, keeping overflow-hidden on md+ breakpoints where xterm.js handles internal scrolling - LogViewer inline mode: Add touch-pan-y for consistent touch behavior - Both components: Add WebkitOverflowScrolling: 'touch' for iOS momentum scrolling Fixes mobile users being unable to scroll through logs due to overflow-hidden blocking touch scroll gestures. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The /api/spawned endpoint now returns agents from two sources: 1. Spawner's in-memory activeWorkers map (authoritative for spawned agents) 2. Daemon's agents.json registry (fallback for docker restarts) This fixes the issue where workspace.agents returned empty in docker deployments after container restarts. The spawner's in-memory state would be lost, but agents that reconnected to the daemon are tracked in agents.json with lastSeen timestamps. The fix only includes daemon-registered agents that are: - Not already tracked by spawner (to avoid duplicates) - Recently active (within 30s heartbeat window) Also added source debugging info to the response for troubleshooting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update InterruptIcon to show ESC key symbol instead of stop icon - Add /api/agents/by-name/:name/interrupt endpoint - Endpoint sends ESC ESC (0x1b 0x1b) to agent's PTY - Works for spawned agents via AgentSpawner The interrupt button now sends escape sequences to break agents out of stuck loops without terminating them. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The collapsible header feature was using isHeaderCollapsed state but the useState declaration was missing, causing a TypeScript error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/api/agents/by-name/:name/interruptendpoint in dashboard-server that sends ESC ESC sequence to agent's PTY\x1b\x1b) to break agents out of stuck loops without terminating themChanges
Frontend (LogViewerPanel.tsx)
Backend (server.ts)
/api/agents/by-name/:name/interruptspawner.sendWorkerInput()to inject ESC ESC sequence to PTYTest plan
🤖 Generated with Claude Code