1package shell
2
3import (
4 "sync"
5
6 "github.com/charmbracelet/crush/internal/logging"
7)
8
9// PersistentShell is a singleton shell instance that maintains state across the application
10type PersistentShell struct {
11 *Shell
12}
13
14var (
15 once sync.Once
16 shellInstance *PersistentShell
17)
18
19// GetPersistentShell returns the singleton persistent shell instance
20// This maintains backward compatibility with the existing API
21func GetPersistentShell(cwd string) *PersistentShell {
22 once.Do(func() {
23 shellInstance = &PersistentShell{
24 Shell: NewShell(&Options{
25 WorkingDir: cwd,
26 Logger: &loggingAdapter{},
27 }),
28 }
29 })
30 return shellInstance
31}
32
33// loggingAdapter adapts the internal logging package to the Logger interface
34type loggingAdapter struct{}
35
36func (l *loggingAdapter) InfoPersist(msg string, keysAndValues ...interface{}) {
37 logging.InfoPersist(msg, keysAndValues...)
38}