Commit Graph

4220 Commits

Author SHA1 Message Date
Fusion
221ae06a81 feat(FN-2666): filter unauthenticated providers from usage results
- Update fetchAllProviderUsage() to exclude providers in no-auth status before caching and returning data
- Keep usage cache aligned with the filtered provider list so TTL reads match authenticated-only behavior
- Revise dashboard usage tests to assert empty/undefined provider results when credentials are missing
2026-04-27 01:54:25 -07:00
Fusion
e80850e7c9 feat(FN-2663): add cached update-check setting, APIs, and banner
- Add global updateCheckEnabled setting to core schema/types and wire dashboard command to cache update checks in the CLI
- Implement dashboard server update-check cache module plus REST routes for status and refresh behavior
- Add dashboard client hook, legacy API helpers, and UpdateAvailableBanner UI to show cached CLI update notices
- Cover update-check server routes, hook behavior, banner rendering, and route registration with focused tests
- Document update-check configuration and API behavior in architecture and settings reference docs
2026-04-27 01:40:07 -07:00
Fusion
90a28dfe23 feat(FN-2661): add keyboard-aware mobile chat layouts
- Add a shared useMobileKeyboard hook that tracks visualViewport overlap on mobile browsers
- Apply keyboard overlap CSS variables to QuickChatFAB so fullscreen mobile panels resize above the virtual keyboard
- Apply the same keyboard-aware sizing to ChatView mobile thread layout and auto-scroll messages when keyboard opens
- Expand ChatView, QuickChatFAB, and hook test coverage for mobile keyboard detection and viewport-resize behavior
2026-04-27 01:22:28 -07:00
Fusion
fca0fce605 feat(FN-2660): refine TodoView empty state and edit flow
- Reset list/item draft state when switching lists or entering a conflicting edit mode
- Hide the empty-state prompt while creating a new list and improve list accessibility semantics with role and aria-current attributes
- Add Escape handling to clear pending new-item text and improve mobile checkbox/scrollbar styling in TodoView CSS
- Expand TodoView tests to cover trimming behavior, draft clearing, empty-state transitions, and selected-list accessibility
2026-04-27 01:12:33 -07:00
Fusion
85bbf2cd43 feat(FN-2655): inline quick scripts into header terminal split-button
- Replace QuickScriptsDropdown with an inline Header implementation for terminal script actions
- Add split-button interaction logic in Header to support default-run and dropdown behavior
- Update Header CSS for split-button layout and mobile overflow handling
- Expand Header tests to cover split-button behavior and remove obsolete QuickScriptsDropdown tests
2026-04-27 00:39:28 -07:00
gsxdsm
cf12664e5a feat(FN-2644): merge fusion/fn-2644 2026-04-27 00:14:18 -07:00
Fusion
3fddbb73b3 fix(FN-2650): align dashboard createFnAgent aliases with static engine import
- Replace namespace engine imports with a named createFnAgent import in planning and chat modules
- Alias imported createFnAgent to engineCreateFnAgent and wire local createFnAgent binding to it
- Preserve existing injectable createFnAgent variable pattern while avoiding dynamic namespace access pitfalls
2026-04-27 00:13:06 -07:00
Fusion
70155b0f1d feat(FN-2640): align planning labels across agent log and tests
- Rename Planning/Triage label to Planning in Agent Log model metadata and related assertions
- Map triage agent badge display name to Plan while preserving existing labels for other agent roles
- Update TaskDetailModal and AgentLogViewer tests to match the revised planning terminology
- Stabilize dashboard TUI QR payload test by waiting for label and payload text separately with explicit timeouts
2026-04-27 00:09:53 -07:00
Fusion
1159a6de22 fix(FN-2646): restore quick chat render toggle visibility
- Remove generic btn btn-icon classes from quick chat render toggles so component-specific visibility styles apply
- Increase toggle icon size and adjust default muted color for clearer eye/eye-off affordance in assistant messages
- Add explicit focus-visible ring styling for keyboard accessibility on the render toggle control
- Extend QuickChatFAB regression coverage to assert class usage, SVG icon presence, and plain/rendered toggle state transitions
2026-04-27 00:02:35 -07:00
Fusion
19171bc98e feat(FN-2647): constrain board header width behavior
- Add desktop CSS constraints so column headers and titles can shrink without expanding board columns
- Prevent auto-merge toggle controls from shrinking to preserve stable header layout
- Add board CSS regression tests for the 6-column minmax grid template and header truncation rules
2026-04-26 23:53:22 -07:00
Fusion
864d55065b feat(FN-2648): merge fusion/fn-2648 2026-04-26 23:51:25 -07:00
gsxdsm
b6c6798aac feat(dashboard): clarify version-update loader copy
Update the version-hash reload loader message to "Updating to a new
frontend version..." so users understand it refers to the dashboard UI,
not a server/runtime upgrade.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:47:22 -07:00
gsxdsm
b1a3a3b6cf feat(dashboard): default review level to auto triage when unset
Review level select now treats the empty option as undefined (auto — let
triage decide) rather than coercing to 0/None, and relabels the option
accordingly. Widens onReviewLevelChange to accept undefined.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:45:42 -07:00
gsxdsm
c02154e399 fix(dashboard): align task card time indicator with stats tab
Done task cards now show agent execution time (sum of workflow step
durations) instead of wallclock time from creation to completion, matching
the Workflow runtime metric in the stats tab. Falls back to the previous
wallclock duration when no workflow timing data is available. Formatter
also updated to render sub-minute durations in seconds (e.g., 45.3s, 1m 30s)
to match the stats panel format.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:45:03 -07:00
Fusion
6d4bb9c3cf feat(FN-2631): revise task detail move split-button behavior
- Rework TaskDetailModal move controls to use split-button primary/secondary transitions with in-review-specific options
- Add dedicated split-button styling for divider, chevron menu, focus states, and mobile sizing using design tokens
- Keep in-review merge action visible while move options remain accessible through secondary menu actions
- Expand TaskDetailModal tests to cover split-button rendering, primary click behavior, and secondary transition menu contents
2026-04-26 23:43:11 -07:00
Fusion
acbe093d32 feat(FN-2645): add desktop resize support for Quick Chat panel
- Add panel resize state and pointer-driven drag handling to QuickChatFAB
- Wire resize behavior into component layout so desktop users can adjust panel dimensions
- Style resize handles and interaction affordances in QuickChatFAB.css
- Expand QuickChatFAB tests to cover resize lifecycle, constraints, and persistence behavior
2026-04-26 23:39:27 -07:00
gsxdsm
9d220717cb feat(dashboard): show "Updating to a new version..." on loader during version-hash reload
When the dashboard reloads because the build version hash changed, surface that
on the loading screen instead of the generic "Initializing dashboard..." so the
user understands why they bounced.

