package devcontainer import ( "fmt" "strings" "zlh-agent/internal/state" "zlh-agent/internal/provision/devcontainer/dotnet" devgo "zlh-agent/internal/provision/devcontainer/go" "zlh-agent/internal/provision/devcontainer/java" "zlh-agent/internal/provision/devcontainer/node" "zlh-agent/internal/provision/devcontainer/python" ) func Provision(cfg state.Config) error { if err := ValidateRuntimeSelection(cfg); err != nil { return err } if err := EnsureDevUserEnvironment(); err != nil { return err } runtime := strings.ToLower(cfg.Runtime) var err error switch runtime { case "node": err = node.Install(cfg) case "python": err = python.Install(cfg) case "go": err = devgo.Install(cfg) case "java": err = java.Install(cfg) case "dotnet": err = dotnet.Install(cfg) default: return fmt.Errorf("unsupported dev container runtime: %s", runtime) } if err != nil { return err } if err := WriteReadyMarker(runtime); err != nil { return fmt.Errorf("write dev ready marker: %w", err) } return nil }