| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package shell
- import (
- "log/slog"
- "sync"
- )
- // PersistentShell is a singleton shell instance that maintains state across the application
- type PersistentShell struct {
- *Shell
- }
- var (
- once sync.Once
- shellInstance *PersistentShell
- )
- // GetPersistentShell returns the singleton persistent shell instance
- // This maintains backward compatibility with the existing API
- func GetPersistentShell(cwd string) *PersistentShell {
- once.Do(func() {
- shellInstance = &PersistentShell{
- Shell: NewShell(&Options{
- WorkingDir: cwd,
- Logger: &loggingAdapter{},
- }),
- }
- })
- return shellInstance
- }
- // INFO: only used for tests
- func Reset(cwd string) {
- once = sync.Once{}
- _ = GetPersistentShell(cwd)
- }
- // slog.dapter adapts the internal slog.package to the Logger interface
- type loggingAdapter struct{}
- func (l *loggingAdapter) InfoPersist(msg string, keysAndValues ...any) {
- slog.Info(msg, keysAndValues...)
- }
|