Commit Graph

725 Commits

Author SHA1 Message Date
gsxdsm
b6c15fe470 FN-5855: fix frozen dashboard spinners
Restore shared spinner animation behavior for dashboard AI activity indicators.

- switch BackgroundTasksIndicator loaders to the shared animate-spin utility class
- anchor shared spin utilities on SVG centers with transform-origin and transform-box rules
- add CSS regression tests covering global spin keyframes and spinner utility styles

Files changed:
 .../app/__tests__/spinner-animation.css.test.ts    | 50 ++++++++++++++++++++++
 .../app/components/BackgroundTasksIndicator.tsx    |  9 ++--
 packages/dashboard/app/styles.css                  |  7 +++
 3 files changed, 60 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-5855

Fusion-Task-Lineage: b94d4333-2e78-4c4b-a304-5a13b797bbc6
2026-06-01 23:29:21 -07:00
gsxdsm
fb27ead6b3 Recovery: re-land PR tab spacing tokens onto main 2026-05-28 19:50:53 -07:00
gsxdsm
d37bebf8bf feat(FN-5516): merge fusion/fn-5516 2026-05-22 17:24:38 -07:00
gsxdsm
45a3c6e426 fix(dashboard): unsqueeze kanban columns on tablet viewports
The 769–1024px breakpoint forced 6 columns into the visible width with
`grid-template-columns: repeat(6, minmax(0, 1fr))` and `overflow-x:
hidden`, collapsing columns to ~130–170px on Android tablets and
stacking task card titles one word per line. Switch to
`minmax(260px, 1fr)` with `overflow-x: auto` so columns keep a readable
minimum width and the board scrolls horizontally, matching desktop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:22:36 -07:00
gsxdsm
e6c135bca1 fix(dashboard): block pinch-zoom and overscroll on mobile globally
- touch-action is per-element, not inherited. Setting `pan-x pan-y` on
  html/body alone didn't stop the kanban board: pinching on `.board`
  reads `.board`'s own touch-action (auto by default), which permits
  pinch-zoom. Switch to `* { touch-action: pan-x pan-y }` inside the
  mobile media query so every element opts out of pinch by default;
  element-specific overrides (touch-action: none on resize handles,
  drag-source rules on TaskCard, etc.) still win on specificity.
- Add `overscroll-behavior: none` to html/body to prevent Chrome's
  rubber-band scroll, which was letting users pull the page up to
  expose empty space above the dashboard despite overflow:hidden.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 14:21:27 -07:00
gsxdsm
a10fc56ee2 fix(dashboard): keep Android keyboard open in main chat; disable kanban pinch-zoom
Two Android-specific fixes:

1. Keyboard dismissing in main chat. App.tsx derives `mobileKeyboardOpen`
   from useMobileKeyboard and uses it to gate the
   `project-content--with-mobile-nav` / `--with-footer` className
   assignment plus MobileNavBar rendering. When the soft keyboard opened
   on Android, those classes were removed and the nav unmounted, shrinking
   padding-bottom by ~80px in a single render. Android Chrome treats the
   resulting jump of the focused chat input as the focus target moving and
   instantly dismisses the keyboard. With interactive-widget=resizes-content
   set on Android, the layout viewport itself shrinks with the keyboard, so
   the hide-nav-on-keyboard pattern was redundant on Android (and harmful).
   The whole pattern is now gated to iOS via isIOS(). iOS path is unchanged.

2. Pinch-zoom on kanban. Android Chrome ignores user-scalable=no for a11y,
   and kanban's overflow-x:auto columns combined with the inflated ICB
   produce a broken visual when the user zooms out. Adds
   touch-action: pan-x pan-y to html,body inside the mobile media query
   (keeps scroll panning, blocks pinch-zoom). Chat and MissionManager were
   unaffected before because they don't expose a wide horizontal
   scrollable region.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 14:07:15 -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)
