Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

fix(desktop): keep busy composer guidance clear and non-overlapping (#65)

7 months ago

93d43c9
Authored
Jason Cantor3/30/2026, 3:46:17 PM
* fix(desktop): move busy composer guidance into a dedicated status row

The steering/busy hints (steer-ready, steer-pending, streaming) now
render in a fixed-height PromptInputStatusRow between the textarea body
and the footer controls. This prevents the hint copy from colliding with
the model chip and submit button when the footer wraps.

- Add PromptInputStatusRow component with fixed h-6, single-line,
  truncated presentation
- Make PromptInputFooter non-wrapping (flex-nowrap) so the model area
  and submit button stay on one line
- Add overflow-hidden to PromptInputTools so the model selector
  truncates instead of pushing the footer wider
- Return null from composerBusyHint for idle state, removing the
  redundant "Press Enter to send" footer copy
- Update tests to assert status row presence and idle-state absence

Made-with: Cursor

* fix(desktop): resolve busy composer overflow by making textarea shrinkable

The fixed messageBarHeight (120px) couldn't fit the textarea min-height
(52px) + status row (24px) + footer (~48px) + padding. Changed textarea
min-h from 3.25rem to min-h-0 so the flex column can actually shrink.
Added overflow-hidden to PromptInputBody to clip textarea content.
Shortened the busy placeholder from "Type to steer the current run..."
to "Steer..." to avoid echoing the status row hint text.

Made-with: Cursor

* fix(desktop): restore textarea visibility by switching container to minHeight

The fixed `height: messageBarHeight` (120px) couldn't fit the textarea
min-height + status row + footer. The previous min-h-0 fix collapsed the
textarea to zero. Switch to `minHeight` so the container grows naturally
when the status row appears during busy state, while still respecting the
resizer floor. Restore textarea min-h-[3.25rem] and drop the overflow-hidden
band-aid from PromptInputBody.

Made-with: Cursor

* fix(desktop): render busy status row above the textarea, not below it

Moves the PromptInputStatusRow from between the textarea body and footer
to above the textarea body. The steering hint text now appears at the top
of the composer shell where it has clear visual separation from both the
input area and the footer controls.

Made-with: Cursor

* fix(desktop): clarify message bar minimum height semantics

Co-authored-by: Codex <noreply@openai.com>

* perf: optimize startup control bootstrap and package footprint (#64)

* perf: optimize startup control bootstrap and package footprint

Combine the kept packaging, startup-lazification, control-session fast-path, runtime schema split, and prompt-template dedupe work into one reviewable branch. The kept changes overlap across package.json, startup/session modules, prompt loading, and prompt-template assets, so they need to land together from merge-base.

Experiments: #2, #3, #12, #13, #15, #17, #19, #23, #25, #27, #28, #30, #32, #33, #34, #35, #38, #39, #42, #44, #45, #46, #48, #49, #50, #52, #53

Metric: control_bootstrap_pack_score 3987.2 → 2277.6 (-42.9%)

Secondary highlights: packed_kb 3635.0 → 2194.5, server_ready_ms 337.9 → 68.3, control_bootstrap_ms 343.0 → 71.0

* fix: preserve discovered skills for child sessions

Made-with: Cursor

* test: fix stream pipeline session fixture

Made-with: Cursor

* fix: preserve prompt readiness with zero skills

Track whether session prompt metadata has been loaded so empty skill catalogs do not trigger prompt reloads on every turn. Also harden the package manifest test under Bun and cover the missing-metadata backfill path.

Made-with: Cursor

* fix(desktop): move busy composer guidance into a dedicated status row

The steering/busy hints (steer-ready, steer-pending, streaming) now
render in a fixed-height PromptInputStatusRow between the textarea body
and the footer controls. This prevents the hint copy from colliding with
the model chip and submit button when the footer wraps.

- Add PromptInputStatusRow component with fixed h-6, single-line,
  truncated presentation
- Make PromptInputFooter non-wrapping (flex-nowrap) so the model area
  and submit button stay on one line
- Add overflow-hidden to PromptInputTools so the model selector
  truncates instead of pushing the footer wider
- Return null from composerBusyHint for idle state, removing the
  redundant "Press Enter to send" footer copy
- Update tests to assert status row presence and idle-state absence

Made-with: Cursor

* fix(desktop): resolve busy composer overflow by making textarea shrinkable

The fixed messageBarHeight (120px) couldn't fit the textarea min-height
(52px) + status row (24px) + footer (~48px) + padding. Changed textarea
min-h from 3.25rem to min-h-0 so the flex column can actually shrink.
Added overflow-hidden to PromptInputBody to clip textarea content.
Shortened the busy placeholder from "Type to steer the current run..."
to "Steer..." to avoid echoing the status row hint text.

Made-with: Cursor

* fix(desktop): restore textarea visibility by switching container to minHeight

The fixed `height: messageBarHeight` (120px) couldn't fit the textarea
min-height + status row + footer. The previous min-h-0 fix collapsed the
textarea to zero. Switch to `minHeight` so the container grows naturally
when the status row appears during busy state, while still respecting the
resizer floor. Restore textarea min-h-[3.25rem] and drop the overflow-hidden
band-aid from PromptInputBody.

Made-with: Cursor

* fix(desktop): render busy status row above the textarea, not below it

Moves the PromptInputStatusRow from between the textarea body and footer
to above the textarea body. The steering hint text now appears at the top
of the composer shell where it has clear visual separation from both the
input area and the footer controls.

Made-with: Cursor

* fix(desktop): clarify message bar minimum height semantics

Co-authored-by: Codex <noreply@openai.com>

* fix(desktop): restore composer submit state colors

Use explicit primary, warning, and destructive tokens so send, steer, and stop remain visually distinct and legible.

Made-with: Cursor

* fix(desktop): keep composer controls reachable

Allow the composer footer to wrap again so narrow layouts do not clip attach or model controls, and align the busy attachment stability test with a real active-thread state.

Made-with: Cursor

---------

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Max Weinbach <maxweinbach5@gmail.com>

Parentb4ed93e

5 files changed
  • apps/desktop/src/components/ai-elements/prompt-input.tsx+23−4
  • apps/desktop/src/ui/ChatView.tsx+10−9
  • apps/desktop/src/ui/layout/MessageBarResizer.tsx+3−1
  • apps/desktop/test/chat-reasoning-ui.test.ts+1−0
  • apps/desktop/test/chat-view.stability.test.tsx+152−6