Commit Graph

105 Commits

Author SHA1 Message Date
gsxdsm
6777eea5d2 FN-7631: add content search to Chat sidebar with title-only toggle
Chat sidebar search now matches message content by default, not just the conversation title/agent, with an opt-out toggle to restore title-only filtering.

- Add ChatStore.searchSessionsByMessageContent (parameterized LIKE ... ESCAPE) for server-side content search across sessions
- GET /chat/sessions route (register-chat-routes.ts, legacy.ts) gains q/titleOnly query params, debounced server-side content lookup merged with local title/agent matches
- useChat hook exposes searchInTitleOnly state and wires debounced content search into session list results
- ChatView renders a "Search in title only" toggle beside the search box (desktop + mobile) and shows a "Matched: ..." preview snippet on content-matched rows
- Task-planner sessions remain excluded from content matches via the same common-feed visibility guard used for the normal session list
- Add unit/integration tests: chat-store content-search, chat-routes API test, ChatView content-search test
- Update docs/dashboard-guide.md to document the new content search behavior and toggle
- Add changeset fn-7631-chat-content-search.md (@runfusion/fusion minor)

Files changed:
 .changeset/fn-7631-chat-content-search.md          |   7 +
 docs/dashboard-guide.md                            |   2 +
 .../__tests__/chat-store.content-search.test.ts    | 157 +++++++++++++++++++++
 packages/core/src/chat-store.ts                    |  64 +++++++++
 packages/core/src/chat-types.ts                    |   8 ++
 packages/dashboard/app/api/legacy.ts               |  23 ++-
 packages/dashboard/app/components/ChatView.css     |  30 ++++
 packages/dashboard/app/components/ChatView.tsx     |  26 ++++
 .../__tests__/ChatView.autosize.test.tsx           |   2 +
 .../__tests__/ChatView.content-search.test.tsx     | 114 +++++++++++++++
 .../components/__tests__/ChatView.draft.test.tsx   |   2 +
 .../__tests__/ChatView.hash-mention.test.tsx       |   2 +
 .../__tests__/ChatView.mobile-render.test.tsx      |   2 +
 .../components/__tests__/ChatView.rooms.test.tsx   |   2 +
 .../__tests__/ChatView.scroll-to-top.test.tsx      |   2 +
 .../components/__tests__/ChatView.test-harness.tsx |   2 +
 packages/dashboard/app/hooks/useChat.ts            | 105 ++++++++++++--
 .../dashboard/src/__tests__/chat-routes.test.ts    |  78 ++++++++++
 .../dashboard/src/routes/register-chat-routes.ts   |  39 ++++-
 packages/i18n/locales/en/app.json                  |   2 +
 packages/i18n/locales/es/app.json                  |   2 +
 packages/i18n/locales/fr/app.json                  |   2 +
 packages/i18n/locales/ko/app.json                  |   2 +
 packages/i18n/locales/zh-CN/app.json               |   2 +
 packages/i18n/locales/zh-TW/app.json               |   2 +
 25 files changed, 667 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-7631

Fusion-Task-Lineage: bc68b489-26a7-453e-901b-bda816af364e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-07 22:06:17 -07:00
gsxdsm
42009cfdb9 FN-7628: allow editing sent chat messages and rewinding agent responses
Adds the ability to edit a previously sent message in an agent chat, which rewinds the session/task room and regenerates the response from the edited message.

- Add chat-store support for locating/replacing a message and truncating subsequent history for a rewind
- Add a chat-manager rewind-session flow and a new register-chat-routes endpoint to rewind a room to an edited message
- Add legacy API route wiring and useChat hook support for issuing an edit request
- Add ChatView/StandardChatSurface/TaskPlannerChatTab UI affordances (edit control, styling) to trigger message edits
- Add a changeset documenting the new chat message-edit capability
- Add unit/integration tests covering chat-store rewind logic, chat-manager rewind-session behavior, chat routes, useChat, and ChatView edit UI

Files changed:
 .changeset/fn-7628-chat-message-edit.md            |   7 +
 docs/dashboard-guide.md                            |   4 +
 packages/core/src/__tests__/chat-store.test.ts     | 171 ++++++++++++++
 packages/core/src/chat-store.ts                    |  95 ++++++++
 packages/dashboard/app/api/legacy.ts               |  22 ++
 packages/dashboard/app/components/ChatView.css     |  78 ++++++
 packages/dashboard/app/components/ChatView.tsx     |  14 ++
 .../app/components/StandardChatSurface.tsx         |  87 ++++++-
 .../app/components/TaskPlannerChatTab.tsx          |   8 +
 .../__tests__/ChatView.autosize.test.tsx           |   1 +
 .../__tests__/ChatView.default-model-icon.test.tsx |   1 +
 .../components/__tests__/ChatView.draft.test.tsx   |   1 +
 .../__tests__/ChatView.hash-mention.test.tsx       |   1 +
 .../__tests__/ChatView.message-edit.test.tsx       | 262 +++++++++++++++++++++
 .../__tests__/ChatView.mobile-render.test.tsx      |   1 +
 .../components/__tests__/ChatView.rooms.test.tsx   |   1 +
 .../__tests__/ChatView.scroll-to-top.test.tsx      |   1 +
 .../components/__tests__/ChatView.test-harness.tsx |   1 +
 .../dashboard/app/hooks/__tests__/useChat.test.ts  |  98 ++++++++
 packages/dashboard/app/hooks/useChat.ts            |  60 +++++
 .../__tests__/chat-manager-rewind-session.test.ts  | 185 +++++++++++++++
 .../dashboard/src/__tests__/chat-manager.test.ts   |  12 +
 .../dashboard/src/__tests__/chat-routes.test.ts    | 124 ++++++++++
 packages/dashboard/src/chat.ts                     | 147 +++++++++++-
 .../dashboard/src/routes/register-chat-routes.ts   |  52 ++++
 25 files changed, 1429 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-7628

