on main help sign in
fix(app): fix goroutine leak, shutdown context, and model matching (#2298)
dcc67b7huaiyuWangh
internal/app/app.go+2−1
@@ -246,6 +246,7 @@ func (app *App) RunNonInteractive(ctx context.Context, output io.Writer, prompt,
246 done <- response{
246 done <- response{
247 err: fmt.Errorf("failed to start agent processing stream: %w", err),
247 err: fmt.Errorf("failed to start agent processing stream: %w", err),
248 }
248 }
249+ return
249 }
250 }
250 done <- response{
251 done <- response{
251 result: result,
252 result: result,
@@ -551,7 +552,7 @@ func (app *App) Shutdown() {
551 var wg sync.WaitGroup
552 var wg sync.WaitGroup
552
553
553 // Shared shutdown context for all timeout-bounded cleanup.
554 // Shared shutdown context for all timeout-bounded cleanup.
554− shutdownCtx, cancel := context.WithTimeout(app.globalCtx, 5*time.Second)
555+ shutdownCtx, cancel := context.WithTimeout(context.WithoutCancel(app.globalCtx), 5*time.Second)
555 defer cancel()
556 defer cancel()
556
557
557 // Send exit event
558 // Send exit event
internal/app/lsp_events.go+2
@@ -67,6 +67,8 @@ func updateLSPState(name string, state lsp.ServerState, err error, client *lsp.C
67 }
67 }
68 if state == lsp.StateReady {
68 if state == lsp.StateReady {
69 info.ConnectedAt = time.Now()
69 info.ConnectedAt = time.Now()
70+ } else if existing, ok := lspStates.Get(name); ok {
71+ info.ConnectedAt = existing.ConnectedAt
70 }
72 }
71 lspStates.Set(name, info)
73 lspStates.Set(name, info)
72
74
internal/app/provider.go+2−2
@@ -70,8 +70,8 @@ func findModels(providers map[string]config.ProviderConfig, largeModel, smallMod
70}
70}
71
71
72func filter(modelFilter, providerFilter, model, provider string) bool {
72func filter(modelFilter, providerFilter, model, provider string) bool {
73− return modelFilter != "" && model == modelFilter &&
73+ return modelFilter != "" && strings.EqualFold(model, modelFilter) &&
74− (providerFilter == "" || provider == providerFilter)
74+ (providerFilter == "" || strings.EqualFold(provider, providerFilter))
75}
75}
76
76
77// Validate and return a single match.
77// Validate and return a single match.