Commit Graph

40 Commits

Author SHA1 Message Date
gsxdsm
dd77c79718 feat(FN-1529): implement search query propagation to remote node data
- Add search query propagation so remote nodes receive and use query filters
- Update api-node.ts to accept and forward search query parameters
- Add useRemoteNodeData query key dependency for proper re-fetching on filter changes
- Add api-node.test.ts with tests for search query propagation
- Add comprehensive tests for App component including remote data filtering
- Document search query propagation pitfall in .fusion/memory.md
2026-04-10 02:59:38 -07:00
gsxdsm
cba41e68d6 feat(FN-1408): add node provider and remote node status integration
- Add NodeProvider and useNodeContext to App shell for centralized node state
- Add node selector dropdown and status indicator to Header component
- Wire remote node data and event hooks into task-facing views
- Update App.test.tsx mocks for new node context providers
- Add project memory learnings for node context wiring patterns
- Update dashboard guide documentation for node selection
2026-04-09 23:42:25 -07:00
gsxdsm
e1cd7e0876 feat(FN-1440): promote Authentication in Settings sidebar with globe icon
- Add Authentication section to Settings sidebar with globe icon
- Update SettingsModal to display Authentication link in sidebar
- Add corresponding tests for Authentication section visibility
- Update mobile settings tests to reflect new sidebar structure
2026-04-09 19:16:22 -07:00
gsxdsm
dcbad95fd6 feat(FN-1260): add full-text search for tasks and comments
- Add FTS5 virtual table with v21 database migration for task search
- Add searchTasks() method to TaskStore with FTS5 query support
- Add q= search parameter to GET /api/tasks route for server-side search
- Update useTasks hook and frontend API to support searchQuery prop
- Update Board.tsx and App.tsx to pass searchQuery through component hierarchy
- Add comprehensive tests for FTS5 index and searchTasks functionality
2026-04-09 10:17:02 -07:00
gsxdsm
7a9148d25d perf: speed up tests with parallel execution and fix type errors
- Add isolate: true to vitest configs for safe parallel test execution
- Simplify engine test script from 7 sequential runs to single parallel run
- Fix TypeScript type errors in Column, Board, WorktreeGroup, and App components
- Fix board-mobile test to match current TaskCard tap behavior
- Relax App deep-link test to handle React Strict Mode behavior
2026-04-08 23:53:14 -07:00
gsxdsm
2842088216 feat(FN-1238): add dashboard loading screen with animated loader component
- Create DashboardLoader component with pulsing Fusion logo and progress bar animation
- Add CSS keyframe animations for smooth loading states
- Gate initial App render with loader until dashboard data is ready
- Add comprehensive tests for DashboardLoader component and App loading behavior
- Update existing App tests to account for loader wrapper
2026-04-08 19:38:45 -07:00
gsxdsm
a47db4fa6b feat(FN-1206): promote missions to an inline top-level view
- Extend dashboard task view state and nav controls to include a persistent missions view toggle
- Render MissionManager inline in App project content and route mission/session navigation into the missions view
- Remove modal-based mission wiring from AppModals and useModalManager now that missions are no longer a modal
- Add inline MissionManager styling and update App/Header/tablet tests for the new missions navigation behavior
2026-04-08 15:33:19 -07:00
gsxdsm
8354a86a82 feat(FN-1196): support API-key providers in dashboard auth flow
- Wrap dashboard auth storage with API-key provider helpers derived from model registry providers
- Normalize provider display names and bridge set/clear/has API-key operations to AuthStorage credentials
- Expand route and onboarding tests for mixed OAuth/API-key states and API-key-authenticated setup paths
- Stabilize assignment-trigger heartbeat timing test by replacing fixed delays with waitFor assertions
2026-04-08 13:54:30 -07:00
gsxdsm
9219323bc0 feat(FN-1277): hydrate dashboard theme settings from backend
- Hydrate useTheme from global settings while seeding initial state from localStorage cache to prevent flash
- Add write-through theme persistence so setter updates local cache immediately and asynchronously saves via updateGlobalSettings
- Clarify Settings modal save behavior for intentional idempotent global theme writes
- Expand useTheme and App tests to cover backend hydration, fallback handling, and new global settings fetch expectations
2026-04-08 11:58:18 -07:00
gsxdsm
29255a4a6a feat(FN-1276): scope dashboard persistence by project
- Add a project storage utility with scoped key helpers and key inventories for global vs project state
- Scope dashboard/task view, list preferences, quick-entry drafts, agent/tree state, terminal tabs, usage view, and modal draft persistence to projectId
- Reload persisted UI state when project context changes so per-project settings and drafts do not leak across projects
- Update and expand dashboard tests, including new projectStorage coverage and scoped persistence regression fixes
2026-04-08 10:39:38 -07:00
gsxdsm
4097d9d250 feat(FN-1021): stabilize terminal first-open bootstrap and WebSocket recovery
- Harden TerminalModal bootstrap to handle invalid/expired sessions on first open
- Add WebSocket reconnection logic for terminal sessions that become invalid mid-stream
- Create useTerminal hook with robust session lifecycle management
- Create useTerminalSessions hook for multi-session terminal coordination
- Add comprehensive tests for TerminalModal, useTerminal, and useTerminalSessions
- Document terminal first-open reliability behavior in dashboard README
2026-04-07 00:20:12 -07:00
gsxdsm
fb5b97e134 feat(FN-812): add first-run model onboarding modal and API key provider support
- Add ModelOnboardingModal component with provider selection, API key input, and model verification flow
- Add API key authentication support to SettingsModal with clear-key functionality
- Trigger onboarding from App.tsx when modelOnboardingComplete setting is false
- Add comprehensive tests for ModelOnboardingModal and SettingsModal authentication
- Document model onboarding flow and API key auth in AGENTS.md and README
- Add CSS styles for onboarding modal, provider cards, and auth section
2026-04-04 14:44:06 -07:00
gsxdsm
84eacbd8d5 fix(FN-824): replace mobile board viewport-height with percentage fill
- Replace viewport-height CSS with percentage-based fill to prevent mobile footer overlap
- Add regression tests for mobile footer-safe layout in dashboard-footer-mobile-layout.test.ts
- Add App.test.tsx coverage for viewport height behavior
- Document mobile layout fix in README
2026-04-03 23:38:00 -07:00
gsxdsm
f1f98ba718 feat(FN-815): consume deep-linked task modal state on dismiss
- Update App.tsx to handle deep-linked task modal dismissal by cleaning up the URL query parameter
- Add comprehensive tests for deep-linked modal dismissal and URL cleanup behavior
- Document one-time deep-link modal behavior in README
2026-04-03 21:52:26 -07:00
gsxdsm
448762d1f6 feat(FN-813): add project-aware ntfy deep links
- Thread real project context (projectName, projectId) into ntfy notification deep links
- Dashboard deep-link URL now honors project context with /project/:name/task/:id pattern
- Update App.tsx routing to handle project-scoped deep link navigation
- Add project info to NtfyNotifier types and wire through notification payload
- Add changeset for published @gsxdsm/fusion package
- Add tests for notifier project context and dashboard routing
2026-04-03 21:34:39 -07:00
gsxdsm
603a04e312 feat(FN-802): route script launches through TerminalModal instead of ScriptRunDialog
- Route saved script launches from App.tsx directly into TerminalModal, removing the ScriptRunDialog component entirely
- Add openGeneration handling and initialCommand support to TerminalModal for reliable script execution
- Add openGeneration to initialCommand effect dependencies to prevent stale closures
- Remove 114 lines of now-unused styles.css rules related to ScriptRunDialog
- Update tests: replace ScriptRunDialog tests with TerminalModal execution tests, update App routing tests
- Update README to document terminal-based script launch behavior
2026-04-03 20:47:41 -07:00
gsxdsm
5afa6e301a fix(FN-784): close Scripts modal before async API call to prevent handoff race
- Close the Scripts modal immediately before making the async script-run API call, preventing the modal from interfering with the terminal handoff
- Add regression tests covering script-to-terminal handoff behavior (modal close timing, API call sequencing, error handling)
- Document the script-run modal handoff behavior in the dashboard README
2026-04-03 12:50:40 -07:00
gsxdsm
d55e6a4431 feat(FN-778): reserve layout space for executor footer
- Add CSS rules for executor status bar footer with safe-area padding
- Update App.tsx and AgentsView.tsx layout to accommodate footer space
- Add regression tests for footer-safe project layout (App.test.tsx)
- Add unit tests for ExecutorStatusBar component
- Document footer-safe dashboard layout behavior in README
2026-04-03 11:14:37 -07:00
gsxdsm
41adcda408 feat(FN-773): add dedicated ScriptRunDialog for saved script output
- Add ScriptRunDialog component with xterm.js terminal emulation and real-time streaming
- Align saved-script launches with backend contract (POST /api/scripts/:id/run)
- Wire dialog into App.tsx with open/close state management
- Add comprehensive styles for dialog overlay, terminal area, and action buttons
- Add unit tests for ScriptRunDialog and App integration
- Document ScriptRunDialog usage in dashboard README
2026-04-03 10:31:30 -07:00
gsxdsm
aa71687bb6 feat(FN-770): add quick-add favorite models to task creation surfaces
- Wire favorite model state into QuickEntryBox with star toggle and dropdown integration
- Add favorite model selector to Board and Column quick-add components
- Pass favorite models through ListView and App context to entry surfaces
- Add regression tests for QuickEntryBox, Board, Column, and ListView favorite behavior
- Update dashboard README to document quick-add favorite model support
- Remove unused recovery-policy module and dead code from executor/triage/scheduler
- Clean up unused types from core and simplify store methods
2026-04-03 08:14:16 -07:00
gsxdsm
05f2114743 fix(FN-000): scope dashboard project flows 2026-04-02 17:51:04 -07:00
gsxdsm
ac0e96e491 feat(FN-693): add projectId to NtfyNotifier for multi-project deep links
- Add projectId parameter to NtfyNotifier constructor and sendMessage method
- Include projectId in notification deep links for multi-project context
- Add unit tests for deep link URL construction with projectId in App.tsx
- Add unit tests verifying project ID handling in notifier
2026-04-02 10:27:49 -07:00
gsxdsm
566f531361 feat: rename data directory, add global project settings, multi-project CLI commands, and provider badge in model selector
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 09:10:42 -07:00
gsxdsm
2778027423 Removed unwanted files marked in .gitignore 2026-04-01 21:25:08 -07:00
gsxdsm
193f83074d feat(KB-659): merge kb/kb-659 (auto-resolved)
- test(KB-659): add agents view integration tests to App.test.tsx and search visibility tests to Header.test.tsx
- fix(KB-659): resolve merge conflict in types.ts and duplicate declaration in SettingsModal
- feat(KB-659): add agents view toggle to view selector
2026-04-01 15:24:50 -07:00
gsxdsm
79a711a8a2 fix(FN-678): preserve settings section state across reopen
- Add a shared settings section scope helper so the modal consistently resolves the active section
- Prevent the authentication auto-open flow from leaking into later general settings sessions
- Add regression coverage for reopening the settings modal after authentication and general entry points
2026-04-01 13:37:33 -07:00
gsxdsm
7f47013d13 fix(FN-673): harden dashboard task resync and Claude usage handling
- resync dashboard tasks after stream reconnects and when the tab becomes visible again
- add regression coverage for stale board recovery and usage-fetch edge cases
- replace direct Claude usage API calls with the CLI-based usage command
- document the dashboard resync safeguards and include a published package changeset
2026-04-01 13:01:52 -07:00
gsxdsm
91b3bbf564 feat(KB-659): add agents view toggle and merge dashboard updates
- Add the agents view toggle to the dashboard header and App view state
- Preserve multi-project dashboard behavior while resolving App merge conflicts
- Merge Header and App tests for agents view, search visibility, and deep-link handling
- Keep scripts, changed-files modal, and project overview integrations working together
2026-04-01 12:44:01 -07:00
gsxdsm
e016e16774 test(FN-686): fix pre-existing dashboard test failures
- App.test.tsx: Add mocks for useProjects/useCurrentProject, update localStorage keys for view-mode
- SetupWizard.test.tsx: Remove tests for non-existent features (auto-detect, review step), match simple wizard
- TaskDetailModal.test.tsx: Update tab count to 7, change 'Steering Comments' to 'Comments', add Changes tab
- WorkspaceSelector.test.tsx: Fix task prefix from KB- to FN-
2026-04-01 09:08:23 -07:00
gsxdsm
a9ccd86ece feat(FN-669): add ntfy deep link support with dashboard hostname config
- Add ntfyDashboardHost setting to GlobalSettings for dashboard URL\n- Generate deep links in ntfy notifications with Click header\n- Handle ?task= query param in dashboard for direct task navigation\n- Add hostname configuration UI in Settings modal\n- Add comprehensive tests for deep link generation and handling
2026-04-01 07:21:43 -07:00
gsxdsm
3f77d80096 feat(KB-330): rename internal packages from @kb/* to @fusion/*
- Rename @kb/core, @kb/dashboard, @kb/engine to @fusion/* namespace
- Update all import statements across 143+ files to use new package names
- Update workspace dependencies and root package.json references
- Fix bundler configurations (tsup, vite) for new package names
- Update test files and fix typecheck issues
- Add changeset file documenting the package rename
2026-03-31 13:33:44 -07:00
gsxdsm
4784b4bc8d feat(KB-164): unify list view task creation with board view modal
- Replace inline QuickEntryBox with NewTaskModal trigger in list view
- Wire ListView to open NewTaskModal via onCreateTask prop
- Remove standalone task creation logic from QuickEntryBox
- Update App component to pass modal handlers to ListView
- Simplify QuickEntryBox to pure quick-entry without inline creation
- Update tests to verify unified modal-based creation flow
2026-03-30 09:12:23 -07:00
gsxdsm
bf789f5c41 feat(KB-060): add model selection to task creation
- Extend task creation types, store persistence, and API payloads to accept executor and validator model overrides
- Add inline model selection to the dashboard create card with default normalization, retryable model loading, and focus-safe interactions
- Wire the list-view create flow through InlineCreateCard and style the dropdown to stay usable within the viewport on mobile and desktop
- Add store, route, app, list-view, and inline-create tests covering override submission, partial selections, and inline creation behavior
- Document the new creation-time model selection flow and include a published package changeset
2026-03-30 05:41:30 -07:00
gsxdsm
385739ee2c feat(KB-032): add Planning Mode for AI-assisted task creation
- Add PlanningModeModal component with interactive task planning UI
- Implement backend planning API with /api/planning endpoints
- Add PlanningSession class for managing planning state
- Integrate planning mode into dashboard with header button
- Add comprehensive tests for planning components and API routes
- Include AI agent structure for future planning automation
- Update README with Planning Mode documentation
2026-03-29 21:40:14 -07:00
gsxdsm
3b71d032a6 feat(KB-048): add collapsible list sections to dashboard
- Add section expansion state management with localStorage persistence
- Update section headers with chevron toggle controls
- Implement conditional task row rendering based on section state
- Add Expand All / Collapse All toolbar controls
- Add CSS styles for chevron rotation animation and section headers
- Add comprehensive tests for collapsible section behavior
2026-03-29 19:51:41 -07:00
Dustin Byrne
494de14820 feat(KB-184): change autoMerge default from false to true
- Update DEFAULT_SETTINGS in core types to set autoMerge: true
- Update initial state defaults in App and SettingsModal components
- Update test fixtures in App, Board, and SettingsModal tests
- Update kb-board skill docs to reflect new default
- Add minor changeset for the default change
2026-03-28 18:14:16 -04:00
Dustin Byrne
6ff64597d8 feat(KB-180): rename pause button titles from 'AI engine' to 'scheduling'
- Update Header pause button titles to 'Pause scheduling' / 'Resume scheduling'
- Update Header unit tests to assert new title strings
- Update App integration tests for engine pause flows to use new titles
2026-03-28 17:17:14 -04:00
Dustin Byrne
cac10af5e1 feat(KB-157): add soft-pause (enginePaused) alongside hard-stop (globalPause)
- Add enginePaused field to Settings type with soft-pause semantics (drain queue, don't kill agents)
- Gate scheduler, triage, auto-merge, and periodic merge retry on enginePaused
- Add Pause and Stop buttons to dashboard Header replacing single toggle
- Wire enginePaused state through App with optimistic toggle and unpause resume logic
- Add tests for scheduler, triage, dashboard CLI, Header, and App covering pause behavior
2026-03-28 16:30:23 -04:00
Dustin Byrne
50821fc820 feat(KB-145): add global pause button to halt all AI engine activity
- Add globalPause setting to core Settings type with default false
- Guard scheduler, triage, and auto-merge queue to skip work when globalPause is active
- Add pause/play toggle button in dashboard Header with optimistic UI and rollback on failure
- Add tests for scheduler, triage, Header, and App global pause behavior
- Include minor changeset for the new feature
2026-03-28 16:30:23 -04:00
Dustin Byrne
9348c50567 feat(KB-132): auto-open Settings to Authentication tab when unauthenticated
- Add initialSection prop to SettingsModal to allow opening to a specific tab
- Export SectionId type from SettingsModal for use by parent components
- Check auth status on App mount and auto-open Settings to Authentication tab when all providers are unauthenticated
- Reset initialSection on modal close so subsequent manual opens default to General
- Add comprehensive tests for auto-open behavior and initialSection prop
2026-03-27 20:10:41 -04:00