From 608e8b4bddec725cf1cc334cd031bbf4e1ef6977 Mon Sep 17 00:00:00 2001 From: A <258483684+la14-1@users.noreply.github.com> Date: Sun, 1 Mar 2026 19:06:57 -0800 Subject: [PATCH] refactor: eliminate 7 identical agents.ts boilerplate files (#2088) * refactor: eliminate 7 identical agents.ts boilerplate files Adds createCloudAgents() factory to shared/agent-setup.ts, reducing each cloud's agents.ts from 16-line copy-paste to a single call. Net reduction of 49 lines across 9 files. Fixes #2078 Agent: complexity-hunter Co-Authored-By: Claude Sonnet 4.5 * chore: apply biome formatting --------- Co-authored-by: B <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 --- packages/cli/src/aws/agents.ts | 13 +++---------- packages/cli/src/daytona/agents.ts | 13 +++---------- packages/cli/src/digitalocean/agents.ts | 13 +++---------- packages/cli/src/gcp/agents.ts | 13 +++---------- packages/cli/src/hetzner/agents.ts | 13 +++---------- packages/cli/src/local/agents.ts | 13 +++---------- packages/cli/src/shared/agent-setup.ts | 15 +++++++++++++++ packages/cli/src/sprite/agents.ts | 13 +++---------- 8 files changed, 36 insertions(+), 70 deletions(-) diff --git a/packages/cli/src/aws/agents.ts b/packages/cli/src/aws/agents.ts index 31b371e6..81d69a4f 100644 --- a/packages/cli/src/aws/agents.ts +++ b/packages/cli/src/aws/agents.ts @@ -1,16 +1,9 @@ // aws/agents.ts — AWS Lightsail agent configs (thin wrapper over shared) import { runServer, uploadFile } from "./aws"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer, uploadFile, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/daytona/agents.ts b/packages/cli/src/daytona/agents.ts index 8a915ed9..c9c8e49e 100644 --- a/packages/cli/src/daytona/agents.ts +++ b/packages/cli/src/daytona/agents.ts @@ -1,16 +1,9 @@ // daytona/agents.ts — Daytona agent configs (thin wrapper over shared) import { runServer, uploadFile } from "./daytona"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer, uploadFile, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/digitalocean/agents.ts b/packages/cli/src/digitalocean/agents.ts index d573a637..c1c5b164 100644 --- a/packages/cli/src/digitalocean/agents.ts +++ b/packages/cli/src/digitalocean/agents.ts @@ -1,16 +1,9 @@ // digitalocean/agents.ts — DigitalOcean agent configs (thin wrapper over shared) import { runServer, uploadFile } from "./digitalocean"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer, uploadFile, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/gcp/agents.ts b/packages/cli/src/gcp/agents.ts index 8955464c..22f565c2 100644 --- a/packages/cli/src/gcp/agents.ts +++ b/packages/cli/src/gcp/agents.ts @@ -1,16 +1,9 @@ // gcp/agents.ts — GCP Compute Engine agent configs (thin wrapper over shared) import { runServer, uploadFile } from "./gcp"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer, uploadFile, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/hetzner/agents.ts b/packages/cli/src/hetzner/agents.ts index 97654609..f7714dc0 100644 --- a/packages/cli/src/hetzner/agents.ts +++ b/packages/cli/src/hetzner/agents.ts @@ -1,16 +1,9 @@ // hetzner/agents.ts — Hetzner Cloud agent configs (thin wrapper over shared) import { runServer, uploadFile } from "./hetzner"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer, uploadFile, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/local/agents.ts b/packages/cli/src/local/agents.ts index 77ee1a8b..0bc7a108 100644 --- a/packages/cli/src/local/agents.ts +++ b/packages/cli/src/local/agents.ts @@ -1,16 +1,9 @@ // local/agents.ts — Local machine agent configs (thin wrapper over shared) import { runLocal, uploadFile } from "./local"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer: runLocal, uploadFile: async (l: string, r: string) => uploadFile(l, r), -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +}); diff --git a/packages/cli/src/shared/agent-setup.ts b/packages/cli/src/shared/agent-setup.ts index 847d13c6..efff90f0 100644 --- a/packages/cli/src/shared/agent-setup.ts +++ b/packages/cli/src/shared/agent-setup.ts @@ -557,3 +557,18 @@ export function resolveAgent(agents: Record, name: string): } return agent; } + +/** + * Factory that creates agents + resolveAgent for a given CloudRunner. + * Replaces the identical 16-line boilerplate in each cloud's agents.ts. + */ +export function createCloudAgents(runner: CloudRunner): { + agents: Record; + resolveAgent: (name: string) => AgentConfig; +} { + const agentMap = createAgents(runner); + return { + agents: agentMap, + resolveAgent: (name: string) => resolveAgent(agentMap, name), + }; +} diff --git a/packages/cli/src/sprite/agents.ts b/packages/cli/src/sprite/agents.ts index d61f5943..2ed9e59d 100644 --- a/packages/cli/src/sprite/agents.ts +++ b/packages/cli/src/sprite/agents.ts @@ -1,16 +1,9 @@ // sprite/agents.ts — Sprite agent configs (thin wrapper over shared) import { runSprite, uploadFileSprite } from "./sprite"; -import { createAgents, resolveAgent as _resolveAgent } from "../shared/agent-setup"; -import type { AgentConfig } from "../shared/agents"; +import { createCloudAgents } from "../shared/agent-setup"; -const runner = { +export const { agents, resolveAgent } = createCloudAgents({ runServer: runSprite, uploadFile: uploadFileSprite, -}; - -export const agents = createAgents(runner); - -export function resolveAgent(name: string): AgentConfig { - return _resolveAgent(agents, name); -} +});