Add full container management with templates, terminal, and Claude Code integration#174
Merged
tylergraydev merged 2 commits intomainfrom Mar 23, 2026
Merged
Conversation
…minal, and Claude Code integration Major feature: complete dev container management system that lets users create containers from preconfigured templates (Node.js, TypeScript, Rust/Tauri, Python, Go, .NET, PostgreSQL, Redis), manage their lifecycle (start/stop/restart), browse files, execute commands via an interactive xterm.js terminal, and run Claude Code inside containers with automatic auth sharing. Key changes: - Template-first "New Container" wizard with 9 devcontainer templates using official Microsoft base images - Container cards with live status badges, start/stop/restart buttons, and loading states - Container detail modal with Overview, Logs, Stats, Console (xterm.js), and Files tabs - Interactive terminal using Bollard exec API with streaming I/O via Tauri events - File browser using exec-based `ls` to navigate container filesystems - Git repo cloning on first start via repo_url field - Auto image pull before first container creation - Claude Code settings (Settings > Containers): Max Plan OAuth mount or API key injection - Auto-install Claude Code in containers on first start (optional) - Copy-to-clipboard docker exec commands for connecting via external terminals - Toast notifications for container lifecycle events with "View Logs" action on unexpected stops - Delete now properly removes Docker containers (fixes name conflict bug) - Containers stay alive with `sleep infinity` (fixes immediate exit issue) - UI audit fixes: design system normalization, accessibility (ARIA, keyboard nav), responsive layout - Official technology logos (Simple Icons, CC0) for all templates
Security fixes: - Prevent command injection via repo_url by validating URL format and using git commands directly instead of sh -c shell interpolation - Mount ~/.claude as read-only into containers to prevent auth tampering - Bind forwarded ports to 127.0.0.1 instead of 0.0.0.0 - Validate volume host_path against path traversal and sensitive dirs Test fixes: - Add missing Hammer/HardDrive stubs to lucide-svelte mock - Update notifications tests for new add() options signature - Update ContainerLogs test for loading-first behavior - Update ContainerDetail test for Console/Files tabs (was Exec) - Update DockerHostList tests for dynamic aria-labels
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
~/.claude/for Max Plan OAuth or inject API key, with optional auto-install of Claude Code in containersKey technical changes
Backend (Rust):
sleep infinity+ TTY (fixes devcontainer immediate exit)repo_urlcolumn + migration for git clone on first startpost_create_commandexecution after repo cloneapp_settingstableFrontend (Svelte 5):
NewContainerWizard— two-step flow: pick template or custom, then configureContainerTerminal— xterm.js with streaming I/O via Tauri eventsContainerFiles— exec-based filesystem browserContainerDetail— tabbed modal (Overview, Logs, Stats, Console, Files) with lifecycle controlsContainerCardwith status badges, action buttons, loading statesSettingsContainersTabfor Claude Code auth configurationTest plan