Carry the signal across the hard reload via a sessionStorage flag set in
versionCheck just before reloadOnce(), and consume-and-clear it once on the
loader's first render.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:35:18 -07:00
Fusion
0c6186521b feat(FN-2632): pin return-to-live control to bottom-right
- Update .agent-log-return-to-live to anchor on the right edge while staying sticky at the bottom
- Switch the control container to flex with fit-content width to keep compact button sizing
- Add mobile-specific right offset so spacing stays consistent at smaller breakpoints
2026-04-26 23:30:54 -07:00
Fusion
e1c7672695 feat(FN-2636): add plugin runtime mode support to agent management
- Add plugin runtimes endpoint in dashboard routes and legacy API client support
- Add runtime mode controls to NewAgentDialog with plugin runtime selection UX
- Add runtime mode display and editing support in AgentDetailView with matching styles
- Expand dashboard tests to cover new routes, modal behavior, and mobile agent view flows
2026-04-26 23:25:17 -07:00
Fusion
1062ba891a feat(FN-2643): refine scheduled tasks modal header and toolbar layout
- Restructure ScheduledTasksModal header markup to support updated title and actions grouping
- Add automation toolbar styling updates in ScriptsModal.css to match the new modal header layout
- Update ScheduledTasksModal tests to assert the revised header structure and action placement
2026-04-26 23:21:25 -07:00
gsxdsm
9514d12ef2 fix: dismiss background tasks even when session lock-conflicted
The X button in the footer's Background Tasks popover silently failed when
ai_sessions.lockedByTab pointed to a stale/closed tab: cancelPlanning et al.
returned 409, dismissSession set lockConflict and bailed before calling
deleteAiSession. Always proceed to delete; the dismissal tombstone already
prevents stale SSE/sync from resurrecting the session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:13:08 -07:00
Fusion
e79394846b feat(FN-2637): align usage window hide/show controls
- Remove the per-row eye toggle for already hidden usage windows so hidden rows no longer show a show/hide button
- Keep hide controls visible for active rows and preserve existing hide interactions
- Update UsageIndicator tests to assert hidden rows omit hide buttons and visible rows still render hide controls
- Drop obsolete per-row unhide test now that restoring hidden windows is handled through the provider-level show hidden flow
2026-04-26 23:07:56 -07:00
Fusion
ddf5b13c00 feat(FN-2635): add optimistic agent state updates across dashboard
- Apply optimistic start/stop state transitions in AgentsView and AgentDetailView action handlers
- Add optimistic behavior to AgentListModal while preserving rollback on API failure
- Expand unit test coverage for optimistic transitions and failure recovery in all three agent views
- Update dashboard TUI test expectation to align with the new agent state update flow
2026-04-26 22:59:45 -07:00
Fusion
567e869f7b feat(FN-2642): reorganize Dev Server layout for responsive preview
- Move preview panel markup to support a two-column desktop structure
- Add desktop-specific grid styling for configuration and preview panes
- Preserve existing mobile stacking behavior with responsive CSS overrides
2026-04-26 22:50:51 -07:00
Fusion
7e13ebff3a feat(FN-2633): anchor usage popover to header trigger
- Track and thread usage trigger bounds from Header through modal management to UsageIndicator
- Render desktop usage details as an anchored popover while preserving existing modal wiring behavior
- Extract usage indicator styling into a dedicated UsageIndicator.css and remove planning-mode style duplication
- Expand header and usage indicator tests to cover anchor rect propagation and popover behavior
- Stabilize CLI bundle output sqlite assertion for workspace test reliability
2026-04-26 22:33:06 -07:00
Fusion
2b65d1fe85 fix(FN-2634): remove surface-hover fallback usage in dashboard CSS
- Replace hover background fallbacks with direct var(--surface-hover) in QuickChatFAB and SettingsModal styles
- Tighten status-colors theme test to forbid var(--surface-hover, ...) fallback syntax
- Preserve token-based hover styling contract while preventing stale fallback patterns from reappearing
2026-04-26 22:29:50 -07:00
gsxdsm
a70e002b36 feat(FN-2628): merge fusion/fn-2628 2026-04-26 22:21:18 -07:00
Fusion
4f5b8f2260 feat(FN-2630): add vertical offset to project selector
- Update ProjectSelector styles to include a vertical offset adjustment
- Align selector positioning with the FN-2630 Step 1 UI layout requirement
2026-04-26 22:17:19 -07:00
Fusion
fc36fe6f91 feat(FN-2629): stabilize terminal modal font-size refit
- Enforce terminal xterm root height fill so inline fit heights do not collapse the modal terminal area
- Defer font-size-driven fit to the next animation frame and coalesce pending fits via pendingFitRef
- Remove eager refit calls from zoom keyboard/button handlers and rely on shared font-size effect scheduling
- Expand TerminalModal tests to assert font-size controls and keyboard zoom continue to trigger xterm refits
2026-04-26 22:14:03 -07:00
Fusion
c009427401 fix(FN-2577): preserve Todos access and TodoView interaction behavior
- Keep the view overflow trigger available when Todos is supported so the Todos view remains reachable
- Update TodoView list rows to use an explicit select button and align active-state assertions with the new structure
- Restore keyboard focus styling and mobile action visibility in TodoView CSS for accessibility and usability
- Harden CLI extension test cleanup with retry logic for transient ENOTEMPTY/EBUSY tempdir removal errors
2026-04-26 22:07:43 -07:00
Fusion
394960f251 feat(FN-2613): tokenize standalone mobile footer spacing
- Replace hardcoded mobile footer offset with --executor-footer-height in MobileNavBar content padding
- Move standalone display-mode behavior to a :root token override and remove global #root standalone padding
- Scope standalone bottom-gap application to mobile layout containers (project content and executor status bar)
- Update mobile nav and PWA CSS tests to assert tokenized spacing and scoped standalone rules
2026-04-26 22:00:36 -07:00
Fusion
b56571e082 feat(FN-2624): surface task token usage on task cards
- Render a compact token usage indicator in TaskCard footer with accessible labeling and token-aware styling
- Track token usage fields in the TaskCard memo comparator and expose a comparator test helper for regression coverage
- Add TaskCard tests for token usage rendering behavior and comparator invalidation on token usage updates
- Configure runtime plugin Vitest setups with an @fusion/engine source alias for reliable workspace test resolution
- Keep restart integration child_process spawn mocking aligned with execSync-driven merge verification behavior
2026-04-26 21:45:46 -07:00
gsxdsm
27e72190a6 feat(FN-2625): merge fusion/fn-2625 2026-04-26 21:36:23 -07:00
gsxdsm
a942b71de6 chore(release): v0.6.0
Version bump via changesets.
2026-04-26 21:27:49 -07:00
gsxdsm
a29bc688a8 test(core,dashboard): expand in-memory SQLite to more store tests
Extends the inMemoryDb opt-in established in 6e4797ff1 to single-instance
TaskStore/AgentStore/RoutineStore/PluginStore tests that were still
opening disk-backed fusion.db files. Cross-instance persistence tests
(open store A, close, open store B on same dir) and migration tests that
seed via a sibling Database instance keep their disk-backed stores —
swapping those would silently drop data between instances.

