Commit Graph

1651 Commits

Author SHA1 Message Date
gsxdsm
e832f626f3 fix(dashboard): inset plugins settings panel on mobile
Plugin manager cards were sitting flush against the modal edges on
mobile because .settings-plugins-subsection-panel had no horizontal
padding while the heading and toggle were already inset.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:09:05 -07:00
Fusion
1d1d1edfb3 feat(FN-2540): extract shared route context and integrated router registrar
- Refactor dashboard routing to use a shared route context scaffold for provider-safe registration
- Add register-integrated-routers helper and wire routes.ts to compose integrated routers cleanly
- Update route documentation and route types to reflect the new context/registrar structure
- Stabilize quick-entry clear assertion and add routing tests covering integrated router registration behavior
2026-04-25 23:18:11 -07:00
Fusion
1d0b872914 fix(FN-2573): prevent stale-closure writes in useFavorites
- Refactor useFavorites callbacks to read latest state instead of closing over stale favorites values
- Ensure add/remove/toggle flows update local state and persistence from a consistent source of truth
- Add regression tests that reproduce stale-closure timing scenarios and verify favorites remain correct
- Expand hook test coverage for rapid consecutive updates to guard against future closure regressions
2026-04-25 20:32:37 -07:00
Fusion
96e02928d2 fix(FN-2572): remove dead onboarding modal exports
- Delete obsolete AppModals code that was accidentally left in ModelOnboardingModal.tsx
- Restore the Task type import used by the onboarding modal after dead code cleanup
- Drop the unused SettingsModal.css import tied to removed code paths
- Extend ModelOnboardingModal tests to guard against dead export regressions
2026-04-25 20:21:11 -07:00
Fusion
71ced8f422 feat(FN-2570): add mobile per-message chat render toggles
- Track plain-text render mode per assistant message (including streaming output) in ChatView state
- Add inline mobile-only Eye/EyeOff toggle buttons on assistant bubbles to switch markdown vs plain text per message
- Hide the header markdown/plain toggle on mobile and polish inline toggle sizing, focus, and hover styles in ChatView.css
- Extend ChatView tests with mobile viewport coverage for toggle rendering, per-message isolation, round-trip toggling, and mobile CSS contract checks
2026-04-25 20:14:10 -07:00
Fusion
b0886cdfd4 fix(FN-2539): preserve dashboard API compatibility and harden proxy wildcard routing
- Replace app/api.ts with a compatibility barrel that re-exports the legacy client API surface from app/api/legacy.ts
- Move the existing dashboard API implementation into app/api/legacy.ts and update static-analysis tests to include the new module path
- Update proxy wildcard routing to use /proxy/:nodeId/{*splat}, keeping explicit proxy handlers ahead of the fallback route
- Reject proxying to local nodes with a consistent 400 response and expand proxy route tests plus route-ordering compatibility notes
2026-04-25 19:56:27 -07:00
Fusion
866706308d fix(FN-2568): keep custom model dropdown header and search wrapper opaque
- Set the combobox search wrapper background to var(--surface) to prevent option list bleed-through behind the input.
- Update the dropdown header background from var(--bg) to var(--surface) for a consistent opaque top section.
- Add a CSS regression test in CustomModelDropdown.test.tsx that asserts the search wrapper rule includes an opaque surface background.
2026-04-25 19:35:47 -07:00
Fusion
662265f086 feat(FN-2567): add pi-claude-cli provider icon alias
- Map the pi-claude-cli provider key to the Claude CLI icon config in ProviderIcon.
- Reuse Anthropic tokenized provider color and accessible label for the new alias.
- Add dashboard tests asserting icon rendering, color/label metadata, and mixed-case alias normalization.
2026-04-25 18:29:32 -07:00
Fusion
8e18fad156 feat(FN-2559): merge fusion/fn-2559 2026-04-25 18:22:37 -07:00
Fusion
78b09711a2 feat(FN-2557): expand task stats tab with execution insights
- Enrich TaskTokenStatsPanel with timing extraction, workflow runtime summaries, and longest-event highlights from task logs and workflow results
- Add an execution details section for mode, runtime status, step progress, retries, recovery state, and runtime links
- Wire TaskDetailModal to pass the working task into the stats panel so the Stats tab renders execution context with token usage
- Extend TaskDetailModal and TaskTokenStatsPanel tests (plus panel CSS) to cover the new stats sections and loading/empty/token states
2026-04-25 18:06:36 -07:00
Fusion
6eacbc47e5 feat(FN-2544): stabilize memory backend status loading UX
- Reset memory backend status to unresolved during fetches so stale capabilities are never treated as authoritative
- Gate MemoryView read-only and qmd warning states on resolved backend status and add an explicit checking state for qmd availability
- Update SettingsModal memory editor gating so writes remain enabled while backend status is still loading, then enforce resolved read-only state
- Expand dashboard tests for useMemoryBackendStatus, MemoryView, and SettingsModal to lock in loading, warning, and refresh behavior
2026-04-25 17:54:32 -07:00
gsxdsm
7b9c787690 feat(FN-2529): merge fusion/fn-2529 2026-04-25 17:44:55 -07:00
Fusion
90d32e04c6 feat(FN-2558): lock TaskCard footer metadata to one line
- Prevent TaskCard footer row metadata from wrapping by enforcing nowrap layout
- Make files-changed chip flex safely and truncate long text with ellipsis while preserving icon visibility
- Keep timer chip placement anchored to the right side of the footer metadata row
- Add TaskCard and board-mobile regression tests asserting footer child order and CSS layout guarantees
2026-04-25 17:44:04 -07:00
Fusion
f5bbba0eac feat(FN-2556): add TaskForm bottom slot for model configuration
- Add a new renderBelowModelConfiguration prop in TaskForm and render it beneath the Model Configuration section inside More options
- Update TaskDetailModal to use the new slot so the Source Issue edit block appears below model settings instead of near the primary section
- Adjust TaskDetailModal source-issue edit tests to expand More options before interacting with source fields
- Add ordering assertions in TaskForm and TaskDetailModal tests to verify the injected block sits between Model Configuration and Workflow Steps
2026-04-25 17:29:18 -07:00
Fusion
62ffcd7873 feat(FN-2554): rework TaskCard timer semantics
- Split timer calculation paths so in-progress cards show live elapsed time since entering in-progress
- Make done cards show fixed processing duration from start to completion instead of growing post-completion elapsed time
- Improve timer tooltip and aria-label copy for clearer in-progress and done semantics
- Expand TaskCard tests to cover boundary formatting, fixed done-duration behavior, and stable timer output as time advances
2026-04-25 17:01:53 -07:00
Fusion
f9302ac7c6 fix(FN-2528): canonicalize Dev Server experimental feature flag
- Treat devServer as a legacy alias of canonical devServerView in Experimental Features
- Canonicalize feature keys when rendering and saving settings to prevent duplicate Dev Server rows
- Preserve enabled-state compatibility by reading either key in useAppSettings
- Add regression tests for single-row rendering, alias normalization on save, and legacy hook behavior
2026-04-25 16:28:46 -07:00
Fusion
75fe93da6a fix(FN-2555): restore execution mode updates from task edit flow
- Add explicit executionMode props to TaskForm edit controls and render a Standard/Fast selector in More Options
- Track editExecutionMode state in TaskDetailModal and reset it consistently when opening, canceling, or syncing task changes
- Include executionMode in update payload diffing so standard→fast sends "fast" and fast→standard clears to null
- Add regression tests for TaskForm selector behavior and TaskDetailModal update payload handling
2026-04-25 16:01:49 -07:00
Fusion
c57d11a659 feat(FN-2496): add overlap ignore paths support to scheduler settings
- Add overlap-ignore path validation and typed settings support in core schema
- Apply overlap ignore paths in scheduler overlap detection with dedicated engine tests
- Add Settings modal UI and routes handling for overlap ignore paths including path-picker feedback fixes
- Document overlap ignore paths in storage/settings docs and include a changeset for @runfusion/fusion
2026-04-25 15:48:36 -07:00
Fusion
792532f726 feat(FN-2552): distinguish workflow failed dots in task progress
- Add a workflow-failed dot modifier class for failed workflow checks in TaskCard
- Apply ws-warning styling to workflow-origin failed steps while keeping regular failed steps unchanged
- Update TaskCard rendering logic to append the workflow-failed class only for workflow failed items
- Expand TaskCard tests to verify class assignment for regular failed, workflow failed, done, and pending dots
2026-04-25 15:44:24 -07:00
Fusion
98e06adb11 fix(FN-2551): normalize mailbox mobile header control sizing
- Consolidate mobile mailbox header-actions rules for modal and view layouts with tokenized spacing
- Enforce 36px minimum height/width for action buttons and icon controls on mobile
- Normalize modal close control mobile padding and radius for consistent alignment
- Add CSS contract assertions in MailboxModal and MailboxView tests for spacing and control dimensions
2026-04-25 15:37:02 -07:00
gsxdsm
3b69b9817e feat(FN-2535): merge fusion/fn-2535 2026-04-25 15:21:28 -07:00
Fusion
e2e79ec704 fix(FN-2534): prevent dismissed background sessions from resurfacing
- Add dismissal tombstone tracking in useBackgroundSessions to ignore stale refresh, sync, and SSE updates for dismissed session IDs
- Treat terminal session states consistently and broadcast completion on dismiss so local/session-sync state remains converged
- Keep lock-conflicted planning cancellations visible instead of falsely dismissing the session when another tab owns the lock
- Expand useBackgroundSessions regression tests to cover stale sync/SSE resurrection, refresh behavior, lock-conflict handling, and newer-authoritative restore paths
2026-04-25 15:17:52 -07:00
Fusion
38000ba839 feat(FN-2527): add bulk actions for in-progress and in-review columns
- Extend column action menus beyond Todo to include In Progress and In Review
- Add Stop All action that pauses only non-paused tasks with confirmation and success/error toasts
- Add Move All to Todo action with confirmation and partial-failure handling for bulk moves
- Thread pauseTask through useTasks, App, and Board so column menus can trigger task pausing
- Expand Column tests to cover new menu actions, disabled states, and bulk operation behavior
2026-04-25 15:11:54 -07:00
gsxdsm
bff703196e feat(FN-2501): merge fusion/fn-2501 2026-04-25 14:24:35 -07:00
gsxdsm
641267c2d6 chore: clear pre-existing lint warnings
Annotate the intentional NUL-byte regex in log-sink, drop two stale
eslint-disable directives whose underlying any-uses are gone, and swap
@ts-ignore for @ts-expect-error in routes.test.ts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 14:19:28 -07:00
Fusion
4129998819 fix(FN-2492): polish plugin manager bundled runtime UX
- Add a Bundled Runtime Plugins section with one-click install actions, install-state badges, and empty-state discoverability improvements
- Refine plugin detail semantics and controls by tightening heading hierarchy, button variants, and mobile/toggle styling behavior
- Expand PluginManager test coverage for bundled runtime installation, installed-state disabling, and heading-level accessibility contracts
- Clean up dashboard CSS ownership by removing duplicated global/toggle rules, updating surface-hover usage, and documenting bundled runtime discovery in settings docs
2026-04-25 13:46:00 -07:00
Fusion
fd4e26a69b feat(FN-2516): show app version in settings modal
- Add typed health endpoint helper in dashboard API for retrieving status metadata
- Fetch dashboard health in SettingsModal and render a non-blocking version label in the modal header
- Add settings modal heading/version styles to support the new header layout
- Expand SettingsModal tests to cover successful version rendering and graceful failure behavior
- Add mobile settings test coverage for displaying the version label
2026-04-25 13:38:49 -07:00
Fusion
7270d41137 fix(FN-2513): anchor mobile toasts below header
- Move mobile .toast-container positioning from bottom offset to top offset beneath the fixed header
- Tokenize horizontal toast spacing on mobile using var(--space-sm) instead of hardcoded pixel values
- Update utility mobile CSS regression test expectations for top anchoring and auto bottom behavior
2026-04-25 13:25:52 -07:00
Fusion
61e095595f feat(FN-2511): unify task card footer metadata row
- Refactor TaskCard to compute files-changed metadata once and render it through a shared footer slot
- Render elapsed time chip in the same footer row as file-change metadata when either element is present
- Update TaskCard styles to add a reusable .card-footer-row layout and align the timer chip to the row end
- Add regression coverage asserting files-changed and timer chips coexist in one footer container
2026-04-25 13:17:47 -07:00
Fusion
56e3a44240 feat(FN-2512): add elapsed timer chip to task cards
- Derive task elapsed time from columnMovedAt with updatedAt/createdAt fallbacks and guard against invalid or future timestamps
- Render a clock-based timer chip on in-progress and done cards with accessible labeling and tooltip metadata
- Add TaskCard styles for the timer row/chip using design tokens, including mobile-size adjustments
- Expand TaskCard tests to cover visibility by column, invalid timestamp suppression, boundary label formatting, and 30s live refresh cadence
2026-04-25 13:12:01 -07:00
Fusion
17339046e1 fix(FN-2510): harden skills catalog fallback for short and invalid queries
- Update skills adapter fallback logic to handle empty and short catalog queries without surfacing 400 failures
- Handle ApiRequestError paths in SkillsView so invalid-query responses degrade gracefully in the UI
- Add regression coverage for adapter, routes, and SkillsView behavior across empty/short query cases
- Document short-query catalog behavior in the dashboard guide and include a patch changeset for @runfusion/fusion
2026-04-25 12:40:32 -07:00
gsxdsm
800d0541a7 feat(FN-2503): merge fusion/fn-2503 2026-04-25 12:20:35 -07:00
Fusion
f1aa2fc219 fix(FN-2504): remove hardcoded workflow step and stabilize dashboard timeouts
- Stop injecting a hardcoded Browser Verification option in WorkflowResultsTab and rely only on fetched workflow step definitions
- Normalize workflow step checkbox test IDs to be id-based for all options, including template-backed Browser Verification steps
- Extend WorkflowResultsTab coverage to assert Browser Verification renders exactly once when provided by API data
- Increase dashboard Vitest timeout defaults and update the slow route test timeout to reduce flaky failures under concurrent workspace runs
2026-04-25 12:18:55 -07:00
Fusion
61f09b2e32 fix(FN-2500): improve terminal modal sizing and input behavior
- Widen the desktop terminal modal to improve usability and align with UX review feedback
- Stabilize terminal input lifecycle handling to avoid focus and interaction regressions
- Add regression coverage for terminal modal input behavior and mobile keyboard layout scenarios
- Include a changeset documenting the terminal modal desktop width and input fixes
2026-04-25 12:14:50 -07:00
gsxdsm
8ab8b869f5 feat(FN-2499): merge fusion/fn-2499 2026-04-25 11:50:35 -07:00
gsxdsm
80082100d7 chore(dashboard): drop unused --bg-tertiary fallback on plugin install hint
The fallback pointed at a token that doesn't exist in any theme; the
color-mix expression was already the intended value.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 11:38:05 -07:00
Fusion
97f7055373 feat(FN-2493): add plugin add alias and normalize install guidance
- Route "fn plugin add" to the plugin install handler and update CLI help/usage text to document the alias
- Add bin routing tests that cover plugin add/install parity and updated error/help messaging
- Update getting-started, settings reference, and runtime plugin READMEs to standardize plugin installation examples
- Add a patch changeset for @runfusion/fusion and apply DirectoryPicker/PluginManager design-token styling refinements
2026-04-25 11:28:33 -07:00
Fusion
5db3c51656 fix(FN-2498): keep New Task more options collapsed by default
- Add an autoExpandMoreOptionsOnSelection prop to TaskForm and gate advanced-section auto-expansion behind it
- Disable auto-expansion in NewTaskModal so default-on workflow step preselection does not open More options on first render
- Mark collapsed advanced content with the hidden attribute to prevent interaction until expanded
- Add dashboard tests for default collapsed state, opt-out auto-expand behavior, and default-on workflow-step regression coverage
- Replace hardcoded spacing/transition values in NewTaskModal.css with design tokens
2026-04-25 11:21:35 -07:00
gsxdsm
85d5f119d1 fix(dashboard): nudge footer folder icon up and left for better text alignment
Apply a 2px-left / 1px-up transform to the bare folder toggle so it sits
flush with the surrounding status-bar text on desktop. Touch-target sizing
on coarse pointers / mobile is unaffected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 11:12:35 -07:00
gsxdsm
06e72b8ef8 feat(FN-2497): merge fusion/fn-2497 2026-04-25 11:10:51 -07:00
Fusion
6d29b0506e feat(FN-2494): add responsive split-pane mailbox view
- Render mailbox in split-pane mode with message list and detail panes on desktop layouts
- Update mailbox modal styling for desktop pane sizing, separators, and responsive behavior
- Preserve single-pane mobile mailbox flow while adapting interactions for split view states
- Expand MailboxView tests to cover split-pane rendering and responsive mailbox behavior
2026-04-25 11:10:10 -07:00
gsxdsm
7cff0eb11c fix(dashboard): stop the planning textarea from reverting to the persisted description on every keystroke
The "restore description from localStorage" branch ran inside an effect
whose deps included handleStartPlanning, and that callback regenerated on
every change to initialPlan. So every keystroke would re-fire the effect,
hit the same `getPlanningDescription` value, and overwrite what the user
just typed.