Fusion-Task-Lineage: 36d98989-1b75-428c-baf1-b2c7e8e78013

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-07 22:06:15 -07:00
gsxdsm
635fca2409 FN-7541: remove chat markdown/plain-text toggle eye icon
Remove the chat header markdown/plain-text render toggle so chat messages always render as Markdown.

- Delete the chat-thread-header-render-toggle button (desktop + mobile) and its eye icon from ChatView.tsx
- Remove the associated showAllAsPlain state and related CSS rules from ChatView.css
- Drop the chat.showRenderedMarkdown/chat.showPlainText i18n keys from all locale files and resources.d.ts
- Update ChatView core/core-interactions/mobile tests to match the removed toggle
- Add a changeset documenting the breaking removal

Files changed:
 .changeset/FN-7541-remove-chat-eye-icon.md         |  7 +++
 packages/dashboard/app/components/ChatView.css     | 60 +---------------------
 packages/dashboard/app/components/ChatView.tsx     | 52 +++++--------------
 .../__tests__/ChatView.core-interactions.test.tsx  |  9 ++--
 .../components/__tests__/ChatView.core.test.tsx    | 35 ++++---------
 .../components/__tests__/ChatView.mobile.test.tsx  | 29 ++++-------
 packages/i18n/locales/en/app.json                  |  2 -
 packages/i18n/locales/es/app.json                  |  2 -
 packages/i18n/locales/fr/app.json                  |  2 -
 packages/i18n/locales/ko/app.json                  |  2 -
 packages/i18n/locales/zh-CN/app.json               |  2 -
 packages/i18n/locales/zh-TW/app.json               |  2 -
 packages/i18n/src/resources.d.ts                   |  2 -
 13 files changed, 46 insertions(+), 160 deletions(-)

Fusion-Task-Id: FN-7541

Fusion-Task-Lineage: 8eac79af-80b0-4ae0-ab86-c3599dd3612c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 21:28:17 -07:00
gsxdsm
a2d6349bb8 FN-7504: keep mobile chat composer above keyboard chrome
Keeps the mobile Chat composer visible when iOS keyboard accessory chrome is open.

- Add ChatView-local keyboard accessory clearance for iOS keyboard-active composer padding.
- Reset the clearance when keyboard tracking is suppressed or torn down, without adding persistent thread transforms.
- Cover empty, streaming, room, and Android mobile composer behavior with regression tests.
- Add a patch changeset for the published Fusion package.

Files changed:
 .../fn-7504-mobile-chat-composer-keyboard.md       |   7 +
 packages/dashboard/app/components/ChatView.css     |   4 +
 packages/dashboard/app/components/ChatView.tsx     |  10 ++
 .../components/__tests__/ChatView.mobile.test.tsx  | 191 +++++++++++++++++++++
 4 files changed, 212 insertions(+)

Fusion-Task-Id: FN-7504

Fusion-Task-Lineage: 4e7ed36e-e7d5-4cd1-934b-3b0f19ed6615

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-04 10:42:21 -07:00
gsxdsm
d9ef51492d FN-7462: show mobile chat conversation titles
Mobile direct-chat dropdowns now identify sessions by conversation title instead of model-name text.

- Render the mobile session trigger with the conversation title or Untitled while preserving the provider logo.
- Remove mobile trigger model-tag styling and assert the model badge stays out of the compact header.
- Document the mobile Chat dropdown behavior and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-7462-mobile-chat-dropdown-title.md   |  7 ++++
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/ChatView.css     |  8 -----
 packages/dashboard/app/components/ChatView.tsx     |  8 +++--
 .../__tests__/ChatView.core-contracts.test.tsx     | 25 +++++++++++---
 .../components/__tests__/ChatView.mobile.test.tsx  | 39 +++++++++++++++++++++-
 6 files changed, 72 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-7462
Fusion-Task-Lineage: 6a6e2ac3-ecca-4076-81c5-b4e4a65eb286
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-03 07:47:03 -07:00
gsxdsm
1430a42dd8 FN-7455: fix mobile direct chat header alignment
Keep the mobile direct-chat header on a single left-aligned row without losing accessible context.

- Hide the direct-chat ViewHeader title shell from layout while preserving the accessible Chat heading.
- Keep the back button first and the active session switcher beside it on a non-wrapping mobile row.
- Extend mobile chat coverage for long duplicate session titles, Bot fallback labels, and the CSS layout contract.
- Document the updated mobile Chat header behavior and add a patch changeset.

Files changed:
 .changeset/fn-7455-mobile-chat-header-layout.md    |  7 ++
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/ChatView.css     | 17 +++--
 packages/dashboard/app/components/ChatView.tsx     |  4 +-
 .../components/__tests__/ChatView.mobile.test.tsx  | 80 ++++++++++++++++++++--
 5 files changed, 98 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-7455

Fusion-Task-Lineage: fe14b542-ff6a-437b-ad89-8011c2b3c299

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-02 18:11:49 -07:00
gsxdsm
1d6011c3a6 FN-7450: collapse mobile chat header rows
Collapse the mobile direct chat header into the shared top row.