Sites flipped:
- core: store.test.ts (RunMutationContext, memory-toggle, diagnostics
  blocks), store-sort, settings-export, backup, plugin-loader,
  agent-instructions, agent-instructions-bundle, mission-store (all 10
  triage subtests), mission-planning-context.integration
- dashboard: routes.test.ts (Messaging routes block),
  session-reconnect, session-cross-tab, planning

Sites left disk-backed (cross-instance or sibling-Database dependency):
- run-audit*, task-documents, fts5-guard (sibling Database at same dir)
- mission-integration, mission-factory-parity (taskStore2 reopens)
- agent-store checkout-leasing (TaskStore + AgentStore at same dir)
- routes.test.ts AgentStore seed pattern (route handler opens its own)
- cli/extension.test.ts (makeCtx opens its own TaskStore)

All disk-backed tests continue to write to mkdtemp temp dirs — no live-db
risk introduced. Wall-clock impact: core 149s → 19s.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 20:56:31 -07:00
gsxdsm
80813dc73e fix(dashboard): restore engine namespace import in chat/planning
The auto-resolved FN-2614 merge swapped `import * as engine` for a narrow
named import but left dangling `engine.X` references, breaking the
dashboard build. Restore the namespace import and drop the now-orphaned
engineExports/ntfy helper consts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 20:32:22 -07:00
Fusion
0a1e441c79 feat(FN-2614): merge fusion/fn-2614 (auto-resolved)
- fix(FN-2614): restore workspace green verification gates
2026-04-26 19:26:25 -07:00
gsxdsm
e2bc644fd5 feat(FN-2623): merge fusion/fn-2623 2026-04-26 18:11:09 -07:00
gsxdsm
4e159cd028 feat(FN-2619): merge fusion/fn-2619 2026-04-26 17:56:09 -07:00
gsxdsm
635dba8cbb chore(release): v0.5.0
Manual version bump to 0.5.0 (changeset version produced 1.0.0 from a
single minor changeset against 0.4.1; that release was rolled back and
the 1.0.0 npm version deprecated).