Guard the restore with a one-shot ref so it only runs the first time the
modal opens, and reset the ref when the modal closes so a future re-open
still picks up an updated persisted value.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 11:01:36 -07:00
gsxdsm
9f398800ca fix(dashboard): align footer folder icon with surrounding text on desktop
Removed the always-on 40px touch-target sizing from the folder toggle so the
icon sits at the same baseline as adjacent status-bar text. Touch targets
are still applied via @media (pointer: coarse) and (max-width: 768px) so
mobile keeps a tappable hit area. line-height: 1 prevents the icon's box
from inheriting status-bar text leading.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 10:59:31 -07:00
gsxdsm
56a5b8249c fix(dashboard): make File Browser, Git Manager, GitHub Import modals proper full-screen sheets on mobile
All three were declared as 100vw/100dvh on mobile but the .modal-overlay
default still applied 10vh top padding, leaving them pushed below the
viewport edge with a sliver of overlay showing on top. Override
.modal-overlay:has(.X) to drop padding and stretch to fill, and explicitly
zero out border/radius/margin on the modal itself so the sheet truly
covers the screen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 10:56:41 -07:00
gsxdsm
a97ffd73a0 feat(FN-2473): merge fusion/fn-2473 2026-04-25 10:55:50 -07:00
gsxdsm
255847659e fix(dashboard): drop the border around the footer folder toggle
The status-bar folder-toggle button had a 1px border + radius that made it
look like a chip. Per request, render it as a bare icon — transparent
background, no border. Hover now only shifts the icon color, the active
state drops to color only, and focus-visible still draws a focus ring with
border-radius applied so it remains a clean halo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 10:55:06 -07:00
gsxdsm
30cadb1345 fix(dashboard): show planning thinking output and silently recover from stream errors
Two related planning-mode issues:

1. The streaming "thinking" panel only showed for models that emit explicit
   thinking_delta events (e.g. Anthropic Extended Thinking). For every other
   model the user saw a spinner with no streaming content because text_delta
   was being accumulated server-side without being broadcast over SSE. Now
   onText also forwards deltas through the same stream channel so any model
   surfaces its in-flight output.

2. Returning to the planning screen after the browser tab was backgrounded
   long enough for the SSE socket to time out would land the user in a
   permanent error view ("Session failed while contacting the AI") even
   though the server session was still alive. The onError handler now first
   re-fetches the AI session row; if the server still reports the session as
   generating or awaiting_input it silently reconnects without surfacing the
   transient error. Only genuine server-side failures still surface.

Tests for the obsolete manual-retry recovery path were rewritten as
auto-recovery assertions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 10:50:54 -07:00
Fusion
07d132ee29 feat(FN-2445): merge fusion/fn-2445 (auto-resolved)
- feat(FN-2445): complete Step 1 — header project trigger context
- fix(FN-2445): complete Step 4 — remediate UX gate feedback
- fix(FN-2445): ignore inspector URLs in preview detection
- feat(FN-2445): complete Step 2 — add footer project directory toggle
- feat(FN-2445): complete Step 1 — show project name in selector trigger
- feat(FN-2488): add terminal refresh fallbacks for terminal startup failures
2026-04-25 10:50:32 -07:00
Fusion
069bdb2190 fix(FN-2491): align auth actions in mobile settings modal
- Import SettingsModal.css directly in SettingsModal to ensure extracted styles load reliably
- Adjust mobile auth provider layout so non-info header actions stay right-aligned
- Align API key controls to the right on mobile by updating section, row, and button alignment rules
- Extend mobile CSS regression assertions to cover the new auth alignment rules
2026-04-25 10:46:35 -07:00
Fusion
d09ae5b8df feat(FN-2443): unify plugin settings into tabbed Plugins section
- Remove the standalone Pi Extensions section from settings navigation and route legacy initialSection values to Plugins
- Add accessible subsection tabs in Plugins for Fusion Plugins and Pi Extensions with proper tab/tabpanel semantics
- Render plugin content conditionally per active subsection so only the selected manager is mounted
- Add SettingsModal tests covering sidebar navigation, tab accessibility, and subsection switching behavior
- Add subsection styling in SettingsModal.css and preserve extracted styles.css boundaries
2026-04-25 10:39:15 -07:00