Commit Graph

1302 Commits

Author SHA1 Message Date
gsxdsm
31c8ea68b0 feat(FN-1018): isolate header brand spacing with .header-brand container
- Wrap logo + title in a .header-brand div for independent flex layout
- Replace hard-coded gap/margin with gap utilities for consistent spacing
- Add .header-brand CSS class with align-items: center and gap
- Add unit test verifying brand container structure
- Document .header-brand lockup pattern in README
2026-04-05 22:29:03 -07:00
gsxdsm
9a6592e299 chore: update stuck task handling and dashboard tweaks 2026-04-05 21:36:18 -07:00
gsxdsm
81e4eb002b feat(FN-943): add file browser context menu with copy, move, delete, rename, and download operations
- Add backend file operations (copy, move, delete, rename, download) in file-service.ts with workspace root protection
- Add API routes for file operations including directory download as zip via archiver
- Add client API functions in api.ts for all file operation endpoints
- Add context menu UI in FileBrowser component with operations dialog for confirming destructive actions
- Add CSS styles for context menu including danger items and dividers
- Add 33 FileBrowser context menu tests and 485+ file-service tests
- Fix pre-existing test failures in routes-diff, mission-e2e, and theme sync tests
2026-04-05 20:54:11 -07:00
gsxdsm
20621a19a6 feat(FN-1008): show full commit message when expanding remote commits
- Expand remote commit rows to display the full commit message text on click
- Add CSS styles for expanded commit message content
- Fix collapse tests that had duplicate commit message text in test data
2026-04-05 19:36:55 -07:00
gsxdsm
6a218ca4d8 fix(FN-1007): fix singular/plural for file count on task cards
- Fix file count label to show singular 'file' when count is 1 and plural 'files' otherwise
- Add comprehensive tests for TaskCard file count display
- Test edge cases: zero files, single file, multiple files, and missing attachments
2026-04-05 19:35:53 -07:00
gsxdsm
f90739c8ba fix(FN-1002): lower iOS Safari keyboard detection threshold for mobile reliability
- Lower virtual keyboard detection threshold from 150px to 80px to reduce missed detections on modern iOS Safari
- Add 30px noise filter to ignore minor viewport fluctuations that aren't real keyboard events
- Add comprehensive threshold boundary tests (80px/30px) covering edge cases for keyboard show/hide detection
2026-04-05 19:10:19 -07:00
gsxdsm
d8a8254071 feat(FN-995): add slate, ash, graphite, silver color themes
- Add four new neutral-palette themes (slate, ash, graphite, silver) to the theme type definitions and selector
- Add full CSS variable sets for each theme covering backgrounds, text, borders, accents, and UI element colors
- Add swatch preview entries in ThemeSelector component for the new themes
- Add comprehensive tests covering theme registration, selector rendering, and CSS variable application
2026-04-05 17:45:09 -07:00
gsxdsm
a44ee4e460 feat(FN-971): add mission status summary with progress bar to mission list
- Add MissionSummary type and getMissionSummary method to MissionStore
- Include mission summary data in GET /missions API endpoint
- Update frontend types and API client for mission summary
- Display mission status summary with progress bar on MissionManager list cards
- Add CSS styles for progress bar and summary display
- Update MissionManager tests for summary display
2026-04-05 17:19:48 -07:00
gsxdsm
14f2b2f358 feat(FN-961): add ChangesDiffModal for expanded task change viewing
- Create ChangesDiffModal component with unified/split diff views, syntax highlighting, and file stats
- Add expand button to TaskChangesTab to open changes in full-screen modal
- Add comprehensive CSS styles for diff modal, line numbers, and responsive layout
- Add full test coverage for ChangesDiffModal (rendering, diff modes, navigation, keyboard shortcuts)
- Add expand button tests to TaskChangesTab test suite
2026-04-05 14:03:18 -07:00
gsxdsm
d01e31c3b4 feat(FN-970): add mission badge to TaskCard with navigation to MissionManager
- Add mission badge UI to TaskCard showing linked mission name with colored indicator
- Wire up onOpenMission prop through App → Board → Column → WorktreeGroup → TaskCard
- Add CSS styles for mission badge with hover and click states
- Update MissionManager with openMission callback support for navigation from cards
- Add comprehensive tests for mission badge rendering, click behavior, and edge cases
2026-04-05 12:03:50 -07:00
gsxdsm
7215ed1bdf feat(FN-959): add --overlay-padding-top CSS variable to reposition modal on mobile keyboard open
- Add --overlay-padding-top CSS custom property to modal overlay styles
- Update TerminalModal component to apply dynamic padding-top when mobile keyboard is detected
- Add regression tests verifying overlay padding-top behavior with keyboard events
2026-04-05 11:19:38 -07:00
gsxdsm
ce124e0b74 test(FN-977): fix ListView tests referencing removed actions dropdown
- Update test comments to reflect controls shown directly after toggle (no actions dropdown)
- Resolve merge conflicts in comment-only differences between HEAD and branch
- Three comment blocks updated in ListView.test.tsx to match new QuickEntryBox UI behavior
2026-04-05 11:11:11 -07:00
gsxdsm
3d491ce992 feat(FN-973): move plan/subtask/refine buttons to disclosure panel in QuickEntryBox
- Redesign QuickEntryBox to use a collapsible disclosure panel for plan, subtask, and AI refine actions
- Add disclosure toggle button (lightbulb icon) that expands/collapses the action panel
- Move dependency picker and model overrides into the disclosure panel
- Update ListView and QuickEntryBox tests to cover new disclosure panel behavior
- Add CSS styles for disclosure panel transitions and layout
2026-04-05 11:07:58 -07:00
gsxdsm
f764df9d3f feat(FN-956): improve remote edit button usability on mobile and desktop
- Increase remote edit icon size from 12px to 16px for better tap/click targets
- Add mobile-specific CSS rules to show/hide remote edit buttons based on screen size
- Add comprehensive test coverage for mobile-friendly edit button visibility
2026-04-05 11:07:28 -07:00
gsxdsm
57706d3782 feat(FN-974): add agent preset selection UI to NewAgentDialog
- Define AgentPreset interface and presets array with role-specific configurations
- Add preset selection UI to NewAgentDialog component with visual cards
- Add CSS styles for preset cards, hover states, and selection indicators
- Add comprehensive tests covering preset rendering, selection, and keyboard interaction
2026-04-05 11:03:40 -07:00
gsxdsm
4659c1ef50 fix(FN-967): add activeTab to TerminalModal xterm init effect dependencies 2026-04-05 10:20:57 -07:00
gsxdsm
ee6aa8f183 feat(FN-883): add workflow step default-on support with task creation opt-out
- Add defaultOn field to WorkflowStep model, API endpoints (GET/POST/PATCH), and WorkflowStepManager UI
- Add skip-default-steps checkbox to TaskForm and NewTaskModal for explicit opt-out of default workflow steps
- Pre-select default workflow steps on new task creation forms automatically
- Add CSS styling for skip-default-steps toggle row
- Add comprehensive tests for WorkflowStepManager, TaskForm, and NewTaskModal components
- Add route tests for PATCH workflow-step endpoint and default selection logic
- Update README and task-structure reference docs
2026-04-05 10:20:42 -07:00
gsxdsm
b8bc5469ef refactor(FN-962): simplify QuickEntryBox by removing actions dropdown
- Remove the actions dropdown (⋯) and move Plan, Subtask, and other action buttons directly into the disclosure panel
- Simplify QuickEntryBox component by eliminating dropdown menu state management and nested menu logic
- Update QuickEntryBox tests to reflect the simplified UI with direct button access
- Remove dependency/model selection submenus previously housed in the actions dropdown
2026-04-05 10:12:52 -07:00
gsxdsm
80fc988410 fix(FN-962): clean up worktrees on retry and fix branch suffix mismatch
When tasks fail and retry, the old worktree lingered on disk and the new
worktree got a random name causing worktrunk to report it as unassigned.
Now: retry clears worktree/branch fields, removes old worktree from disk,
and createWorktree returns the actual branch name (including -2 suffixes)
so task.branch always matches reality.

