Commit Graph

479 Commits

Author SHA1 Message Date
Dustin Byrne
7f47f1e781 feat(HAI-023): complete Step 1 — core types and store methods for attachments 2026-03-25 21:57:51 -04:00
Dustin Byrne
6975fae33f feat(HAI-020): complete Step 2 — simplify safeReadTaskJson to readTaskJson, remove truncation recovery 2026-03-25 21:37:44 -04:00
Dustin Byrne
6d2c234d89 feat(HAI-020): complete Step 1 — atomic writes for config.json with config lock 2026-03-25 21:36:38 -04:00
Dustin Byrne
0e023c7b2b fix(HAI-018): improve error handling for task detail fetching
- Fix server-side error handling in GET /tasks/:id with retry on transient failures
- Add client-side retry logic for fetchTaskDetail in dashboard
- Add unit tests for routes and API error/retry behavior
- Remove outdated core store tests and vitest config
- Update documentation for error handling improvements
2026-03-25 21:33:39 -04:00
Dustin Byrne
d452aeb0c1 fix(HAI-018): complete Step 1 — fix server-side error handling in GET /tasks/:id
- Route now returns 404 only for ENOENT, 500 for transient errors
- store.getTask() retries once after 50ms on non-ENOENT failures
- Added route tests for success, 404, and 500 cases
- Updated vitest config to include src/**/*.test.* files
2026-03-25 21:30:18 -04:00
Dustin Byrne
01752d5d6a feat(HAI-017): add per-task write lock, atomic writes, and defensive JSON parsing to TaskStore
- Add per-task write lock in TaskStore to prevent concurrent write corruption
- Implement defensive JSON parsing with recovery for task.json files
- Use atomic writes (write-to-temp + rename) for task.json updates
- Add vitest config and tests for lock, parsing, and atomic write behavior
- Remove concurrency module from engine, consolidating store safety in core
2026-03-25 21:29:10 -04:00
Dustin Byrne
a8f31782a8 test(HAI-017): complete Step 4 — add vitest config and tests for lock, parsing, atomic writes 2026-03-25 21:27:49 -04:00
Dustin Byrne
dcf9da35a0 docs(HAI-016): complete Step 7 — update JSDoc for maxConcurrent and AgentSemaphore 2026-03-25 21:27:05 -04:00
Dustin Byrne
65ed0d919e feat(HAI-017): complete Step 3 — use atomic writes for task.json 2026-03-25 21:24:46 -04:00
Dustin Byrne
edb31077d4 feat(HAI-017): complete Step 2 — add defensive JSON parsing with recovery 2026-03-25 21:21:15 -04:00
Dustin Byrne
ab3acd59b5 feat(HAI-017): complete Step 1 — add per-task write lock to TaskStore 2026-03-25 21:19:19 -04:00
Dustin Byrne
f6dc070bd8 feat(HAI-005): add auto-merge functionality for in-review tasks
- Add autoMerge boolean to Settings model with default false
- Add auto-merge toggle UI to the In Review column header
- Implement server-side auto-merge behavior in dashboard command
- Fix pre-existing build errors in types, executor, and dashboard server
- Update README with auto-merge documentation
2026-03-25 20:48:34 -04:00
Dustin Byrne
dd3ebe9148 feat(HAI-005): complete Step 1 — add autoMerge to Settings model 2026-03-25 20:41:43 -04:00
Dustin Byrne
f63e5cb92e feat(HAI-006): complete Step 2 — parse File Scope from PROMPT.md 2026-03-25 20:41:35 -04:00
Dustin Byrne
7f3cf51c19 fix(HAI-005): fix pre-existing build errors in types, executor, and dashboard server 2026-03-25 20:41:06 -04:00
Dustin Byrne
ba95694189 feat(HAI-006): complete Step 1 — add groupOverlappingFiles to Settings 2026-03-25 20:40:21 -04:00
Dustin Byrne
6fbf3519b5 feat(HAI-002): add maxWorktrees setting to limit total git worktrees
- Add maxWorktrees field to Settings interface with default of 4
- Enforce worktree limit in Scheduler.schedule() alongside maxConcurrent
- Wire setting through dashboard startup from persisted settings
- Include maxWorktrees in /api/config response
- Add Max Worktrees input to Settings Modal UI
- Backward compatible: existing configs without maxWorktrees use default
2026-03-25 20:32:07 -04:00
Dustin Byrne
66a62b9bcb refactor: drop discover command, agents create new tasks instead 2026-03-25 20:17:38 -04:00
Dustin Byrne
8a2a5ac14b feat: taskplane-style specs + CLI step tracking
- Triage agent generates full PROMPT.md (mission, steps, file scope,
  review level, docs requirements, commit conventions, guardrails)
- Executor agent reports progress via hai task CLI
- hai task update <id> <step> <status> — step lifecycle
- hai task log <id> <message> — execution log
- hai task discover <id> <what> <disp> — record discoveries
- hai task show <id> — display steps, progress, discoveries, log
- Steps auto-parsed from PROMPT.md headings into task.json
- Task types extended with steps, reviews, discoveries, log
2026-03-25 20:14:04 -04:00
Dustin Byrne
e142e049d3 feat(HAI-004): add settings modal with GET/PUT API endpoints
- Extend config schema and store helpers to support settings persistence
- Add GET/PUT /settings REST API endpoints in dashboard routes
- Create SettingsModal component with frontend API wiring
- Add settings trigger button to Header and integrate into App
- Add CSS styles for settings modal and header actions
2026-03-25 20:06:02 -04:00
Dustin Byrne
41f2b0f3b5 feat(HAI-004): extend config schema and store helpers for settings 2026-03-25 20:02:41 -04:00
Dustin Byrne
51099fc52a feat(HAI-003): clear status and worktree in moveTask when moving to done 2026-03-25 20:01:24 -04:00
Dustin Byrne
dc36ad1d57 feat(HAI-002): add status field to Task type and store 2026-03-25 19:23:07 -04:00
Dustin Byrne
eeaa5b457c feat(HAI-001): add description validation and make title optional in store 2026-03-25 19:14:59 -04:00
Dustin Byrne
67af835ce6 feat(HAI-001): make Task.title optional in type definition 2026-03-25 19:14:53 -04:00
Dustin Byrne
1aa317565f feat(HAI-001): handle optional title in TaskStore createTask and generateSpecifiedPrompt 2026-03-25 19:04:01 -04:00
Dustin Byrne
1ab3d6c558 feat(HAI-001): make title optional and description required in TaskCreateInput 2026-03-25 19:03:46 -04:00
Dustin Byrne
b7f2f1a3e6 feat(HAI-003): add file-system watcher to TaskStore for live dashboard updates
- Add watch() method using Node's built-in fs.watch with recursive option
- Detect task.json changes and emit appropriate SSE events (created/moved/updated/deleted)
- Debounce per-file changes (150ms) to coalesce rapid writes
- Suppress duplicate events for in-process mutations via recentlyWritten set
- Integrate watcher into dashboard server startup with clean SIGINT shutdown
- Add @types/node to core package for proper TypeScript support
2026-03-25 18:56:16 -04:00
Dustin Byrne
961203692d feat: hai board — core, dashboard, cli, engine 2026-03-25 18:32:10 -04:00