Phase 1 (cont.) — MVP: Apple Containers backend, FileHost bridge, lifecycle orchestrator, dashboard UI - #2
Merged
Conversation
…ogs/stop/remove) Agent-Logs-Url: https://github.com/wiki3-ai/devcontainers-cli/sessions/24e2bc6f-0207-48b5-ba43-315a20db9cd0 Co-authored-by: jimwhite <890972+jimwhite@users.noreply.github.com>
Agent-Logs-Url: https://github.com/wiki3-ai/devcontainers-cli/sessions/24e2bc6f-0207-48b5-ba43-315a20db9cd0 Co-authored-by: jimwhite <890972+jimwhite@users.noreply.github.com>
Copilot created this pull request from a session on behalf of
jimwhite
April 27, 2026 04:58
View session
jimwhite
marked this pull request as ready for review
April 27, 2026 09:41
Member
|
Lot of work Copilot locally and we've got something mostly working to run devcontainers using Apple Containers. Deno build time, Rust runtime. |
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.
Implements Steps 5–8 of
ROADMAP.md, completing the Phase 1 MVP on top of the scaffold landed in the previous PR.Step 5 —
apple_containersruntimepull/create/start/exec/logs/stop/removeshelling out to thecontainerCLI viatokio::process.inspect/listJSON parsing extracted into pure functions (apple_containers/cli.rs) and unit-tested.LogChunk/LogStream/LogOptionssurface added toContainerRuntime; logs stream through a boundedmpsc::Receiverwithkill_on_dropso dropping the receiver tears downcontainer logs. Podman/Docker stubs updated.apple-containers-liveCargo feature drives the full pipeline against a fakecontainershell script — no real binary needed in CI.Step 6 — FileHost bridge wired end-to-end
loadDevContainerConfig/loadAndSubmitDevContainerConfiginfrontend/src/devcontainer-engine/index.ts: reads.devcontainer/devcontainer.jsonthrough the Tauri-backedFileHost, parses withjsonc-parser, runs pre-container variable substitution, and projects onto a runtime-agnosticParsedDevContainer.submit_parsed_devcontainerTauri command stores the result on the orchestrator keyed byworkspace_id.Step 7 — Lifecycle orchestrator
LifecycleOrchestratorowns per-workspace parsed config + container handle and serialises mutating ops with a per-workspacetokio::sync::Mutex.updrivespull → create → startthen runsonCreate/updateContent/postCreate/postStart/postAttachviaruntime.exec(/bin/sh -c …for string form, raw argv for array form).stop/rebuild/removeare idempotent.devcontainer://statusanddevcontainer://logTauri events.container_*commands are thin wrappers;LifecycleCommandandParsedDevContainerextended with the lifecycle-hook fields.Step 8 — MVP UI
Dashboard with sidebar of workspaces and a detail pane (Up / Stop / Rebuild / Remove), plus an xterm.js log pane subscribed to the lifecycle events. "Open Folder…" uses
@tauri-apps/plugin-dialog.src-tauri/capabilities/default.jsonadded so the dialog plugin and existing IPC commands are reachable from the WebView.The deno-built engine bundle is mirrored into
frontend/public/devcontainer-engine.jsand dynamic-imported bymain.ts:This keeps Vite from trying to bundle the spec slice's Node built-ins (which only the Deno bundler polyfills) while preserving editor types via the type-only import.
Notes for reviewers
initializeCommandis intentionally not executed yet — host-side command execution is gated on the permission model coming in Phase 2.ContainerSpec.ROADMAP.mdticked for Steps 5–8.