mirror of
https://github.com/leonvanzyl/autocoder.git
synced 2026-01-31 14:43:35 +00:00
feat: add interactive terminal and dev server management
Add new features for interactive terminal sessions and dev server control: Terminal Component: - New Terminal.tsx component using xterm.js for full terminal emulation - WebSocket-based PTY communication with bidirectional I/O - Cross-platform support (Windows via winpty, Unix via built-in pty) - Auto-reconnection with exponential backoff - Fix duplicate WebSocket connection bug by checking CONNECTING state - Add manual close flag to prevent auto-reconnect race conditions - Add project tracking to avoid duplicate connects on initial activation Dev Server Management: - New DevServerControl.tsx for starting/stopping dev servers - DevServerManager service for subprocess management - WebSocket streaming of dev server output - Project configuration service for reading package.json scripts Backend Infrastructure: - Terminal router with WebSocket endpoint for PTY I/O - DevServer router for server lifecycle management - Terminal session manager with callback-based output streaming - Enhanced WebSocket schemas for terminal and dev server messages UI Integration: - New Terminal and Dev Server tabs in the main application - Updated DebugLogViewer with improved UI and functionality - Extended useWebSocket hook for terminal message handling Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -308,3 +308,61 @@ class SettingsUpdate(BaseModel):
|
||||
if v is not None and v not in VALID_MODELS:
|
||||
raise ValueError(f"Invalid model. Must be one of: {VALID_MODELS}")
|
||||
return v
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Dev Server Schemas
|
||||
# ============================================================================
|
||||
|
||||
|
||||
class DevServerStartRequest(BaseModel):
|
||||
"""Request schema for starting the dev server."""
|
||||
command: str | None = None # If None, uses effective command from config
|
||||
|
||||
|
||||
class DevServerStatus(BaseModel):
|
||||
"""Current dev server status."""
|
||||
status: Literal["stopped", "running", "crashed"]
|
||||
pid: int | None = None
|
||||
url: str | None = None
|
||||
command: str | None = None
|
||||
started_at: datetime | None = None
|
||||
|
||||
|
||||
class DevServerActionResponse(BaseModel):
|
||||
"""Response for dev server control actions."""
|
||||
success: bool
|
||||
status: Literal["stopped", "running", "crashed"]
|
||||
message: str = ""
|
||||
|
||||
|
||||
class DevServerConfigResponse(BaseModel):
|
||||
"""Response for dev server configuration."""
|
||||
detected_type: str | None = None
|
||||
detected_command: str | None = None
|
||||
custom_command: str | None = None
|
||||
effective_command: str | None = None
|
||||
|
||||
|
||||
class DevServerConfigUpdate(BaseModel):
|
||||
"""Request schema for updating dev server configuration."""
|
||||
custom_command: str | None = None # None clears the custom command
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Dev Server WebSocket Message Schemas
|
||||
# ============================================================================
|
||||
|
||||
|
||||
class WSDevLogMessage(BaseModel):
|
||||
"""WebSocket message for dev server log output."""
|
||||
type: Literal["dev_log"] = "dev_log"
|
||||
line: str
|
||||
timestamp: datetime
|
||||
|
||||
|
||||
class WSDevServerStatusMessage(BaseModel):
|
||||
"""WebSocket message for dev server status changes."""
|
||||
type: Literal["dev_server_status"] = "dev_server_status"
|
||||
status: Literal["stopped", "running", "crashed"]
|
||||
url: str | None = None
|
||||
|
||||
Reference in New Issue
Block a user