diff options
Diffstat (limited to 'internal/cli/serve.go')
| -rw-r--r-- | internal/cli/serve.go | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/internal/cli/serve.go b/internal/cli/serve.go index fe0ba8e..f687e14 100644 --- a/internal/cli/serve.go +++ b/internal/cli/serve.go @@ -86,13 +86,16 @@ func serve(addr, basePath string) error { claudeConfigDir := cfg.ClaudeConfigDir repoDir, _ := os.Getwd() + // Shared per-task agent MCP token registry: runners mint tokens; the API // server mounts /mcp and resolves them. agentRegistry := executor.NewRegistry() - runners := map[string]executor.Runner{ - // ContainerRunner: binaries are resolved via PATH inside the container image, - // so ClaudeBinary/GeminiBinary are left empty (host paths would not exist inside). - "claude": &executor.ContainerRunner{ + runners := map[string]executor.Runner{} + + // ContainerRunner: binaries are resolved via PATH inside the container image, + // so ClaudeBinary/GeminiBinary are left empty (host paths would not exist inside). + if cfg.Runners.ClaudeEnabled() { + runners["claude"] = &executor.ContainerRunner{ Image: cfg.ClaudeImage, Logger: logger, LogDir: cfg.LogDir, @@ -103,8 +106,10 @@ func serve(addr, basePath string) error { CredentialSyncCmd: filepath.Join(repoDir, "scripts", "sync-credentials"), Store: store, Registry: agentRegistry, - }, - "gemini": &executor.ContainerRunner{ + } + } + if cfg.Runners.GeminiEnabled() { + runners["gemini"] = &executor.ContainerRunner{ Image: cfg.GeminiImage, Logger: logger, LogDir: cfg.LogDir, @@ -115,8 +120,10 @@ func serve(addr, basePath string) error { CredentialSyncCmd: filepath.Join(repoDir, "scripts", "sync-credentials"), Store: store, Registry: agentRegistry, - }, - "container": &executor.ContainerRunner{ + } + } + if cfg.Runners.ContainerEnabled() { + runners["container"] = &executor.ContainerRunner{ Image: "claudomator-agent:latest", Logger: logger, LogDir: cfg.LogDir, @@ -127,11 +134,11 @@ func serve(addr, basePath string) error { CredentialSyncCmd: filepath.Join(repoDir, "scripts", "sync-credentials"), Store: store, Registry: agentRegistry, - }, + } } localClient := buildLocalLLMClient(cfg.LocalModel, logger) - if localClient != nil { + if localClient != nil && cfg.Runners.LocalEnabled() { runners["local"] = &executor.LocalRunner{ Client: localClient, Logger: logger, @@ -141,7 +148,6 @@ func serve(addr, basePath string) error { logger.Info("local runner registered", "endpoint", cfg.LocalModel.Endpoint, "model", cfg.LocalModel.Model) } - pool := executor.NewPool(cfg.MaxConcurrent, runners, store, logger) pool.Classifier = &executor.Classifier{ LLM: localClient, @@ -152,7 +158,7 @@ func serve(addr, basePath string) error { } // Budget accountant: gate paid providers against rolling per-provider caps. - // With no limits configured this is created but allows everything. + // With no limits configured this is a no-op. var accountant *budget.Accountant if len(cfg.Budget.Provider5hUSD) > 0 { window := budget.DefaultWindow @@ -268,4 +274,3 @@ func serve(addr, basePath string) error { } return nil } - |
