diff --git a/components/ai-elements/reasoning.tsx b/components/ai-elements/reasoning.tsx index 4a3de8d..f21942f 100644 --- a/components/ai-elements/reasoning.tsx +++ b/components/ai-elements/reasoning.tsx @@ -137,7 +137,7 @@ const defaultGetThinkingMessage = (isStreaming: boolean) => { if (isStreaming) { return Thinking...; } - return

AGENT THINKING

; + return

AGENT’S THINKING

; }; export const ReasoningTrigger = memo( diff --git a/components/chat.tsx b/components/chat.tsx index 14b60a0..4fc1115 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -1259,7 +1259,7 @@ export function Chat({ User text renders plain — the model's LaTeX pipeline is not applied to learner-authored text ($ stays $, no surprises). Rendered WITHOUT the Message wrapper — that is the bubble. */ -
+
{/* The rail GROUPS (owner round 4, 2026-10-05): the YOU heading sits INSIDE the rail, same mono-xs register and same 1ch rail as the thinking rows — one quote geometry. */} @@ -1365,10 +1365,10 @@ export function Chat({ entered by external discovery (wake) / the poll fallback. Never collapsible itself. */} {(status === "submitted" || turnInFlight) && ( - + - - Thinking… + + THINKING… )} diff --git a/components/question-dock.tsx b/components/question-dock.tsx index ecd9ea9..752ae70 100644 --- a/components/question-dock.tsx +++ b/components/question-dock.tsx @@ -820,9 +820,10 @@ function QuestionDockForm({ onEscape(); return; } - // ⌘↵ on macOS, Ctrl↵ elsewhere — the Gmail convention; plain - // Enter stays a newline (this field is for dumping). - if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) { + // THE STANDARD CHORD (owner round 5, 2026-10-05): Enter + // submits, Shift+Enter is a newline, ⌘/Ctrl+Enter works + // too — identical to the practice dock and the composer. + if (e.key === "Enter" && (!e.shiftKey || e.metaKey || e.ctrlKey)) { e.preventDefault(); submit(); } @@ -838,11 +839,9 @@ function QuestionDockForm({ /> )}
- {qd.mode !== "text" && ( - - ⌘/Ctrl + ↵ submits - - )} + + ↵ submits · ⇧↵ newline +