Commit Graph

1647 Commits

Author SHA1 Message Date
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
ea43787218 feat(FN-892): add planning mode multi-task creation with Break into Tasks
- Add generateSubtasksFromPlanning function to generate subtasks from planning session key deliverables
- Add POST /planning/start-breakdown and POST /planning/create-tasks API routes
- Add startPlanningBreakdown and createTasksFromPlanning frontend API functions
- Extend PlanningModeModal with Break into Tasks UI and subtask editing (drag-and-drop, dependency validation)
- Add comprehensive tests for generateSubtasksFromPlanning with edge cases
- Document planning mode multi-task creation feature in AGENTS.md
2026-04-04 14:25:34 -07:00
gsxdsm
2c1538b7c2 fix(FN-927): always show relative duration for CLI reset times
The guard `if (!window.resetText)` prevented overwriting the raw CLI
text (e.g. "Resets Apr 9 at 8pm") with a relative duration because
resetText was already populated from the parsed CLI line. Remove the
guard so the parsed date is always converted to "resets in 3d 8h".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 14:20:32 -07:00
gsxdsm
85065ed509 fix(FN-930): fix terminal WebSocket reconnection stale closure bug
- Add activeTab and connectionStatus to the subscription effect dependency array in TerminalModal
- Ensures WebSocket reconnects properly when terminal tab is reactivated or connection status changes
2026-04-04 14:19:24 -07:00
gsxdsm
864296edc2 fix: pre-bundle xterm packages to resolve MIME type error in terminal
Vite's dev server was returning HTML error pages instead of JS for
dynamically imported @xterm/* modules, causing 'text/html is not a
valid JavaScript MIME type' failures during terminal initialization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 14:02:13 -07:00
gsxdsm
0c00194d79 fix: repair pre-existing engine test failures from missing pi-ai mock
Add @mariozechner/pi-ai mock to restart.integration.test.ts and
project-runtime.test.ts to fix module linking errors. Fix call count
assertions in executor and restart tests to account for the
retry-without-task_done behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 13:59:08 -07:00
gsxdsm
eef87a2aea feat: add background AI sessions with persistent storage and SSE streaming
Introduces ai_sessions table (schema v9), AiSessionStore, and background
session support for mission interviews, planning, and subtask breakdown.
Adds BackgroundTasksIndicator component, SSE-based progress streaming,
and dashboard API routes for session management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 13:42:02 -07:00
gsxdsm
4f2b840eb4 chore(FN-912): add changeset for terminal scrollback timing fix
- Add patch changeset documenting the terminal scrollback timing fix for @gsxdsm/fusion
2026-04-04 13:36:27 -07:00
gsxdsm
c609df7db5 feat(FN-924): add memory insights module with extraction settings
- Add MemoryInsightsEngine class for extracting insights from task memory
- Implement pattern, metric, trend, anomaly, recommendation, and summary extractors
- Add insight extraction settings fields (enabled, maxInsights, types, schedule) to ProjectSettings
- Export MemoryInsightsEngine and related types from @fusion/core
- Add comprehensive test suite covering all extractor types and edge cases (538 lines)
2026-04-04 13:25:22 -07:00
gsxdsm
13c13471d3 fix(FN-927): fix usage reset time parsing and display fallback
- Fix backend regex in usage.ts to correctly parse CLI date-based reset text format
- Add frontend fallback in UsageIndicator to display relative reset time when absolute date is unavailable
- Add tests for backend regex parsing (usage.test.ts)
- Add tests for frontend UsageIndicator component (UsageIndicator.test.tsx)
2026-04-04 13:22:55 -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
cf4fe0277d feat: add AI-driven mission interview system (Factory.ai-style planning)
Add a conversational AI interview flow to the missions screen that
interviews users to break down missions into milestones, slices, and
features with verification criteria at every level.

Backend: Replace stubbed interview logic with real AI agent integration
using createKbAgent, SSE streaming, and robust JSON parsing. Wire up
all 5 placeholder mission interview route endpoints (start, respond,
cancel, stream, create-mission).

Frontend: New MissionInterviewModal component with conversational UI,
thinking output display, question renderers, and hierarchical plan
review/edit. Integrated into MissionManager with "Plan with AI" button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 12:50:12 -07:00
gsxdsm
1b3eb7bf10 fix(FN-915): use getFusionDir() for agent storage location
- Add getFusionDir() method to TaskStore for resolving agent database path
- Update in-process-runtime to use getFusionDir() instead of hardcoded path
- Update dashboard routes AgentStore initialization to use getFusionDir()
- Add changeset for published package patch bump
2026-04-04 12:35:15 -07:00
gsxdsm
de074420d2 fix: defer stuck-kill requeue to executor finally block to prevent race
When the stuck task detector killed a task and immediately called
moveTask("todo"), the scheduler could re-dispatch the task before the
old execution's finally block cleared this.executing. The new execute()
call hit the guard and silently returned, stranding the task in
"in-progress" with no active session or worktree (seen on FN-810/FN-912).

Move the requeue responsibility from StuckTaskDetector.killAndRetry to
the executor's finally block, which runs after this.executing.delete().
The beforeRequeue budget check now runs before session.dispose() and its
result is passed via StuckTaskEvent.shouldRequeue → markStuckAborted().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 12:26:13 -07:00
gsxdsm
cfe770652b fix(FN-912): move scrollback buffer reset to WebSocket onopen handler
Move initialBufferRef reset from the beginning of connect() to inside
ws.onopen to ensure the buffer is fresh only when the new connection is
established. This prevents a race condition where the buffer could be
cleared before the WebSocket is ready, causing scrollback data to be
lost when terminal tabs are switched.
2026-04-04 11:48:38 -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
4602dc916e feat(FN-904): make dev script run build and typecheck before vite dev
- Update dashboard dev script to run vite build, tsc, and app typecheck before starting vite dev
- Ensures the project is fully built and type-safe before development server starts
2026-04-04 11:28:07 -07:00
gsxdsm
647bd75864 feat(FN-835): add script-mode workflow step execution with validation hardening
- Implement script-mode workflow steps that execute named commands from project settings with 2-minute timeout
- Harden PATCH /api/workflow-steps/:id validation to reject empty names, check resulting state validity
- Add comprehensive executor tests (420 lines) covering script mode execution, timeout, missing scripts, and prompt mode
- Add dashboard route tests for PATCH validation edge cases
- Update AGENTS.md and README.md with script-mode engine behavior documentation
2026-04-04 11:21:13 -07:00
gsxdsm
357086ab61 fix(FN-834): fix branch prefix drift, add merger branch guard, and fix test OOM
- Fix resolveBaseBranch to use stored branch name and consistent fusion/ prefix
  for both explicit deps and blockedBy paths (was using kb/ for blockedBy)
- Add main branch checkout verification in merger before squash merge to prevent
  feature code from landing on wrong branch lineage
- Align all branch prefix references from stale kb/ to fusion/ across executor,
  merger, store, and routes
- Fix executor test OOM by mocking merger fully, adding fake timers to retry
  tests, and switching vitest pool to vmThreads
- Update all test assertions to use fusion/ branch prefix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 11:11:59 -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
gsxdsm
4dc6ccfa78 refactor(FN-874): align TaskDetailModal tests and docs with unified Logs tab
- Rewrite TaskDetailModal tests to reflect the unified Logs tab (agent log + activity log merged)
- Update test assertions to match new tab structure and component behavior
- Update README to describe the unified Logs tab layout
2026-04-04 10:03:50 -07:00
gsxdsm
931e732335 feat(FN-893): suppress absolute reset timestamp for Claude weekly usage windows
- Hide absolute reset timestamp text when usage window is weekly (Claude's pattern) to avoid confusing countdown display
- Add isWeeklyWindow helper to detect 7-day window patterns in UsageIndicator component
- Add comprehensive tests for weekly window detection, timestamp suppression, and edge cases
2026-04-04 10:02:32 -07:00
gsxdsm
0207959552 feat(FN-826): add usage dialog with reset time visibility and Claude 5h tests
- Add Usage Dialog section to README dashboard features documentation
- Enhance reset time visibility in the UsageIndicator component
- Add comprehensive tests for Claude 5h usage scenarios (155 lines)
- Update dashboard styles for usage indicator improvements
2026-04-04 09:51:38 -07:00
gsxdsm
866b97a1c2 fix(FN-874): recover stuck-killed tasks reliably 2026-04-04 09:45:45 -07:00
gsxdsm
cbc87a43ca feat(FN-792): redesign Mission Manager detail hierarchy, actions, and responsive layout
- Redesign detail panel hierarchy with clearer visual structure and action layout
- Add responsive behavior for mission detail views across screen sizes
- Update MissionManager component with improved action buttons and layout
- Add comprehensive tests for MissionManager component (172 lines)
- Update Mission Manager description in README
2026-04-04 09:40:57 -07:00
gsxdsm
9bc8e79aad fix(FN-756): fix branch name prefix in prune tests and document stale worktree recovery
- Fix branch name assertion in executor test: use kb/ prefix instead of fusion/
- Add comprehensive tests for stale worktree and branch reference recovery (267 lines)
- Document stale worktree/branch recovery procedure in README
2026-04-04 09:26:39 -07:00
gsxdsm
0486e12c2e fix: retry with new agent session when task_done is not called
Instead of immediately failing when an agent finishes without calling
task_done, spawn a fresh session with a recovery prompt that asks the
agent to review the worktree state and complete the task. Only fail
if the retry also doesn't produce a task_done call.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 09:15:01 -07:00
gsxdsm
353be2ec5c docs(FN-808): document nested model menu and add regression tests
- Document nested model menu behavior in QuickEntryBox in AGENTS.md
- Add README section describing the model selection nested menu pattern
- Add regression tests for nested model menu submenu open/close behavior
2026-04-04 09:10:28 -07:00
gsxdsm
9900c2d115 fix: unify diff endpoints and show changed files on done task cards
- Server /tasks/:id/diff and /tasks/:id/file-diffs now both use
  resolveDiffBase() for consistent file lists across card and modal
- Both endpoints handle done tasks via mergeDetails.commitSha,
  returning structured { files, stats } from the merge commit
- TaskChangesTab uses fetchTaskDiff for all columns (no more
  fetchCommitDiff/parsePatch client-side path for done tasks)
- useChangedFiles hook simplified — server handles done tasks
- Done task cards show "N files changed" button using mergeDetails
- Updated tests for new unified data flow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:55:46 -07:00
gsxdsm
4542d580c1 feat(FN-860): display planning/triage model in Agent Log and Task Detail
- Add Planning/Triage model resolution and display in AgentLogViewer header
- Wire planning model resolution into TaskDetailModal with model info tab
- Add comprehensive tests for AgentLogViewer and TaskDetailModal model display
- Document planning/triage model display feature in README
2026-04-04 08:52:42 -07:00
gsxdsm
7349e502bc feat(FN-879): add portaled model menu with layering and filter-input stability
- Port model menu dropdown to a portal for proper z-index layering above overlays
- Stabilize filter input behavior inside the portaled menu
- Add CSS styles for portal-based menu positioning and layering
- Add comprehensive tests for the portaled QuickEntryBox model menu
- Add changeset for the published package fix
2026-04-04 08:52:05 -07:00
gsxdsm
6d1c6411d9 fix(FN-850): harden merge readiness and reopen done tasks 2026-04-04 08:35:19 -07:00
gsxdsm
e9fddc44cb fix: use merge-base for diffStat in merger and show files changed on done task cards
The merger was using `git diff HEAD..branch --stat` which includes
artifacts from other tasks when branches fork from older main commits.
Switch to `git diff $(merge-base)..branch --stat` so commit messages
only describe the branch's own changes.

Also surface the "files changed" button on done task cards using
mergeDetails, opening the same ChangedFilesModal with commit-backed
diffs (matching the Changes tab in the task modal).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:33:53 -07:00
gsxdsm
8ec7983c3c feat(FN-877): add dedicated changed-files list item styling with button reset and theme variables
- Add CSS styles for changed-files list items with button reset, layout, hover/focus states, and theme-aware colors
- Add regression tests for ChangedFilesModal structure and styling (file type indicators, click-to-open, checkbox behavior)
- Update dashboard README with notes on changed-files list styling conventions
2026-04-04 08:27:57 -07:00
gsxdsm
718057577b fix(FN-873): replace hardcoded error color with theme-aware CSS variable in ActivityFeed
- Replace var(--error) with var(--color-error) in ActivityFeed TYPE_CONFIG for consistency with theme system
- Add unit tests for theme-aware color variables in TYPE_CONFIG
- Add integration test verifying ActivityFeed renders error colors correctly
- Document theme-aware styling note in dashboard README Activity Log section
2026-04-04 08:11:43 -07:00
gsxdsm
86008ac875 feat(FN-866): add theme-aware status styling for changed files and refactor stuck-task detector
- Add theme-aware CSS classes for changed-file status badges (added, modified, deleted, renamed)
- Update ChangedFilesModal, CommitDiffTab, and TaskChangesTab to use theme-aware status classes
- Add comprehensive tests for ChangedFilesModal and TaskChangesTab status styling
- Refactor stuck-task-detector to extract StuckTaskConfig and simplify detection logic
- Clean up 370+ lines of redundant test code in stuck-task-detector tests
- Update dashboard README with theme-aware styling notes
- Pass throughChangedFiles option in executor for better diff handling
2026-04-04 07:53:40 -07:00
gsxdsm
b2e444ea88 feat(FN-850): add no-progress loop detection and improve stuck-task detector
- Add explicit no-progress loop detection signals to executor agent sessions
- Enhance stuck-task detector with configurable strategies (timeout, no-progress, combined)
- Add comprehensive test coverage for stuck-task detector (371 lines of tests)
- Remove modelFilter test utilities (198 lines of dead test code)
- Simplify modelFilter.ts by removing unused filtering logic
- Clean up dashboard server startup and minor README fix
2026-04-04 07:48:47 -07:00
gsxdsm
78e134c72a feat(FN-871): implement deterministic fuzzy matching for model filter
- Rewrite filterModels utility with deterministic fuzzy matching (no probabilistic ranking)
- Extract model filtering logic from TaskDetailModal into dedicated modelFilter.ts utility
- Add comprehensive regression test suite for fuzzy matching edge cases
- Remove inline model filter tests from TaskDetailModal test file
- Clean up unused CSS styles related to old model filter UI
- Document fuzzy model search behavior in dashboard README
2026-04-04 07:36:07 -07:00
gsxdsm
2e8e4a8a08 feat(FN-847): add conditional Workflow tab to TaskDetailModal
- Show Workflow tab for tasks with enabled workflow steps OR previous workflow results
- Add comprehensive tests for TaskDetailModal workflow tab visibility
- Add workflow tab styles including step result cards and status badges
- Clean up TerminalModal and useTerminalSessions (remove unused code and tests)
- Remove dashboard README section on terminal sessions
2026-04-04 07:23:18 -07:00
gsxdsm
7f4d757802 fix(FN-868): add terminal bootstrap error handling with retry and improve workflow step manager
- Add bootstrap error state and retry logic to useTerminalSessions hook to prevent indefinite 'Starting terminal' hang
- Add error/retry UI states in TerminalModal component with CSS styling
- Add tests for useTerminalSessions bootstrap error and retry behavior
- Refactor WorkflowStepManager with template support and improved UX
- Extract CSS from inline styles to stylesheet for terminal and workflow components
- Document terminal startup error handling and non-hanging guarantee in dashboard README
2026-04-04 07:11:40 -07:00
gsxdsm
ed3bcdf62a feat(FN-843): replace inline styles with themed CSS classes in workflow step manager
- Refactor WorkflowStepManager to use CSS classes instead of inline styles for theme-aware styling
- Add 332 lines of themed CSS classes to styles.css for workflow step components
- Add theme class structure tests for workflow step manager (197 lines)
- Simplify routes.ts by removing redundant file-diff and session-file route tests
- Update README docs with workflow step theme-aware styling note
2026-04-04 06:50:30 -07:00
gsxdsm
c2b30ce53a feat(FN-867): add task-scoped diff base via baseCommitSha
- Introduce baseCommitSha on sessions for task-scoped file diffs independent of shared worktrees
- Add /api/sessions/:id/files and /api/sessions/:id/file-diffs routes using baseCommitSha
- Update TerminalModal to consume task-scoped file list and diff endpoints
- Add regression tests for shared worktree scenario (multiple tasks in same worktree)
- Expand route tests for file diffs and session files with edge cases
- Clean up stale TerminalModal test helpers and simplify diff display styles
- Update README and route documentation for task-scoped diffing
2026-04-04 06:43:45 -07:00
gsxdsm
f8324599e1 fix(FN-842): fix new-tab xterm lifecycle for immediate output rendering
- Fix xterm terminal lifecycle so new tabs render output immediately instead of showing blank
- Refactor terminal management: move open/close logic from AgentsView to AgentDetailView per-tab
- Simplify AgentsView and AgentListModal to delegate terminal creation to individual agent tabs
- Update TerminalModal to handle xterm init/resize lifecycle correctly
- Add regression tests for new-tab behavior while modal is already open
- Update README terminal section with new-tab rendering behavior docs
2026-04-04 06:28:02 -07:00
gsxdsm
ee74c78422 feat(FN-864): add delete action for idle and terminated agents
- Expose delete action on idle and terminated agents in AgentsView and AgentListModal
- Update AgentDetailView to support delete with confirmation
- Update agent-related documentation in README.md and dashboard README
- Add/update tests for AgentDetailView, AgentListModal, and AgentsView delete behavior
- Remove outdated TaskDetailModal test
2026-04-04 06:14:35 -07:00
gsxdsm
ad14d7cf88 fix(FN-845): fix comment state propagation in dashboard modal
- Fix comment display state not propagating correctly in TaskDetailModal
- Remove unused AgentListModal and AgentsView components and their tests
- Simplify GitManagerModal by removing unused code paths
- Remove dead CSS styles from dashboard stylesheet
- Update README docs to clarify comment display behavior
- Add tests for TaskDetailModal comment state handling
2026-04-04 06:07:46 -07:00
gsxdsm
127b98e7f5 feat(FN-863): tokenize create-row input and select styling in Agents View
- Add tokenized input styling to AgentListModal create-row with themed placeholder and chip-like tokens
- Add custom select dropdown styling to AgentsView with color-matched appearance
- Add comprehensive tests for both AgentListModal and AgentsView token/select behavior
- Update Agents View README with tokenized input/select styling documentation
2026-04-04 06:01:35 -07:00