Commit Graph

817 Commits

Author SHA1 Message Date
gsxdsm
b4e67b4223 feat(FN-2120): merge fusion/fn-2120 2026-04-19 10:13:34 -07:00
gsxdsm
bbc0ce89be feat(FN-2119): merge fusion/fn-2119 2026-04-19 10:13:34 -07:00
Fusion
12f1e7fa32 feat(FN-2116): add start action for terminated agent cards
- Add a Start button for terminated agents in board cards alongside Delete
- Add a Start action for terminated agents in list cards with icon + label
- Reuse the existing state transition handler to move terminated agents back to active
- Extend AgentListModal tests to cover Start button visibility and start action behavior
2026-04-19 10:13:33 -07:00
Fusion
6e3503b811 feat(FN-2030): add project markdown explorer to Documents view
- Add recursive markdown file discovery in file-service with excluded directories and sorted metadata output
- Expose GET /api/files/markdown and wire a frontend API client plus useProjectMarkdownFiles hook
- Redesign DocumentsView with project/task tabs, search, task grouping, and desktop/mobile file preview flows
- Add coverage for markdown scanning and DocumentsView behaviors, and update useDocuments tests for new API usage
2026-04-19 10:13:33 -07:00
gsxdsm
3c80b8028e feat(FN-2109): merge fusion/fn-2109 2026-04-19 10:13:33 -07:00
Fusion
58bb0d41b7 fix(FN-2098): align no-task heartbeat guidance and stabilize flaky tests
- Update HEARTBEAT_NO_TASK_SYSTEM_PROMPT copy to emphasize inbox, memory, delegation, and heartbeat_done usage
- Expand heartbeat monitor tests to assert no-task prompt/tool alignment and preserve task-scoped prompt behavior
- Harden first-run and App view tests by using a safe cwd fallback and more robust async UI waits
- Add best-effort dashboard performance reporting hooks in App and useProjects via a new reportDashboardPerf API helper
2026-04-19 10:13:33 -07:00
gsxdsm
1cbf9e1015 test: enforce test-directory isolation across all packages
Introduce a shared test-utils module and global vitest setup that
guarantee tests never write to the real .fusion directory or leak temp
directories under /tmp.

Infrastructure:
- packages/core/src/__test-utils__/workspace.ts — tempWorkspace(),
  useIsolatedCwd(), trackForCleanup(), assertOutsideRealFusion() with
  auto-cleanup in afterEach.
