From da0241f767649d6540480022426f5557b648f851 Mon Sep 17 00:00:00 2001 From: Guido Vizoso Date: Fri, 16 Oct 2026 19:23:47 -0300 Subject: [PATCH 01/12] Make New Bot a small ghost button --- app/src/routes/_authed/_app/bots.index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/routes/_authed/_app/bots.index.tsx b/app/src/routes/_authed/_app/bots.index.tsx index 63394c051..9aa7a74b4 100644 --- a/app/src/routes/_authed/_app/bots.index.tsx +++ b/app/src/routes/_authed/_app/bots.index.tsx @@ -22,7 +22,8 @@ function BotsPage() { render={(props) => ( )} - size="lg" + size="sm" + variant="ghost" > New Bot From 8c9e4c366eb4c9956983a604d16ffe643ecffbee Mon Sep 17 00:00:00 2001 From: Guido Vizoso Date: Fri, 16 Oct 2026 19:23:58 -0300 Subject: [PATCH 02/12] Hold the new-Bot dialog open and say what each field is for A floor of 70% of the viewport, under the 85% ceiling the popup already carried, so three of the four states land on one height instead of the dialog resizing between every question. The buttons pin to the bottom, and the pane keeps slack under it so the animated frame never shaves the last line of a step while the spring settles. "Role" beside "Title" read as a second job title when it is the standing instruction the Bot carries into every channel. It is now "What it does", and the per-channel promise moved from above all three fields onto the one field it is true of. The validation messages and the Bot's own screens follow the same name. --- app/src/components/agents/agent-profile.tsx | 2 +- .../components/agents/create-agent-dialog.tsx | 48 ++++++++++++++++--- app/src/components/bot-profile/setup.tsx | 4 +- app/src/lib/agents/form.ts | 4 +- server/src/agents/routes.ts | 2 +- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/src/components/agents/agent-profile.tsx b/app/src/components/agents/agent-profile.tsx index 5065173c5..6d77bf57d 100644 --- a/app/src/components/agents/agent-profile.tsx +++ b/app/src/components/agents/agent-profile.tsx @@ -89,7 +89,7 @@ export function AgentProfile({ agentId }: { agentId: string }) {

- Role + What it does

{profile.roleDescription} diff --git a/app/src/components/agents/create-agent-dialog.tsx b/app/src/components/agents/create-agent-dialog.tsx index ff06cf169..a621681df 100644 --- a/app/src/components/agents/create-agent-dialog.tsx +++ b/app/src/components/agents/create-agent-dialog.tsx @@ -61,7 +61,13 @@ export function CreateAgentDialog({ }) { return (

!next && onClose()} open={open}> - + {/* A floor of 70% of the viewport, against the popup's usual grow-to-fit. The three steps are + very different heights — two choices on one, three fields on another, four plus an + endpoint test on the last — and a dialog that resized itself between each made the + wizard feel like three unrelated popups. The floor sits under the 85svh ceiling the popup + already carries, so the two never fight: every step lands in that 70–85% band, and the + shortest one pays for it with empty room below the question. */} + {/* All wizard state lives below DialogContent, whose portal unmounts on close: dismissing the dialog mid-way discards the half-answered steps rather than pickling them. */} @@ -248,6 +254,9 @@ function CreateAgentWizard({ New coworker ) : null} -
+ {/* `mt-auto` pins the row to the bottom when the step is short; `pt-6` is the gap it + keeps once the step is tall enough to have pushed it there itself. */} +