- Move the mobile direct-thread back button and session switcher into ViewHeader actions.
- Hide the redundant mobile thread header while preserving desktop thread identity and context details.
- Update mobile chat styling, docs, changeset, and header contract tests for the single-row layout.

Files changed:
 .changeset/fn-7450-mobile-chat-header.md           |   7 +
 docs/dashboard-guide.md                            |   3 +-
 packages/dashboard/app/components/ChatView.css     |  53 +++++-
 packages/dashboard/app/components/ChatView.tsx     | 197 +++++++++++----------
 .../__tests__/ChatView.core-contracts.test.tsx     |  48 ++---
 .../components/__tests__/ChatView.mobile.test.tsx  |  76 ++++++--
 6 files changed, 256 insertions(+), 128 deletions(-)

Fusion-Task-Id: FN-7450

Fusion-Task-Lineage: c266a9b8-7fb1-410e-9c35-adad4c6a2d47

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-02 14:09:35 -07:00
gsxdsm
72adb5231a FN-7441: add sidebar rename controls for chat conversations
Add an explicit sidebar rename affordance for direct Chat conversations while preserving existing rename paths.

- Add edit buttons beside delete controls on direct chat session rows and wire them to the existing rename dialog.
- Keep sidebar action spacing and accessibility labels stable across desktop and mobile layouts.
- Cover sidebar, context-menu, and mobile switcher rename behavior with ChatView tests.
- Document the sidebar rename entry point and add the published package changeset.

Files changed:
 .changeset/fn-7441-chat-conversation-rename.md     |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/ChatView.css     |  51 ++++-----
 packages/dashboard/app/components/ChatView.tsx     |  54 ++++++---
 .../__tests__/ChatView.core-interactions.test.tsx  | 122 +++++++++++++++++++++
 .../components/__tests__/ChatView.mobile.test.tsx  |  72 ++++++++++++
 6 files changed, 264 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-7441

Fusion-Task-Lineage: 39a2c393-dd85-4362-9472-58bb137b906c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-02 13:23:13 -07:00
gsxdsm
7457f04287 FN-7355: reuse standard chat surface for planner
Task planner chat now renders through the shared Chat surface while preserving task-scoped behavior.

- Extract shared standard chat message, streaming, tool-call, and action-button rendering for reuse outside ChatView.
- Update TaskPlannerChatTab to use the shared surface for messages, thinking output, mobile send dedupe, and stop generation.
- Cover planner chat standard-surface rendering and mobile first-tap behavior in tests, docs, and a patch changeset.

Files changed:
 .changeset/fn-7355-standard-planner-chat.md        |   7 +
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/ChatView.css     |  18 +
 packages/dashboard/app/components/ChatView.tsx     | 795 ++-------------------
 .../app/components/StandardChatSurface.tsx         | 417 +++++++++++
 .../app/components/TaskPlannerChatTab.css          |  39 +-
 .../app/components/TaskPlannerChatTab.tsx          | 246 ++++---
 ...etailModal.responsive-and-dependencies.test.tsx |   4 +-
 .../__tests__/TaskPlannerChatTab.test.tsx          |  52 ++
 9 files changed, 693 insertions(+), 887 deletions(-)

Fusion-Task-Id: FN-7355

Fusion-Task-Lineage: 608ee0d7-3a1b-4f5f-a295-d3a4e62d759e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-01 07:33:56 -07:00
gsxdsm
befb49b1e6 FN-7204: make narrow chat messages full width
Narrow chat surfaces now let messages span their constrained container width.

- Add a ChatView container query that makes all message variants full-width in narrow hosts such as Quick Chat popups and the right dock.
- Update the mobile bubble cap to full width while preserving tablet assistant widening and desktop caps.
- Cover the responsive CSS contracts in dashboard tests and document the behavior with a patch changeset.

Files changed:
 .changeset/fn-7204-full-width-chat-messages.md       |  7 +++++++
 docs/dashboard-guide.md                              |  6 +++---
 packages/dashboard/app/components/ChatView.css       | 12 +++++++++++-
 .../__tests__/ChatView.core-contracts.test.tsx       | 20 +++++++++++++++++---
 .../components/__tests__/ChatView.mobile.test.tsx    |  4 ++--
 5 files changed, 40 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-7204
Fusion-Task-Lineage: 19da0d46-f0bf-46e7-9f87-900c5184f378
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-28 14:56:52 -07:00
gsxdsm
c468c161c2 FN-7141: add chat context token budget indicator
Add a desktop Direct-chat header indicator for estimated tokens used against the active model context window.

- Estimate chat token usage client-side, including streaming text, and format compact counts.
- Render the context-window badge only for non-mobile Direct-chat threads with known model context windows.
- Cover desktop, mobile, floating-narrow, rooms, unknown-context, and streaming surfaces with tests.
- Document the dashboard behavior and add a release changeset.

Files changed:
 .changeset/fn-7141-chat-context-window.md          |   7 +
 docs/dashboard-guide.md                            |   2 +
 packages/dashboard/app/components/ChatView.css     |  22 +++
 packages/dashboard/app/components/ChatView.tsx     |  35 +++-
 .../__tests__/ChatView.context-window.test.tsx     | 193 +++++++++++++++++++++
 .../app/utils/__tests__/estimateChatTokens.test.ts |  34 ++++
 packages/dashboard/app/utils/estimateChatTokens.ts |  29 ++++
 packages/i18n/locales/en/app.json                  |   1 +
 8 files changed, 322 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-7141

