Commit Graph

203 Commits

Author SHA1 Message Date
gsxdsm
fb9f92a0ca feat(FN-799): align file-diffs route with session-files merge-base strategy
- Switch /api/tasks/:id/file-diffs to use merge-base (three-dot) diff instead of two-dot diff, matching session-files behavior
- Rewrite file-diffs route tests with comprehensive coverage and add count/detail consistency regression tests
- Update mission-types to export MissionSummary and fix MissionManager imports
- Remove obsolete MissionManager.test.tsx and mission-e2e.test.ts
- Update README docs to clarify board card count matches changed-files viewer
2026-04-03 19:31:13 -07:00
gsxdsm
b8ccd55e12 feat(FN-804): align mission IDs with generated format and add validation
- Update mission route ID validation to accept generated ID format (mission-types.ts, mission-routes.ts)
- Add MissionManager component tests for generated ID handling
- Add mission E2E tests covering ID generation and validation flows
- Update TaskDetailModal to work with new mission ID format
- Update documentation (README, dashboard README) with generated ID examples
2026-04-03 19:19:05 -07:00
gsxdsm
10a6443483 feat(FN-801): show hidden files in workspace file listings
- Remove dotfile filtering from file-service so hidden files appear in workspace browser
- Update FileBrowserModal and TaskDetailModal UI to display hidden file entries
- Add UI/hook tests for hidden file entries in FileBrowserModal and useWorkspaceFileBrowser
- Add file-service unit tests for listing, reading, and filtering hidden files
- Update dashboard styles for hidden file display
- Document Files feature section in README
2026-04-03 18:50:05 -07:00
gsxdsm
af41f4424c feat(FN-800): auto-generate model preset IDs and remove manual ID editing
- Add slugify and generatePresetId utilities with collision handling for unique preset IDs
- Remove manual ID input field from preset editor UI in SettingsModal
- Auto-generate preset IDs server-side from name on creation
- Simplify Header tests by removing ID-related test cases
- Deduplicate tablet header controls tests by importing from shared Header tests
- Remove unused CSS rules for removed ID input field
- Update reviewer to pass through preset ID generation logic
2026-04-03 18:33:23 -07:00
gsxdsm
6382370549 feat(FN-794): raise auto-summarization threshold from 140 to 200 characters
- Change MIN_DESCRIPTION_LENGTH threshold from 140 to 200 in ai-summarize.ts
- Update shouldAutoSummarize logic and tests for new 200-char threshold
- Update UI copy in SettingsModal and API/routes references
- Update store tests to reflect the new threshold value
- Remove obsolete dashboard activity-log mobile layout test files and unused CSS
- Add changeset for patch bump
2026-04-03 17:58:07 -07:00
gsxdsm
057bd30645 feat(FN-772): fix terminal startup and prompt delivery reliability
- Fix terminal service to ensure prompt is reliably delivered on startup and reconnect
- Add regression tests for terminal reconnect and first-paint behavior
- Remove dead code: unused global-settings tests, styles.css, Header/MissionManager tests
- Update terminal README with reliable prompt delivery guarantee documentation
- Add useTerminal hook tests and TerminalModal component tests
2026-04-03 09:16:34 -07:00
gsxdsm
651ec03698 fix(FN-756): correct task card change counts 2026-04-03 07:29:42 -07:00
gsxdsm
d8f57e0d31 fix: agent log SSE always listens on default store, not project-scoped store
The agent log SSE endpoint was calling getOrCreateProjectStore(projectId)
and attaching the listener to the returned store. But the in-process
TaskExecutor is always bound to the default store passed to createServer,
so agent:log events were emitted on that store, never reaching the
project-scoped store's EventEmitter.

Fix: remove the getOrCreateProjectStore call and always listen directly
on the default store. Also simplifies the handler by removing the
unnecessary async IIFE (the listener can now be attached synchronously)
and eliminates the detachListener indirection.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 07:20:01 -07:00
gsxdsm
a7e2ca5adb fix(FN-756): reset recycled worktree baselines 2026-04-03 07:09:27 -07:00
gsxdsm
bed9fcb378 fix: resolve race condition in project-store-resolver breaking real-time dashboard updates
Concurrent SSE and API requests for the same projectId both missed the
cache (storeCache.set ran after await store.watch()), creating independent
TaskStore instances with separate EventEmitters. SSE listeners attached
to one instance while mutations fired on the other, so no events reached
the browser.

