summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helpfuncs.go7
-rw-r--r--storage/migrate.go7
-rw-r--r--storage/storage.go5
-rw-r--r--tools.go18
-rw-r--r--tui.go12
5 files changed, 36 insertions, 13 deletions
diff --git a/helpfuncs.go b/helpfuncs.go
index dab6b61..3132c9d 100644
--- a/helpfuncs.go
+++ b/helpfuncs.go
@@ -291,7 +291,7 @@ func listRolesWithUser() []string {
return result
}
-func loadImage() {
+func loadImage() error {
filepath := defaultImage
cc := GetCardByRole(cfg.AssistantRole)
if cc != nil {
@@ -301,14 +301,15 @@ func loadImage() {
}
file, err := os.Open(filepath)
if err != nil {
- panic(err)
+ return fmt.Errorf("failed to open image: %w", err)
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
- panic(err)
+ return fmt.Errorf("failed to decode image: %w", err)
}
imgView.SetImage(img)
+ return nil
}
func strInSlice(s string, sl []string) bool {
diff --git a/storage/migrate.go b/storage/migrate.go
index decfe9c..38f9854 100644
--- a/storage/migrate.go
+++ b/storage/migrate.go
@@ -10,16 +10,18 @@ import (
//go:embed migrations/*
var migrationsFS embed.FS
-func (p *ProviderSQL) Migrate() {
+func (p *ProviderSQL) Migrate() error {
// Get the embedded filesystem
migrationsDir, err := fs.Sub(migrationsFS, "migrations")
if err != nil {
p.logger.Error("Failed to get embedded migrations directory;", "error", err)
+ return fmt.Errorf("failed to get embedded migrations directory: %w", err)
}
// List all .up.sql files
files, err := migrationsFS.ReadDir("migrations")
if err != nil {
p.logger.Error("Failed to read migrations directory;", "error", err)
+ return fmt.Errorf("failed to read migrations directory: %w", err)
}
// Execute each .up.sql file
for _, file := range files {
@@ -27,11 +29,12 @@ func (p *ProviderSQL) Migrate() {
err := p.executeMigration(migrationsDir, file.Name())
if err != nil {
p.logger.Error("Failed to execute migration %s: %v", file.Name(), err)
- panic(err)
+ return fmt.Errorf("failed to execute migration %s: %w", file.Name(), err)
}
}
}
p.logger.Debug("All migrations executed successfully!")
+ return nil
}
func (p *ProviderSQL) executeMigration(migrationsDir fs.FS, fileName string) error {
diff --git a/storage/storage.go b/storage/storage.go
index 7294261..9ad9745 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -103,7 +103,10 @@ func NewProviderSQL(dbPath string, logger *slog.Logger) FullRepo {
return nil
}
p := ProviderSQL{db: db, logger: logger}
- p.Migrate()
+ if err := p.Migrate(); err != nil {
+ logger.Error("migration failed, app cannot start", "error", err)
+ return nil
+ }
return p
}
diff --git a/tools.go b/tools.go
index dfa8d7b..84ef23d 100644
--- a/tools.go
+++ b/tools.go
@@ -212,9 +212,13 @@ func init() {
roleToID["assistant"] = basicCard.ID
sa, err := searcher.NewWebSurfer(searcher.SearcherTypeScraper, "")
if err != nil {
- panic("failed to init seachagent; error: " + err.Error())
+ if logger != nil {
+ logger.Warn("search agent unavailable; web_search tool disabled", "error", err)
+ }
+ WebSearcher = nil
+ } else {
+ WebSearcher = sa
}
- WebSearcher = sa
if err := rag.Init(cfg, logger, store); err != nil {
logger.Warn("failed to init rag; rag_search tool will not be available", "error", err)
}
@@ -275,10 +279,16 @@ func updateToolCapabilities() {
func getWebAgentClient() *agent.AgentClient {
webAgentClientOnce.Do(func() {
if cfg == nil {
- panic("cfg not initialized")
+ if logger != nil {
+ logger.Warn("web agent client unavailable: config not initialized")
+ }
+ return
}
if logger == nil {
- panic("logger not initialized")
+ if logger != nil {
+ logger.Warn("web agent client unavailable: logger not initialized")
+ }
+ return
}
getToken := func() string {
if chunkParser == nil {
diff --git a/tui.go b/tui.go
index bdf1c9b..6920db2 100644
--- a/tui.go
+++ b/tui.go
@@ -872,21 +872,27 @@ func init() {
if err != nil {
logger.Error("failed to open attached image", "path", lastImg, "error", err)
// Fall back to showing agent image
- loadImage()
+ if err := loadImage(); err != nil {
+ logger.Warn("failed to load agent image", "error", err)
+ }
} else {
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
logger.Error("failed to decode attached image", "path", lastImg, "error", err)
// Fall back to showing agent image
- loadImage()
+ if err := loadImage(); err != nil {
+ logger.Warn("failed to load agent image", "error", err)
+ }
} else {
imgView.SetImage(img)
}
}
} else {
// No attached image, show agent image as before
- loadImage()
+ if err := loadImage(); err != nil {
+ logger.Warn("failed to load agent image", "error", err)
+ }
}
pages.AddPage(imgPage, imgView, true, true)
return nil