Commit Graph

2644 Commits

Author SHA1 Message Date
Dustin Byrne
ec7691fcb9 feat(HAI-069): double flash animation duration from 700ms to 1400ms
- Update useFlashOnIncrease default duration from 700ms to 1400ms
- Update CSS count-flash-bg animation duration to 1400ms
- Update test assertions to match new 1400ms duration
2026-03-26 00:10:53 -04:00
Dustin Byrne
cdb0ae5d41 feat(HAI-065): add file-scope overlap detection with blockedBy tracking
- Add blockedBy field to Task type and core store
- Update scheduler to set blockedBy when deferring tasks due to file-scope overlap
- Render file-scope overlap badge on TaskCard in dashboard
- Add tests for blockedBy store logic, scheduler deferral, and TaskCard badge
- Simplify and refactor existing executor, triage, and CLI command code
2026-03-26 00:09:42 -04:00
Dustin Byrne
cac3bad367 fix(HAI-067): fix tooltip stacking context and background variable
- Add position: relative and z-index: 1 to .card-meta so dep tooltip renders above .card-title
- Change tooltip background from var(--bg-card) to var(--surface) for correct theming
- Add test asserting data-tooltip attribute contains dependency IDs as readable string
2026-03-26 00:08:23 -04:00
Dustin Byrne
bbd54ca4b8 docs: update hai-task skill with --attach support 2026-03-26 00:07:03 -04:00
Dustin Byrne
123c481dfc feat(HAI-042): add file attachment support for tasks
- Expand MIME type support for text file uploads
- Add --attach flag to CLI task create command
- Surface attachments to triage agent with image content support
- Reference attachments in executor prompt for task execution context
- Add drag-and-drop file upload on dashboard task cards
2026-03-26 00:06:41 -04:00
Dustin Byrne
afcd074caa feat(HAI-061): make scheduler and triage processor read settings dynamically
- Update Scheduler to read settings dynamically from the store instead of using static config
- Make TriageProcessor poll interval dynamic so it responds to settings changes
- Update dashboard.ts wiring to pass dynamic settings through to engine components
- Add scheduler and triage processor tests for dynamic settings behavior
- Remove unused InlineCreateCard and stale test files
2026-03-26 00:04:50 -04:00
Dustin Byrne
c2166723ee feat(HAI-064): add blur-to-cancel behavior for empty InlineCreateCard
- Add focusout listener that cancels InlineCreateCard when focus leaves with empty input
- Preserve card when focus moves between elements inside the card
- Treat whitespace-only input as empty for cancel purposes
- Add comprehensive tests for blur-to-cancel behavior
2026-03-26 00:01:29 -04:00
Dustin Byrne
b5075f7d6d feat(HAI-063): add dependency tooltip to TaskCard badge
- Add data-tooltip attribute to card-dep-badge showing comma-separated dependency IDs
- Add CSS hover tooltip using ::after pseudo-element on [data-tooltip]
- Add unit tests for dependency tooltip computation logic
- Remove obsolete TaskDetailModal dependency tooltip tests
2026-03-25 23:59:40 -04:00
Dustin Byrne
2296b36487 fix(HAI-060): remove nested scrollbar from activity in card detail view
- Remove overflow CSS rules causing nested scrollbar in activity section
- Add TaskDetailModal test asserting activity list scroll behavior
- Clean up merger test formatting
2026-03-25 23:57:45 -04:00
Dustin Byrne
be09b212d8 fix(HAI-062): add missing getSettings to mock store in merger.test.ts
- Add getSettings mock method to createMockStore using DEFAULT_SETTINGS
- Update @hai/core import to include DEFAULT_SETTINGS value export
2026-03-25 23:57:14 -04:00
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
3c868666ab chore: move skills to .agents/skills, remove .pi 2026-03-25 22:55:07 -04:00
Dustin Byrne
e2ebafc1cf chore: remove taskplane config and example tasks 2026-03-25 22:54:35 -04:00
Dustin Byrne
5ee7cb6e91 feat: symlink skills to .agents/skills for cross-harness discovery 2026-03-25 22:54:03 -04:00
Dustin Byrne
c7ba519b02 feat: add hai-task and hai-board skills for LLM discoverability 2026-03-25 22:53:20 -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