9c2b61eec6 feat(FN-5204): add test mode activation across settings, engine, and dashboard
- Add core settings schema/types support for testMode with model-resolution override handling
- Enforce engine session lane overrides in test mode with targeted helper coverage
- Add dashboard settings toggle plus persistent test-mode banner and related component tests
- Update settings documentation and parity/roundtrip tests for the new test mode behavior
2026-05-22 00:15:14 -07:00
gsxdsm
fbf7e2cb4d fix(dashboard): unsqueeze board on Android tablets
- Drop the tablet-tier `.board` grid rule that crammed 6 columns into
  ≤1024px viewports with no min-width, scrunching column content to
  unreadable widths. Tablets now use the default `minmax(300px, 1fr)`
  and scroll horizontally like desktop.
- Drop `maximum-scale=1.0, user-scalable=no` from the viewport meta.
  Combined with `initial-scale=1.0` those flags trigger Android Chrome
  layout bugs in multi-window mode; the Capacitor-feel justification
  isn't worth the breakage in a browser-rendered dashboard.
- Broaden the existing iOS scroll-snap stabilization in Board.tsx from
  `(max-width: 768px)` to any touch-primary device, and re-run it the
  first time tasks populate so Android tablets get the same first-cards-
  loaded reflow that mobile already had.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 23:05:15 -07:00
Fusion (runfusion.ai)
61ef09c79c feat(FN-5281): add tablet board overflow handling and regression tests
Adds a tablet board override to fix overflow regressions on the dashboard, with a corresponding test covering the regression path and a hardening fix to the parsing logic.

Fusion-Task-Id: FN-5281
2026-05-19 23:24:00 -07:00
gsxdsm
71a2ea1954 feat(FN-5162): merge fusion/fn-5162 2026-05-19 11:14:49 -07:00
Fusion (runfusion.ai)
d0573d8fe6 feat(FN-4759): complete Step 2-4 — render draft/check rollup badge
Fusion-Task-Id: FN-4759
Fusion-Task-Lineage: af79d2a6-fd7b-40e0-b3c9-6c74569d9aa0
2026-05-17 08:22:26 -07:00
Fusion (runfusion.ai)
0c8cc02ca3 feat(FN-4757): complete Step 3 — wire PrPanel and remove PrSection
Fusion-Task-Id: FN-4757
Fusion-Task-Lineage: 32236172-0b3b-4c19-b3a1-8ee0b91ea3ac
2026-05-17 03:28:21 -07:00
Fusion (runfusion.ai)
84f914884a feat(FN-4786): complete Step 2 — globalize spin utility
Fusion-Task-Id: FN-4786
Fusion-Task-Lineage: eb683ec8-8b9d-4e3d-852c-7076224afa6b
2026-05-16 18:40:03 -07:00
Fusion
4ea7aa1f8e feat(FN-4525): enforce shared chip heights across TaskCard columns
Completes Step 5 of FN-4525 by enforcing consistent chip heights in TaskCard components, adding CSS rules in both the component and global stylesheets with corresponding test coverage.

