feat(orchestration): director-type picker + DirectorBackend abstraction (#11, #8) - #25
Merged
Merged
Conversation
…on (#11, #8) #8 — new src/renderer/src/lib/director-backend.ts: a thin DirectorBackend abstraction wrapping the two existing launchers, not reimplementing them. LlmDirectorBackend wraps launchOrchestratorForProject (the Smart/LLM director); RecipeDirectorBackend carries a Recipe and wraps launchRecipeDirector (#9). It earns its keep because the picker dispatches the user's choice through it. #11 — the ORCASTRATORS `+` modal now picks the director TYPE first via a new DirectorTypePicker (shadcn cards + recipe Select, tokens, i18n): Smart director (default LLM + /orcastrate) vs Recipe director ("No director LLM; runs a fixed workflow"), with a recipe dropdown sourced from getRecipes(). The picker is the gate for experimentalOrchestrators — launchRecipeDirector is ungated by design, so the Recipe option only appears under the flag; with it off the modal behaves exactly as before. On confirm the modal dispatches via the DirectorBackend. Tests: director-backend (Smart -> LlmDirectorBackend -> launchOrchestratorForProject; Recipe+recipe -> RecipeDirectorBackend(recipe) -> launchRecipeDirector with that recipe) and DirectorTypePicker (Smart always; Recipe only under the flag; dropdown lists getRecipes()). vitest + typecheck + electron-vite build + oxlint green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a director-type picker to the ORCASTRATORS launch flow, dispatching the user's choice through a new DirectorBackend abstraction. Closes #11 and #8.
#8 —
DirectorBackend(src/renderer/src/lib/director-backend.ts)A deliberately thin abstraction that wraps the two existing launchers (it does not reimplement them):
LlmDirectorBackend→ wrapslaunchOrchestratorForProject(the Smart/LLM director). Additive — the existing launcher is untouched.RecipeDirectorBackend→ constructed with aRecipe, wrapslaunchRecipeDirector(RecipeDirectorBackend: compile recipe -> task DAG -> orchestration.run, no LLM in worktree #9).It earns its keep precisely because the picker dispatches through it (no premature standalone abstraction; no Hybrid backend yet).
#11 — director-type picker (
DirectorTypePicker+ modal wiring)The ORCASTRATORS
+modal now picks the director type first:/orcastrate(the existing behavior).getRecipes().On confirm the modal dispatches via
new LlmDirectorBackend()/new RecipeDirectorBackend(recipe)→.launch(project, …).Gating: the picker is the gate for
experimentalOrchestrators—launchRecipeDirectoris ungated by design (per #9), so the Recipe option only appears under the flag. With the flag off, the modal behaves exactly as before (Smart only; agent + task fields shown). In Recipe mode the coordinator-LLM inputs (agent, task prompt) are hidden, since a recipe director seeds no director LLM.shadcn
Dialog/Select+ selectable radio cards, design tokens only, all strings i18n'd, cross-platform.Tests
director-backend.test.ts— Smart →LlmDirectorBackend→launchOrchestratorForProject; Recipe+recipe →RecipeDirectorBackend(recipe)→launchRecipeDirectorwith that recipe (launch fns mocked; args asserted).DirectorTypePicker.test.tsx— Smart always offered; Recipe only under the flag; dropdown lists everygetRecipes()recipe; recipe dropdown hidden in Smart mode.Green: vitest (8 new), typecheck, electron-vite build, oxlint, localization catalog.
Dependency on #10
Sources the recipe dropdown from
getRecipes()inrecipe-director-recipes.ts(#10). #10 is merged to main; this branch has been merged up toorigin/mainand importsgetRecipes()directly. Per the lane split, this PR only readsrecipe-director-recipes.ts— it does not modify it.🤖 Generated with Claude Code