From 65d7186e1c16cacb6abba6a122667f1da6c88b45 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Mon, 7 Sep 2026 20:29:35 +0100 Subject: [PATCH 1/4] feat(web): harness cards with tool logos lead the spawn dialog Move the harness/command choice above the project picker so the operator decides what runs before where. Replace the flat command tiles with larger centered cards that render each tool's icon from toolIcon.ts at 24x24. The Custom escape hatch gets a three-dot ellipsis icon and a dashed border to read as secondary. Co-Authored-By: Claude Opus 4.6 --- web/src/spawnForm.ts | 72 +++++++++++++++++++++++--------- web/src/spawnFormEnter.test.ts | 2 +- web/src/spawnFormPreset.test.ts | 6 +-- web/src/spawnModal.test.ts | 4 +- web/src/styles.css | 73 ++++++++++++++++++++------------- 5 files changed, 103 insertions(+), 54 deletions(-) diff --git a/web/src/spawnForm.ts b/web/src/spawnForm.ts index 9aeda7d..42690af 100644 --- a/web/src/spawnForm.ts +++ b/web/src/spawnForm.ts @@ -11,7 +11,7 @@ import { attachDirAutocomplete } from "./dirAutocomplete.js"; import { parentDir } from "./paths.js"; import { filterProjects, groupProjects, isStale, sortProjects } from "./projectList.js"; import type { ProjectGroup } from "./projectList.js"; -import { splitCommand } from "./toolIcon.js"; +import { splitCommand, toolIconSvg, TOOL_LABELS } from "./toolIcon.js"; import { abbreviateCwd } from "./types.js"; import type { BranchInfo, CreateSessionRequest, Project, Session, SpawnPreset } from "./types.js"; @@ -140,6 +140,12 @@ export function createSpawnForm(opts: SpawnFormOptions): SpawnFormHandle { const form = document.createElement("form"); form.className = "spawn-form"; form.innerHTML = ` +
+ Harness +
+ +
Project
-
- Command -
- -