Fusion-Task-Id: FN-4525
2026-05-14 23:48:28 -07:00
Fusion
b6ee59c241 feat(FN-4511): complete Step 2 — lock github badge pill geometry
Fusion-Task-Id: FN-4511
Fusion-Task-Lineage: 9bc31d0c-643c-4f31-82b7-ecfc76d05731
2026-05-14 12:38:59 -07:00
Fusion
0ec2163fdb feat(FN-4481): complete Step 4 — align github badge size and coverage
Fusion-Task-Id: FN-4481
Fusion-Task-Lineage: 8b52379c-60b7-4cae-b655-7ed780c5c523
2026-05-14 09:19:14 -07:00
Fusion
b087dc233f fix(FN-4286): replace text-secondary usages with canonical tokens
Fusion-Task-Id: FN-4286
Fusion-Task-Lineage: 1dd74ee2-7fb2-4b41-b923-a9f339521b50
2026-05-13 10:00:00 -07:00
Fusion
b63457d085 feat(FN-4274): complete Step 6 — documentation & delivery
Fusion-Task-Id: FN-4274
Fusion-Task-Lineage: 13806cfa-9911-4084-a439-dc4d91076062
2026-05-13 09:23:13 -07:00
Fusion
47cd4f64d5 feat(FN-4274): complete Step 6 — finalize tokenized sizing cleanup
Fusion-Task-Id: FN-4274
Fusion-Task-Lineage: 13806cfa-9911-4084-a439-dc4d91076062
2026-05-13 09:23:13 -07:00
Fusion
60b9ec2651 feat(FN-4274): finalize tokenized skills/runtime css
Fusion-Task-Id: FN-4274
Fusion-Task-Lineage: 13806cfa-9911-4084-a439-dc4d91076062
2026-05-13 09:23:13 -07:00
Fusion
61b8523b9d feat(FN-4310): complete Step 2 — adjust GitHub badge spacing and font size
Fusion-Task-Id: FN-4310
Fusion-Task-Lineage: 64ade1a4-ae3f-481c-81e8-25bbf7569f0a
2026-05-13 09:06:20 -07:00
Fusion
c9bbe661b8 feat(FN-4141): complete Step 3 — style backup stats and responsive list
Fusion-Task-Id: FN-4141
Fusion-Task-Lineage: 9dae1c31-2d19-489f-b406-b07ff14bb24e
2026-05-13 06:29:34 -07:00
Fusion
edfef23964 feat(FN-001): complete Step 2 — mobile board CSS fix\n\n- Change scroll-snap-type from mandatory to proximity\n- Add overflow-anchor: none\n- Add width: 100% to mobile .board and .list-view\n- Update board-mobile.test.tsx scroll-snap assertion 2026-05-12 23:27:43 +08:00
Fusion
d8830a5235 feat(FN-4022): isolate ThemeSelector stylesheet and consolidate light theme
Consolidated light-theme token ownership from `CustomModelDropdown.css` into `ThemeSelector.css` and `styles.css`, completing the isolation of theme-related CSS across the dashboard. Added a corresponding test fixture for `CustomModelDropdown`.

Fusion-Task-Id: FN-4022
2026-05-11 13:44:14 -07:00
Fusion
1b17ec3589 fix(FN-3725): define accent text token across dashboard themes
- Add --accent-text token definitions in global and per-theme CSS blocks for consistent readable foreground contrast
- Extend theme coverage tests to assert accent text token presence across generated theme variants
- Add a changeset for @runfusion/fusion documenting the theme token fix
- Update agent guidance reference to include the new token requirement

Fusion-Task-Id: FN-3725
2026-05-08 00:19:17 -07:00
Fusion
31110975a8 feat(FN-3723): fix plugin toggle rendering
The merge completes the plugin toggle rendering fix (FN-3723) by verifying the quality gates and adding the required changeset for the patch release.

Fusion-Task-Id: FN-3723
2026-05-07 23:38:12 -07:00
Fusion
3735e0565a feat(FN-3396): bundle Cursor CLI as a plugin provider with dashboard auth w
Merges FN-3396's full Cursor CLI provider integration (Steps 1–4): defines a CLI-backed provider contract, adds the `fusion-plugin-cursor-runtime` plugin package with process management and runtime probes, wires dashboard auth flows and UI (ProviderCard, onboarding modal, settings), and bundles the

Fusion-Task-Id: FN-3396
2026-05-07 04:17:52 -07:00
Fusion
953ac8a886 feat(FN-3618): surface provider icons in settings and dropdowns
Completes Step 3 of FN-3618 by surfacing AI provider icons throughout the Settings modal and model dropdowns, updating both the component styles and adding integration and unit tests to cover the new icon display behavior.

