Commit Graph

1348 Commits

Author SHA1 Message Date
gsxdsm
818f5786bd 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
b9cb29cf63 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
64f617e0eb 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
ba90bad3dc 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
148b7c1c1e 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
f4a002ca46 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
8ad3a121b1 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
035efb6e66 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
5e6e1e8fe6 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
2b40605203 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
f12c11160e 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
bb97049d57 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
ffd12920cd 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
c5d2a7e989 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
d4971c2d4a 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
47c805cb18 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
44447af7a9 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
6ce2b7eaff 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
2a36b5b47a 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
70f43dcd14 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
ad68e66105 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
e28cbb1c1f 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
1348e78bc1 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
1ae3fc4a6a 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
e2e1da03cb 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
025b639d92 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
5f6f3ccf98 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
ca2905018e 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
0c969e2789 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
e105da2a6e 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
bc980926e0 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
f847dfc52d 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
d916628442 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
63fbeb8d37 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
e5497db55a 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
9a8d68fce8 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
c16c8b9965 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
4802f7fa5a 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
9f3991708e 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
3b796714d7 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
f0cd1ca9e3 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
9b3ff76554 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
b5750f3311 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
c0496c9d95 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
3bfaa6070e 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
4b6f4b75b0 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
a829a55edd 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
gsxdsm
773f22a620 chore(FN-939): rename pnpm workspace from kb to fusion
- Rename workspace name from kb-workspace to fusion-workspace in root package.json
2026-04-04 15:19:25 -07:00
gsxdsm
32ff52c694 fix(FN-920): improve error handling in subtask breakdown SSE stream
- Handle empty error messages in subtask-breakdown session by falling back to 'Unknown error'
- Fix backend SSE routes to coerce error data to string and handle missing message
- Improve frontend connectSubtaskStream to validate parsed error data before displaying
- Add tests for error display in SubtaskBreakdownModal component
2026-04-04 15:13:28 -07:00
gsxdsm
dbd79ecb6e feat(FN-934): add active planning session badge to Header
- Add badge indicator to Planning button showing count of active background planning sessions
- Integrate useBackgroundSessions hook in App and Header components
- Add badge styles with pulse animation for active session indicator
- Add comprehensive tests for badge rendering and session count display
2026-04-04 15:10:11 -07:00