Aggregates: status terminology refresh (planning/replan), Reviewer
rename, in-review pause behavior, dashboard-tui resize hardening,
dev-server experimental toggle fix, version reporting fix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:31:46 -07:00
gsxdsm
a1b0bc552c Revert "chore(release): v1.0.0"
This reverts commit 69e7d53bb3.
2026-04-26 17:26:56 -07:00
gsxdsm
69e7d53bb3 chore(release): v1.0.0
Version bump via changesets.
2026-04-26 17:25:49 -07:00
gsxdsm
58e3933b50 fix(dashboard): bind xterm onData once to prevent input doubling
Move the xterm.onData -> sendInput wiring (and the window resize listener)
from a separate post-init effect into initTerminal itself, so they share
the xterm instance's lifetime. Under StrictMode + Vite Fast Refresh the
separate effect could re-run and attach a second listener to the same
live xterm instance, producing per-character input doubling (every
keystroke -> two pty.write calls -> shell echoes "aabbcc"). The handler
now reads sendInput via a ref, so function-identity changes no longer
require re-binding. Resize listener is removed at every xterm disposal
site (tab switch, modal close, session-invalid replace, reinitialize).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:22:44 -07:00
gsxdsm
47514942e1 fix(merger): bump verification timeout to 10m and reap process group
The 5-minute exec timeout only killed the immediate shell, leaving
vitest/pnpm worker trees alive. Across retries these accumulated and
thrashed the host, starving the engine and TUI. Switch verification to
spawn-based runner with detached process group so timeouts SIGTERM the
whole tree (SIGKILL after 5s grace), and bump the wallclock to 10m for
larger workspaces. Stream-truncate output instead of relying on ENOBUFS.