Fix: add a pendingCreations promise map that deduplicates concurrent
calls, ensuring all callers share the same in-flight promise and thus
the same store instance. Also clear pendingCreations in evictProjectStore
and evictAllProjectStores. Adds a concurrent-call regression test.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 07:08:47 -07:00
gsxdsm
df73a82917 fix(FN-771): reset disclosure state on task creation and preserve terminal sessions across reconnects
- Reset isDisclosureExpanded in QuickEntryBox resetForm so disclosure collapses after task creation
- Remove sticky disclosure persistence from QuickEntryBox component
- Preserve terminal sessions across transient WebSocket disconnects with buffer/replay
- Buffer and replay initial terminal state for prompt visibility on reconnect
- Update tests for non-persistent disclosure, terminal reconnect, and server routes
- Remove unused UsageIndicator tests and TaskDetailModal test cleanup
2026-04-03 06:47:40 -07:00
gsxdsm
3697bd0d71 feat(FN-767): add Claude session reset time to usage modal
- Preserve Claude reset timestamps in the usage data model (usage.ts)
- Display session reset time in the UsageIndicator dashboard component
- Add component comments explaining reset-time rendering logic
- Add styles for the reset time display in the usage modal
- Add tests for usage data model and UsageIndicator component
2026-04-02 23:32:22 -07:00
gsxdsm
95374b7c3d fix(FN-758): fix project-scoped real-time dashboard updates
- Add project-store-resolver to correctly scope SSE and WebSocket connections to the active project's TaskStore
- Fix shared resolver so multi-project setups deliver task events only to the right dashboard clients
- Add regression tests for project store resolver (routing, missing project, SSE integration)
- Remove unused import and clean up stale changeset
- Add changeset for published package patch bump
2026-04-02 23:11:47 -07:00
gsxdsm
f9dd3983c0 fix(FN-745): improve fallback model recovery 2026-04-02 21:50:41 -07:00
gsxdsm
dacd074700 fix(FN-745): fall back to CLI when Claude token refresh fails
- Replace hard error returns with fetchClaudeUsageViaCli() fallback when token refresh fails
- Cover three failure paths: refresh failure, no refresh token, exhausted retry attempts
- Add comprehensive tests for all token expiry and refresh fallback scenarios
2026-04-02 20:05:49 -07:00
gsxdsm
74c0f8fdc2 fix(FN-732): fix dashboard real-time updates and SSE pipeline
- Fix SSE event relay to properly broadcast task store events to dashboard clients
- Use named heartbeat events instead of SSE comments for reliable keep-alive
- Add missing event emission in core task store for state changes
- Add comprehensive tests for SSE pipeline, event emission, and UI hooks
- Remove broken useTerminal hook and AgentLogViewer tests, fix flaky test suites
2026-04-02 19:34:35 -07:00
gsxdsm
30f6413e15 fix(FN-728): fix token refresh endpoint, content-type, and client_id
- Fix refresh token request to use correct endpoint URL
- Set proper content-type header for token refresh requests
- Include client_id in refresh token payload
- Add tests verifying correct endpoint, content-type, and client_id in refresh flow
2026-04-02 19:11:07 -07:00
gsxdsm
971c7be983 fix(FN-724): implement OAuth token refresh for expired Claude tokens
- Add token expiry detection with 60-second buffer before API calls
- Implement refresh_token grant flow against Anthropic OAuth endpoint
- Cache refreshed access tokens in-memory only (never written to disk)
- Retry token refresh on 401/403 responses before failing
- Add comprehensive tests for token refresh, expiry, and error scenarios
2026-04-02 18:54:44 -07:00
gsxdsm
bce6ca94c2 fix(FN-714): increase Claude provider timeout to 75s and improve error diagnostics
- Increase Claude fetch timeout from 10s to 75s to accommodate retries and CLI fallback
- Include response body snippet in HTTP error messages for better debugging
- Improve Claude CLI timeout error message with actionable guidance
- Export withTimeout and CLAUDE_FETCH_TIMEOUT_MS for testability
- Add comprehensive tests for withTimeout, timeout constant, and error diagnostics
2026-04-02 18:40:24 -07:00
gsxdsm
05f2114743 fix(FN-000): scope dashboard project flows 2026-04-02 17:51:04 -07:00
gsxdsm
a4896f034e fix(FN-708): remove unused multi-project UI code and usage-limit references
- Remove DirectoryPicker component and its tests (unused multi-project UI)
- Simplify SetupWizardModal by removing directory picker integration
- Remove unused multi-project API endpoints, SSE handlers, and route definitions
- Clean up usage-limit detector and related engine references (executor, scheduler, triage)
- Fix 6 merge conflicts in usage.test.ts and update tests for simplified usage tracking
2026-04-02 13:31:43 -07:00
gsxdsm
7760bcc9cd feat(FN-694): add DirectoryPicker component and redesign SetupWizardModal
- Add browse-directory API endpoint and client for native folder selection
- Create DirectoryPicker component with manual input, browse button, and validation
- Redesign SetupWizardModal to use DirectoryPicker for project path selection
- Add comprehensive tests for DirectoryPicker and SetupWizardModal
- Remove bundled fusion skill and related extension/sync code from CLI package
2026-04-02 13:30:08 -07:00
gsxdsm
2acd2cfb17 fix(FN-703): fix overly broad usage limit pattern and add transient error retry
- Narrow 'insufficient' usage-limit regex to require quota/credit/balance/fund context
- Add transient error detection in executor and triage to retry instead of failing
- Improve scheduler pause/resume logging with actionable messages and resume confirmation
- Add SSE active connection counter for observability
- Add duplicate usage-limit pause suppression logging
2026-04-02 13:29:48 -07:00
gsxdsm
192387d3ff fix(FN-704): increase Claude CLI timeout to 60 seconds
- Increase Claude CLI usage fetch timeout from 30s to 60s
- Improve timeout error message with actionable context
2026-04-02 13:24:22 -07:00
gsxdsm
b7afe8d55a fix(FN-696): compute task counts from task store in health endpoint
- Compute live activeTaskCount, inFlightAgentCount, and totalTasksCompleted from the task store when the requested project matches the current dashboard
- Fall through to cached central DB health data for remote projects
- Add project existence check before health lookup, returning proper 404s
- Remove unused CSS styles (20 lines deleted from styles.css)
2026-04-02 13:19:24 -07:00
gsxdsm
ae2cba17a9 feat(FN-684): complete Step 5 — add /api/executor/stats endpoint 2026-04-02 10:43:47 -07:00
gsxdsm
6daf95bbb3 fix(FN-679): use merge-base diff in modal changes tab
- Updated /tasks/:id/diff endpoint to use merge-base comparison
- Changed from HEAD~1..HEAD to ...HEAD syntax
- Added fallback to HEAD when merge-base fails
- Verified fix matches /tasks/:id/file-diffs endpoint pattern
2026-04-02 10:25:57 -07:00
gsxdsm
890c413b5a feat(KB-643): add Dashboard Scripts UI feature
- Add scripts field to ProjectSettings type for custom dashboard scripts
- Update ScriptsModal with improved UI for script management
- Add QuickScriptsDropdown component for quick script access
- Implement scripts API routes for CRUD operations
- Update CLI with multi-project commands (project add/remove/list/show/set-default/detect)
- Various UI improvements and bug fixes across dashboard components
- Migration support for multi-project architecture
2026-04-02 09:31:57 -07:00
gsxdsm
6fd1fa3c2f chore: resolve merge conflicts 2026-04-02 09:29:31 -07:00
gsxdsm
bd67380e3d feat(FN-675): align session-files endpoint with diff endpoint
- Add git diff for session-files using baseCommitSha with double-dot syntax
- Add merge-base fallback to find common ancestor when baseCommitSha is missing
- Add HEAD~1 fallback when merge-base fails (e.g., no remote main)
- Add 10-second in-memory cache for session-files computation
- Fix scheduler to immediately schedule tasks created via dashboard
- Add task:moved to done handler for immediate scheduling on status change
- Add comprehensive unit tests for scheduler immediate scheduling
- Add unit tests for session-files caching and base ref resolution
2026-04-02 09:22:50 -07:00
gsxdsm
c03c9602b4 feat(KB-620): complete Step 7 — Migration and first-run experience
- Add fn init command for initializing new kb projects
- Add auto-migration check at CLI startup
- Add /api/setup-state and /api/complete-setup dashboard endpoints
- Add SetupState and CompleteSetupInput types to dashboard API
- Add migration and rollback documentation to AGENTS.md
- Create changeset for multi-project migration feature
2026-04-02 09:18:45 -07:00
gsxdsm
566f531361 feat: rename data directory, add global project settings, multi-project CLI commands, and provider badge in model selector
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 09:10:42 -07:00
gsxdsm
1fa8837c6b refactor: improve mocking for GitHubClient and enhance SIGINT handling in tests 2026-04-01 22:55:16 -07:00
gsxdsm
dc442cf391 feat: refactor tests and improve mocking for file-service and GitHub polling
- Updated mocking strategy for node:fs and node:fs/promises in file-service tests.
- Removed redundant test files and improved test implementations for better clarity.
- Enhanced GitHub polling service tests with rate limiter integration.
2026-04-01 22:44:44 -07:00
gsxdsm
04b194982d feat: add per-provider timeout for usage panel to prevent blocking on slow responses
fix: update scheduler filesystem path from .kb to .fusion for task validation

