Commit Graph

2617 Commits

Author SHA1 Message Date
Dustin Byrne
cab27b5096 fix(HAI-085): resolve TS2307/TS2339 build errors in engine package
- Add @types/node dev dependency to fix TS2307 module resolution errors
- Sort dependencies alphabetically in engine package.json
- Update pnpm-lock.yaml with new type definitions
2026-03-26 00:55:16 -04:00
Dustin Byrne
b12d34010c feat(HAI-081): add changesets-based automated versioning and release workflow
- Install and configure @changesets/cli with commit/access settings
- Create version PR workflow (.github/workflows/version.yml) for automated version bumps
- Update existing release and test-release workflows with version validation
- Add example changeset and version tests for CI verification
- Add RELEASING.md guide and update README with versioning documentation
2026-03-26 00:53:13 -04:00
Dustin Byrne
7deca373f7 feat(HAI-079): add cross-platform matrix builds for release workflows
- Convert release.yml and test-release.yml to matrix strategy with Linux, macOS (arm64/x64), and Windows runners
- Add platform-specific checksum generation (sha256sum, shasum, Get-FileHash)
- Split release into build and release jobs with artifact upload/download
- Add matrix build assertion tests for both workflow files
- Update README with supported platforms table and binary details
2026-03-26 00:50:00 -04:00
Dustin Byrne
5dea073d22 feat(HAI-078): add configurable task prefix to settings
- Add taskPrefix field to Settings type and use it in allocateId
- Update store listTasks and handleFsChange to support any task prefix
- Update triage duplicate regex to match configurable prefix
- Add Task Prefix input to dashboard SettingsModal UI
- Add tests for prefix-aware task allocation and settings modal
2026-03-26 00:48:38 -04:00
Dustin Byrne
40099be89e feat(HAI-075): add project commands to buildExecutionPrompt
- Inject test and build commands from settings into the execution prompt
- Add Project Commands section with testCommand and buildCommand when configured
- Hoist getSettings call above the isResume check so commands are always available
- Add unit tests for project command propagation in buildExecutionPrompt
- Update integration test assertions for the hoisted getSettings call
2026-03-26 00:42:28 -04:00
Dustin Byrne
0b7e8e874a feat(HAI-077): add CI/CD workflows for PRs, releases, and manual testing
- Add CI workflow for pull requests and pushes with lint, test, and build steps
- Add release workflow for tagged versions with automated publishing
- Add manual test-release workflow for on-demand validation
- Add workflow validation tests and remove obsolete build/test files
- Update README with CI/CD documentation and badge references
2026-03-26 00:41:05 -04:00
Dustin Byrne
6643f1f5e0 feat(HAI-076): add cross-compilation support for CLI executable builds
- Extend build.ts with cross-compilation targets for multiple platforms/architectures
- Add build:exe:all npm script to package.json for building all targets
- Add cross-compilation tests for build-exe-cross
- Add cross-compilation documentation section to README
- Clean up unused agent log, store, and route code across dashboard/core/engine packages
2026-03-26 00:37:57 -04:00
Dustin Byrne
af69220031 fix: merger uses HEAD not hardcoded main for diff/log context 2026-03-26 00:37:48 -04:00
Dustin Byrne
20264a854d feat(HAI-072): add agent log viewer with persistence, streaming, and UI
- Add agent log persistence layer with JSONL append/read and event emission in core store
- Add server-side SSE log streaming endpoint and REST route for fetching logs
- Create AgentLogViewer component and useAgentLogs hook for real-time log display
- Integrate log viewer into TaskDetailModal
- Fix pre-existing build and test errors
2026-03-26 00:36:48 -04:00
Dustin Byrne
fbecff7255 feat(HAI-071): add Bun single-binary compile support for CLI
- Create build script (packages/cli/build.ts) using Bun.build compile target
- Update asset resolution in dashboard server for bundled context
- Add npm scripts to wire up the build process
- Add build-exe tests to verify compiled binary output
- Fix pre-existing build errors in engine and core packages
- Document build and compile workflow in README
2026-03-26 00:32:57 -04:00
Dustin Byrne
96bacb5d65 fix(HAI-074): add missing imports in triage.ts and executor.test.ts
- Add Static type import from pi-ai in triage.ts
- Add aiMergeTask import from merger.js in executor.test.ts
- Add WorktreePool import from worktree-pool.js in executor.test.ts
2026-03-26 00:22:24 -04:00
Dustin Byrne
7b2248d6a4 fix(HAI-073): add blockedBy to updateTask parameter type
- Add blockedBy field to the updateTask parameter type in store.ts
- Add tests for updateTask blockedBy functionality
2026-03-26 00:21:57 -04:00
Dustin Byrne
efda541713 feat(HAI-057): add task dependency editing to dashboard UI
- Add dependencies field support to store updateTask method
- Wire dependencies through PATCH route and client API
- Add dependency editing UI (add/remove) to TaskDetailModal
- Pass tasks prop from App to TaskDetailModal for dependency picker
- Add tests for dependency CRUD in modal and API layer
2026-03-26 00:15:29 -04:00
Dustin Byrne
e41d3936d6 feat(HAI-070): add custom scrollbar styles to board
- Add thin scrollbar with border-color theme support via standard properties
- Add WebKit scrollbar pseudo-element styles for cross-browser compatibility
- Apply styles to both app/styles.css and public/style.css
2026-03-26 00:13:39 -04:00
Dustin Byrne
502c2398b4 fix(HAI-066): remove console.log for file overlap deferral in scheduler
- Remove console.log statement when deferring tasks due to file overlap
- Add test verifying no console.log is emitted on file overlap deferral
2026-03-26 00:11:46 -04:00
Dustin Byrne
c8143a18b3 feat(HAI-068): add paste and drag-drop image upload to TaskDetailModal
- Extract uploadFile helper from file input handler for reuse
- Add clipboard paste listener to upload pasted images automatically
- Add drag-over and drop handlers on modal for drag-and-drop image upload
- Add comprehensive tests for paste upload, non-image paste skip, uploading state, and drop upload
2026-03-26 00:11:15 -04:00
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
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
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