Fusion-Task-Lineage: 3ede9af4-b8d6-4da6-996f-cd9277ef49ac

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-27 17:22:12 -07:00
gsxdsm
5066f90db2 FN-7137: stack queued chat messages
Stack queued chat sends above the composer and flush them in order.

- Persist pending chat sends as per-session FIFO arrays with legacy single-message restore fallback.
- Render stacked queued previews above the direct and quick chat composer with per-item dismissal.
- Flush one queued message after each completed or safely verified idle generation, preserving reconnect guards.
- Extend chat hook and composer tests for multi-message queuing, restore, dismissal, and FIFO sends.
- Document the queued stack behavior and add a published package changeset.

Files changed:
 .changeset/fn-7137-stack-queued-chat-messages.md   |   7 +
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/components/ChatView.css     |  15 +-
 packages/dashboard/app/components/ChatView.tsx     |  38 ++--
 .../__tests__/ChatView.autosize.test.tsx           |   2 +-
 .../__tests__/ChatView.cli-mount.test.tsx          |   2 +-
 .../__tests__/ChatView.core-interactions.test.tsx  |  27 ++-
 .../__tests__/ChatView.default-model-icon.test.tsx |   2 +-
 .../components/__tests__/ChatView.draft.test.tsx   |   2 +-
 .../__tests__/ChatView.hash-mention.test.tsx       |   2 +-
 .../__tests__/ChatView.mobile-render.test.tsx      |   2 +-
 .../components/__tests__/ChatView.rooms.test.tsx   |   2 +-
 .../__tests__/ChatView.scroll-to-top.test.tsx      |   2 +-
 .../__tests__/ChatView.swipe-back.test.tsx         |   2 +-
 .../components/__tests__/ChatView.test-harness.tsx |   2 +-
 .../dashboard/app/hooks/__tests__/useChat.test.ts  | 247 +++++++++++++++++----
 .../app/hooks/chatPendingMessageStorage.ts         |  38 +++-
 packages/dashboard/app/hooks/useChat.ts            | 125 ++++++++---
 18 files changed, 390 insertions(+), 131 deletions(-)

Fusion-Task-Id: FN-7137

Fusion-Task-Lineage: 65dd5ed7-a8db-447b-9a50-ce73ea7b597f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-27 15:56:42 -07:00
gsxdsm
92436d031b FN-7120: add mobile New Chat switcher action
Adds a mobile direct-chat shortcut for starting a new chat from the session switcher.

- Add a New Chat menuitem to the mobile direct-chat session dropdown using the existing NewChatDialog flow.
- Style the new mobile switcher action with touch-friendly spacing and focus handling.
- Extend mobile ChatView tests and docs, and add a changeset for the published CLI package.

Files changed:
 .changeset/fn-7120-mobile-new-chat.md              |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 packages/dashboard/app/components/ChatView.css     |  31 ++++++
 packages/dashboard/app/components/ChatView.tsx     |  17 +++
 .../components/__tests__/ChatView.mobile.test.tsx  | 115 +++++++++++++++++++--
 5 files changed, 162 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-7120

Fusion-Task-Lineage: 5d066667-20c1-4015-9b84-a9e558eecd48

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-27 10:45:31 -07:00
gsxdsm
c61217e71a FN-7121: show queued chat previews above composer
Show queued Chat messages above the composer with a clear divider and covered placement behavior.

- Move the queued-message indicator out of the textarea wrapper so it spans above the input row.
- Add divider styling and responsive pending-message alignment for the composer.
- Extend ChatView coverage for placement, dismissal, and divider removal.
- Document the queued-message preview behavior and add a patch changeset.

Files changed:
 .changeset/fn-7121-queued-message-above-input.md   |  7 ++++
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/components/ChatView.css     | 19 +++++++++--
 packages/dashboard/app/components/ChatView.tsx     | 35 ++++++++++++--------
 .../__tests__/ChatView.core-interactions.test.tsx  | 37 +++++++++++++++++++---
 5 files changed, 77 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-7121

Fusion-Task-Lineage: b5cb0577-ca4e-459b-9b9e-5c60efd7bdfd

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-27 10:29:36 -07:00
gsxdsm
29530b5fdb FN-6967: widen tablet agent chat bubbles
Improve tablet Chat readability by widening agent-side response bubbles without expanding user or Quick Chat bubbles.

- Add a ChatView container query that widens assistant, streaming, and failure bubbles on tablet-width containers.
- Cover the targeted bubble classes and CSS width contract in ChatView tests.
- Document the tablet behavior and add a structured patch changeset for the published CLI bundle.

Files changed:
 .changeset/fn-6967-tablet-chat-bubble-width.md     |  7 +++
 docs/dashboard-guide.md                            |  3 +-
 packages/dashboard/app/components/ChatView.css     | 12 +++++
 .../app/components/__tests__/ChatView.test.tsx     | 56 ++++++++++++++++++++++
 4 files changed, 77 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6967
