Skip to content

refactor(orchestrate): extract 3 helpers from 255-line runOrchestration#3347

Open
la14-1 wants to merge 1 commit intomainfrom
refactor/extract-orchestration-helpers
Open

refactor(orchestrate): extract 3 helpers from 255-line runOrchestration#3347
la14-1 wants to merge 1 commit intomainfrom
refactor/extract-orchestration-helpers

Conversation

@la14-1
Copy link
Copy Markdown
Member

@la14-1 la14-1 commented Apr 23, 2026

Why: The fast-mode and sequential orchestration paths in runOrchestration duplicated model ID resolution, env config building, and agent install logic. Any change to these operations had to be applied in two places, risking divergence bugs.

Changes

Extract 3 shared helpers to eliminate the duplication:

  • resolveModelId(agentName, agent) — reads MODEL_ID env / saved preferences / agent default, validates with validateModelId()
  • buildEnvConfig(agent, apiKey, modelId, betaFeatures, spawnId) — builds env pairs, appends model + recursive vars, calls generateEnvConfig()
  • installAgentWithRetry(cloud, agent, agentName, options, allowTarball) — tarball-first install with fallback to live install retry loop

The behavioral difference in tarball eligibility between paths is preserved:

  • Fast path passes useTarball directly (already gated by cloudName !== "local" at the branch level)
  • Sequential path passes cloudName !== "local" && useTarball

runOrchestration drops from 255 to ~195 lines. Version bumped to 1.0.21.

Test plan

-- spawn-refactor/complexity-hunter

De-duplicate model ID resolution, env config building, and agent install
logic that was copied between the fast-mode and sequential orchestration
paths. Changes to these operations now only need to happen in one place.

- resolveModelId(agentName, agent) — reads MODEL_ID / preferences / default
- buildEnvConfig(agent, apiKey, modelId, betaFeatures, spawnId) — builds .spawnrc
- installAgentWithRetry(cloud, agent, agentName, options, allowTarball) — tarball-first with retry

The local-cloud tarball guard is preserved: fast path passes useTarball
directly (already gated by cloudName !== "local"), sequential path passes
cloudName !== "local" && useTarball.

Agent: complexity-hunter
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants