summaryrefslogtreecommitdiff
path: root/internal/cli/serve.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli/serve.go')
-rw-r--r--internal/cli/serve.go31
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
}
-