Commit Graph

5201 Commits

Author SHA1 Message Date
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
7b59df34fb fix(FN-958): fix terminal idle disconnect with heartbeat tolerance
- Add heartbeat tolerance window to prevent false idle disconnects on terminal connections
- Increase client heartbeat interval from 30s to 45s for better idle tolerance
- Add session staleness detection on reconnect with idle state logging
- Add tests for heartbeat tolerance and client interval configuration
- Add changeset for patch release
2026-04-04 23:43:20 -07:00
gsxdsm
bc34001910 fix(FN-951): use baseCommitSha for done task diff base calculation
- Fix diff base resolution for done/merged tasks to use task.baseCommitSha as priority
- Add 3-tier fallback: baseCommitSha → merge-base with base branch → first parent
- Validate baseCommitSha is a valid ancestor before using it
- Use task.baseBranch (defaulting to main) for merge-base computation
- Update and expand test cases to cover new priority resolution logic
2026-04-04 23:21:39 -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
e5391a05a5 feat(FN-957): filter silent transient errors from executor and triage logs
- Add isSilentTransientError() function to detect noisy transient errors (ETIMEDOUT, ENOTFOUND, ECONNRESET, etc.)
- Filter silent transient errors from executor error logging to reduce noise
- Filter silent transient errors from triage error logging to reduce noise
- Add unit tests for isSilentTransientError covering all error patterns
2026-04-04 22:03:42 -07:00
gsxdsm
e8e77ec234 feat(FN-955): add 'request was aborted' to transient error patterns
- Add /request was aborted/i pattern to TRANSIENT_ERROR_PATTERNS for AI provider abort errors
- Cover case-insensitive matching (e.g., Anthropic streaming aborts)
- Add tests for positive matches, negative cases (bare 'abort'), and classifyError behavior
- Ensure abort errors classify as 'transient', not 'usage-limit'
2026-04-04 21:36:07 -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
2e51bd7eff test(FN-953): fix flaky sequential processing test with fake timers
- Replace real setTimeout delays with fake timers in sequential processing test
- Eliminates race conditions and timing-dependent test failures
- Improves test reliability and reduces test execution time
2026-04-04 21:32:32 -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
e7856dac35 docs(FN-923): update README with all current features and capabilities
- Rewrite README to reflect current feature set including multi-project support, central database architecture, and hybrid executor runtime
- Document SQLite storage, WAL mode, auto-migration from legacy file-based storage
- Add sections for CLI usage, dashboard features, settings hierarchy, workflow steps, and model presets
- Cover archive cleanup, backup automation, stuck task detection, and badge WebSockets
- Remove outdated content and consolidate into accurate, comprehensive documentation
2026-04-04 21:14:30 -07:00
gsxdsm
ca72ec81a3 fix(FN-952): activate projects after CLI registration
- Set project status to 'active' after registration in runInit (kb init)
- Set project status to 'active' after registration in runProjectAdd (kb project add)
- Set project status to 'active' after interactive registration in resolveProjectDirectory
- Add updateProject mock to init.test.ts, project.test.ts, and project-resolver.test.ts
2026-04-04 21:07:43 -07:00
gsxdsm
2516463901 feat(FN-902): add deterministic createAgentWithTaskDone helper and testing docs
- Add createAgentWithTaskDone helper for deterministic test patterns with task_done tool
- Rewrite restart integration tests to use the new helper instead of verbose mock setup
- Document task_done testing pattern in README with code example
- Reduce test boilerplate by encapsulating agent creation and tool stubbing
2026-04-04 21:07:14 -07:00
gsxdsm
7d273dc8a6 feat(FN-922): replace subtask size buttons with dropdown and improve modal UX
- Replace size selection buttons (S/M/L) with a clean dropdown in subtask breakdown dialog
- Increase description textarea height for better editing experience
- Clean up orphaned CSS from removed size button styles
- Fix fragile size selection test to use proper dropdown interaction
2026-04-04 21:04:39 -07:00
gsxdsm
6a64b1fd2e fix(FN-919): remove green tint from dashboard footer
- Remove green color tint from footer styles in dashboard CSS
- Simplify executor status bar theme test to remove green tint assertions
2026-04-04 20:57:15 -07:00
gsxdsm
6a1caa8f0b feat(FN-918): replace purple in-progress colors with cyan across all themes
- Replace purple/violet color tokens with cyan equivalents for in-progress task states
- Update all 6 theme definitions (default, ocean, forest, sunset, midnight, neon)
- Change in-progress background, border, text, badge, and glow colors from purple to cyan
- Update both CSS custom properties and direct color references in styles.css
2026-04-04 20:48:10 -07:00
gsxdsm
ee8d85471d fix(FN-891): stabilize flaky restart integration test assertions
- Replace exact createKbAgent call-count assertions with behavioral checks (toHaveBeenCalled, toBeGreaterThanOrEqual) to avoid flakiness from retry-with-new-session internals
- Add resume log entry assertions as stable behavioral guarantees for restart semantics
- Add testing guidance section to README for writing deterministic executor tests
2026-04-04 20:47:03 -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
deb2dcc683 test(FN-889): add regression tests for merger import chain and runtime export contract
- Add integration tests verifying export/import contract for merger restart scenarios
- Enhance regression coverage for the full merger import chain
- Add developer note in README on keeping runtime exports in sync with dist artifacts
- All tests passing, build verified
2026-04-04 20:19:13 -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
43a84a314b fix(FN-916): fix invisible edit icons in Git Manager Remotes panel
- Fix edit icon color in GitManagerModal Remotes section to use visible contrast color
- Add CSS rule for .git-manager-edit-btn to ensure icon visibility
- Changes affect GitManagerModal.tsx and styles.css
2026-04-04 20:17:03 -07:00
gsxdsm
809b836405 feat(FN-913): add CSS variable theming for buttons, toasts, logo accent, count flash, and CTA tokens
- Theme btn-primary with CSS variables across all color themes
- Theme toast notifications with color-info tokens
- Add logo-accent and count-flash animations using CSS variables
- Add CTA (call-to-action) design tokens to all color themes
- Add color-info variable to all color themes for consistent info-level styling
2026-04-04 20:08:01 -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
4c2be10d73 feat(FN-882): add loop detection recovery with compact-and-resume
- Add ContextLimitDetector to detect agent loops via repeated tool call patterns
- Implement compact-and-resume strategy: summarize conversation and restart agent from current step
- Add loop recovery to StuckTaskDetector with configurable attempt tracking and retry limits
- Extend executor with automatic loop recovery on context limit detection
- Add loop recovery support to pi executor with same compact-and-resume pattern
- Add comprehensive tests for context-limit-detector, stuck-task-detector loop detection, executor, and pi recovery
- Add changeset for patch bump to @gsxdsm/fusion
- Update README with loop detection and recovery documentation
2026-04-04 19:47:48 -07:00
gsxdsm
c0b1c2ae30 fix(FN-910): portal refine dropdown to escape column overflow
- Port the refine/AI dropdown in QuickEntryBox to use a portal so it renders outside the column container
- Add CSS styles for the portal dropdown positioning and layout
- Prevents dropdown from being clipped by overflow:hidden on board columns
2026-04-04 19:38:36 -07:00
gsxdsm
e4806715b0 feat(FN-945): show timestamps only at block boundaries in agent log
- Modify AgentDetailView to display timestamps only at block boundaries instead of every line
- Reduces visual noise in the agent log by grouping consecutive lines from the same block
- Improves readability of agent session output in the dashboard
2026-04-04 19:27:09 -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
648b054cb6 fix(FN-944): activate projects after registration in dashboard API
- Fix project registration endpoint to set status to 'active' after creating a project
- Ensure newly registered projects are immediately operational instead of stuck in 'initializing'
- Add comprehensive tests for project route activation behavior including status transitions
2026-04-04 18:48:11 -07:00
gsxdsm
2df3bdad4d feat(FN-941): add POST /api/agents/:id/runs endpoint for manual heartbeat runs
- Add POST /api/agents/:id/runs route to trigger manual agent heartbeat runs
- Accept optional { reason } in request body, logged to agent run
- Validate agent exists and return 404 for unknown agent IDs
- Return run result (success/failure) with heartbeat metadata
- Add comprehensive tests covering success, not-found, and error scenarios
2026-04-04 18:31:48 -07:00
gsxdsm
7b0e2a9c4c feat(FN-946): add orphaned branch scanning and automatic cleanup
- Add scanOrphanedBranches utility to worktree-pool for detecting fusion/* branches with no matching task
- Add cleanupOrphanedBranches to SelfHealingManager with dry-run support and task re-registration
- Wire branch cleanup into deleteTask and archiveTask so branches are removed when tasks are deleted or archived
- Add comprehensive tests for scanning, cleanup, and integration with delete/archive flows
2026-04-04 18:31:18 -07:00
gsxdsm
950c78c797 feat(FN-938): add feature triage, mission pause/stop/resume, and scheduler blocked check
- Add mission store methods for pausing, stopping, and resuming missions with proper state transitions
- Implement feature triage flow that evaluates and classifies mission features
- Add scheduler blocked-task check to prevent scheduling when dependencies are unmet
- Create dashboard mission management UI with pause/stop/resume controls
- Add mission API routes for triage, pause, stop, and resume operations
- Add e2e tests for mission routes and unit tests for mission store and scheduler
2026-04-04 18:03:03 -07:00
gsxdsm
a67bd31f3c fix(FN-895): compute diff from merge base for done tasks
- Replace git show with git diff from merge base to isolate only task-specific changes in done task diffs
- Find merge base between merge commit and its first parent to avoid showing unrelated main-branch changes
- Add fallback logic: try merge-base, then parent commit, then return empty diff
- Apply fix to both file list and individual file diff endpoints
- Add comprehensive tests for merge-base computation with various git scenarios
2026-04-04 17:58:38 -07:00
gsxdsm
4c04a7102b feat(FN-942): add resetAgent method and allow terminated→idle transition
- Add terminated→idle as a valid state transition in AGENT_VALID_TRANSITIONS
- Add resetAgent() method that clears lastError, taskId, and ends heartbeat runs
- Clear lastError automatically when transitioning away from terminated state
- Remove inline heartbeat lifecycle from updateAgentState (moved to resetAgent)
- Add comprehensive tests for state transitions, error clearing, and resetAgent behavior
2026-04-04 17:56:07 -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
a32b9508ce feat(FN-940): allow terminated agents to restart as active or running
- Remove blanket block on terminated→any state transitions in agent-store
- Add active and running as valid transitions from terminated state in types
- Update tests to verify terminated→active and terminated→running succeed
- Add tests for invalid terminated transitions (idle, paused) still throwing
2026-04-04 17:40:31 -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
da81737cc6 feat(FN-903): add middle truncation utility for file paths in dashboard
- Add truncatePath utility function with configurable segments and placeholder
- Apply middle truncation to file paths in ChangedFilesModal sidebar
- Apply middle truncation to file paths in TaskChangesTab
- Remove unused CSS truncation styles replaced by the new utility
- Add comprehensive test suite for truncatePath (106 tests)
2026-04-04 16:55:02 -07:00
gsxdsm
b4ed704a03 feat(FN-890): tokenized executor footer state backgrounds and accents
- Replace hardcoded hex colors in executor status bar CSS with CSS custom properties for state backgrounds and accents
- Add tests covering theme-aware CSS variable overrides for all executor states (idle, running, failed, etc.)
- Document the executor status bar theming in the dashboard README
2026-04-04 16:39:55 -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
e4e0cadcb3 fix(FN-937): prevent setIsSaving error on unmounted component
- Add mountedRef to track component mount state in TaskDetailModal
- Guard setIsSaving(false) in finally block with mount check
- Prevents React state update on unmounted component warning
2026-04-04 15:23:34 -07:00
gsxdsm
4dbb372668 feat(FN-926): filter out files with empty diffs from file-diffs endpoint
- Filter files where diff body is empty (e.g., binary files, unchanged) from the /api/tasks/:id/file-diffs response
- Add tests verifying empty diffs are excluded while non-empty diffs are preserved
- Reduces noise in the dashboard diff viewer by omitting irrelevant file entries
2026-04-04 15:19:48 -07:00