- packages/core/src/__test-utils__/vitest-setup.ts — per-worker guard:
  chdirs each worker into an isolated tmp dir, wraps process.chdir to
  refuse the real .fusion, scopes tmp dirs under fusion-test-workers/
  (skips cwd change in thread-pool workers where chdir isn't supported).
- packages/core/src/__test-utils__/vitest-teardown.ts — globalSetup
  hook that wipes the shared parent even when workers are SIGKILLed.
- scripts/check-test-isolation.mjs + `test:isolated` / `test:check-
  isolation` scripts for CI.
- @fusion/test-utils alias + setupFiles + globalSetup wired into core,
  cli, engine, dashboard, tui vitest configs; matching tsconfig paths.

Test refactors (no behavior change):
- cli provider-settings, auth-paths, provider-auth — switch leaking
  mkdtempSync calls to tempWorkspace().
- core migration, first-run, store-backward-compat — replace manual
  process.chdir save/restore with useIsolatedCwd().
- tui fusion-context — replace 9 hardcoded tmp paths (collision-prone
  under parallelism) with tempWorkspace().
- dashboard useTheme, FileBrowser, TaskCard — resolve source-file reads
  against a PACKAGE_ROOT computed from import.meta.url instead of cwd,
  so tests don't depend on the process working directory.

Verified: full suite (~15,500 tests across 8 packages + plugins) passes
and the orphan-detector reports zero leaked temp directories after a
complete run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:41:47 -07:00
gsxdsm
49fea9ede7 feat(FN-2017): merge fusion/fn-2017 2026-04-18 23:22:20 -07:00
Fusion
049f356f88 feat(FN-2087): finalize canonical memory path migration
- Remove legacy .fusion/memory.md fallback references and normalize prompts/docs to .fusion/memory/MEMORY.md
- Stop legacy mirror writes and fallback reads in core memory backend and project memory flows
- Update engine worktree boundary checks and tests for canonical memory file handling
- Align dashboard memory/settings surfaces and route tests with canonical memory behavior
- Add model-favorites persistence test coverage for mission interview and new agent dialogs
2026-04-18 22:47:17 -07:00
gsxdsm
3cb7c226ec feat(FN-2106): merge fusion/fn-2106 2026-04-18 22:37:29 -07:00
gsxdsm
3a05ea0198 feat(FN-2092): merge fusion/fn-2092 2026-04-18 22:07:20 -07:00
Fusion
7a33b5c1dd fix(FN-000): harden mobile terminal focus capture for soft keyboard 2026-04-18 21:17:01 -07:00
gsxdsm
8bf0b7b4d8 feat(FN-2076): merge fusion/fn-2076 2026-04-18 20:56:12 -07:00
Fusion
d6b7d076d5 feat(FN-2075): merge fusion/fn-2075 2026-04-18 20:56:12 -07:00
Fusion
a63bca856e fix(FN-2060): preserve quick chat state on streaming errors
- Trigger onError for unexpected AbortError failures in streamChatResponse while ignoring user-initiated closes
- Keep quick chat user messages on send errors, reset streaming state, and reload messages from the server
- Persist partial assistant output (including thinking-only fallbacks) when AI processing fails mid-stream
- Add regression coverage for stream abort handling, quick chat error UX, and partial-response persistence
2026-04-18 20:56:12 -07:00
gsxdsm
1d8b7f2cb8 fix(FN-2116): show paused agents and cap vitest workers 2026-04-18 17:34:44 -07:00
gsxdsm
5a831a67bc fix(FN-2116): use sqlite-backed agent storage 2026-04-18 17:25:17 -07:00
Fusion
c047905dfb fix(FN-2061): remove agents tab from mobile nav
- Remove the agents tab button and showAgentsTab prop from MobileNavBar.
- Stop passing showAgentsTab from App to keep mobile navigation aligned with current feature exposure.
- Update MobileNavBar and mobile regression tests to remove agents-tab assertions and verify agents access via header fallback when mobile nav is disabled.
2026-04-18 16:12:30 -07:00
Fusion
017b0bb8da fix(FN-2057): move DocumentsView base styles outside mobile media query
- Move the core DocumentsView, document group, and document card styles to global scope so they apply on desktop and tablet
- Keep the max-width: 768px block focused on mobile-only agent and skills layout overrides
- Preserve existing design tokens and interaction states while restoring expected non-mobile DocumentsView styling
2026-04-18 16:01:23 -07:00
Fusion
5499405fc9 feat(FN-1986): improve skills content loading and mobile detail UX
- Normalize GET /api/skills/:id/content handling by decoding encoded IDs and returning consistent invalid-id and not-found responses
- Update readSkillContent to use stat-based file vs directory detection, read SKILL.md robustly, and list non-SKILL.md entries
- Refine SkillsView interactions to ignore toggle clicks, support explicit retry of failed content fetches, and show a SKILL.md fallback placeholder
- Add/adjust dashboard route, component, and mobile CSS tests to cover content route behavior, retry flow, and touch-friendly detail panel styles
2026-04-18 14:09:47 -07:00
Fusion
7affac3d4b fix(FN-2055): harden node test utilities and import resolution
- Convert seed-sample-nodes into a test-only helper and remove direct execution against the real central database
- Replace private-looking host examples with RFC 5737 test-net addresses in node connection docs and ConnectNodeModal expectations
- Add Vitest aliases for @fusion/core and @fusion/engine to stabilize cross-package test imports
- Load AgentReflectionService via local engine source path in in-process runtime to avoid alias resolution failures
2026-04-18 12:21:14 -07:00
Fusion
eccaed9e69 refactor(FN-2056): replace agent preset emojis with symbol glyphs
- Replace emoji role icons in AgentListModal, AgentsView, and NewAgentDialog with consistent geometric symbols
- Update agent preset catalog icons, including reviewer and template agent presets, to professional symbol-based glyphs
- Change the default unknown-role icon fallback from a robot emoji to a neutral symbol
- Update NewAgentDialog and agent-presets tests to assert symbol icons and broaden icon validation beyond emoji ranges
2026-04-18 12:14:43 -07:00
Fusion
fdc4426922 feat(FN-1971): Step 1 - Add streaming variant of generateFeatureSuggestions
- Extract generateFeatureSuggestionsCore() that accepts onText/onThinking callbacks
- Refactor generateFeatureSuggestions() to use core with no-op callbacks
- Add generateFeatureSuggestionsStream() that uses core with SSE callbacks
- Add SseCallbacks interface for streaming output types
2026-04-18 10:24:59 -07:00
Fusion
d7c165715e feat(FN-1957): add inbox/outbox sub-tabs to agent mailbox views
- Split agent mailbox responses into inbox and outbox arrays while keeping messages as an inbox alias
- Add Inbox/Outbox sub-tabs in MailboxView and MailboxModal with unread badge and agent-switch reset behavior
- Render tab-specific empty states and sent-message metadata in the outbox list
- Add dashboard styles and mobile overrides for agent mailbox sub-tabs
- Expand MailboxModal and MailboxView tests to cover sub-tab visibility, switching, reset, and unread badge behavior
2026-04-18 09:30:03 -07:00
Fusion
9974cc7019 feat(FN-1947): add file mention search and chat autocomplete
- Add file search API wiring in dashboard client/server with route coverage for /api/files/search
- Introduce useFileMention hook and FileMentionPopup component, integrated into ChatView and QuickChatFAB
- Resolve @file references in chat messages so referenced file content is included in AI context
- Add styling, mobile responsiveness, and focused tests for popup UI, hook behavior, chat resolution, and file services
2026-04-18 07:36:57 -07:00
Fusion
2fd586f6d0 feat(FN-1944): add Pi settings package management flow
- Add dashboard backend routes for Pi settings management with comprehensive route tests
- Add API client functions and tests for fetching and updating Pi settings endpoints
- Replace PiExtensionsManager with package management UI and add supporting dashboard styles
- Rewrite and fix PiExtensionsManager tests and include a changeset for @gsxdsm/fusion
2026-04-18 06:31:41 -07:00
Fusion
5edd49130c feat(FN-1913): add skill content viewer to SkillsView
- Add /api/skills/:id/content support in dashboard API routes and client exports for skill content types
- Extend the skills adapter with readSkillContent() to read SKILL.md and list supplementary files while handling invalid and missing skills
- Update SkillsView with expandable skill detail panels, lazy content loading, and loading/error/empty states without interfering with enable toggles
- Add comprehensive SkillsView, mobile CSS, and skills-adapter tests covering interaction flows and content parsing
2026-04-18 04:18:26 -07:00
Fusion
b80cae1b5a feat(FN-1850): aggregate projects across connected nodes
- Add /api/projects/across-nodes to merge local projects with online remote node project lists
- Expose fetchProjectsAcrossNodes and ProjectInfoWithSource, and switch useProjects to consume cross-node data
- Update ProjectOverview and ProjectCard with node badges, node count stats, and a node filter dropdown plus responsive styles
- Add server and dashboard test coverage for cross-node aggregation, filtering, and hook behavior changes
- Include a changeset for @gsxdsm/fusion minor release and preserve stale-channel SSE reconnect guards during merge
2026-04-18 03:08:00 -07:00
Fusion
03f4e7fe44 fix(FN-2045): keep quick chat open when selecting model override
- Add regression coverage for QuickChatFAB to ensure model dropdown selection does not dismiss the chat panel
- Verify selected model override is preserved and sent to createChatSession with provider and model id
- Add a patch changeset for @gsxdsm/fusion documenting the quick chat model-selection dismissal fix
2026-04-18 00:27:26 -07:00
Fusion
5a6f5b8edf feat(FN-2044): propagate model favorites through QuickChatFAB
- Extend QuickChatFAB props with favorite providers/models and favorite toggle callbacks
- Forward favorite state and handlers to the model override CustomModelDropdown
- Wire App.tsx favorite provider/model state and toggle handlers into QuickChatFAB
- Add QuickChatFAB tests for pinned favorite models, provider favorites, and toggle callback behavior
2026-04-18 00:22:05 -07:00
Fusion
d58825cbd2 feat(FN-2046): add accessible delete button to chat session items
- Add an inline delete button to each chat session item with an aria-label and Trash icon
- Prevent session selection when delete is clicked by stopping event propagation and opening the confirmation dialog
- Style the delete control to appear on hover/focus and remain visible on mobile for touch accessibility
- Add ChatView tests covering render behavior, confirmation flow, selection guard, delete action, and CSS visibility rules
2026-04-18 00:02:09 -07:00
Fusion
b3cc6047c3 fix(FN-2043): prevent quick chat from closing on model dropdown clicks
- Update QuickChatFAB outside-click handling to ignore events from the portaled model combobox dropdown
- Add a regression test that verifies clicks inside the model dropdown portal keep the quick chat panel open
- Keep outside body clicks closing behavior intact with test coverage for the control path
- Add a patch changeset for @gsxdsm/fusion describing the quick chat model dropdown dismiss fix
2026-04-17 23:51:17 -07:00
Fusion
d4004f53b6 feat(FN-2042): move Nodes and Schedules to desktop overflow menu
- Add a desktop overflow trigger/menu in Header with outside-click and Escape-key dismissal
- Move Nodes and Automation actions from inline desktop icons into overflow menu items
- Update Header tests to open the desktop overflow and verify visibility and click handlers for both actions
- Add themed desktop overflow menu styles in styles.css using existing spacing, border, radius, and shadow tokens
2026-04-17 23:39:40 -07:00
Fusion
3e095c1d22 feat(FN-2035): introduce PiExtensionsManager for settings UI parity
- Create a dedicated PiExtensionsManager component mirroring PluginManager interaction patterns
- Replace inline Pi extensions rendering in SettingsModal with the new manager component
- Add PiExtensionsManager styling in styles.css to match existing plugin manager layout and states
- Add component test coverage for PiExtensionsManager and update SettingsModal mocks/assertions
- Add a changeset for the pi-extensions UI parity release
2026-04-17 21:54:44 -07:00
Fusion
154053bf33 fix(FN-2026): prevent horizontal scroll in pi extension settings
- Add word wrapping to settings helper text so long values do not force horizontal overflow
- Hide horizontal overflow in the settings content pane while preserving vertical scrolling
- Keep the existing settings layout and animations unchanged
2026-04-17 21:22:23 -07:00
Fusion
94f202bbca feat(FN-2025): move secondary header views into overflow menu
- Add view-toggle overflow state and refs in Header with Escape and outside-click close behavior
- Replace inline Skills/Roadmaps/Insights buttons with a More views trigger and dropdown menu actions
- Style the view-toggle overflow menu and items for positioning, hover, and active states
- Update Header, tablet header controls, and App integration tests to validate overflow interactions and active view behavior
2026-04-17 20:57:26 -07:00
Fusion
53685f8213 fix(FN-2041): reduce Quick Chat FAB desktop edge margin
- Change QuickChatFAB desktop drag clamp margin from 48px to 8px while keeping the 4px mobile margin
- Update QuickChatFAB drag boundary tests and descriptions to assert the new 8px desktop behavior
- Add a patch changeset for @gsxdsm/fusion documenting the FAB edge margin reduction
2026-04-17 20:31:53 -07:00
Fusion
f50e62713e fix(FN-2022): correct insights status badge classes and mobile wrapping
- Fix status badge class interpolation in InsightsView so status-specific modifiers render correctly
- Add regression tests that assert generated and confirmed statuses map to the right badge classes
- Improve mobile insights layout by allowing action/meta rows to wrap and preventing title overflow
- Increase mobile icon button touch targets in insight item actions
2026-04-17 20:16:23 -07:00
Fusion
e6964068f7 fix(FN-2019): raise mobile toast position above bottom actions
- Update mobile .toast-container bottom offset to include nav, executor footer, standalone gap, safe area, and spacing tokens
- Keep toast notifications visible above bottom action buttons on mobile layouts
- Align utility-mobile CSS expectation with the new token-based calc expression
2026-04-17 19:44:37 -07:00
Fusion
55c92b6e91 feat(FN-2009): show waiting and thinking states during chat streaming
- Render streaming assistant bubbles in ChatView and QuickChatFAB as soon as streaming starts
- Show "Connecting…" before text arrives and switch to "Thinking…" when thinking output is present
- Render streaming thinking content in a collapsible details block in QuickChatFAB to match ChatView behavior
- Add muted italic waiting-state styles for chat and quick chat message content
- Add ChatView streaming state tests for waiting and thinking pre-text scenarios
2026-04-17 19:23:40 -07:00
Fusion
326ea9b1cf feat(FN-2033): gate agents view navigation behind feature flag
- Wire App.tsx to read experimentalFeatures.agentsView, hide agents view when disabled, and redirect agents taskView back to board
- Add showAgentsTab prop to Header and MobileNavBar and conditionally render agents navigation controls only when enabled
- Update App, Header, and MobileNavBar tests to cover enabled/disabled agents tab behavior and active-state interactions
- Adjust mobile and tablet regression tests to pass showAgentsTab where agents controls are expected
2026-04-17 19:17:24 -07:00
Fusion
2df3644443 feat(FN-2002): add markdown preview modes to agent content tabs
- Add edit/preview toggles for Instructions, Soul, and Memory tabs in AgentDetailView
- Render markdown previews with ReactMarkdown and remark-gfm, including empty-state placeholders
- Hide save actions during preview mode and reset preview state when agent content changes
- Add CSS for preview toolbars and panes, plus comprehensive AgentDetailView tests for tab preview behavior
2026-04-17 18:55:12 -07:00
Fusion
a26b37a212 feat(FN-2027): gate Insights and Roadmaps views behind experimental flags
- Add insightsEnabled and roadmapEnabled state in useAppSettings derived from project experimentalFeatures.
- Pass experimental feature visibility into Header and MobileNavBar and hide Insights/Roadmaps navigation controls unless enabled.
- Redirect users back to Board when a disabled Insights or Roadmaps view is active after settings load.
- Update Settings modal to always show labeled Insights and Roadmaps feature toggles alongside any custom experimental flags.
- Expand App, Header, MobileNavBar, and SettingsModal tests to cover gated rendering and behavior.
2026-04-17 18:47:40 -07:00
Fusion
ed9ecd112c feat(FN-2032): gate Header nodes button by nodesView flag
- Add optional showNodesButton prop to Header while keeping default behavior backward compatible
- Hide desktop and mobile overflow Nodes actions when showNodesButton is false
- Wire App.tsx to experimentalFeatures.nodesView, guard node toggle handling, and auto-close the overlay when disabled
- Add Header tests for desktop/mobile visibility and click behavior across showNodesButton states
2026-04-17 18:03:46 -07:00
Fusion
fe95537522 feat(FN-1990): promote quick fields in new task modal
- Add TaskForm renderBelowPrimary and hideDependencies props to support injected primary-section content
- Build NewTaskModal quick-fields for dependency selection and agent assignment above the More options panel
- Style quick-fields and mobile modal spacing with design tokens, including full-width triggers and 36px touch targets
- Expand modal and form tests to cover slot rendering, dependency hiding behavior, quick-fields visibility, and mobile CSS rules
2026-04-17 17:44:53 -07:00
Fusion
8fb9237dae fix(FN-1988): improve dashboard mobile view ergonomics
- Add AgentsView mobile overrides for content padding and wrapped control/title layouts
- Add comprehensive NodesView mobile CSS for header/action wrapping, compact stats grid, and section spacing
- Refine InsightsView mobile touch targets and count typography for action controls
- Add mobile CSS regression tests that assert AgentsView and NodesView rules inside max-width 768px media blocks
2026-04-17 17:21:00 -07:00
Fusion
e98eb9063c fix(FN-1987): move skills search to top and improve catalog fallback
- Move the shared skills search input to the top of SkillsView so it applies to discovered skills and catalog results
- Add client-side discovered skills filtering by name/path with a dedicated filtered-empty-state message
- Extend skills adapter fallback logic to use unauthenticated catalog search when authenticated requests return 400, 401, or 403
- Add dashboard component and adapter tests covering discovered filtering behavior and authenticated-endpoint fallback scenarios
2026-04-17 17:06:09 -07:00
Fusion
2f12ad0986 feat(FN-2031): gate skills view behind experimental feature flag
- Read experimentalFeatures from app settings and derive skillsView enablement
- Hide Skills view toggles in Header and MobileNavBar unless showSkillsTab is enabled
- Prevent direct navigation to skills view by redirecting disabled sessions back to board
- Update Header and MobileNavBar tests to cover enabled, disabled, and default-hidden skills tab behavior
2026-04-17 16:59:09 -07:00
Fusion
57736beb06 fix(FN-2011): keep chat input responsive during streaming
- Make useChat and useQuickChat sendMessage synchronous and update consumers to call it without awaiting
- Allow ChatView and QuickChatFAB inputs to remain editable while responses stream
- Keep quick chat send disabled during active streaming to prevent concurrent sends
- Add hook and component tests for synchronous sendMessage and non-blocking input behavior
2026-04-17 15:38:32 -07:00
Fusion
47c0dc41e1 fix(FN-2020): prevent duplicate retry toasts
- Remove the pre-retry info toast from TaskDetailModal retry handling
- Keep a single completion toast with updated success copy: "Retried {taskId}"
- Add regression tests to assert exactly one toast is shown on retry success
- Add regression tests to assert exactly one toast is shown on retry failure
2026-04-17 15:31:59 -07:00