gsxdsm
4cc9c2f3f1
FN-6972: add browser-native file previews
...
Files modal now renders common media and PDF files with browser-native previews while preserving editor flows for text and unknown binaries.
- Add shared extension-based preview classification for images, videos, audio, and PDFs.
- Render preview-only files from workspace-safe download URLs and skip binary editor loading/saving actions for those selections.
- Update preview styling, localized labels, documentation, tests, and release notes.
Files changed:
.changeset/fn-6972-browser-file-previews.md | 7 +
docs/dashboard-guide.md | 1 +
packages/dashboard/app/components/FileBrowser.css | 39 ++-
.../dashboard/app/components/FileBrowserModal.tsx | 107 +++++---
.../components/__tests__/FileBrowserModal.test.tsx | 302 ++++++++++-----------
.../app/utils/__tests__/file-preview-kind.test.ts | 40 +++
packages/dashboard/app/utils/file-preview-kind.ts | 70 +++++
packages/i18n/locales/en/app.json | 4 +-
packages/i18n/locales/es/app.json | 4 +-
packages/i18n/locales/fr/app.json | 4 +-
packages/i18n/locales/ko/app.json | 4 +-
packages/i18n/locales/zh-CN/app.json | 4 +-
packages/i18n/locales/zh-TW/app.json | 4 +-
13 files changed, 381 insertions(+), 209 deletions(-)
Fusion-Task-Id: FN-6972
Fusion-Task-Lineage: 04b07def-e490-43f7-8b92-39ca704b20b6
2026-06-25 12:25:13 -07:00
gsxdsm
f01a48690d
refactor(dashboard): extract App.tsx lifecycle helpers to utils/appLifecycle
...
Move the module-level pure functions (approval-banner dedupe helpers, CLI
banner actions, boot-loader/shell-onboarding guards, remote-dashboard URL
builder) and storage-key constants out of App.tsx into
app/utils/appLifecycle.ts. App.tsx re-exports the seven unit-tested symbols
so existing `from "../../App"` test imports resolve unchanged.
Behavior-preserving; no functional change. Verified: dashboard typecheck
(both passes), eslint clean on both files, 16 pure-function unit tests
pass, App.test.tsx identical to pristine (5 pre-existing experimental-flag
failures, none introduced by this change).
U1 of the App.tsx module-breakup plan
(docs/plans/2026-06-24-001-refactor-dashboard-app-tsx-module-breakup-plan.md).
2026-06-23 19:17:40 -07:00
gsxdsm
4fd8d444fb
fix(dashboard): polish app chrome and workflow defaults
2026-06-22 18:21:06 -07:00
gsxdsm
a1cac3a6a3
fix(dashboard): replace quick chat with modal chat
2026-06-22 15:23:43 -07:00
gsxdsm
03aeed291f
feat(dashboard): Import Tasks list pane small + freely resizable, preview fills remainder
...
Default list width 256px (min 160, max min(480px,50%)), driven by an inline width var with flex:0 0 so the drag actually wins (the embedded wide layout previously forced a clamp via !important, so the handle did nothing). Preview pane is flex:1 1 auto;min-width:0 so freed space flows to it. Persisted per-project via kb-dashboard-github-import-list-width. Shared workspace covers both Issues and Pull Requests tabs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 10:09:32 -07:00
gsxdsm
13bd2e473a
feat(dashboard): list-header one-row, file pop-out opens current file, taller overview buttons; fix redesign test suite
...
- List view header: count + Bulk Edit + View options + New Task on one compact btn-sm row; view-options shrunk; count compacted/secondary.
- File browser pop-out now opens the file you're currently viewing — current path shared via scoped storage (kb-dashboard-dock-files-current) with cross-instance live-sync.
- Dashboard Overview: View Board / View Agents are now btn btn-secondary (taller, centered) to match the Stop AI Engine button.
- Test suite: fix ~40 stale assertions from the redesign (App nav moved to LeftSidebarNav, Import Tasks embedded, removed Todos in-view header, SkillsView shared ViewHeader, gm embedded keyboard rule, ThemeSelector option drift) — test-only, nothing weakened. Pre-existing board-mobile InlineCreateCard failure left as-is.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 09:47:27 -07:00
gsxdsm
a6f49b847c
feat(dashboard): integrate stashed workflow-selection refactor; Dashboard rename; resolve CC conflicts
...
- Resolve the stash-pop conflicts in command-center CSS/test by keeping the current branch's newer FN-6784 responsive clamps, Team heartbeat docs, and recharts assertions (the stashed snapshot was older).
- Land the stashed workflow-selection refactor (Board/NewTaskModal/WorkflowSwitcher; remove lastSelectedWorkflow util).
- Rename Command Center -> Dashboard (i18n source) and move it to the top of the left sidebar; workflow switcher chevron sized to match the project selector.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 03:34:15 -07:00
gsxdsm
c0ab7f43b8
FN-6923: default new tasks to the selected workflow lane
...
New Task now inherits the project's current or last valid workflow lane.
- Persist explicit Board and List workflow switcher selections per project.
- Seed the New Task workflow selector from the cached valid lane without marking the pristine dialog dirty.
- Preserve default-workflow inheritance when no remembered lane exists or the remembered lane was deleted.
- Cover quick-add parity, workflow defaulting, stale-lane fallback, and storage helper behavior in tests.
- Document New Task workflow selector defaulting in the dashboard guide.
Files changed:
docs/dashboard-guide.md | 2 +
packages/dashboard/app/components/Board.tsx | 12 +-
packages/dashboard/app/components/ListView.tsx | 12 +-
packages/dashboard/app/components/NewTaskModal.tsx | 21 ++-
.../app/components/__tests__/NewTaskModal.test.tsx | 142 ++++++++++++++++++++-
.../utils/__tests__/lastSelectedWorkflow.test.ts | 67 ++++++++++
.../dashboard/app/utils/lastSelectedWorkflow.ts | 31 +++++
7 files changed, 279 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6923
Fusion-Task-Lineage: 6e3c8efd-3865-4975-a754-2f0d5ff89ab0
2026-06-22 03:34:15 -07:00
gsxdsm
ef4889585f
FN-6779: add artifacts gallery to Documents
...
Adds a Documents-view artifact gallery backed by dashboard artifact registry APIs.
- Add artifact listing and media-serving endpoints with project scoping, validation, and safe artifact path resolution.
- Add client artifact API helpers, SWR caching, and a useArtifacts hook for background-refresh gallery data.
- Extend Documents view with an Artifacts tab, media previews, localized labels, documentation, tests, and a published package changeset.
Files changed:
.changeset/fn-6779-artifacts-gallery.md | 5 +
docs/dashboard-guide.md | 6 +-
packages/dashboard/app/api/legacy.ts | 34 ++++
.../dashboard/app/components/DocumentsView.css | 142 ++++++++++++++++
.../dashboard/app/components/DocumentsView.tsx | 178 ++++++++++++++++++--
.../components/__tests__/DocumentsView.test.tsx | 163 +++++++++++++++++-
.../app/hooks/__tests__/useArtifacts.test.ts | 136 +++++++++++++++
packages/dashboard/app/hooks/useArtifacts.ts | 145 ++++++++++++++++
packages/dashboard/app/utils/swrCache.ts | 1 +
.../src/routes/__tests__/artifacts-routes.test.ts | 182 +++++++++++++++++++++
.../src/routes/register-task-workflow-routes.ts | 125 ++++++++++++++
packages/i18n/locales/en/app.json | 22 ++-
packages/i18n/locales/es/app.json | 27 ++-
packages/i18n/locales/fr/app.json | 27 ++-
packages/i18n/locales/ko/app.json | 27 ++-
packages/i18n/locales/zh-CN/app.json | 27 ++-
packages/i18n/locales/zh-TW/app.json | 27 ++-
scripts/line-count-baseline.json | 16 +-
18 files changed, 1255 insertions(+), 35 deletions(-)
Fusion-Task-Id: FN-6779
Fusion-Task-Lineage: 1d71e4be-4bfc-4706-9cbf-7214f91a79d1
2026-06-21 16:01:07 -07:00
gsxdsm
c766bc9c95
FN-6811: keep terminal symbols out of xterm metrics
...
Keep terminal symbol fonts scoped away from xterm's measured text stacks across modal and session surfaces.
- add a scoped symbols @font-face to the session terminal CSS chunk
- defensively strip the symbols font from resolved xterm font-family presets
- expand modal, session, and CSS regression tests for symbols-free measurement and scoped glyph fallback
- document recurrence #6 and the remaining real-device iOS Safari verification gap
Files changed:
.../xterm-symbols-nerd-font-unicode-range.md | 13 ++++--
.../dashboard/app/__tests__/terminal-input.test.ts | 51 ++++++++++++++++++----
.../dashboard/app/components/SessionTerminal.css | 11 +++++
.../dashboard/app/components/TerminalModal.css | 3 ++
.../components/__tests__/SessionTerminal.test.tsx | 3 ++
.../components/__tests__/TerminalModal.test.tsx | 47 ++++++++++++++++++--
.../dashboard/app/utils/terminalPreferences.ts | 17 ++++++--
7 files changed, 127 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-6811
Fusion-Task-Lineage: 15a6fc1f-34c6-44d4-b9ea-8b5b3baae267
2026-06-20 21:02:51 -07:00
gsxdsm
2e6cfa22ff
Address PR review feedback ( #1694 )
...
- TaskChatTab: add FNXC:TaskDetailChat prefix/date to the ephemeral
active-session comment, matching the file's comment convention.
- useModalManager: clear stale planning/subtask resume-session id (and
initial plan) when opening a fresh planning/subtask flow, so the modal
no longer reopens into a prior session.
- boardWorkflowsCache: validate cached workflow item shape (id/name/
columns) and taskWorkflowIds value types so a malformed cache entry
can't pass and later crash Board on render.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-20 20:25:44 -07:00
gsxdsm
c808177979
FN-6776: prevent workflow board legacy flash
...
Prevent workflow-enabled board surfaces from flashing the legacy layout during first paint.
- Hydrate Board and ListView workflow metadata from a per-project session cache before async revalidation.
- Gate legacy board/list rendering behind settings and workflow-lane metadata readiness, with neutral skeleton states for cold or empty workflow loads.
- Add regression coverage for no-legacy-flash behavior and cache validation, plus docs and changeset notes.
Files changed:
.changeset/fn-6776-board-flash.md | 5 +
docs/dashboard-guide.md | 1 +
packages/dashboard/app/App.tsx | 4 +
packages/dashboard/app/components/Board.css | 69 +++++
packages/dashboard/app/components/Board.tsx | 53 +++-
packages/dashboard/app/components/ListView.css | 53 ++++
packages/dashboard/app/components/ListView.tsx | 52 +++-
.../__tests__/board-no-legacy-flash.test.tsx | 326 +++++++++++++++++++++
.../utils/__tests__/boardWorkflowsCache.test.ts | 71 +++++
.../dashboard/app/utils/boardWorkflowsCache.ts | 49 ++++
10 files changed, 676 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6776
Fusion-Task-Lineage: caa8e53f-9b6d-49a6-94ca-b694550b43ef
2026-06-20 15:42:16 -07:00
gsxdsm
c4f34ceed1
FN-6767: make agents sidebar resizable
...
Make the Agents split view wider by default and persist user-adjusted sidebar widths.
- Add a desktop/tablet resize handle with pointer and keyboard controls, clamped accessible values, and per-project storage.\n- Update split-layout CSS so mobile remains stacked while non-mobile views reserve a resize affordance column.\n- Cover default, stored, clamped, pointer, keyboard, mobile, and org-chart sidebar behaviors in tests.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/fn-6767-agents-sidebar.md | 5 +\n packages/dashboard/app/components/AgentsView.css | 47 ++++++--\n packages/dashboard/app/components/AgentsView.tsx | 101 +++++++++++++++-\n .../app/components/__tests__/AgentsView.test.tsx | 132 +++++++++++++++++++++\n .../app/utils/__tests__/projectStorage.test.ts | 3 +-\n packages/dashboard/app/utils/projectStorage.ts | 1 +\n 6 files changed, 280 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6767
Fusion-Task-Lineage: 93605e16-7524-4577-bbcd-666c105a867b
2026-06-20 02:25:11 -07:00
gsxdsm
11c4120705
FN-6659: keep xterm font metrics symbols-free
...
Keep terminal wide-glyph fallback out of xterm's measured font path while preserving Nerd Font symbols in DOM rendering.
- Split terminal font resolution into symbols-free xterm font families and scoped glyph fallback families.
- Apply the glyph fallback CSS variable to both TerminalModal and SessionTerminal surfaces.
- Update regression coverage and the documented mobile xterm wide-glyph recurrence analysis.
Files changed:
.changeset/fn-6659-terminal-render.md | 5 +++
.../xterm-symbols-nerd-font-unicode-range.md | 22 +++++++-----
.../dashboard/app/__tests__/terminal-input.test.ts | 42 +++++++++++++---------
.../dashboard/app/components/SessionTerminal.css | 8 +++++
.../dashboard/app/components/SessionTerminal.tsx | 21 +++++++++--
.../dashboard/app/components/TerminalModal.css | 8 +++++
.../dashboard/app/components/TerminalModal.tsx | 13 ++++++-
.../__tests__/SessionTerminal.mobile.test.tsx | 6 ++--
.../components/__tests__/SessionTerminal.test.tsx | 14 ++++----
.../components/__tests__/TerminalModal.test.tsx | 9 +++--
.../utils/__tests__/terminalPreferences.test.ts | 2 +-
.../dashboard/app/utils/terminalPreferences.ts | 16 +++++----
12 files changed, 117 insertions(+), 49 deletions(-)
Fusion-Task-Id: FN-6659
Fusion-Task-Lineage: e29a709d-9d9d-4a90-9616-8f08c41b126d
2026-06-18 15:59:34 -07:00
gsxdsm
16b6e5decb
FN-6638: stabilize mobile terminal font metrics
...
Stabilize terminal font metric remeasurement across mobile and attach surfaces.
- Add a shared terminal font metric wait helper that falls back from full font stacks to concrete individual font families before remeasurement.
- Reapply font options, refit, resize, and refresh SessionTerminal after font metrics settle to cover attached CLI terminals.
- Pin text-size adjustment on xterm measurement subtrees so mobile WebKit cannot inflate ASCII cell metrics.
- Extend terminal preference and rendering tests, documentation, and changeset coverage for the recurrence.
Files changed:
.changeset/fn-6638-terminal-render.md | 5 +
.../xterm-async-font-remeasure-paste-dedupe.md | 20 +++-
.../dashboard/app/__tests__/terminal-input.test.ts | 26 +++++
.../dashboard/app/components/SessionTerminal.css | 10 ++
.../dashboard/app/components/SessionTerminal.tsx | 29 ++++++
.../dashboard/app/components/TerminalModal.css | 10 ++
.../dashboard/app/components/TerminalModal.tsx | 24 ++---
.../components/__tests__/SessionTerminal.test.tsx | 41 +++++++-
.../components/__tests__/TerminalModal.test.tsx | 38 ++++++++
.../utils/__tests__/terminalPreferences.test.ts | 29 +++++-
.../dashboard/app/utils/terminalPreferences.ts | 107 +++++++++++++++++++++
11 files changed, 319 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6638
Fusion-Task-Lineage: edbf071d-a0c1-4955-95ff-83e6996f4674
2026-06-18 13:19:43 -07:00
gsxdsm
1bd8f6de6f
FN-6603: fix mobile terminal font measurement
...
Stabilize terminal glyph measurement by keeping monospace text fonts ahead of symbols fallbacks.
- Move the Fusion Terminal Nerd Font Symbols face behind real monospace fonts in the shared xterm font stack and terminal presets.
- Document the mobile WebKit cell-measurement hazard and keep SessionTerminal aligned with the shared preference path.
- Add regression coverage for mobile wide-glyph spacing, preference presets, and terminal input rendering.
- Add a patch changeset for the published CLI bundle.
Files changed:
.changeset/fn-6603-terminal-render.md | 5 +++
.../xterm-symbols-nerd-font-unicode-range.md | 17 ++++++---
.../dashboard/app/__tests__/terminal-input.test.ts | 42 ++++++++++++++++++++--
.../dashboard/app/components/SessionTerminal.tsx | 3 ++
.../dashboard/app/components/TerminalModal.css | 5 ++-
.../__tests__/SessionTerminal.mobile.test.tsx | 22 +++++++++++-
.../components/__tests__/SessionTerminal.test.tsx | 23 ++++++++++--
.../dashboard/app/utils/terminalPreferences.ts | 14 +++++---
8 files changed, 115 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-6603
Fusion-Task-Lineage: b5d90064-1bfd-4da9-8d89-c95cf6fcec0c
2026-06-17 18:48:53 -07:00
gsxdsm
ca14a12b94
FN-6601: consolidate relative-time bucket formatting
...
Consolidate dashboard relative-time calculations behind a shared bucket helper while preserving each surface's display behavior.
- Add getRelativeTimeBucket to centralize parsing, boundary math, and bucket metadata.
- Route ActivityFeed, AgentLogViewer, MissionManager, and PlanningModeModal timestamp labels through the shared helper.
- Extend unit coverage for bucket boundaries plus surface-specific just-now and future timestamp behavior.
Files changed:
packages/dashboard/app/components/ActivityFeed.tsx | 36 ++++++----
.../dashboard/app/components/AgentLogViewer.tsx | 36 ++++++----
.../dashboard/app/components/MissionManager.tsx | 32 +++++----
.../dashboard/app/components/PlanningModeModal.tsx | 35 ++++++----
.../app/components/__tests__/ActivityFeed.test.tsx | 8 +++
.../components/__tests__/AgentLogViewer.test.tsx | 8 +++
.../app/utils/__tests__/relativeTimeAgo.test.ts | 77 +++++++++++++++++++++-
packages/dashboard/app/utils/relativeTimeAgo.ts | 66 +++++++++++++++----
8 files changed, 236 insertions(+), 62 deletions(-)
Fusion-Task-Id: FN-6601
Fusion-Task-Lineage: 3521afa0-f3ce-49a4-8861-efd4f64f9a69
2026-06-17 17:57:19 -07:00
gsxdsm
01b80db603
FN-6589: add structured ask-question chat tool
...
Add a native chat-agent tool for presenting structured questions to dashboard users.
- Register `fn_ask_question` for dashboard chat sessions with prompt guidance to wait for user replies.
- Reuse the existing structured question card parser by recognizing the new tool name.
- Validate ask-question parameters in engine tooling and cover chat/parser behavior with tests.
- Document the dashboard chat question flow and add a patch changeset.
Files changed:
.changeset/fn-6589-chat-ask-question.md | 5 ++
docs/dashboard-guide.md | 3 +-
.../utils/__tests__/parseQuestionToolCall.test.ts | 19 +++++
.../dashboard/app/utils/parseQuestionToolCall.ts | 3 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 10 ++-
packages/dashboard/src/chat.ts | 10 ++-
.../src/__tests__/agent-tools-ask-question.test.ts | 51 ++++++++++++
packages/engine/src/agent-tools.ts | 94 ++++++++++++++++++++++
packages/engine/src/index.ts | 2 +
9 files changed, 190 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6589
Fusion-Task-Lineage: 3f416010-ed2f-40b3-a899-7a9f4a6ed265
2026-06-17 16:53:29 -07:00
gsxdsm
c261217ac1
FN-6597: add task chat timestamps
...
Show compact relative timestamps in task chat without adding live polling.
- Add a shared relative-time formatter for chat timestamps.
- Render muted timestamps on user message headers and agent group metadata.
- Cover timestamp formatting and chat header rendering with dashboard tests.
- Document task chat timestamp behavior in the dashboard guide.
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/TaskChatTab.css | 19 +++++
packages/dashboard/app/components/TaskChatTab.tsx | 23 ++++-
.../app/components/__tests__/TaskChatTab.test.tsx | 97 +++++++++++++++++++++-
.../app/utils/__tests__/relativeTimeAgo.test.ts | 32 +++++++
packages/dashboard/app/utils/relativeTimeAgo.ts | 23 +++++
6 files changed, 192 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6597
Fusion-Task-Lineage: 52c54a9e-6d00-4df1-a454-2218a935ebda
2026-06-17 16:21:54 -07:00
gsxdsm
e923b5e84d
FN-6527: add terminal shortcuts and preferences
...
Adds persistent terminal customization and keyboard-less navigation controls to the dashboard terminal.
- Add arrow shortcut buttons that send ANSI cursor sequences alongside existing Ctrl/Alt helpers.
- Add localStorage-backed terminal preferences for font family, size, cursor style, blink, and renderer with legacy font-size migration.
- Apply font and cursor preferences live, document renderer behavior, and cover preference parsing and modal controls with tests.
Files changed:
docs/dashboard-guide.md | 3 +
.../dashboard/app/components/TerminalModal.css | 57 ++++-
.../dashboard/app/components/TerminalModal.tsx | 271 ++++++++++++++++-----
.../components/__tests__/TerminalModal.test.tsx | 135 +++++++++-
.../utils/__tests__/terminalPreferences.test.ts | 90 +++++++
.../dashboard/app/utils/terminalPreferences.ts | 197 +++++++++++++++
6 files changed, 690 insertions(+), 63 deletions(-)
Fusion-Task-Id: FN-6527
Fusion-Task-Lineage: bc863486-9d2c-41d5-84a4-7b697e81a298
2026-06-17 00:06:24 -07:00
gsxdsm
a4537167ab
FN-6501: render chat question response controls
...
Render structured assistant question prompts directly in chat surfaces.
- Add parser and formatter support for question tool calls.
- Add reusable question response UI for select, multi-select, text, and confirm prompts.
- Wire regular chat and quick chat to show live and answered question states.
- Cover parsing and chat response behavior with dashboard tests and localized labels.
Files changed:
.changeset/fn-6501-chat-question-response.md | 5 +
docs/dashboard-guide.md | 2 +
.../app/components/ChatQuestionResponse.css | 194 ++++++++++++++++
.../app/components/ChatQuestionResponse.tsx | 247 +++++++++++++++++++++
packages/dashboard/app/components/ChatView.tsx | 85 ++++++-
packages/dashboard/app/components/QuickChatFAB.tsx | 84 ++++++-
.../__tests__/ChatQuestionResponse.test.tsx | 52 +++++
.../app/components/__tests__/ChatView.test.tsx | 51 +++++
.../app/components/__tests__/QuickChatFAB.test.tsx | 64 ++++++
.../utils/__tests__/parseQuestionToolCall.test.ts | 82 +++++++
.../dashboard/app/utils/parseQuestionToolCall.ts | 240 ++++++++++++++++++++
packages/i18n/locales/en/app.json | 10 +
12 files changed, 1105 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-6501
Fusion-Task-Lineage: 1fd4a3aa-b2d7-4157-a196-852fdeda680d
2026-06-16 20:13:13 -07:00
Phil Larson
724f31a877
fix(dashboard): document legacy task log deadlock handling
2026-06-14 14:27:45 -07:00
Phil Larson
84cf3ff6e5
fix(dashboard): guard task detail log entry rendering
2026-06-14 13:50:17 -07:00
gsxdsm
869a4f77da
FN-6329: prevent Quick Chat keyboard board shift
...
Keep the mobile board layout stable while Quick Chat owns the keyboard viewport.
- Treat fullscreen mobile overlays as suppressors for App-level footer hiding.
- Pass Quick Chat mobile open state into the shared keyboard flag helper.
- Cover iOS, Android, modal, and non-mobile keyboard flag behavior.
- Document the Quick Chat mobile keyboard board-shift root cause and fix.
Files changed:
.../quick-chat-mobile-keyboard-board-shift.md | 58 ++++++++++++++++++++++
packages/dashboard/app/App.tsx | 4 +-
.../utils/__tests__/mobileBarKeyboardFlags.test.ts | 57 ++++++++++++++++++++-
.../dashboard/app/utils/mobileBarKeyboardFlags.ts | 10 +++-
4 files changed, 126 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-6329
Fusion-Task-Lineage: f7c37252-c0ea-44f0-b4e3-5aa2022cf7bc
2026-06-12 19:22:11 -07:00
gsxdsm
4bd6024ef7
FN-6300: add live task chat tab
...
Add a live chat-style task detail tab for following and steering active agent work.
- Add TaskChatTab with grouped agent log bubbles, live-follow scrolling, and steering message composer.
- Share chat input autosize helpers between ChatView and task chat.
- Wire the Chat tab into task detail navigation with localized labels and regression coverage.
Files changed:
docs/dashboard-guide.md | 2 +
.../dashboard/app/components/AgentLogViewer.tsx | 2 +-
packages/dashboard/app/components/ChatView.tsx | 25 +-
packages/dashboard/app/components/TaskChatTab.css | 193 ++++++++++++++
packages/dashboard/app/components/TaskChatTab.tsx | 276 +++++++++++++++++++++
.../dashboard/app/components/TaskDetailModal.tsx | 13 +-
.../app/components/__tests__/TaskChatTab.test.tsx | 181 ++++++++++++++
.../TaskDetailModal.attachments-and-tabs.test.tsx | 19 +-
.../TaskDetailModal.definition-actions.test.tsx | 104 ++++----
...etailModal.responsive-and-dependencies.test.tsx | 2 +-
packages/dashboard/app/utils/chatInputAutosize.ts | 18 ++
packages/i18n/locales/en/app.json | 1 +
packages/i18n/locales/es/app.json | 1 +
packages/i18n/locales/fr/app.json | 1 +
packages/i18n/locales/ko/app.json | 1 +
packages/i18n/locales/zh-CN/app.json | 1 +
packages/i18n/locales/zh-TW/app.json | 1 +
17 files changed, 757 insertions(+), 84 deletions(-)
Fusion-Task-Id: FN-6300
Fusion-Task-Lineage: 1eb8a17b-3ca5-4cba-81c6-ac7ccce0a113
2026-06-12 10:00:08 -07:00
gsxdsm
d67f61d03e
FN-6135: remove workflow toolbar collapse toggle
...
Simplify the workflow board toolbar by removing its collapse state and persistence.
- remove the workflow toolbar collapse toggle, handlers, and scoped localStorage persistence from Board
- drop collapse-specific workflow toolbar styling and mobile collapsed-layout rules
- replace collapse-focused board tests with assertions that the toolbar renders without a collapse affordance
- remove the unused workflow toolbar storage key and update project storage expectations
Files changed:
packages/dashboard/app/components/Board.tsx | 129 +++++---------
packages/dashboard/app/components/Lane.css | 36 ----
.../app/components/__tests__/Board.test.tsx | 187 +++------------------
.../app/utils/__tests__/projectStorage.test.ts | 3 +-
packages/dashboard/app/utils/projectStorage.ts | 1 -
5 files changed, 60 insertions(+), 296 deletions(-)
Fusion-Task-Id: FN-6135
Fusion-Task-Lineage: 11c17edf-bbed-4ec5-a06e-00a2537ffac1
2026-06-09 16:02:08 -07:00
gsxdsm
320b153c45
FN-6113: fail fast on terminal provider errors
...
Fail fast on non-retryable provider failures in the in-review stall recovery flow.
- classify failed-task provider errors as non-retryable, retryable, or unknown in core stall detection
- surface terminal provider errors with dedicated dashboard copy and exported stall signal metadata
- pause in-review tasks immediately on non-retryable provider failures and record a dedicated run-audit mutation
- add regression coverage for provider error classification, self-healing disposition, and dashboard badge behavior
Files changed:
.../core/src/__tests__/in-review-stall.test.ts | 70 ++++++++++
packages/core/src/in-review-stall.ts | 53 ++++++-
packages/core/src/index.ts | 4 +-
.../app/utils/__tests__/inReviewStallCopy.test.ts | 5 +-
packages/dashboard/app/utils/inReviewStallCopy.ts | 8 ++
.../in-review-stall-deadlock-disposition.test.ts | 153 +++++++++++++++++++++
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/self-healing.ts | 30 +++-
8 files changed, 320 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6113
Fusion-Task-Lineage: 5e89adb4-6b59-4deb-8811-5c75d6fa19cc
2026-06-09 12:51:20 -07:00
gsxdsm
a2f4bb14c0
FN-6080: remove workflow selector collapse controls
...
Always render the workflow selector expanded across the dashboard.
- remove collapsible workflow selector props, state, icons, and toggle styles
- stop InlineCreateCard from passing collapse persistence options
- delete project storage support and tests for collapsed workflow selector state
- add a patch changeset for the published CLI package
Files changed:
.changeset/fn-6080-removal.md | 5 ++
.../dashboard/app/components/InlineCreateCard.tsx | 3 -
.../dashboard/app/components/WorkflowSelector.css | 14 +----
.../dashboard/app/components/WorkflowSelector.tsx | 65 +--------------------
.../components/__tests__/InlineCreateCard.test.tsx | 50 ----------------
.../components/__tests__/WorkflowSelector.test.tsx | 68 ----------------------
.../app/utils/__tests__/projectStorage.test.ts | 3 +-
packages/dashboard/app/utils/projectStorage.ts | 1 -
8 files changed, 8 insertions(+), 201 deletions(-)
Fusion-Task-Id: FN-6080
Fusion-Task-Lineage: cca26111-9e20-47d0-8473-d18a3b488ae1
2026-06-09 08:14:16 -07:00
gsxdsm
4366a933da
FN-6046: add collapsible workflow selectors
...
Add collapsible workflow selectors for board workflow controls and inline task creation.
- add a collapsible board workflow toolbar with persisted per-project state
- make the inline create workflow selector collapsible and store its expanded state per project
- update workflow selector styling, storage key allowlist, and regression coverage for collapse behavior
Files changed:
packages/dashboard/app/components/Board.tsx | 104 +++++++++++++--------
.../dashboard/app/components/InlineCreateCard.css | 9 ++
.../dashboard/app/components/InlineCreateCard.tsx | 3 +
packages/dashboard/app/components/Lane.css | 23 +++++
.../dashboard/app/components/WorkflowSelector.css | 20 +++-
.../dashboard/app/components/WorkflowSelector.tsx | 81 ++++++++++++++--
.../app/components/__tests__/Board.test.tsx | 101 ++++++++++++++++++--
.../components/__tests__/InlineCreateCard.test.tsx | 57 ++++++++++-
.../components/__tests__/WorkflowSelector.test.tsx | 73 ++++++++++++++-
.../app/utils/__tests__/projectStorage.test.ts | 4 +-
packages/dashboard/app/utils/projectStorage.ts | 2 +
11 files changed, 420 insertions(+), 57 deletions(-)
Fusion-Task-Id: FN-6046
Fusion-Task-Lineage: 07cbe7a8-5740-479d-94a3-b178c72a5273
2026-06-09 02:09:31 -07:00
gsxdsm
b95e7f7575
FN-5894: share project data-boundary and status helpers
...
Centralize project loading and status-state handling across dashboard surfaces.
- add a reusable DataBoundary component for loading, empty, error, and loaded states
- extract shared project status config helpers for labels, colors, icons, and initializing detection
- update project overview, cards, badges, and selector UI to use the shared helpers
- add regression coverage for data-boundary behavior, project overview empty/loading transitions, and status config fallbacks
Files changed:
packages/dashboard/app/components/DataBoundary.tsx | 64 ++++++++++++++++++++++
packages/dashboard/app/components/ProjectCard.tsx | 48 ++--------------
.../app/components/ProjectHealthBadge.tsx | 45 +--------------
.../dashboard/app/components/ProjectOverview.tsx | 4 +-
.../dashboard/app/components/ProjectSelector.tsx | 27 +--------
.../app/components/__tests__/DataBoundary.test.tsx | 62 +++++++++++++++++++++
.../components/__tests__/ProjectOverview.test.tsx | 25 +++++++++
.../__tests__/ProjectThemeTokens.test.tsx | 37 ++++---------
.../utils/__tests__/projectStatusConfig.test.ts | 53 ++++++++++++++++++
.../dashboard/app/utils/projectStatusConfig.ts | 50 +++++++++++++++++
packages/dashboard/vitest.config.ts | 2 +
11 files changed, 282 insertions(+), 135 deletions(-)
Fusion-Task-Id: FN-5894
Fusion-Task-Lineage: 3626a4af-b62b-456d-82d7-cf47bbf55c21
2026-06-02 14:14:24 -07:00
gsxdsm
9b54f52b39
FN-5707: fix Android executor footer overlap after keyboard dismiss
...
Adjust mobile keyboard bar flags so Android keeps the executor footer stacked above the nav bar while iOS retains collapse behavior.
- extract mobile bar keyboard flag computation into a dedicated utility
- keep nav keyboard pinning cross-platform while limiting footer keyboard-collapse to iOS
- add focused unit tests for Android/iOS/modal/desktop keyboard flag scenarios
- update ExecutorStatusBar keyboard-open test assertion and dashboard guide keyboard behavior notes
Files changed:
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/App.tsx | 23 ++++---
.../__tests__/ExecutorStatusBar.test.tsx | 6 +-
.../utils/__tests__/mobileBarKeyboardFlags.test.ts | 73 ++++++++++++++++++++++
.../dashboard/app/utils/mobileBarKeyboardFlags.ts | 36 +++++++++++
5 files changed, 129 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-5707
Fusion-Task-Lineage: ed01fcb0-d814-4595-9479-5baf97326ae7
2026-05-29 21:03:12 -07:00
gsxdsm
129e17d16c
FN-5702: keep mobile footer and nav pinned when keyboard opens
...
Add viewport-offset handling so mobile bottom bars stay anchored while virtual keyboards resize the visual viewport.
- add a shared viewportOffset utility to compute keyboard-related visual viewport compensation
- update dashboard app bootstrap/index logic to apply compensation variables for pinned footer/nav layout
- extend mobile keyboard layout coverage with dedicated viewport compensation and bottom-bar tests
- document the keyboard/pinned-bar behavior update in dashboard guide
Files changed:
docs/dashboard-guide.md | 2 +-
.../mobile-bottom-bars-keyboard-layout.test.ts | 12 ++-
.../viewport-compensation-keyboard.test.ts | 24 ++++++
packages/dashboard/app/index.html | 39 +++++++++-
.../app/utils/__tests__/viewportOffset.test.ts | 86 ++++++++++++++++++++++
packages/dashboard/app/utils/viewportOffset.ts | 64 ++++++++++++++++
6 files changed, 223 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-5702
Fusion-Task-Lineage: be47ad0c-82df-4c38-9577-94c2eee49a0e
2026-05-29 20:05:14 -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)
ef5dd7ba25
feat(FN-5435): reset fallback retry counter on success in reviewer
...
Adds a fallback retry counter to the reviewer that resets on successful step completion, preventing premature escalation when earlier steps exhaust retries while later ones succeed; also aligns dashboard trace buffer types and adds comprehensive coverage for the reset semantics.
Fusion-Task-Id: FN-5435
2026-05-21 08:43:57 -07:00
Fusion (runfusion.ai)
e96cb09982
feat(FN-5388): add warm room cache hydration with open diagnostics
...
Add room open performance diagnostics and warm cache hydration for room switches (FN-5388). The implementation adds a timing instrumentation utility, SWR cache constants, warm-room handoff logic in `useChatRooms`, and a documentation file covering the performance model, accompanied by regression tes
Fusion-Task-Id: FN-5388
2026-05-20 20:27:11 -07:00
Fusion (runfusion.ai)
1913cb59fe
feat(FN-5389): add resume event instrumentation with SSE, hooks, and diagno
...
FN-5389 adds dashboard resume event instrumentation: a `resumeInstrumentation` utility captures SSE resume signals, wired through `useChat`, `useChatRooms`, and `useTasks` hooks, with remount markers in `Board` and `ChatView`; diagnostics routes expose resume events for observability, documented in
Fusion-Task-Id: FN-5389
2026-05-20 19:58:49 -07:00
Fusion (runfusion.ai)
cfc70b21bd
feat(FN-5202): add SWR caching for chat agents, skills, and models
...
This merge introduces SWR-style caching across the dashboard to eliminate redundant fetches for models, agents, and skills, significantly refactoring ChatView.tsx (reduced by ~140 lines) by offloading cache coordination to three new dedicated hooks (`useAgentsMapCache`, `useDiscoveredSkillsCache`, `
Fusion-Task-Id: FN-5202
2026-05-20 03:19:44 -07:00
Fusion (runfusion.ai)
e6c7dcdd64
feat(FN-5139): wire lineage unlink delete and archive flows
...
Fusion-Task-Id: FN-5139
Fusion-Task-Lineage: c16f4245-bfda-4b9a-bd98-ffc44b45f5a0
2026-05-19 18:56:24 -07:00
Fusion (runfusion.ai)
ad35a1ccfc
test(FN-5134): complete Step 2 — cover no-worktree badge suppression
...
Fusion-Task-Id: FN-5134
Fusion-Task-Lineage: 1d7fd2a5-de42-4977-a4b9-583c04124c5d
2026-05-19 07:36:11 -07:00
Fusion (runfusion.ai)
d646bfb4b2
feat(FN-5134): complete Step 1 — suppress no-worktree in-review badge
...
Fusion-Task-Id: FN-5134
Fusion-Task-Lineage: 1d7fd2a5-de42-4977-a4b9-583c04124c5d
2026-05-19 07:36:11 -07:00
Fusion (runfusion.ai)
bca388af84
feat(FN-4963): complete Step 2 — add chat sessions cache key
...
Fusion-Task-Id: FN-4963
Fusion-Task-Lineage: 791f5e46-c630-4883-89de-942cc85c329b
2026-05-18 03:34:54 -07:00
gsxdsm
1842a69e6c
test(FN-4951): stabilize clipboard fallback coverage
...
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
3986c09154
test(FN-4951): complete Step 2 — add clipboard utility tests
...
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
c96a918591
feat(FN-4951): complete Step 1 — add shared clipboard utility
...
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:52 -07:00
gsxdsm
f9cf3f1bde
feat(FN-4921): merge fusion/fn-4921
2026-05-17 19:11:59 -07:00
Fusion (runfusion.ai)
13bcb8ed85
feat(FN-4924): complete Step 1 — add tasks TTL constant
...
Fusion-Task-Id: FN-4924
Fusion-Task-Lineage: a5f882e1-8348-4f9d-89be-15994adc148c
2026-05-17 12:41:21 -07:00
Fusion (runfusion.ai)
7ad3449c8f
feat(FN-4924): complete Step 1 — add swr cache envelope ttl
...
Fusion-Task-Id: FN-4924
Fusion-Task-Lineage: a5f882e1-8348-4f9d-89be-15994adc148c
2026-05-17 11:33:56 -07:00
Fusion (runfusion.ai)
3d0cce72f2
feat(FN-4885): complete Step 7 — finalize docs and changeset
...
Fusion-Task-Id: FN-4885
Fusion-Task-Lineage: 31110eed-5ca3-4d67-8f11-581185056dc6
2026-05-17 09:31:07 -07:00
Fusion (runfusion.ai)
5793c4bcd7
feat(FN-4885): complete Step 6 — add deadlock disposition dashboard copy
...
Fusion-Task-Id: FN-4885
Fusion-Task-Lineage: 31110eed-5ca3-4d67-8f11-581185056dc6
2026-05-17 09:31:07 -07:00