Also fix two flaky/race-prone dashboard tests that were red on main and
blocking every in-review task at merge verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 16:05:40 -07:00
Fusion
c4f45abcb6 feat(FN-2613): merge fusion/fn-2613 (auto-resolved)
- fix(FN-2613): restore green CI after static engine import changes
- test(FN-2613): complete Step 3 — update mobile and standalone CSS assertions
- feat(FN-2613): complete Step 2 — move standalone token override to global styles
2026-04-26 15:53:50 -07:00
Fusion
45f6b0d458 feat(FN-2615): merge fusion/fn-2615 (auto-resolved)
- fix(FN-2615): restore workspace lint and test stability
2026-04-26 15:51:44 -07:00
Fusion
b634daafa3 feat(FN-2614): merge fusion/fn-2614 (auto-resolved)
- fix(FN-2614): restore workspace green verification gates
2026-04-26 15:43:07 -07:00
Fusion
ed2df90df6 feat(FN-2615): merge fusion/fn-2615 (auto-resolved)
- fix(FN-2615): restore workspace lint and test stability
2026-04-26 15:16:22 -07:00
Fusion
48401f321f feat(FN-2577): merge fusion/fn-2577 (auto-resolved)
- feat(FN-2577): complete Step 5 — update TodoView architecture docs
- test(FN-2577): address TodoView review feedback
- test(FN-2577): complete Step 3 — add TodoView component coverage
- feat(FN-2577): complete Step 2 — build TodoView component
- fix(FN-2577): correct TodoView heading token font size
- feat(FN-2577): complete Step 1 — create TodoView CSS
- fix(FN-2578): align TodoView placeholder addToast typing
- feat(FN-2578): complete Step 4 — route and preload TodoView
- feat(FN-2578): complete Step 3 — wire todos nav entries
- feat(FN-2578): complete Step 2 — add todos to view state types
- feat(FN-2578): complete Step 1 — add useTodoLists hook and tests
- test(FN-2576): complete Step 4 — add todo route coverage
- feat(FN-2576): complete Step 3 — add todo client API functions
- feat(FN-2576): complete Step 2 — register todo router
- feat(FN-2576): complete Step 1 — add todo routes module
2026-04-26 15:12:32 -07:00
gsxdsm
5937910e8d merge: node-pty -> @homebridge fork migration 2026-04-26 15:00:15 -07:00