diff --git a/packages/app/src/composer/index.tsx b/packages/app/src/composer/index.tsx index 2f18f2a94..05f244705 100644 --- a/packages/app/src/composer/index.tsx +++ b/packages/app/src/composer/index.tsx @@ -1871,6 +1871,7 @@ export function Composer({ submitIcon={submitIcon} isSubmitDisabled={isSubmitBusy} isSubmitLoading={isSubmitBusy} + preserveHeightOnSubmit={submitBehavior === "preserve-and-lock"} attachments={selectedAttachments} cwd={cwd} attachmentMenuItems={attachmentMenuItems} diff --git a/packages/app/src/composer/input/input.tsx b/packages/app/src/composer/input/input.tsx index 0e2e40603..73dd7b1a9 100644 --- a/packages/app/src/composer/input/input.tsx +++ b/packages/app/src/composer/input/input.tsx @@ -94,6 +94,8 @@ export interface MessageInputProps { submitIcon?: "arrow" | "return"; isSubmitDisabled?: boolean; isSubmitLoading?: boolean; + /** When true, keep the grown input height after submit (text is preserved, not cleared). */ + preserveHeightOnSubmit?: boolean; attachments: ComposerAttachment[]; cwd: string; attachmentMenuItems: AttachmentMenuItem[]; @@ -982,6 +984,7 @@ interface SendMessageContext { isAgentRunning: boolean; onSubmit: (payload: MessagePayload) => void; onMinimizeHeight: () => void; + preserveHeightOnSubmit: boolean; } function sendMessageImpl(ctx: SendMessageContext): void { @@ -1000,7 +1003,11 @@ function sendMessageImpl(ctx: SendMessageContext): void { cwd: ctx.cwd, forceSend: ctx.isAgentRunning || undefined, }); - ctx.onMinimizeHeight(); + // When the host preserves and locks the composer (e.g. new-workspace creation), + // the text stays put — collapsing the height would clip it. Keep it grown. + if (!ctx.preserveHeightOnSubmit) { + ctx.onMinimizeHeight(); + } } interface QueueMessageContext { @@ -1141,6 +1148,7 @@ interface ResolvedMessageInputProps { submitIcon: "arrow" | "return"; isSubmitDisabled: boolean; isSubmitLoading: boolean; + preserveHeightOnSubmit: boolean; attachments: ComposerAttachment[]; cwd: string; attachmentMenuItems: AttachmentMenuItem[]; @@ -1182,6 +1190,7 @@ function resolveMessageInputProps(props: MessageInputProps): ResolvedMessageInpu submitIcon: props.submitIcon ?? "arrow", isSubmitDisabled: props.isSubmitDisabled ?? false, isSubmitLoading: props.isSubmitLoading ?? false, + preserveHeightOnSubmit: props.preserveHeightOnSubmit ?? false, attachments: props.attachments, cwd: props.cwd, attachmentMenuItems: props.attachmentMenuItems, @@ -1231,6 +1240,7 @@ export const MessageInput = forwardRef( submitIcon, isSubmitDisabled, isSubmitLoading, + preserveHeightOnSubmit, attachments, cwd, attachmentMenuItems, @@ -1546,6 +1556,7 @@ export const MessageInput = forwardRef( isAgentRunning, onSubmit, onMinimizeHeight: minimizeInputHeight, + preserveHeightOnSubmit, }), [ allowEmptySubmit, @@ -1555,6 +1566,7 @@ export const MessageInput = forwardRef( isAgentRunning, hasExternalContent, minimizeInputHeight, + preserveHeightOnSubmit, ], );