style: clean up TaskDetailModal styling with reusable CSS classes

test: add comprehensive tests for file-service operations with mocked filesystem
2026-04-01 22:38:18 -07:00
gsxdsm
9cc45e2973 feat(FN-669): complete Step 2 — update /api/models endpoint to return favoriteModels 2026-04-01 22:18:38 -07:00
gsxdsm
74b7301b28 feat(KB-662): add visibility-based refresh to dashboard hooks 2026-04-01 21:57:23 -07:00
gsxdsm
a19912af9a feat(KB-662): complete Step 2 — add visibility refresh tests for useProjects 2026-04-01 21:36:22 -07:00
gsxdsm
2778027423 Removed unwanted files marked in .gitignore 2026-04-01 21:25:08 -07:00
gsxdsm
fbf749a525 feat(KB-651): add task file diffs API
- Add API endpoint to fetch git diffs for tasks in review
- Implement file diff routes with support for changed files view
- Add comprehensive test suite for file diffs endpoint
- Update dashboard API client for diff fetching capabilities
2026-04-01 17:28:21 -07:00
gsxdsm
dac68ab2f7 feat(KB-502): implement dashboard multi-project UX
- Add project selector, health badge, and overview components to dashboard
- Add multi-project API functions (api.ts) for cross-project operations
- Update App.tsx with project context and navigation improvements
- Add script-store.ts for centralized project script management
- Extend types with multi-project support: SetupState, MigrationOptions, etc.
- Add project runtime fields: baseCommitSha, modifiedFiles, missionId, sliceId
- Add setupComplete to global settings for first-run wizard tracking
- Add project-level settings: scripts, setupScript, ntfyDashboardHost
- Add backward-compatible addSteeringComment method to TaskStore
2026-04-01 16:41:11 -07:00
gsxdsm
c4b611605e feat(KB-641): merge kb/kb-641 (auto-resolved)
- feat(KB-641): complete Step 5 — add changeset
- feat(KB-641): complete Step 2 — update terminal route errors
2026-04-01 15:25:08 -07:00
gsxdsm
51e0883708 feat(KB-503): merge kb/kb-503
- feat(KB-503): complete Step 5 other command project support
- fix(KB-503): align task resolution with shared project context
- fix(KB-503): preserve local task command fallback
- test(KB-503): complete Step 4 task command coverage
- test(KB-503): harden Step 3 CLI parser coverage
- fix(KB-503): keep settings set scope explicit
- fix(KB-503): allow implicit project resolution for project settings
- fix(KB-503): enforce explicit settings scope rules
- fix(KB-503): restore shared settings resolution behavior
- fix(KB-503): align settings scope and project flag behavior
- feat(KB-503): complete Step 5 — add project-aware settings, git, and backup behavior
- fix(KB-503): enforce settings scope for global and project modes
- fix(KB-503): preserve project-scoped settings and cwd-aware git helpers
- fix(KB-503): add scoped settings behavior and git project tests
- feat(KB-503): complete Step 5 — add project-aware git and backup coverage
- test(KB-503): cover remaining project-aware task command paths
- fix(KB-503): use shared resolution flow for all task commands
- fix(KB-503): restore legacy task fallback and correct task mocks
- fix(KB-503): align task resolution order and kb storage paths
- fix(KB-503): restore local task store fallback without project flag
- test(KB-503): cover remaining project-aware task handlers
- fix(KB-503): preserve branch naming and avoid duplicate log resolution
- test(KB-503): expand project-aware task command coverage
- fix(KB-503): restore cwd fallback for path-based task commands
- fix(KB-503): add project-aware task output and tests
- fix(KB-503): harden project command output and coverage
- fix(KB-503): preserve legacy task resolution without project flag
- test(KB-503): add bin routing coverage for project flag parsing
- feat(KB-503): complete Step 3 — CLI argument parsing updates
- fix(KB-503): add defaultProjectId to GlobalSettings type and fix TypeScript errors
- test(KB-503): fix resolveProject mock in task tests for runTaskLogs follow mode
- docs(KB-503): add multi-project CLI documentation and changeset
- test(KB-503): add project-context mock to task tests
- test(KB-503): update git tests for new cwd parameter
- feat(KB-503): Step 3 — CLI argument parsing updates with --project flag support
- feat(KB-503): Steps 1-2 — project context utilities and project subcommands
2026-04-01 15:06:58 -07:00
gsxdsm
c597f5519f feat(KB-617): add task diff Changes tab and backend support
- Add core task fields for base commit and modified files to support diff computation
- Implement dashboard and API wiring for task changes, including Task Detail Changes tab integration
- Update executor flow to capture modified files during execution for accurate diff display
- Add tests and changeset covering the diff viewer feature
2026-04-01 15:04:30 -07:00
gsxdsm
256a79c364 feat(KB-648): enable parallel test execution across packages
- Optimize backup tests with fake timers and deterministic timestamps
- Enable Vitest fileParallelism in core, engine, cli, and dashboard packages
- Fix SettingsModal scope initialization regression covered by merge resolution
- Update affected dashboard and engine tests for the new parallel-friendly behavior
- Add a changeset and document test optimization patterns in AGENTS.md
2026-04-01 15:00:07 -07:00
gsxdsm
4e297104b3 feat(KB-651): add changed files diff viewer
- Add task file diff API support with cached changed-file snapshots and robust diff generation for added, deleted, modified, and renamed files
- Integrate the dashboard changed files viewer into task flows without reintroducing removed board project context UI
- Expand route coverage for project-aware task listing and changed-file diff behavior, including rename diff regression cases
- Include the published package changeset for the new changed files diff viewer feature
2026-04-01 14:38:18 -07:00
gsxdsm
03c3743300 test(KB-636): expand mission integration coverage
- Add deeper MissionStore integration tests for hierarchy integrity, rollups, reorders, and task link cleanup
- Extend mission API end-to-end coverage for feature patching, validation, and cascade scenarios
- Fix TaskStore task upsert placeholders to preserve mission slice linking fields after merge resolution
- Tidy mission CLI help text and include the published package changeset for the missions launch
2026-04-01 14:30:04 -07:00
gsxdsm
a463670852 feat(KB-620): add multi-project first-run migration flow
- Add first-run migration detection and registration helpers for central project setup
- Wire CLI and dashboard setup routes to auto-migrate existing projects and complete setup
- Harden path resolution, overlap checks, and backward-compat project selection behavior
- Add regression tests for migration, nested project detection, and single-project compatibility
2026-04-01 14:18:57 -07:00
gsxdsm
d943616cb3 feat(KB-643): add dashboard scripts management and execution
- Add project settings support and dashboard API helpers for custom scripts
- Add scripts CRUD and run routes backed by terminal sessions with validation and duplicate checks
- Add Scripts modal and header integration for managing and launching project scripts
- Add regression coverage for scripts routes and API client helpers
2026-04-01 13:52:18 -07:00
gsxdsm
826a495679 feat(FN-670): enforce merge build verification and activity feed fallback
- Add activity feed fallback to the local project log when central activity is empty or unavailable
- Pass configured build commands into executor and merger prompts with hard-gate instructions
- Add merger build-failure reporting via report_build_failure and stop commits when verification fails
- Expand engine and dashboard regression coverage for activity feed fallback and merge build verification
2026-04-01 13:24:57 -07:00