Fusion-Task-Lineage: 74195885-4ec0-4fc9-b628-0b0510129026
2026-06-24 23:32:52 -07:00
gsxdsm
4fd8d444fb fix(dashboard): polish app chrome and workflow defaults 2026-06-22 18:21:06 -07:00
gsxdsm
45842a3318 fix(dashboard): move header to overview 2026-06-22 16:21:03 -07:00
gsxdsm
ce6c0fb0b0 fix(dashboard): align view headers and toolbars 2026-06-22 16:01:31 -07:00
gsxdsm
a1cac3a6a3 fix(dashboard): replace quick chat with modal chat 2026-06-22 15:23:43 -07:00
gsxdsm
ee9c8ab7d5 fix(dashboard): align view headers and pane spacing 2026-06-22 12:43:32 -07:00
gsxdsm
4850e4309e fix(dashboard): apply code-review fixes + live UI tweaks
Code review (8 reviewers) fixes:
- P1: embedded board task-detail now passes onRequestClose so delete/merge/retry dismiss the panel (no ghost task).
- P1: RightDock + TerminalModal drag handlers add pointercancel + unmount teardown (no leaked document listeners / rAF / stuck userSelect); remove dead onOpenChange prop.
- Planning slot DOM-poll interval now caps (self-cancels on mobile); heartbeat slider persist debounced + mounted-guarded.
- Cleanup: remove dead ViewHeader-migration CSS (Skills/Insights), extract shared GithubIcon, move Activity Log embedded CSS to ActivityLogModal.css, FNXC date-format fixes, AGENTS lazy-view note.
- Update stale RightDock roster tests + LeftSidebarNav 'Compound Eng' test to current behavior.

Live UI tweaks:
- Default load lands on board, never the Command Center Dashboard.
- View Board/View Agents moved to the Command Center Overview tab (under the live-activity strip).
- Heartbeat card full-width with spaced, wrapping controls.
- Dev Server panel scrolls in the dock; ChatView right-pane title takes the full line.
- Files pop-out renders deterministic left-right two-pane.
- Mailbox list pane narrower + narrow by default; Add Goal button height matches the Compound stage button; Memory Working-Memory tab no longer overlaps; Skills view fills full width.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 03:57:10 -07:00
gsxdsm
87e87a8f1a FN-6693: enforce dashboard CSS token references
Extend the dashboard CSS token guard and replace stale custom-property references with defined design tokens.

- Add a dashboard-wide CSS token validity test that scans component/app CSS for undefined custom-property references.
- Include dashboard CSS tests in the dashboard Vitest config and document the guard in testing guidance.
- Remap undefined CSS variables across dashboard components and command-center styles to existing semantic or local tokens.

Files changed:
 docs/testing.md                                    |   3 +
 .../dashboard-css-token-validity.css.test.ts       | 165 +++++++++++++++++++++
 .../dashboard/app/components/ActiveAgentsPanel.css |  10 +-
 .../dashboard/app/components/AgentLogViewer.css    |   2 +-
 .../app/components/AgentReflectionsTab.css         |  10 +-
 packages/dashboard/app/components/AgentsView.css   |   6 +-
 .../dashboard/app/components/BranchGroupCard.css   |   6 +-
 packages/dashboard/app/components/ChatView.css     |  12 +-
 .../app/components/CliBinaryInstallBanner.css      |   2 +-
 .../dashboard/app/components/CliBinaryPanel.css    |   2 +-
 .../app/components/ConversationHistory.css         |  12 +-
 .../dashboard/app/components/DashboardLoader.css   |   2 +-
 .../dashboard/app/components/DesktopLaunchGate.css |   4 +-
 .../dashboard/app/components/DirectoryPicker.css   |   2 +-
 .../dashboard/app/components/FileMentionPopup.css  |   4 +-
 .../dashboard/app/components/GitHubImportModal.css |  10 +-
 packages/dashboard/app/components/GoalsView.css    |   2 +-
 .../dashboard/app/components/GroupTaskModal.css    |  18 +--
 packages/dashboard/app/components/InsightsView.css |  10 +-
 packages/dashboard/app/components/Lane.css         |   8 +-
 .../dashboard/app/components/LanguageSelector.css  |   8 +-
 packages/dashboard/app/components/MailboxModal.css |  62 ++++----
 .../app/components/MergeAdvanceNotice.css          |   2 +-
 .../dashboard/app/components/MissionManager.css    |  10 +-
 .../app/components/MobileWorkflowGraphView.css     |   2 +-
 .../app/components/ModelOnboardingModal.css        |  12 +-
 .../app/components/OnboardingDisclosure.css        |   4 +-
 .../dashboard/app/components/PlanningModeModal.css |   2 +-
 .../dashboard/app/components/PluginManager.css     |  58 ++++----
 .../components/PostOnboardingRecommendations.css   |   4 +-
 .../dashboard/app/components/PullRequestView.css   |  32 ++--
 packages/dashboard/app/components/QuickChatFAB.css |   4 +-
 .../dashboard/app/components/QuickEntryBox.css     |   6 +-
 .../dashboard/app/components/ReliabilityView.css   |   6 +-
 packages/dashboard/app/components/ScriptsModal.css |  34 ++---
 .../dashboard/app/components/SessionTerminal.css   |  28 ++--
 .../dashboard/app/components/SettingsModal.css     |   6 +-
 .../dashboard/app/components/SkillMultiselect.css  |   2 +-
 packages/dashboard/app/components/TaskCard.css     |  24 +--
 .../dashboard/app/components/TaskDocumentsTab.css  |   8 +-
 .../dashboard/app/components/TaskFieldsSection.css |  20 +--
 .../dashboard/app/components/TerminalModal.css     |  22 +--
 .../app/components/WorkflowFieldsPanel.css         |   6 +-
 .../app/components/WorkflowNodeEditor.css          |  30 ++--
 .../dashboard/app/components/WorkspaceSelector.css |   2 +-
 .../components/command-center/CommandCenter.css    | 106 ++++++-------
 .../components/command-center/DateRangePicker.css  |  18 +--
 .../command-center/MissionControlPanel.css         |  14 +-
 .../app/components/command-center/SdlcFunnel.css   |   2 +-
 .../command-center/areas/SystemStatsArea.css       |  24 +--
 .../app/components/command-center/areas/areas.css  |  62 ++++----
 .../components/command-center/charts/charts.css    | 104 ++++++-------
 packages/dashboard/vitest.config.ts                |   1 +
 53 files changed, 592 insertions(+), 423 deletions(-)