Fusion-Task-Id: FN-3618
2026-05-06 21:36:31 -07:00
Timothy Laurent
14871869ab fix: move spinner keyframes outside :root selector block
The @keyframes spin and .animate-spin rules were incorrectly placed
inside the first :root {} block, which is invalid CSS — @keyframes
cannot be nested inside selector blocks. Browsers silently ignore
them in that position, so the spinners would still get stuck on pages
without component CSS loaded.

Moves the rules to the stylesheet top level between the two :root
blocks. Also fixes the mobile-css regression test that parses the
first :root block with a non-greedy regex.

Addresses review feedback from Greptile (P1) and CodeRabbit on PR #40.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-05 12:01:14 -07:00
Timothy Laurent
f06e5c8cbf fix: add global spinner animation to prevent stuck loaders
The `.animate-spin` CSS utility class and `@keyframes spin` were only
defined in TaskCard.css but used by 25+ components (~60 instances).
On pages without a TaskCard rendered, the class didn't exist in the
stylesheet, causing all spinners to appear frozen.

Moves both the keyframes and utility class to the global styles.css
so they're available from the first paint regardless of which
components are loaded.

Closes Runfusion/Fusion#39

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-05 12:01:14 -07:00
Fusion
4225f9fa01 feat(FN-3287): document PR link visibility in dashboard README
Merges the documentation update for FN-3287, adding 2 lines to the dashboard README covering PR link visibility behavior. This completes Step 5 of the task.

Fusion-Task-Id: FN-3287
2026-05-05 07:18:32 -07:00
Fusion
b7ac46ecef feat(FN-3195): document llama.cpp provider setup and onboarding
Docs(FN-3195): adds llama.cpp provider setup and onboarding documentation to the main and dashboard READMEs.

Fusion-Task-Id: FN-3195
2026-05-04 10:18:38 -07:00
Fusion
27544a1880 feat(FN-3374): update mobile fullscreen modal selector assertion
This merge updates a mobile fullscreen modal CSS selector assertion in the dashboard test suite, aligning it with a recent UI change to the modal structure.

Fusion-Task-Id: FN-3374
2026-05-04 09:51:54 -07:00
Fusion
73cee930b0 feat(FN-3232): add standalone bottom-gap token and mobile CSS contract test
This merge bundles six feature steps across mobile PWA spacing, test infrastructure, MissionManager tokenization, and Insights coverage. Key changes include restoring the `--standalone-bottom-gap` CSS token contract for iOS home indicator spacing, a refactored `test-changed.mjs` script with workflow

Fusion-Task-Id: FN-3232
2026-05-03 05:57:25 -07:00
Fusion
1c47f91ddd feat(FN-3200): align settings heading indentation and gutters
Aligns the settings modal heading indentation and subsection heading underlines to a consistent CSS contract, adding tests to lock the alignment behavior across both desktop and mobile viewports.

Fusion-Task-Id: FN-3200
2026-05-02 05:38:34 -07:00
Fusion
1c0a5dfd6d feat(FN-3061): align remaining compact icon actions with shared sizing
Fixes FN-3061 aligning compact icon action sizing across Column, PiExtensionsManager, and ScheduleStepsEditor components for consistent UI dimensions.

Fusion-Task-Id: FN-3061
2026-05-01 13:00:37 -07:00
Fusion
17d45b8fe7 feat(FN-2980): add droid cli provider card to onboarding
Adds a new Droid CLI provider card to the onboarding flow, including a dedicated provider icon, simplified card CSS, and token fallback fixes for droid provider authentication. The changes wire the card into the ModelOnboardingModal and add test coverage for the card component, icon, and onboarding

Fusion-Task-Id: FN-2980
2026-05-01 05:15:19 -07:00
Fusion
444032c58d feat(FN-3042): scale board typography and improve theme selector accessibil
Completes Step 2 of FN-3042 by scaling board typography styles across TaskCard and QuickEntryBox components, adding a new CustomModelDropdown stylesheet, and introducing keyboard focus-visible styles for theme selector controls. The merge includes new regression tests for board font scaling, resolve

