summaryrefslogtreecommitdiff
path: root/internal/hexailsp
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-10 23:59:21 +0300
committerPaul Buetow <paul@buetow.org>2026-06-10 23:59:21 +0300
commit72ac39cb2bac5c176dd1277c9482334d0441286f (patch)
tree91c68a1f03f0da64a6380f90643dc108e133f8de /internal/hexailsp
parentb9f90b4ffa8260cc906fa1b195ed0ba4aaa211df (diff)
Replace panics with returned errors in llm.RegisterProvider
RegisterProvider now returns an error for an empty name, a nil factory, or a duplicate registration instead of panicking, making registration composable and testable without recover(). RegisterAllProviders caches the one-time registration error (sync.Once cannot return a value) and returns it to every caller. Updated all call sites: hexailsp, hexaicli and hexaiaction propagate the error with context; test TestMains fail fast via panic. Added unit tests covering empty name, nil factory, duplicate, success and idempotent re-registration. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'internal/hexailsp')
-rw-r--r--internal/hexailsp/run.go4
-rw-r--r--internal/hexailsp/run_test.go4
2 files changed, 6 insertions, 2 deletions
diff --git a/internal/hexailsp/run.go b/internal/hexailsp/run.go
index 242a013..25d1929 100644
--- a/internal/hexailsp/run.go
+++ b/internal/hexailsp/run.go
@@ -54,7 +54,9 @@ func Run(logPath string, stdin io.Reader, stdout io.Writer, stderr io.Writer) er
// RunWithConfig is like Run but accepts an explicit config file path.
func RunWithConfig(logPath string, configPath string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error {
- llm.RegisterAllProviders()
+ if err := llm.RegisterAllProviders(); err != nil {
+ return fmt.Errorf("failed to register LLM providers: %w", err)
+ }
return runWithConfigDependencies(logPath, configPath, stdin, stdout, stderr, defaultRunDependencies())
}
diff --git a/internal/hexailsp/run_test.go b/internal/hexailsp/run_test.go
index fa4d535..b061f17 100644
--- a/internal/hexailsp/run_test.go
+++ b/internal/hexailsp/run_test.go
@@ -18,7 +18,9 @@ import (
// TestMain registers all built-in LLM providers before tests run, mirroring
// the explicit registration done in production binaries via RunWithConfig.
func TestMain(m *testing.M) {
- llm.RegisterAllProviders()
+ if err := llm.RegisterAllProviders(); err != nil {
+ panic(err)
+ }
os.Exit(m.Run())
}