Fusion-Task-Id: FN-6693

Fusion-Task-Lineage: e9ccf3e6-fee9-47e0-9474-7b5580adbf31
2026-06-19 04:27:01 -07:00
gsxdsm
def4bd9464 FN-6499: add chat session rename controls
Adds regular Chat and Quick Chat rename flows backed by optimistic session title updates.

- Add rename actions to the regular Chat desktop context menu and mobile session switcher.
- Add Quick Chat session-row rename controls and show custom active titles in the panel header.
- Share PATCH title updates through chat hooks with null titles clearing custom names.
- Cover rename success, clearing, and rollback behavior in hook and component tests.
- Document the rename behavior and add a patch changeset for the published CLI bundle.

Files changed:
 .changeset/chat-session-rename.md                  |   5 +
 docs/dashboard-guide.md                            |   2 +
 packages/dashboard/app/api/legacy.ts               |   2 +-
 packages/dashboard/app/components/ChatView.css     |  44 ++++++++
 packages/dashboard/app/components/ChatView.tsx     | 111 +++++++++++++++++--
 packages/dashboard/app/components/QuickChatFAB.css |  69 ++++++++++++
 packages/dashboard/app/components/QuickChatFAB.tsx | 117 ++++++++++++++++++---
 .../app/components/__tests__/ChatView.test.tsx     | 108 +++++++++++++++++++
 .../app/components/__tests__/QuickChatFAB.test.tsx |  25 +++++
 .../dashboard/app/hooks/__tests__/useChat.test.ts  | 108 +++++++++++++++++++
 .../app/hooks/__tests__/useQuickChat.test.ts       | 109 +++++++++++++++++++
 packages/dashboard/app/hooks/useChat.ts            |  48 +++++++++
 packages/dashboard/app/hooks/useQuickChat.ts       |  50 +++++++++
 13 files changed, 773 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-6499
Fusion-Task-Lineage: f9f15b02-1590-46f4-b6f5-140a9ade30eb
2026-06-16 22:44:16 -07:00
gsxdsm
d0bbca4fa9 FN-6309: remove Chat active edge highlights
Refine Chat active-state styling by dropping edge highlights while preserving active tints.

- Remove the scope-tab active bottom underline shadow.
- Remove the active chat-row left border and compensating padding offset.
- Add CSS contract coverage to prevent the removed desktop and mobile highlights from returning.

Files changed:
 packages/dashboard/app/components/ChatView.css     |  3 --
 .../app/components/__tests__/ChatView.test.tsx     | 47 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-6309
Fusion-Task-Lineage: e6645f38-a77c-4426-900b-71334d2145a9
2026-06-12 18:34:46 -07:00
gsxdsm
cbc315772e fix: keep iOS mobile chat keyboard up and reopen Quick Chat FAB
Two iOS Safari-specific fixes for mobile chat:

- ChatView: the main chat keyboard collapsed the instant it opened
  because .chat-thread--keyboard-active declared transform/will-change in
  CSS, keeping a non-none transform on an ancestor of the focused
  composer textarea. iOS blurs a focused input when an ancestor
  establishes a transform containing block. Drive the drift transform in
  JS only when iOS actually shifts the viewport (offsetTop > 0); the
  ancestor stays transform:none on focus so the keyboard stays up.

- QuickChatFAB: the FAB never opened on iPhone because the drag hook
  calls setPointerCapture() in pointerdown, which makes WebKit swallow
  the synthetic click. Fire the open/close toggle from the drag hook's
  pointerup on a tap (a real gesture, so stealth-input focus still raises
  the keyboard); keep onClick for mouse/tests with a timer-cleared dedupe.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 08:45:27 -07:00
gsxdsm
1c2b68386b FN-6210: cap chat sidebar width during keyboard flicker
Keep the chat sidebar bounded when tablet keyboard viewport changes briefly report mobile sizing.

- Add a desktop max-width guard to the chat sidebar with a mobile override.
- Cover simulated tablet keyboard viewport-mode flicker in the mobile render tests.
- Document the ChatView sidebar defense alongside the tablet viewport-mode solution.

Files changed:
 .../ui-bugs/tablet-keyboard-viewport-mode-flip.md  |  3 ++
 packages/dashboard/app/components/ChatView.css     |  2 +
 .../__tests__/ChatView.mobile-render.test.tsx      | 53 ++++++++++++++++++++++
 3 files changed, 58 insertions(+)

Fusion-Task-Id: FN-6210

Fusion-Task-Lineage: b3aca9d5-dc16-45e2-8f2c-5c2d51c7d021
2026-06-11 19:51:19 -07:00
gsxdsm
28e74c74db FN-6212: cap chat input height on tablets
Limit the chat composer growth on tablet viewports while preserving desktop autosizing.

- Add a tablet-specific 200px max height for the chat input textarea.
- Apply the same cap in ChatView autosize calculations when tablet mode is active.
- Generalize chat input height helpers and cover the tablet cap in autosize tests.

