package lifecycle import ( "fmt" "log/slog" "os" "os/exec" "path/filepath" "syscall" ) func GetStarted() error { const CREATE_NEW_CONSOLE = 0x00000010 var err error bannerScript := filepath.Join(AppDir, "ollama_welcome.ps1") args := []string{ // TODO once we're signed, the execution policy bypass should be removed "powershell", "-noexit", "-ExecutionPolicy", "Bypass", "-nologo", "-file", bannerScript, } args[0], err = exec.LookPath(args[0]) if err != nil { return err } // Make sure the script actually exists _, err = os.Stat(bannerScript) if err != nil { return fmt.Errorf("getting started banner script error %s", err) } slog.Info(fmt.Sprintf("opening getting started terminal with %v", args)) attrs := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, Sys: &syscall.SysProcAttr{CreationFlags: CREATE_NEW_CONSOLE, HideWindow: false}, } proc, err := os.StartProcess(args[0], args, attrs) if err != nil { return fmt.Errorf("unable to start getting started shell %w", err) } slog.Debug(fmt.Sprintf("getting started terminal PID: %d", proc.Pid)) return proc.Release() }