Commit Graph

1541 Commits

Author SHA1 Message Date
gsxdsm
df0edc6064 fix(FN-1052): fix modal height overflow with calc-based max-height
- Replace fixed max-height on modal overlay with calc(100vh - 4rem) to prevent content from overflowing viewport
- Add regression tests for ChangesDiffModal height constraint behavior
- Ensures modals stay within visible area regardless of content size
2026-04-07 10:47:03 -07:00
gsxdsm
7a01995465 feat(FN-1051): wire MissionAutopilot into dashboard startup
- Instantiate MissionAutopilot with TaskStore and MissionStore before Scheduler creation
- Pass missionAutopilot and missionStore to Scheduler constructor options
- Break circular dependency via setScheduler() after Scheduler construction
- Start autopilot in engine startup sequence, stop on graceful shutdown
- Add comprehensive tests verifying MissionAutopilot wiring in both test files
2026-04-07 10:40:05 -07:00
gsxdsm
c852620090 feat(FN-1022): add project memory bootstrap with agent integration
- Add project-memory module in @fusion/core with read/write/resolve helpers and upsert-on-store hook
- Bootstrap project memory during task creation (store) with structured task context
- Inject resolved project memory into executor and triage agent system prompts
- Add comprehensive tests for project-memory module, store integration, and agent prompt changes
- Document project memory architecture and usage in README
2026-04-07 00:41:19 -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
ab064ebc26 feat(FN-965): add per-task planning model override
- Add planningModelProvider and planningModelId fields to core Task type
- Update backend API validation to accept planning model fields on create/update
- Update frontend API client and TaskForm to handle planning model
- Add planning model selector row to ModelSelectorTab component
- Wire up planning model in TaskDetailModal edit mode with save support
- Update AGENTS.md with planning model override documentation
- Add comprehensive tests for ModelSelectorTab and API routes
- Bump schema version from 10 to 11
2026-04-06 22:55:25 -07:00
gsxdsm
6d98946aeb feat(FN-1040): add StepSessionExecutor for parallel step execution and integrate into executor
- Define StepSessionExecutor interfaces and utility types (FN-1039)
- Implement StepSessionExecutor class with parallel wave execution, conflict detection, and retry logic (FN-1039)
- Add comprehensive test suite for StepSessionExecutor (1225 lines) (FN-1039)
- Wire step-session execution branch into TaskExecutor with pause, stuck-kill, and global pause handlers
- Track active step executors per task for lifecycle management and cleanup
- Export StepSessionExecutor and types from engine package index
- Add executor integration tests for step session lifecycle (388 lines)
2026-04-06 22:43:31 -07:00
gsxdsm
ff8a8682c3 feat(FN-1036): add mergeDetails collection and storage in merger
- Add MergeDetails type import and mergeDetails field to TaskStore.updateTask signature
- Store merge details (commitSha, filesChanged, insertions, deletions, mergeCommitMessage, resolution info) after successful squash merge
- Capture best-effort commitSha even when branch is not found (mergeConfirmed: false)
- Add comprehensive tests for store updateTask with mergeDetails and merger detail collection
2026-04-06 21:36:31 -07:00
gsxdsm
1c232a17c4 fix(FN-1043): fix terminal mobile keyboard layout
- Defer fitAddon.fit() via requestAnimationFrame after CSS repaint to ensure container dimensions are settled
- Add overflow:hidden to keyboard-open CSS rule to prevent layout shift
- Add regression tests for xterm re-fit on mobile keyboard open/close
- Update terminal mobile keyboard documentation in README files
2026-04-06 21:35:46 -07:00
gsxdsm
75afc13d54 feat(FN-1041): add step session executor and execution settings UI
- Implement StepSessionExecutor class with parallel wave scheduling, conflict detection, and retry logic
- Define interfaces and utility types for step session execution (StepSession, StepSessionConfig, StepResult)
- Add Execution settings section to the dashboard SettingsModal for configuring step session behavior
- Add comprehensive tests for StepSessionExecutor (1225 lines) and SettingsModal Execution section
- Add changeset for @gsxdsm/fusion package
2026-04-06 21:34:19 -07:00
gsxdsm
e94c3c8c1c feat(FN-1039): add StepSessionExecutor for parallel wave-based step execution
- Define StepSessionExecutor interfaces and utility types (StepResult, WavePlan, ConflictInfo)
- Implement StepSessionExecutor class with parallel wave scheduling and conflict detection
- Add determineParallelWaves algorithm grouping steps by dependency waves
- Add executeStep, executeWave, and executeSession lifecycle methods
- Add comprehensive test suite with 1225 lines covering waves, conflicts, retries, and error handling
2026-04-06 21:24:17 -07:00
gsxdsm
343d9e4d32 feat(FN-1042): reduce horizontal margins in Changes tab
- Add negative margin CSS rule on .task-changes-tab to reclaim horizontal space from .detail-body padding
- Reduce file header padding from 10px to 6px for tighter layout
- Add test verifying root element has task-changes-tab class for margin scoping
- Add test verifying diff patches have no extraneous inline padding styles
2026-04-06 21:07:41 -07:00
gsxdsm
ddf7714ed7 fix(FN-1037): bump SCHEMA_VERSION from 9 to 10 so migration runs
- Increment SCHEMA_VERSION constant from 9 to 10 in packages/core/src/db.ts
- Ensures the auto-migration system detects the schema change and runs the new migration
- Matches migration logic that checks version delta against SCHEMA_VERSION
2026-04-06 20:27:15 -07:00
gsxdsm
2e902a1ffe feat(FN-990): add task spec rebuild endpoint and UI
- Add POST /tasks/:id/spec/rebuild API endpoint to regenerate task specifications
- Add rebuildTaskSpec client function in dashboard API layer
- Add respecify button to task detail modal for triggering spec rebuilds
- Add comprehensive tests for the spec/rebuild endpoint covering success, error, and edge cases
2026-04-06 18:56:39 -07:00
gsxdsm
0f4cfecebe feat(FN-1013): complete Step 1 — add runStepsInNewSessions and maxParallelSteps settings 2026-04-06 18:31:08 -07:00
gsxdsm
c18a92cee4 feat(FN-1035): replace hardcoded colors with theme-aware CSS variables in agent UI
- Replace hardcoded color values in AgentDetailView with --in-progress CSS variable
- Fix card size badges to use theme-aware CSS variables
- Replace hardcoded log entry colors with CSS variables in AgentLogViewer
- Remove duplicate CSS variable definitions from AgentListModal
- Update central styles.css with proper CSS variable declarations for agent UI
- Update AgentListModal tests to reflect removed duplicate CSS variables
2026-04-06 16:12:11 -07:00
gsxdsm
d490ea7038 feat(FN-1033): replace hardcoded colors with CSS custom properties in mission UI
- Add CSS custom properties for mission, slice, feature, and autopilot color tokens in styles.css
- Replace inline icon colors with CSS variables in MissionInterviewModal
- Replace hardcoded colors with CSS variables in MissionManager
- Add changeset for theme color tokens patch
2026-04-06 15:50:44 -07:00
gsxdsm
91672f3004 feat(FN-1032): replace hardcoded colors with CSS custom properties across dashboard components
- Add CSS custom properties and modifier classes for all status colors (open, closed, merged, draft, review, in-progress, etc.)
- Remove hardcoded hex colors from GitHubBadge, replace with CSS classes
- Remove hardcoded colors from PrSection, use CSS classes and Lucide icons
- Remove COLUMN_COLOR_MAP and inline styles from TaskCard, use CSS classes
- Add theme-safety regression tests ensuring components never use inline color styles
- Update existing GitHubBadge and TaskCard tests for class-based styling
2026-04-06 15:37:45 -07:00
gsxdsm
c6cae92efc refactor(FN-1034): replace hardcoded workflow step colors with CSS custom properties
- Define CSS custom properties for all workflow step colors in styles.css
- Replace inline styles in WorkflowStepManager.tsx with semantic CSS classes
- Replace hardcoded hex/rgba colors in workflow step manager section with var() references
- Improve maintainability and themeability of workflow step UI
2026-04-06 15:15:08 -07:00
gsxdsm
84ddb7cbd7 fix(FN-1031): replace var(--error) with var(--color-error) in project components
- Fix incorrect CSS token var(--error) → var(--color-error) in ProjectCard, ProjectHealthBadge, and ProjectSelector
- Add regression test suite (ProjectThemeTokens.test.tsx) covering all project components for correct token usage
- Ensures consistency with the design system's CSS custom property naming convention
2026-04-06 15:05:21 -07:00
gsxdsm
da6b9bbd98 feat(FN-984): add agent hierarchy tree view with parent-child relationships
- Add GET /agents/:id/children API endpoint to fetch child agents of a parent
- Create fetchAgentChildren API function with tests in dashboard client
- Implement useAgentHierarchy hook with recursive tree loading and expand/collapse
- Add tree view mode to AgentsView with hierarchical agent display
- Enhance AgentDetailView with parent info and expandable children section
- Add tree view CSS styles for connection lines and expand/collapse indicators
2026-04-06 13:53:14 -07:00
gsxdsm
dbb310ee67 feat(FN-982): add branch selection and commit viewing to Git Manager
- Add branch commit fetching API endpoint (GET /api/git/branches/:name/commits)
- Enhance BranchesPanel with selectable branches and commit diff viewer
- Add CSS styles for branch selection list and commit detail view
- Fix relativeDate utility to handle invalid/empty date strings gracefully
- Fix interview route ordering in mission-routes
- Add loading state for branch commit diff to prevent false error flash
- Add comprehensive tests for branch selection, commit viewing, and route handling
2026-04-06 13:10:28 -07:00
gsxdsm
8fa3401d82 feat(FN-1030): enhance workflow results tab with summary bar, collapsible output, and always-visible tab
- Make Workflow tab always visible in TaskDetailModal (not conditional on enabled steps)
- Add summary bar showing pass/fail/skip counts with color-coded badges
- Make workflow step output collapsible with expand/collapse toggle
- Add enhanced empty states for no steps configured, all skipped, and no results
- Add CSS styles for summary bar, collapsible output, and empty state variants
- Update TaskDetailModal tests to reflect always-visible Workflow tab
- Add comprehensive tests for WorkflowResultsTab new features
2026-04-06 03:40:40 -07:00
gsxdsm
76770e6e14 fix(FN-1028): add crypto.randomUUID fallback for schedule step ID generation
- Add fallback ID generation using Math.random when crypto.randomUUID is unavailable
- Update ScheduleStepsEditor component with robust step creation
- Add unit tests for fallback ID generation behavior
- Document fallback approach in Scheduled Tasks section of README
2026-04-06 00:09:21 -07:00
gsxdsm
2eae2834f4 feat(FN-1010): add mission start endpoint and UI button
- Add POST /api/missions/:missionId/start backend endpoint to start planning missions
- Add startMission() frontend API function in dashboard api.ts
- Add Start button in MissionManager component for planning missions
- Add integration tests for the startMission endpoint covering success, error, and edge cases
2026-04-06 00:08:39 -07:00
gsxdsm
1c76e25aa8 fix(FN-1024): fix done-task changes tab overcounting and add diff fallback
- Fix TaskChangesTab overcounting changes for done tasks by handling missing commit SHA gracefully
- Add /api/tasks/:id/diff endpoint with fallback for done tasks without merge commit info
- Add comprehensive tests for both TaskChangesTab component and diff route edge cases
- Document done-task Changes tab fallback behavior in README
2026-04-06 00:07:46 -07:00
gsxdsm
b125a75eb0 feat(FN-1017): enable proactive subtask splitting during triage and review
- Update triage agent to proactively suggest splitting large tasks into subtasks during specification
- Tighten reviewer guidance to flag undersplit tasks that should be broken down further
- Add comprehensive tests for proactive subtask creation in triage (192 lines)
- Add reviewer tests for undersplit task detection (12 lines)
- Update README with documentation on proactive subtask splitting behavior
2026-04-05 23:50:36 -07:00
gsxdsm
83688abecb fix(FN-1029): fix flaky test failures and keyboard event forwarding
- Add onKeyDown handler to CustomModelDropdown portal container for keyboard event forwarding
- Wrap SettingsModal empty state assertions in waitFor for async test stability
- Extract rate limiter state for proper test isolation in routes tests
- Add reconcileProjectStatuses to CentralCore mock for consistent test setup
- Improve /api/ai/summarize-title rate limiting with per-test isolation
2026-04-05 23:44:48 -07:00
gsxdsm
63388551d1 feat(FN-997): add startAgentRun API and auto-start heartbeat on agent activation
- Add startAgentRun() API function to start a heartbeat run for a given agent
- Auto-trigger startAgentRun when agent status transitions to active in AgentsView
- Add API tests for startAgentRun endpoint
- Add component tests for auto-start behavior on activation
2026-04-05 23:36:42 -07:00
gsxdsm
3cd8f8ed54 feat(FN-1025): harden mobile keyboard-open layout for terminal modal
- Add CSS rules to properly handle viewport height when mobile virtual keyboard is open
- Add regression tests for keyboard-open overlap detection
- Add TerminalModal test coverage for keyboard-related height contract
- Document mobile keyboard layout behavior in dashboard README
2026-04-05 23:26:59 -07:00
gsxdsm
2a3a320d19 feat(FN-980): add mission autopilot for autonomous slice progression
- Add MissionAutopilot class with state machine (inactive → watching → activating → completing)
- Add autopilot database schema: autopilotEnabled, autopilotState, lastAutopilotActivityAt columns
- Integrate autopilot with scheduler: handleTaskCompletion() triggers slice activation
- Add API routes: GET/PATCH /missions/:id/autopilot, POST start/stop endpoints
- Add autopilot toggle UI in MissionManager dashboard component
- Add retry logic with exponential backoff (up to 3 attempts) for slice activation
- Add background poll (60s) to detect stale autopilot missions
- Include changeset for @gsxdsm/fusion minor bump
2026-04-05 23:11:28 -07:00
gsxdsm
31437c5a74 feat(FN-1023): add project status reconciliation and apply to GET /api/projects route
- Add reconcileProjectStatuses() method to CentralCore that scans all registered projects and updates stale health records
- Integrate reconciliation into the GET /api/projects dashboard route so statuses are refreshed on read
- Add comprehensive tests for CentralCore reconciliation logic (144 lines)
- Add route-level tests verifying reconciliation runs before response (61 lines)
2026-04-05 23:09:22 -07:00
gsxdsm
6a0ea822d2 feat(FN-1020): add scoped compact spacing for TaskChangesTab file rows
- Add task-changes-file-list--compact CSS modifier class with tighter padding, gaps, and stat margins
- Apply compact modifier to TaskChangesTab file list container
- Add regression tests verifying compact class is present on TaskChangesTab and absent on CommitDiffTab
- Document compact spacing treatment in dashboard README
2026-04-05 23:08:27 -07:00
gsxdsm
992e525648 feat(FN-1016): add comment-aware triage generation and stale approval invalidation
- Include user comments as context during AI triage spec generation and spec review
- Invalidate stale spec approvals when new user comments are added after approval
- Add lastApprovedAt tracking to task metadata for approval freshness detection
- Add comprehensive tests for comment-aware triage, review, and stale approval logic
- Add changeset for published package and update README with feature documentation
2026-04-05 23:04:27 -07:00
gsxdsm
ec33691033 feat(FN-1019): reflow Changes-tab header stats and fix terminal scrollback
- Reflow Changes-tab header stats to a second line for better layout
- Add CSS styles for two-line header stats display
- Fix useTerminal hook to clear buffered scrollback after first subscriber replay
- Add tests for TaskChangesTab header stats rendering
- Update README description for Changes tab header
2026-04-05 22:58:28 -07:00
gsxdsm
904e4c8e00 feat(FN-1000): add token cap detection for agent task execution
- Add tokenCap to ProjectSettings with tokenCapEnabled flag, default 500K tokens
- Create TokenCapDetector class with usage tracking and cap enforcement
- Wire TokenCapDetector into executor agentWork() to auto-fail tasks exceeding cap
- Add token cap input fields to Settings Modal dashboard UI
- Add comprehensive unit tests for TokenCapDetector (174 lines)
2026-04-05 22:50:03 -07:00
gsxdsm
931093a4e2 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
d2b5d58699 Fix workflow step execution wiring 2026-04-05 22:28:22 -07:00
gsxdsm
2f96f2da0d fix(engine): fall back to provider template for unrecognized model IDs
When a configured primary/fallback model isn't found in the registry,
check if the provider has any known models and construct a model
on-the-fly using that provider as a template (mirroring the pi CLI's
buildFallbackModel logic). This lets any valid provider model ID work
(e.g. any OpenRouter model string) without requiring it to be in the
built-in or custom model list. Only throw if the provider itself is
completely unknown.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 22:17:30 -07:00
gsxdsm
f2c95fe517 fix(engine): load custom models.json in createKbAgent
Pass the user's models.json path to ModelRegistry so custom and
non-built-in models (e.g. openrouter/qwen/qwen3.6-plus:free) are
available when resolving the configured primary/fallback model.
The pi CLI was already passing this path; kb was not, causing
'model not found in registry' errors for any model not built-in.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 22:08:52 -07:00
gsxdsm
258cc34a7d feat(FN-1015): merge fusion/fn-1015 (auto-resolved)
- feat(FN-1015): add mobile responsive styles to AgentDetailView modal
2026-04-05 21:59:59 -07:00
gsxdsm
6b7e57720b fix(FN-1026): normalize formatResetAt to use calendar-day boundaries
- Fix formatResetAt to compute day difference from calendar midnight boundaries instead of raw millisecond division
- Prevents off-by-one day counts that caused inconsistent formatting near 7-day boundary
- Add comprehensive unit tests for formatResetAt boundary conditions (7-day edge, today, beyond 7 days)
- Fix pre-existing scheduler test assertion to use expect.objectContaining for worktree/baseBranch fields
2026-04-05 21:59:42 -07:00
gsxdsm
b670d8b3e3 chore: update stuck task handling and dashboard tweaks 2026-04-05 21:36:18 -07:00
gsxdsm
4de3be79ca fix(FN-1011): make file headers theme-aware in Files Changed tab
- Replace hardcoded fallback colors (#30363d, #161b22, #0d1117, etc.) with semantic CSS variables
- Use var(--border), var(--surface), var(--text), var(--text-muted), var(--card-hover), var(--bg)
- Ensures file headers, diff content, and toggle icons adapt to light/dark themes
2026-04-05 21:18:12 -07:00
gsxdsm
63beead394 fix: reserve and clear task worktrees correctly 2026-04-05 20:56:58 -07:00
gsxdsm
7ca715a366 fix(FN-1009): add gap spacing to btn-sm for icon-text alignment
- Add CSS gap property to .btn-sm class for proper icon-text alignment
- Ensures icon and text elements within small buttons have consistent spacing
2026-04-05 20:56:22 -07:00
gsxdsm
2719196703 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
fb6db73a89 fix(FN-1014): add fallback reset time for Claude session window when API omits resets_at
- When the Claude usage API omits resets_at for the 5-hour session window, fall back to using the full window duration as resetMs
- This enables pace calculation and reset text display even without an explicit reset timestamp
- Update existing test to verify fallback behavior (resetMs = 5h, resetText = 'resets in 5h')
- Add new test for pace calculation with fallback reset time
2026-04-05 19:45:17 -07:00
gsxdsm
9e499df124 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
9c4c6c06a0 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
f8be9765ba feat(FN-1005): add mission title caching, abbreviation, and display on TaskCard
- Add mission title abbreviation utility (truncate long titles with ellipsis)
- Add mission title caching to avoid repeated lookups per render
- Display abbreviated mission title as a badge on TaskCard component
- Add comprehensive tests for mission title display, caching, and edge cases
2026-04-05 19:19:19 -07:00