Files changed:
 packages/dashboard/app/components/ChatView.css       |  9 +++++++++
 packages/dashboard/app/components/ChatView.tsx       | 20 +++++++++++++-------
 packages/dashboard/app/components/QuickChatFAB.tsx   |  4 ++--
 .../__tests__/ChatView.chat-input-autosize.test.tsx  | 14 ++++++++++++++
 4 files changed, 38 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6212

Fusion-Task-Lineage: b11cd658-8289-4795-8e39-7d03a1d51d41
2026-06-11 09:21:23 -07:00
gsxdsm
21f7a47c29 FN-6103: align chat stop button sizing with composer height
Align the regular chat stop button with the composer control sizing while quarantining an unrelated flaky room test.

- define a shared chat input control size variable and apply it to send/stop buttons for consistent width and minimum height
- update the chat input autosize CSS test to assert the shared control size contract and textarea minimum height
- quarantine the unrelated flaky ChatView rooms test in the dashboard Vitest config and quarantine ledger per policy

Files changed:
 packages/dashboard/app/components/ChatView.css       | 20 +++++++++++++-------
 .../__tests__/ChatView.chat-input-autosize.test.tsx  | 16 +++++++++++-----
 packages/dashboard/vitest.config.ts                  |  3 ++-
 scripts/lib/test-quarantine.json                     |  8 +++++++-
 4 files changed, 33 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-6103

Fusion-Task-Lineage: 3efc95ba-9369-4022-aa6e-f1981485caea
2026-06-09 12:51:20 -07:00
gsxdsm
8d2f43892c FN-6020: align chat stop button size with send button
Align the chat stop button sizing with the send control and lock it with CSS coverage.

- set \.chat-input-stop width and height to 36px to match \.chat-input-send
- add a ChatView autosize test that asserts send and stop button dimension parity

Files changed:
 packages/dashboard/app/components/ChatView.css               |  4 ++--
 .../__tests__/ChatView.chat-input-autosize.test.tsx          | 12 ++++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6020

Fusion-Task-Lineage: d429f847-c32a-4fab-b214-215d8854ed5c
2026-06-08 13:32:58 -07:00
gsxdsm
3b3c5ed0bf FN-5997: fix mobile chat empty state spacing
Remove the extra mobile right margin from chat empty states while preserving other chat pane states.

- add mobile message-pane padding and remove card chrome from empty-state containers inside mobile chat messages
- expand the mobile chat rendering regression test to cover direct threads, room threads, loading, populated, streaming, and new-chat empty states
- rename the regression suite to FN-5997 and assert the empty state spans the full mobile message pane

Files changed:
 packages/dashboard/app/components/ChatView.css     |  9 +++++
 .../__tests__/ChatView.mobile-render.test.tsx      | 46 +++++++++++++++-------
 2 files changed, 40 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-5997

Fusion-Task-Lineage: ea424660-e8c6-4691-9234-463866aacb2e
2026-06-08 10:33:16 -07:00
gsxdsm
e138971030 fix: stabilize workflow board and loop recovery 2026-06-07 23:30:16 -07:00
buihongduc132
266b18eb0c fix(dashboard): chat-view fills full width of parent container
Same pattern as agents-view fix — .chat-view had display:flex + height:100%
but no flex or width, so it shrank to content width (~270px) instead of
filling the .project-content parent.
2026-06-07 03:30:05 +07:00
gsxdsm
a4d3589a14 FN-5948: fix mobile chat empty-state rendering
Restore the chat message pane empty state on mobile without regressing desktop sidebar layouts.

- style chat message-pane empty states as centered framed cards and normalize mobile spacing tokens
- keep sidebar padded empty states left-aligned so loading and list placeholders preserve their desktop layout
- add mobile and desktop regression coverage for direct chats and chat rooms across empty, loading, populated, and streaming states

Files changed:
 packages/dashboard/app/components/ChatView.css     |  26 +-
 .../__tests__/ChatView.mobile-render.test.tsx      | 299 +++++++++++++++++++++
 2 files changed, 323 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5948

Fusion-Task-Lineage: f4165f04-363d-4ade-8c10-6d242f943c6c
2026-06-03 22:31:23 -07:00
gsxdsm
eba6a72594 FN-5757: prevent chat message list from snapping to top
Keep chat scroll position stable when stale top snapshots are captured during mobile message updates.

- Capture scroll anchors from the first visible message instead of always sampling the first DOM node
- Ignore stale or likely-invalid zero-position snapshots before attempting scroll restoration
- Guard bottom anchoring from interrupting user scroll unless explicitly forced and add regression coverage for stale snapshot behavior

Files changed:
 packages/dashboard/app/components/ChatView.css     | 11 +++++-
 packages/dashboard/app/components/ChatView.tsx     | 33 +++++++++++++----
 packages/dashboard/app/components/__tests__/ChatView.scroll-to-top.test.tsx      | 41 ++++++++++++++++++++++
 3 files changed, 78 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5757

Fusion-Task-Lineage: 4e4f6843-ba70-40da-8d16-358bdfcc7b09
2026-05-30 16:48:13 -07:00
gsxdsm
ab1f6a7ffa FN-5706: hide chat input overflow until max-height
Prevent the chat composer from showing a right-edge scrollbar line before it reaches the autosize cap.

- set chat textarea default overflow to hidden in ChatView CSS
- add resolveChatInputOverflowY to switch overflow to auto only past the 640px cap
- apply overflow mode during composer autosize updates
- extend chat input autosize tests and docs to cover overflow behavior