Fusion-Task-Id: FN-3042
2026-04-30 23:24:29 -07:00
Fusion
c5f35ab349 feat(FN-2994): merge fusion/fn-2994
Commits merged:
- fix(FN-2994): gate unavailable research workflow and humanize provider labels
- fix(FN-2994): polish research view form and history interactions
- feat(FN-2994): complete Step 5 — document research view architecture
- fix(FN-2994): align status-dot variant and hook/test conventions
- fix(FN-2994): address lint and typecheck issues
- test(FN-2994): cover research lifecycle actions and pending status
- fix(FN-2994): polish research actions and cited reader behavior
- feat(FN-2994): complete Step 3 — add lifecycle actions and task flows
- fix(FN-2994): ensure research enables header overflow gate
- feat(FN-2994): complete Step 2 — implement research view shell layout
- feat(FN-2994): complete Step 2 — gate research navigation and view
- feat(FN-2994): complete Step 1 — add research api surface and hook

Files changed:
docs/architecture.md                               |   7 +-
 docs/dashboard-guide.md                            |  21 ++
 packages/dashboard/app/App.tsx                     |  11 +-
 packages/dashboard/app/api/legacy.ts               | 143 ++++-----
 packages/dashboard/app/components/Header.tsx       |  29 +-
 packages/dashboard/app/components/MobileNavBar.tsx |  22 +-
 packages/dashboard/app/components/ResearchView.css | 247 +++++++++------
 packages/dashboard/app/components/ResearchView.tsx | 347 ++++++++++++++-------
 .../app/components/__tests__/ResearchView.test.tsx | 183 ++++++-----
 .../app/hooks/__tests__/useResearch.test.ts        |  66 ++++
 packages/dashboard/app/hooks/useResearch.ts        | 162 ++++++++++
 packages/dashboard/app/research-types.ts           |  43 +++
 packages/dashboard/app/styles.css                  |   4 +
 .../src/__tests__/research-routes.test.ts          |  65 ++++
 packages/dashboard/src/research-routes.ts          | 195 ++++++++++--
 15 files changed, 1111 insertions(+), 434 deletions(-)

Fusion-Task-Id: FN-2994
2026-04-30 03:43:21 -07:00
Fusion
b78dd3e055 feat(FN-3011): merge fusion/fn-3011
Commits merged:
- test(FN-3011): complete Step 2 — harden light-theme source assertions
- feat(FN-3011): complete Step 1 — restore global token scope
- fix(FN-3011): complete Step 3 — satisfy lint/test/typecheck/build gates
- test(FN-3011): complete Step 2 — harden light-theme source assertions
- feat(FN-3011): complete Step 1 — restore default light token ownership

Files changed:
.../app/__tests__/status-colors-theme.test.ts      | 100 +++++--
 .../app/components/CustomModelDropdown.css         |   6 -
 .../__tests__/ModelOnboardingModal.test.tsx        |   4 +-
 packages/dashboard/app/styles.css                  | 299 +++++++++++----------
 packages/dashboard/app/test/cssFixture.ts          |  11 +-
 5 files changed, 242 insertions(+), 178 deletions(-)

Fusion-Task-Id: FN-3011
2026-04-29 22:18:18 -07:00
Fusion
d250f866d6 feat(FN-2729): unify node status indicator with NodeHealthDot
- Resolve merge conflicts in InlineCreateCard and QuickEntryBox using the existing node picker UX
- Replace ad-hoc node status rendering with NodeHealthDot in task creation surfaces
- Keep advanced quick-create controls and portal-based dropdown behavior intact
- Preserve related dashboard styling and tests included in the staged squash