Also fixes pre-existing test failures: Terminal WebSocket mock sessions
missing lastActivityAt, and TerminalModal keyboard overlap tests leaking
cached _initialViewportHeight between tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 10:09:14 -07:00
gsxdsm
6d6bec9eb9 feat(FN-909): redesign Agent Manager UI with CSS class approach and design tokens
- Replace AgentDetailView and AgentsView components with CSS class-based styling approach
- Integrate AI generation feature from FN-865 using CSS class methodology
- Fix CSS class verification test regex and add missing .agent-detail-info rule
- Refactor NewAgentDialog to align with new component structure
- Redesign Agent Manager UI using global design tokens for consistent theming
- Expand styles.css with comprehensive agent-specific CSS rules and design system variables
- Add agent-css-classes.test.ts to verify CSS class coverage and correctness
2026-04-05 07:26:30 -07:00
gsxdsm
559cbf6cdb feat(FN-888): implement actions dropdown in QuickEntryBox
- Refactor QuickEntryBox to use an actions dropdown (⋯) for advanced controls (deps, models, save)
- Move dependency picker and model selection (plan/executor/validator) into nested dropdown menus
- Add Plan (lightbulb) and Subtask (list) quick-action buttons to the input bar
- Update ListView and QuickEntryBox tests for new dropdown-driven UI
- Add CSS styles for dropdown menus, nested submenus, and action buttons
- Update AGENTS.md and README.md docs for the new QuickEntryBox layout
2026-04-04 23:48:00 -07:00
gsxdsm
d5e424ff5c fix(FN-872): fix mobile keyboard overlap in TerminalModal
- Detect real mobile keyboards via visual viewport resize events instead of relying on unreliable CSS env() variables
- Handle bothPortrait and landscape keyboard orientations with appropriate padding adjustments
- Add iOS Safari workarounds: scroll reset on open, touch-action isolation, inert body scroll blocking
- Add comprehensive regression tests (432 lines) covering viewport resize, orientation changes, iOS Safari quirks, and edge cases
- Update README with refined mobile keyboard handling documentation
2026-04-04 22:54:13 -07:00
gsxdsm
602534a1b7 feat(FN-865): add AI agent generation service with dashboard UI
- Add agent generation service with OpenAI/Anthropic support, streaming, and error handling
- Add POST /agent/generate API endpoint with SSE streaming and cost tracking
- Add API client functions for agent generation with AbortController support
- Create AgentGenerationModal component with live preview, streaming, and import flow
- Integrate AI Generate button into NewAgentDialog with configuration options
- Add comprehensive unit tests for service and component
- Add changeset for @gsxdsm/fusion minor bump
2026-04-04 22:53:10 -07:00
gsxdsm
31df9ee1dc feat(FN-855): align Git Manager remote fields with pencil icon edit affordance
- Replace previous edit affordance on remote fields with Pencil icon in GitManagerModal
- Extend GitManagerModal test suite with regression coverage for edit affordances
- Update README to document inline edit controls for Git Manager remotes
2026-04-04 21:34:35 -07:00
gsxdsm
20acbf7b60 feat(FN-928): scroll terminal into view when mobile keyboard opens
- Detect mobile viewport resize in TerminalModal to infer keyboard open/close
- Use visualViewport API and smooth scroll to keep terminal visible on mobile
- Add tests for scroll behavior with mobile keyboard open/close scenarios
2026-04-04 21:21:32 -07:00
gsxdsm
215b662d8a feat(FN-917): add 5 new color themes with full CSS, selector options, and tests
- Add 5 new color theme constants (ocean, forest, sunset, lavender, midnight) to types and index.html
- Add complete CSS theme definitions with color swatches for all 5 themes in styles.css
- Add 5 new theme options to the ThemeSelector component dropdown
- Add comprehensive tests covering all new theme options in ThemeSelector
- No breaking changes; all existing themes remain unchanged
2026-04-04 20:41:40 -07:00
gsxdsm
f3311d5aaf fix(FN-949): prevent bounce-back on Projects nav and show in mobile overflow
clearCurrentProject was triggering auto-reselect in useCurrentProject,
making the Projects button ineffective for single-project users. Added
explicit-clear flag to suppress auto-select. Also changed mobile overflow
menu to show Projects for single-project users (was gated to 2+ projects).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 20:30:24 -07:00
gsxdsm
1d1737c9c9 feat(FN-950): add useTaskDiffStats hook for consistent done file count in TaskCard
- Create useTaskDiffStats hook to extract and compute diff stats from task data
- Use hook in TaskCard component for consistent done file count display
- Add diffStats priority tests ensuring diff stats take precedence over steps
- Add useTaskDiffStats mock and comprehensive unit tests for the hook
2026-04-04 20:18:35 -07:00
gsxdsm
abe922f27d fix(FN-882): show file changes on done cards using modifiedFiles fallback
Done-column task cards failed to show file changes when mergeDetails was
missing (e.g. tasks moved to done without the merge flow). The executor
already captures modifiedFiles but TaskCard never read it. Add
modifiedFiles.length as a fallback between mergeDetails.filesChanged and
the worktree-based session files check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:52:25 -07:00
gsxdsm
6da0cdb090 feat(FN-949): add Projects button to Header for single-project users
- Add Projects button in Header that navigates to /projects for single-project users
- Add MultiProjectFlow test suite covering redirect, listing, navigation, and back-to-tasks flows
- Add Header tests verifying Projects button visibility and click behavior
- Add CSS styles for projects page with responsive grid layout and card states
2026-04-04 19:08:22 -07:00
gsxdsm
2841293245 fix(FN-948): restructure xterm init guard to allow reinit on modal reopen
- Fix terminal failing to render when TerminalModal is closed and reopened
- Restructure xterm initialization guard so Terminal instance and addons are recreated on subsequent opens
- Add regression test suite covering mount/unmount/remount, dispose behavior, and scrollback preservation
2026-04-04 19:01:46 -07:00
gsxdsm
753f2561cd feat(FN-947): show files-changed on done column task cards
- Extend useSessionFiles hook to fetch files for done column tasks
- Update TaskCard to display files-changed indicator on done column cards
- Add tests for useSessionFiles done column support
- Add tests for TaskCard files-changed display in done column
2026-04-04 18:54:13 -07:00
gsxdsm
d408cdb862 feat(FN-862): polish AgentListModal styling with responsive layout and tests
- Refactor AgentListModal with improved responsive layout, cleaner spacing, and polished visual design
- Add comprehensive test suite for AgentListModal covering rendering, interactions, and edge cases
- Update documentation to reflect modal styling improvements
2026-04-04 17:52:33 -07:00
gsxdsm
c85c3e4ecd feat(FN-837): add workflow step phase support with pre-merge and post-merge execution
- Add phase field to workflow step definitions (pre-merge vs post-merge) with persistence and API
- Execute pre-merge steps in executor before merge; post-merge steps in merger after successful merge
- Pre-merge failures block merge and keep task in in-review; post-merge failures are logged only
- Expose phase controls and phase-aware results in the dashboard UI
- Add changeset for the published @gsxdsm/fusion package
2026-04-04 17:36:18 -07:00
gsxdsm
bc900a1a8c feat(FN-900): replace ChangedFilesModal with files tab in TaskDetailModal
- Add initialTab prop to TaskDetailModal to open directly on a specific tab
- Replace onOpenFilesForTask with onOpenDetailWithTab across App, Board, Column, WorktreeGroup
- Update TaskCard click handlers to open detail modal with files tab instead of separate modal
- Delete ChangedFilesModal component and useChangedFiles hook (296 + 78 lines removed)
- Remove associated tests (ChangedFilesModal.test.tsx, useChangedFiles.test.ts)
- Add changeset for patch release
2026-04-04 17:26:51 -07:00
gsxdsm
b2a8d0c6cc feat(FN-907): add word wrap toggle to diff viewer in TaskChangesTab
- Add word wrap state and toggle button to TaskChangesTab component
- Add CSS styles for word wrap toggle in diff viewer
- Add tests for word wrap toggle functionality
2026-04-04 17:25:08 -07:00
gsxdsm
9da06dbbde feat(FN-906): add file navigation to changes tab and reduce diff margins
- Add file navigation dropdown/keyboard support to the TaskChangesTab component
- Reduce horizontal margins in diff display for better readability
- Add comprehensive tests for file navigation behavior
- Include changeset for patch release
2026-04-04 17:07:12 -07:00
gsxdsm
2363500ea5 feat(FN-887): widen model menu on mobile viewports
- Widen quick-entry Models menu to fill viewport on mobile (≤640px) with side padding
- Keep menu viewport-clamped to prevent horizontal crowding on small screens
- Update dashboard README with mobile model menu documentation
2026-04-04 16:31:30 -07:00
gsxdsm
e012abb637 fix(FN-880): prevent horizontal scroll in model dropdown
- Add overflow-x: hidden to dropdown container to prevent unwanted horizontal scrollbar
- Add min-width: 0 to flex children for proper text truncation
- Add tests for CustomModelDropdown overflow behavior
- Document the CSS fix in dashboard README
2026-04-04 16:21:53 -07:00
gsxdsm
d07bd52e12 feat(FN-834): add per-workflow-step model override UI and support
- Add model provider/model selection fields to WorkflowStepManager component
- Add dropdowns for choosing executor model per workflow step definition
- Wire executor to use per-step model overrides when configured
- Add comprehensive tests for WorkflowStepManager (340 lines)
- Add CSS styles for model selection UI in workflow step editor
- Update AGENTS.md and README.md with model override documentation
- Add changeset for published package bump
2026-04-04 16:00:53 -07:00
gsxdsm
47ccd20669 feat(FN-936): add modal description persistence for re-entry
- Add modalPersistence hook for saving/restoring modal state (description, goal) via localStorage
- Update PlanningModeModal to persist and restore description across re-opens
- Update SubtaskBreakdownModal to persist and clear description on resume flow
- Update MissionInterviewModal to clear goal after starting interview
- Add unit tests for modalPersistence hook
- Add integration tests for modal re-entry behavior across all three modals
- Add changeset for published package patch bump
2026-04-04 15:56:46 -07:00
gsxdsm
a5567ad45c feat(FN-925): add memoryEnabled setting with UI toggle and engine integration
- Add memoryEnabled boolean setting to core types and default settings
- Add Memory section toggle to SettingsModal dashboard UI
- Integrate memoryEnabled check in executor and triage engine prompts
- Add tests for settings UI, executor prompt behavior, and triage prompt behavior
- Update SettingsModal section count test for the new Memory section
2026-04-04 15:06:57 -07:00
gsxdsm
9981822afb feat(FN-884): update TaskDetailModal tests for Logs tab and Commits tab structure
- Update tab navigation tests to reflect Logs subview model and conditional tab assertions
- Fix tab nomenclature in step progress tests (Agent → Logs)
- Update TaskDetails docs to reflect Commits tab and Logs subview structure
- Update README references for dashboard and root
2026-04-04 14:59:23 -07:00
gsxdsm
611bfe46e8 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
dd8acb76b4 fix: resolve all 41 pre-existing dashboard test failures
- AgentsView: add missing fetchModels/fetchAgentStats mocks, update tests
  for new multi-step NewAgentDialog and ActiveAgentsPanel dual rendering
