Commit Graph

342 Commits

Author SHA1 Message Date
Dustin Byrne
637254ed2f feat(HAI-059): add horizontal scroll support for board columns
- Update board grid to use minmax(260px, 1fr) for minimum column widths
- Replace overflow: hidden with overflow-x: auto for horizontal scrolling
- Add min-width: 260px to column class for consistent sizing
- Add Board test verifying id='board' attribute for scroll targeting
2026-03-25 23:56:18 -04:00
Dustin Byrne
5b4abf4271 feat(HAI-041): wire WorktreePool through dashboard and add tests
- Wire WorktreePool instance through dashboard.ts command setup
- Add comprehensive WorktreePool wiring tests in dashboard.test.ts
- Refactor engine executor, scheduler, and merger to use WorktreePool
- Remove legacy worktree-names module and unused dashboard routes/hooks
- Clean up dashboard UI components and simplify task card/modal logic
2026-03-25 23:54:56 -04:00
Dustin Byrne
f1c1f9e11a feat(HAI-043): fix title fallback to show description instead of duplicate ID
- Update TaskCard and TaskDetailModal to display description as fallback instead of repeating the task ID
- Remove unused hooks (useFlashOnIncrease), routes, assets, and dead CSS
- Clean up engine modules (executor, scheduler, triage, worktree-names) removing unused code
- Update and add tests for title fallback behavior in TaskDetailModal
- Fix pre-existing type error in test helper (types.ts)
2026-03-25 23:52:43 -04:00
Dustin Byrne
1bfeda5f9c feat(HAI-058): suppress repetitive worktree-limit log in scheduler
- Add wasWorktreeLimited flag to only log worktree limit on first occurrence
- Reset flag when worktrees free up so the message reappears on next saturation
- Add tests verifying single log on repeated maxed passes
- Add test verifying log reappears after slots free and re-saturate
2026-03-25 23:52:08 -04:00
Dustin Byrne
35177f448f feat(HAI-055): add failed task status handling with retry support
- Set task status to 'failed' on execution failure in engine executor
- Add failed indicator styling on TaskCard component
- Add POST /tasks/:id/retry API endpoint and client function
- Add retry button in TaskDetailModal for failed tasks
- Add tests for failed indicator, retry endpoint, and modal behavior
2026-03-25 23:50:11 -04:00
Dustin Byrne
95ec4bc4a1 feat(HAI-054): implement pool recycling in aiMergeTask cleanup step
- Release worktree back to pool when recycleWorktrees setting is enabled
- Skip worktree removal when released to pool, preserving it for reuse
- Fall through to force-remove behavior when pool is unavailable or recycling is disabled
2026-03-25 23:39:27 -04:00
Dustin Byrne
1dfd70757a feat(HAI-053): add responsive mobile horizontal scroll for board
- Add responsive horizontal scroll CSS styles for mobile viewports
- Ensure board columns scroll horizontally on smaller screens
- Add Board component tests verifying responsive scroll behavior
2026-03-25 23:36:55 -04:00
Dustin Byrne
cd165cdb5d feat(HAI-052): deduplicate worktree name word lists and add uniqueness tests
- Remove duplicate entries from adjective and noun word lists in worktree-names.ts
- Add tests to verify all adjectives are unique
- Add tests to verify all nouns are unique
- Ensure generated worktree names remain distinct
2026-03-25 23:34:13 -04:00
Dustin Byrne
133fc59297 feat(HAI-051): add column flash animation on count increase
- Create useFlashOnIncrease hook to detect count increases
- Wire useFlashOnIncrease hook into Column component
- Add CSS flash animation keyframes and styles
- Add unit tests for useFlashOnIncrease hook
- Add Column component flash behavior tests
2026-03-25 23:31:16 -04:00
Dustin Byrne
ae2f9cfaea fix(HAI-050): update merger mock to export aiMergeTask via importOriginal
- Refactor merger.js mock to use importOriginal and spread actual exports
- Preserve aiMergeTask export while still mocking findWorktreeUser
- Add missing listTasks mock to merger worktree pool integration test
2026-03-25 23:28:29 -04:00
Dustin Byrne
b0d3492530 feat(HAI-049): add recycleWorktrees checkbox to Settings modal
- Add recycleWorktrees toggle to the Worktrees section in SettingsModal
- Wire checkbox state to settings store
- Add unit tests for recycleWorktrees setting behavior
2026-03-25 23:22:54 -04:00
Dustin Byrne
d557e90a5b fix(HAI-048): fix checkbox input styling in Settings modal
- Exclude checkbox inputs from full-width text input styles using :not([type="checkbox"])
- Add dedicated checkbox styling with proper size, accent color, and cursor
- Add test verifying groupOverlappingFiles input renders as a checkbox
2026-03-25 23:20:56 -04:00
Dustin Byrne
539c1c6af9 fix(HAI-047): resolve const reassignment and undeclared variable in executor.ts
- Change isResume from const to let to allow reassignment in fallback branch
- Remove reference to undeclared variable isReuse
2026-03-25 23:19:06 -04:00
Dustin Byrne
30f6e902cb feat(HAI-045): normalize queued status for file-scope-deferred tasks
- Set status to queued in scheduler for file-scope-deferred tasks
- Normalize queued badge display in TaskCard component
- Add TaskCard unit tests for queued status rendering
- Add scheduler tests for file-scope-deferred task queuing
- Move logo.svg to correct public directory
2026-03-25 23:17:00 -04:00
Dustin Byrne
d0a2bd0f20 fix: center logo, simplify for favicon legibility 2026-03-25 23:14:30 -04:00
Dustin Byrne
fbf4a926f2 fix: move logo.svg to app/public/ for Vite discovery 2026-03-25 23:13:27 -04:00
Dustin Byrne
13d1afb818 feat: add logo as favicon 2026-03-25 23:12:07 -04:00
Dustin Byrne
3f7814e14b fix(HAI-044): type params in triage tool execute callbacks
- Import Static type utility from pi-ai
- Extract taskGetParams schema to a named constant
- Add explicit type annotations to task_get execute callback params
- Improve type safety for triage tool parameter handling
2026-03-25 23:12:06 -04:00
Dustin Byrne
4da7fb839c feat: add abstract SVG logo 2026-03-25 23:11:28 -04:00
Dustin Byrne
c82f7f73cd feat(HAI-040): count specifying tasks toward maxConcurrent
- Count triage tasks with status 'specifying' as active agent slots in scheduler
- Rewrite scheduler tests to focus on concurrency slot accounting
- Add tests for specifying-only, mixed, and no-specifying scenarios
- Use direct schedule() invocation pattern to avoid timer complexity in tests
2026-03-25 23:09:43 -04:00
Dustin Byrne
b9d7c89905 feat(HAI-034): use humanized worktree names instead of task-ID-based directories
- Add worktree-names module with adjective-animal name generator (generateWorktreeName)
- Update executor to assign humanized random worktree names and support dependency worktree reuse
- Remove task-ID fallback paths from merger and store; add shared worktree cleanup via findWorktreeUser
- Remove worktree pool module and related scheduler/integration tests
- Update dashboard worktree label tests and add JSDoc documentation for worktree naming
2026-03-25 23:09:25 -04:00
Dustin Byrne
74379bdbce feat(HAI-037): add WorktreePool for recycling idle worktrees
- Add recycleWorktrees setting to control worktree pooling behavior
- Implement WorktreePool class with acquire/release/prepareForTask lifecycle
- Integrate pool into executor: acquire warm worktrees, skip init command for pooled entries
- Integrate pool into merger: release worktrees to pool instead of removing on task completion
- Add comprehensive unit and integration tests for pool, executor, and merger interactions
2026-03-25 23:08:04 -04:00
Dustin Byrne
bf37701775 fix(HAI-038): add re-entrance guard and improve overlap detection testability
- Add re-entrance guard to schedule() preventing concurrent passes from starting conflicting tasks
- Extract pathsOverlap() to module-level export for direct unit testing
- Add comprehensive scheduler test suite with overlap and concurrency coverage
- Add JSDoc explaining why the guard is needed and how inProgressScopes stays consistent
2026-03-25 23:03:56 -04:00
Dustin Byrne
397716f370 fix(HAI-039): eliminate duplicate description in prompts and modal heading
- Fix prompt heading to use only task ID when title is absent, preventing description duplication
- Strip leading markdown heading from TaskDetailModal since the modal has its own header
- Add store tests covering prompt generation for tasks with and without titles
- Update TaskDetailModal tests to verify heading stripping and single description rendering
2026-03-25 22:58:09 -04:00
Dustin Byrne
f92c842fb3 test(HAI-035): add restart integration tests for engine recovery scenarios
- Create test infrastructure with mock helpers for executor, merger, and scheduler
- Add in-progress task resume tests covering worktree recovery and branch handling
- Add in-review merge handling tests for post-crash merge completion
- Add triage re-pick and scheduler restart tests
- Add crash scenario edge case tests for partial state recovery
2026-03-25 22:52:37 -04:00
Dustin Byrne
b41e215246 feat(HAI-033): add dependency-chain worktree reuse and conditional cleanup
- Add executor logic to resolve and reuse dependency worktrees for warm build caches
- Add reuseWorktree method that creates a new branch in an existing worktree
- Add findWorktreeUser helper to check if a worktree is shared across tasks
- Update executor and merger cleanup to skip worktree removal when still in use
- Add comprehensive tests for worktree reuse and conditional cleanup paths
2026-03-25 22:51:43 -04:00
Dustin Byrne
2fc6cba0b5 fix(HAI-036): add retry logic to fetchTaskDetail
- Convert fetchTaskDetail to async with explicit fetch call
- Add single retry attempt on failure (2 max attempts)
- Parse and throw server error message on final failure
2026-03-25 22:45:11 -04:00
Dustin Byrne
5ccbefaa1d feat(HAI-032): add image paste support to inline create card
- Add paste handler to extract and preview images from clipboard
- Track pending images with object URL previews and cleanup on unmount
- Upload pasted images as attachments on task creation
- Add styled image preview strip with remove button
- Add CSS for preview thumbnails with hover-to-delete overlay
2026-03-25 22:43:24 -04:00
Dustin Byrne
67c3caf239 feat(HAI-031): add sidebar navigation to settings modal
- Add sidebar navigation structure with section links to SettingsModal
- Implement sidebar and form layout styles in styles.css
- Add SettingsModal sidebar navigation tests for section switching
- Update SettingsModal component with multi-section support
2026-03-25 22:43:12 -04:00
Dustin Byrne
c51fa74732 fix: deps wait for done (merged) not in-review 2026-03-25 22:40:02 -04:00
Dustin Byrne
12d24817be test(HAI-029): add tests for task show command and fix description display
- Add tests for runTaskShow output formatting
- Fix task show header to display full description
- Exclude test files from CLI build tsconfig
- Add vitest config for CLI package
- Clean up unused types and triage code
2026-03-25 22:21:18 -04:00
Dustin Byrne
9c4f4dfb3a fix(HAI-029): exclude test files from CLI build tsconfig 2026-03-25 22:20:54 -04:00
Dustin Byrne
e9d30c8697 test(HAI-029): add tests for runTaskShow output 2026-03-25 22:20:12 -04:00
Dustin Byrne
edd42c269d feat(HAI-027): add configurable test and build commands to settings
- Add testCommand and buildCommand optional fields to Settings type
- Inject configured commands into triage agent context for task specs
- Add test/build command input fields to the settings modal UI
- Remove legacy executor-level command handling in favor of triage injection
- Add triage tests covering command injection behavior
2026-03-25 22:19:47 -04:00
Dustin Byrne
b863d098b9 fix(HAI-029): show full description in task show header 2026-03-25 22:19:13 -04:00
Dustin Byrne
0a43742aec feat(HAI-027): complete Step 3 — add test/build command fields to settings modal 2026-03-25 22:18:26 -04:00
Dustin Byrne
289f865689 feat(HAI-027): complete Step 2 — inject commands into triage agent context 2026-03-25 22:17:44 -04:00
Dustin Byrne
e7c4977dc4 feat(HAI-027): complete Step 1 — add testCommand and buildCommand to Settings type 2026-03-25 22:15:46 -04:00
Dustin Byrne
e1a165b9dc test(HAI-026): complete Step 4 — add settings round-trip tests for worktreeInitCommand 2026-03-25 22:13:14 -04:00
Dustin Byrne
a1380e8637 feat(HAI-026): complete Step 3 — add worktreeInitCommand UI field to SettingsModal 2026-03-25 22:12:35 -04:00
Dustin Byrne
8ae79a95de feat(HAI-026): complete Step 2 — execute worktreeInitCommand after worktree creation 2026-03-25 22:11:36 -04:00
Dustin Byrne
0ec136a1c0 feat(HAI-026): complete Step 1 — add worktreeInitCommand to Settings 2026-03-25 22:09:43 -04:00
Dustin Byrne
bbe2ed2166 feat(HAI-023): add file attachments support for tasks
- Add core types and store methods for attachment CRUD operations
- Add dashboard API routes for upload, download, and delete of attachments
- Add attachment UI in TaskDetailModal with upload and management controls
- Add CLI 'attach' command for attaching files to tasks
- Update documentation with attachment feature usage details
2026-03-25 22:06:58 -04:00
Dustin Byrne
554137b73f feat(HAI-023): complete Step 4 — CLI attach command 2026-03-25 22:05:19 -04:00
Dustin Byrne
f4e6420b1f feat(HAI-025): add column-based agent-active glow for in-progress cards
- Add agent-active glow styling to TaskCard based on column status
- Update store to support column-based agent-active state tracking
- Refactor merger logic for improved agent-active handling
- Add comprehensive column-based agent-active test cases for TaskCard
2026-03-25 22:04:07 -04:00
Dustin Byrne
2750d4b262 feat(HAI-023): complete Step 3 — dashboard UI view and upload screenshots 2026-03-25 22:03:42 -04:00
Dustin Byrne
239ec0a537 test(HAI-025): complete Step 2 — add column-based agent-active test cases 2026-03-25 22:02:45 -04:00
Dustin Byrne
69ff2f7aa0 feat: squash merge for clean one-commit-per-task history
- git merge --squash replaces git merge --no-ff
- Merge agent prompt updated for squash flow
- Fallback detection uses staged changes instead of MERGE_HEAD
- Abort uses git reset --merge instead of git merge --abort
- Store fallback merge also squashes + commits
2026-03-25 22:02:33 -04:00
Dustin Byrne
f6c5c62f93 feat(HAI-025): complete Step 1 — add column-based agent-active glow for in-progress cards 2026-03-25 22:02:27 -04:00
Dustin Byrne
27c8744c46 feat(HAI-024): complete Step 1 — remove PROMPT.md header from TaskDetailModal 2026-03-25 22:01:29 -04:00