Fusion-Task-Id: FN-2729
2026-04-29 08:15:01 -07:00
Fusion
3263babe1b feat(FN-2729): merge fusion/fn-2729
- fix(FN-2729): silence ansi strip lint warning
- test(FN-2729): complete Step 10 — cover node health indicators
- feat(FN-2729): complete Step 9 — colorize CLI node status output
- feat(FN-2729): complete Step 8 — use NodeHealthDot in settings routing status
- test(FN-2729): align ListView node override option expectations
- feat(FN-2729): complete Step 7 — add bulk node status indicators
- fix(engine): prevent auto-merge cooldown loop on unresolvable conflicts
- feat(FN-2911): improve chat attachment compose and preview UX
- feat(FN-2921): merge fusion/fn-2921
- feat(FN-2909): merge fusion/fn-2909
- feat(FN-2914): merge fusion/fn-2914
- feat(FN-2902): merge fusion/fn-2902
- chore(release): v0.8.3
- Update changeset
- fix(tui): swap 3/4 panel hotkeys so they match the help text
- fix(tui): always show auth token and report accurate macOS memory usage

Fusion-Task-Id: FN-2729
2026-04-28 23:23:34 -07:00
Fusion
279d584072 feat(FN-2723): show node health in dashboard routing selectors
- Add node status indicators and labels to task creation, quick entry, task form, and settings node selectors
- Surface selected node health in list bulk-edit controls with status dot styling for online/connecting/offline/error states
- Update dashboard component CSS and shared styles for consistent node status presentation
- Include changeset documenting unavailable-node routing policy and default node behavior
2026-04-28 14:25:56 -07:00
Fusion
95f582f8ae fix(FN-2838): prevent mobile zoom on dashboard form inputs
- Add global `touch-action: manipulation` on html/body to reduce gesture-triggered zoom
- Set mobile input font-size to 16px for terminal, nodes, and scripts modal form fields
- Extend mobile CSS regression tests to assert the global touch-action rule
2026-04-28 14:25:55 -07:00
Fusion
6e65786bc5 fix(plugins): re-export probe symbols + declare plugin deps in dashboard
- Hermes / OpenClaw plugin index.ts now re-export `probeHermesBinary` /
  `probeOpenClawBinary` and their status types so the dashboard's
  `runtime-provider-probes.ts` façade can import them via the public
  package entry instead of deep paths.
- Dashboard `package.json` adds `@fusion-plugin-examples/hermes-runtime`,
  `…/openclaw-runtime`, `…/paperclip-runtime` as workspace deps so
  pnpm symlinks them into `packages/dashboard/node_modules/`. Without
  these, the new probe imports failed with "Cannot find module" during
  `pnpm typecheck`.

This clears 6 of the 9 outstanding typecheck errors. The remaining 3 are
in the in-flight Hermes plugin rewrite (runtime-adapter still imports
from a deleted `./pi-module.js`; the new `index.ts` calls a factory
with the wrong arg type) and should be resolved by the same change set
that landed the rewrite.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:17:54 -07:00
gsxdsm
3f25a08538 feat(dashboard): add Cerebras / Groq / Vercel icons + cover all pi-ai catalog providers
Audited the pi-ai built-in model catalog provider IDs against the
ProviderIcon registry and filled every remaining gap.