- routes-diff: rewrite tests to match new resolveDiffBase() two-dot syntax
- routes.test: fix spec/revise test — done→triage is valid per VALID_TRANSITIONS
- activity-feed CSS: replace hardcoded rgba(88,166,255) with color-mix token,
  fix var(--error) → var(--color-error)
- server/webhook/websocket tests: add getDatabase() mock for AiSessionStore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 13:17:03 -07:00
gsxdsm
fec4642003 fix(FN-911): close refine dropdown immediately on selection
- Close the refine model dropdown as soon as a selection is made instead of waiting for the next render cycle
- Add test verifying the dropdown closes immediately upon refine selection in QuickEntryBox
2026-04-04 11:37:44 -07:00
gsxdsm
94f035ca53 feat(FN-908): replace text input with CustomModelDropdown in NewAgentDialog
- Replace plain text input for model selection with CustomModelDropdown component in NewAgentDialog
- Add provider/model selection with grouped dropdown UI and search filtering
- Support editing existing agents with pre-populated model values
- Add comprehensive test suite (374 lines) covering rendering, interaction, and edge cases
- Wire up agent creation and editing flows to use the new dropdown for model selection
2026-04-04 11:34:26 -07:00
gsxdsm
a7c1d34fb9 feat(FN-905): add relative timestamps to agent log entries
- Display relative timestamps (e.g., '2m ago') alongside absolute timestamps in AgentLogViewer
- Add formatRelativeTime utility for human-readable time formatting
- Update existing and add new tests covering relative timestamp rendering
2026-04-04 11:32:00 -07:00
gsxdsm
9358483ca3 feat(FN-822): add visible stuck indicators on board and list with unified detection
- Unify stuck-task derivation using project settings (taskStuckTimeoutMs) instead of hardcoded values
- Thread taskStuckTimeoutMs through Board, Column, WorktreeGroup, and TaskCard components
- Add visual stuck indicator with pulsing animation on in-progress task cards
- Resolve merge conflicts with isSearchActive prop from main (both props coexist)
- Add taskStuck utility unit tests and update README with stuck indicator docs
2026-04-04 11:31:22 -07:00
gsxdsm
d1da9721a1 feat(FN-881): add bounded bootstrap timeouts and xterm init watchdog
- Add bounded bootstrap timeouts with stale-result guards to useTerminalSessions hook
- Implement xterm init watchdog with distinct recovery path for terminal initialization failures
- Refactor TerminalModal component with improved error handling and timeout recovery
- Add comprehensive test suites for useTerminalSessions hook and TerminalModal component
- Update dashboard README with watchdog documentation
2026-04-04 10:48:23 -07:00