Skip to content

feat(app): build React session composer parity on Lexical#1367

Draft
benjaminshafii wants to merge 32 commits intodevfrom
feat/react-lexical-composer-parity
Draft

feat(app): build React session composer parity on Lexical#1367
benjaminshafii wants to merge 32 commits intodevfrom
feat/react-lexical-composer-parity

Conversation

@benjaminshafii
Copy link
Copy Markdown
Member

@benjaminshafii benjaminshafii commented Apr 6, 2026

Summary

  • replace the temporary React session textarea with a Lexical-based composer shell as the first step toward full React session composer parity
  • keep the existing React session streaming/runtime behavior intact while moving the authoring surface onto a real editor foundation
  • stack incremental parity slices for mentions, attachments, model/provider controls, slash commands, transcript copy, dropzone UX, sticky composer layout, and remaining Solid session composer UX

Verification

  • pnpm --filter @openwork/app typecheck
  • pnpm --filter @openwork/app build
  • live browser checks against the React session path as each incremental landed

Remaining work

Remaining parity / polish

  • full live browser QA across all new React composer flows together
  • chip/editor edge-case polish
    • multiple adjacent chips
    • chip + text + newline combinations
    • cursor restoration / IME edge cases
  • mention/file chip visual polish
    • richer file icon treatment
    • stronger path preview / hover refinement
  • tool / reasoning rendering polish
    • grouping
    • summaries
    • expansion behavior
    • step presentation
  • remote/shared-folder UX polish
    • better upload progress/confirmation
    • stronger post-upload insertion behavior
  • general visual refinement
    • menu spacing
    • transcript spacing consistency
    • attachment card styling tweaks
    • hover/button state polish

Replace the React session textarea with a Lexical-based plain-text composer shell so subsequent parity work can build on a real editor instead of continuing to extend the temporary textarea path.
@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Apr 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openwork-app Error Error Apr 8, 2026 0:43am
openwork-den Ready Ready Preview, Comment Apr 8, 2026 0:43am
openwork-den-worker-proxy Ready Ready Preview, Comment Apr 8, 2026 0:43am
openwork-landing Ready Ready Preview, Comment, Open in v0 Apr 8, 2026 0:43am
openwork-share Ready Ready Preview, Comment Apr 8, 2026 0:43am

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

The following comment was made by an LLM, it may be inaccurate:

Make the React Lexical composer use the existing ComposerDraft send/draft pipeline from the session page and expose transcript copy plus model picker access so parity work builds on the same session actions as the Solid path.
Extend the Lexical React composer with model/variant/agent controls, file attachments, prompt-vs-shell draft mode, and slash command suggestions while continuing to use the shared ComposerDraft send path from the existing session actions.
Add end-of-input @ mention suggestions for agents and files in the Lexical React composer and serialize selected mentions into the shared ComposerDraft parts so the React path can target agent/file inputs instead of plain text only.
Upgrade accepted React composer mentions from plain text into Lexical token nodes so agent and file selections render as real inline chips instead of raw @text while still serializing back into ComposerDraft parts.
Upgrade accepted slash commands in the Lexical React composer into real inline token nodes so slash completion feels more intentional and benefits from the same token navigation behavior as mentions.
Upgrade the React composer attachment UI with richer cards, image previews, mime badges, size display, and oversized-file warnings so attachment handling feels closer to the Solid composer path.
Close the React mention/slash menus cleanly after selection and keep active-row state in sync with mouse hover so the Lexical composer menus feel less sticky and more intentional.
Promote collapsed pasted text into a first-class React composer surface with preview, copy, and remove actions so long pasted content is no longer only a hidden placeholder token inside the draft.
Add copy affordances for Markdown code blocks plus tool request/result/diff sections so the React transcript and tool-call surfaces close more of the remaining practical parity gap with the Solid session UI.
Keep the active React mention/slash selection scrolled into view and make remote-path warnings offer a more useful shared-folder upload action when attachments are already present in the composer.
Handle unsupported dropped files more deliberately in the React composer by matching the attachment support matrix and surfacing an explanatory notice instead of silently treating every dropped file the same.
Extend the React composer agent picker with active-row highlighting plus ArrowUp/ArrowDown/Enter/Escape behavior so it matches the rest of the keyboard-driven Lexical composer interactions.
Keep the React composer pinned to the bottom of the session layout with a dedicated footer container so the transcript scrolls above it instead of letting the composer drift upward when the session is sparse.
Only show the React session loading/switching affordances after a short delay and stop treating normal streaming as a switching state so the session surface feels calmer during quick transitions and active chats.
Turn the React composer drag/drop path into a real dropzone with isolated local drag-over state and visible drop affordances instead of relying only on hidden drag handlers.
Drop the extra card shadow from the React composer container so the input surface stops showing the grey halo and sits closer to the cleaner Solid styling.
Remove the extra sticky footer treatment from the React session surface so the composer sits more cleanly in the layout without the added gradient wrapper.
Remove the useless Step started label from the React transcript, render markdown horizontal rules as subtle dividers instead of heavy black lines, and tone down heading sizes so the session surface looks cleaner.
Switch the horizontal rule color to a softer gray so markdown dividers feel like subtle section breaks instead of standing out.
…xt chips

Fix the session layout so the transcript scrolls and the composer stays at the bottom. Replace raw Copy text buttons with cleaner icon-based copy affordances with check feedback. Render pasted multi-line text as Lexical inline chips instead of raw text in the editor.
Replace the separate Stop and Run task buttons with a single button that switches between Run task and Stop based on streaming state so the composer footer stays clean.
Drop the standalone Copy transcript button and move per-message copy affordances to absolute positioning so they don't inflate message bubble height when hidden.
Replace the unstyled native select dropdown for model variant/behavior with a styled button + dropdown menu that matches the rest of the Lexical composer controls.
Add explicit full-height sizing through the Solid session wrapper and React island container so the React session surface can reliably fill the available vertical space without manual inline devtools overrides.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant