feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(web): attach composer state drawers - #7150

Merged
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer
Aug 20, 2026
Merged

feat(web): attach composer state drawers#7150
maria-rcks merged 14 commits into
mainfrom
ui-refresh/composer

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Attaches approval, user-input, plan, sync, slash-command, and stash states directly to the composer surface.
  • Preserves real runtime data and the existing approval guards. Pending approvals still disable editing, sending, prompt replacement, and stashing.
  • Keeps full approval commands readable and labels session-wide approval explicitly.

Screenshots

Direct parent on the left; this PR on the right. Same viewport and copied application state.

BeforeAfter
Composer slash-command drawer beforeComposer slash-command drawer after
## Why

The composer pass was uncommitted work on the original branch and is independent of tool activity. It belongs in its own UI review.

Review note

  • Pending-input stash restore remains hidden because restoration writes the normal composer draft, not the active pending answer. Exposing it there would be a broken affordance.

Validation

  • Composer banner, command menu, approval, user-input, stash, and sync-state tests
  • Affected-package typechecks
  • Changed-file lint and formatting checks

Stack order

  1. feat(web): unify workspace navigation #7153 workspace and navigation
  2. feat(web): redesign usage insights #7147 Usage
  3. feat(web): refresh pull request details #7148 Pull Requests
  4. feat(web): improve terminal workspace controls #7149 terminal
  5. feat(web): attach composer state drawers #7150 composer, this PR
  6. fix(server): preserve tool lifecycle identity #7151 tool lifecycle projection
  7. feat(web): collapse tool activity into one line #7152 tool activity UI

Built with GPT-5.6-sol in the Codex harness.


Note

Medium Risk
Large composer layout/CSS refactor and new drawer stacking behavior could cause visual or focus regressions; plan duration derivation changes displayed timing but not server data.

Overview
Reworks the chat composer so runtime state sits in attached “drawer” surfaces above the input instead of floating pills and dropdown glass. Task progress from the thread shell appears in a new shoulder tab / expandable list (with per-turn dismiss), alongside stash and top drawers for approvals, pending user input, and plan follow-up—all using shared chat-composer-drawer-* styling and glass-shell attachment when banners or drawers are present.

Slash-command and stash pickers, banner stack, and thread sync status use the same attached drawer treatment; command menu positioning aligns to the main composer surface with drawer inset and overlap. Approval and pending-input UI is compacted (micro buttons, inline command detail, tighter option rows); background-work banner copy is shortened.

Plan activities now get durationMs on completed steps via addPlanStepDurations (handles plan clears, repeated step labels, completion-order fallbacks). Provider skills move presentation helpers to @t3tools/client-runtime/providerSkills with resolveProviderSkillSourceKind and source-specific icons on web and mobile. Adds Buttonmicro size and inline chip geometry tweaks.

Reviewed by Cursor Bugbot for commit 0fbf449. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Attach composer state drawers and add task progress badge/drawer

  • Converts composer popovers (command menu, stash menu, banner stack) into attached drawer surfaces that anchor to the composer's main surface, with new CSS classes and data attributes for glass backgrounds, outlines, and shadows
  • Adds ComposerTasksBadge and ComposerTasksDrawer to show per-turn task progress inline and in an expandable drawer; ChatComposer wires these via new activeTasksProgress and activeTaskSteps props from ChatView",

Macroscope summarized 0fbf449.

@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e2a6844-1fdd-4e36-8193-8ca61a19dacd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 16, 2026
@maria-rcksmaria-rcks mentioned this pull request Aug 16, 2026
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
@github-actions

github-actionsBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire12.6 KiB12.6 KiB−2 B (−0.0%)15.1 KiB
CodexThread snapshot wire6.3 KiB6.3 KiB−7 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.3 KiB6.3 KiB+5 B (+0.1%)7.8 KiB
CodexLive turn WebSocket decoded51.8 KiB51.8 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire12.6 KiB12.6 KiB−13 B (−0.1%)15.1 KiB
ClaudeThread snapshot wire6.3 KiB6.3 KiB−9 B (−0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.3 KiB6.3 KiB−4 B (−0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded52.7 KiB52.7 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: 105cd5e · PR result: 0fbf449 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI Consistency

Five findings, all introduced by this PR's composer/drawer refresh. The largest are a responsive geometry override that silently loses at sm and up, and px constants in ComposerCommandMenuLayer that duplicate rem-based drawer tokens.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerPendingApprovalActions.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
@macroscopeapp

macroscopeappBot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR introduces new user-facing features including task progress drawers, refactored stash UI, and significant composer layout changes. The new components, state management, and visual effects represent meaningful feature additions warranting human review.

You can add or adjust custom eligibility rules. Learn more.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refactor. Three new findings on this revision (accessibility state on the stash tab, coarse-pointer reachability of the stash delete action, and an inert data-variant hook). Earlier findings on the size="xs" + h-5 px-1.5 text-[11px] overrides, the hardcoded px drawer geometry, and the undefined chat-composer-drawer-attached class are still open in the existing threads and are not repeated here. Thanks for restoring Cancel in the desktop approval row and for keeping the stash tab mounted while its drawer is open.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three new findings on the attached-drawer refresh (all in apps/web/src). Findings from my earlier runs on this branch (micro-button geometry overrides, the px drawer inset/overlap constants, the undefined chat-composer-drawer-attached class, aria-expanded="false", the pointer-events-none stash delete button, and the inert data-variant) still apply to the rebased head; I have not re-posted them here.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx Outdated
Comment threadapps/web/src/components/chat/ThreadSyncStatusPill.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerStashMenu.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. One finding on the new inline stash placement.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the inline stash badge migration. One finding: the inline placement's open/pulsing emphasis never renders because both children opt out of the button's text color.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerStashBadge.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency review of the composer drawer refresh. Two findings; earlier findings from previous runs on this branch are not repeated.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/ChatView.tsx Outdated
Comment threadapps/web/src/components/ChatView.tsx Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

apps/web/src/components/chat/ComposerCommandMenu.tsx: the skill source moved from a text label to an aria-hidden icon with no text alternative, so the source is no longer exposed to assistive tech and has no visible name either.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerCommandMenu.tsx

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency — 1 finding

The new inline task badge hand-rolls the micro ghost control that this PR just standardized as a Button size/variant, and it renders immediately next to ComposerStashBadge's inline placement, which does use the primitive.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/components/chat/ChatComposer.tsx
Comment threadapps/web/src/session-logic.ts Outdated

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI consistency: 2 findings in the new composer task controls.

Posted via Macroscope — UI Consistency

Comment threadapps/web/src/components/chat/ChatComposer.tsx Outdated
Comment threadapps/web/src/components/chat/ComposerTasksBadge.tsx Outdated
Comment threadapps/web/src/components/chat/ChatComposer.tsx

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 4 total unresolved issues (including 3 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d5bdcc7. Configure here.

Comment threadapps/web/src/components/chat/ChatComposer.tsx
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@maria-rcks