New icons:
  --provider-cerebras    (#f1592a)  → CerebrasIcon (concentric arcs)
  --provider-groq        (#f55036)  → GroqIcon     (lightning bolt)
  --provider-vercel      (text)     → VercelIcon   (triangle wordmark)

New aliases routed to existing icons:
  minimax-cn               → MiniMaxIcon
  azure-openai-responses   → AzureIcon
  google-gemini-cli        → GeminiIcon
  google-generative-ai     → GeminiIcon
  opencode-go              → OpencodeIcon
  vercel-ai-gateway        → VercelIcon

After this commit every provider id emitted by `@mariozechner/pi-ai`'s
register-builtins (anthropic, openai, openai-codex, google,
google-vertex, google-gemini-cli, google-antigravity,
amazon-bedrock, mistral, openrouter, fireworks, cerebras, groq,
huggingface, kimi-coding, minimax, minimax-cn, zai, xai, opencode,
opencode-go, github-copilot, azure-openai-responses,
vercel-ai-gateway) plus the user-curated set (qwen, lm-studio,
hugging-face, alibaba/tongyi, hf, lmstudio…) renders a brand icon
instead of falling back to the generic Cpu glyph.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 19:22:42 -07:00
gsxdsm
1f5a57ad4e feat(dashboard): add Qwen, LM Studio, Hugging Face, Mistral, Azure, Fireworks logos + Gemini aliases
Adds six new provider icons rendered as inline SVG, each backed by a new
brand token in styles.css:
  --provider-qwen          (Qwen / Tongyi)
  --provider-lmstudio      (LM Studio)
  --provider-huggingface   (Hugging Face)
  --provider-mistral       (Mistral AI)
  --provider-azure         (Microsoft Azure / Azure OpenAI)
  --provider-fireworks     (Fireworks AI)

Aliases registered:
  qwen / qwen-coder / alibaba / tongyi
  lmstudio / lm-studio
  huggingface / hugging-face / hf
  mistral / mistral-ai
  azure / azure-openai
  fireworks / fireworks-ai

Also extends the Gemini icon to cover every Google-product alias the
catalog throws at it: google-vertex, vertex, google-cloud-code,
cloud-code, antigravity (in addition to the existing google,
gemini, google-antigravity).

Tests cover each new mapping (and confirm the Gemini alias group all
resolves to the gemini icon with --provider-gemini color).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 19:07:32 -07:00
gsxdsm
8a88e23b9c feat(dashboard): UI polish pass — resizable modals, themed scrollbars, settings overhaul
Modal resize + size persistence
- Extract `useModalResizePersist` hook (ResizeObserver + localStorage),
  apply to Files, Git Manager, GitHub Import, Workflow Steps, Automations
  (ScheduledTasks), and Settings modals. Each gets `resize: both`, sane
  min/max constraints, and a unique storage key.
- Bump default heights so the modals feel less cramped (Git: 92vh,
  Workflow/Automation: 80vh, Settings: 80vh / 1100px).

Scrollbar theme
- Add a global `*::-webkit-scrollbar*` + `scrollbar-color` rule in
  styles.css so chat, document, system stats, file browser, usage
  indicator, etc. inherit the theme. Existing per-component overrides
  (.board, .column-body, .settings-sidebar, planning modal) still win.

Document view
- Collapse "Show hidden" toggle and search input onto the same row as
  the Project Files / Task Documents segmented control. Stack again
  below 768px.

Mailbox / Todos
- Match Todos header treatment to the Mailbox header (typography,
  padding, border).
- Add top spacing above Mailbox Inbox/Outbox/Agents tab bar so the
  vertical gaps balance.

Settings
- Wider, resizable, persisted Settings modal.
- Project Models description and Authentication panel get proper
  horizontal padding.
- Reorder project sidebar so "General" is first.
- Plugins page: clean margins, integrate refresh button, exclude
  bundled runtimes from the "Installed Plugins" list (they were
  appearing twice — once erroring, once in their own section).
- New "Updates" panel with auto-check toggle + "Check now" button
  (frequency control noted as needing a backend schema field).

Background sessions
- Fix stale "AI N" / planning-icon badge: `handleDeleted` in
  `useBackgroundSessions` now writes a tombstone, advances the
  timestamp guard, and broadcasts completion so the cross-tab
  sync store stops resurrecting the deleted session on the next
  merge tick. Added regression test.
- Re-fetch list on SSE reconnect so terminal events fired during a
  network blip don't get permanently lost.

System stats
- Refresh button uses correct single class (was getting both `btn`
  and `btn-icon`, which conflicted on padding/border).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 17:26:07 -07:00
Fusion
92b94594f3 feat(FN-2694): merge fusion/fn-2694 2026-04-27 08:45:49 -07:00