Files changed:
 docs/dashboard-guide.md                                          | 2 +-
 packages/dashboard/app/components/ChatView.css                   | 1 +
 packages/dashboard/app/components/ChatView.tsx                   | 5 +++++
 packages/dashboard/app/components/__tests__/ChatView.chat-input-autosize.test.tsx   | 9 ++++++++-
 4 files changed, 15 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5706

Fusion-Task-Lineage: 4619aa30-c02f-453b-bdf2-f60f360e9372
2026-05-29 20:47:13 -07:00
gsxdsm
f5bf7b9b60 FN-5647: remove errant right border on mobile regular chat composer
Fusion-Task-Id: FN-5647

Fusion-Task-Lineage: 278367a7-a3bb-4591-b117-06d17ee71241
2026-05-28 23:27:05 -07:00
gsxdsm
730cee8d61 Remove errant vertical gray line on regular chat input box 2026-05-28 19:52:16 -07:00
gsxdsm
d37bebf8bf feat(FN-5516): merge fusion/fn-5516 2026-05-22 17:24:38 -07:00
gsxdsm
ed4d021d3d fix(dashboard): keep mobile nav visible on Android landscape and during keyboard
- Broaden mobile media query to include (max-height: 480px) so landscape
  phones (which exceed 768 CSS px wide) still render the bottom nav and
  mobile board layout instead of desktop horizontally-scrollable columns.
- Guard useMobileKeyboard against pinch-zoom (vv.scale > 1) — Android
  Chrome ignores user-scalable=no, and a focused textarea + zoom was
  false-positiving keyboard-open and hiding MobileNavBar.
- Read documentElement.clientHeight instead of stale window.innerHeight
  when computing keyboard overlap (Android multi-window can leave
  innerHeight cached at a wildly different value than the actual layout
  viewport — observed 2848 while html was 797).
- Add interactive-widget=resizes-content to the viewport meta so Android
  Chrome shrinks the layout viewport with the soft keyboard, matching iOS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 13:12:36 -07:00
Fusion (runfusion.ai)
8e872301c4 feat(FN-5379): add scroll-to-top action for chat messages
Added a scroll-to-top action for the ChatView with per-message scroll behavior, styled to match the mobile design, with comprehensive test coverage for scroll-to-top behavior. Also preserves the mobile copy-action CSS selector.

Fusion-Task-Id: FN-5379
2026-05-21 15:40:48 -07:00
Fusion (runfusion.ai)
232a9fea86 feat(FN-5322): fix main chat composer flex sizing and expand behavior
Fixes the main chat composer flex sizing so the input area properly expands (FN-5322), with regression guards in the autosize test suite and a new browser layout smoke script covering the composer expand behavior.

Fusion-Task-Id: FN-5322
2026-05-20 07:20:01 -07:00
Fusion (runfusion.ai)
5a1f20f864 feat(FN-5146): complete Step 2 — raise composer height caps
Fusion-Task-Id: FN-5146
Fusion-Task-Lineage: 55a9837f-d0e1-475b-9f7f-45262141352e
2026-05-19 07:57:38 -07:00
Fusion
87c5e1dbfa feat(FN-4661): complete Step 4 — add unread dot styling
Fusion-Task-Id: FN-4661
Fusion-Task-Lineage: 39553dc3-4e7d-4398-b03f-24fa2edb9e20
2026-05-15 15:19:57 -07:00
Fusion
e50a4b5ad6 feat(FN-4659): add room title switcher dropdown
Adds a room title switcher dropdown to the chat view, with corresponding styles and a new rooms test file.

Fusion-Task-Id: FN-4659
2026-05-15 14:57:49 -07:00
Fusion
1eadad42cd feat(FN-4520): complete Step 2 — apply sent-bubble mention chip contrast overrides
Fusion-Task-Id: FN-4520
Fusion-Task-Lineage: fee9ca34-d68e-4ec9-b4f9-134e139a7df7
2026-05-14 13:21:02 -07:00
Fusion
c7ef5c3da4 feat(FN-4403): complete Step 2 — keep footer styling scope-agnostic
Fusion-Task-Id: FN-4403
Fusion-Task-Lineage: 9bbfbed9-c40b-4ad2-a739-c8d93f9f691f
2026-05-14 06:30:23 -07:00
Fusion
ac988f6c97 feat(FN-4385): align ChatView mobile padding note and test tag
Fixed mobile padding consistency in ChatView by aligning a CSS comment and its corresponding test tag to match, keeping documentation and tests in sync for FN-4385.

Fusion-Task-Id: FN-4385
2026-05-13 20:37:09 -07:00
Fusion
3f8e9142f1 feat(FN-4387): complete Step 2 — right-size mobile chat session text padding
Fusion-Task-Id: FN-4387
Fusion-Task-Lineage: d651d6a8-a005-4dca-89ac-1baa17e4f01d
2026-05-13 15:33:25 -07:00
Fusion
9369c59ce6 fix(FN-4352): revert secondary mobile chat row inflation
Fusion-Task-Id: FN-4352
Fusion-Task-Lineage: 429612a4-fe44-4ac0-8d9b-d0d6c1743b36
2026-05-13 14:51:35 -07:00
Fusion
b06dc9a968 fix(FN-4352): resolve review findings for secondary mobile control reverts
Fusion-Task-Id: FN-4352
Fusion-Task-Lineage: 429612a4-fe44-4ac0-8d9b-d0d6c1743b36
2026-05-13 13:11:17 -07:00