Commit Graph

66 Commits

Author SHA1 Message Date
gsxdsm
e8650d8e5a feat(KB-020): add column visibility toggle to list view
- Add column visibility state management with localStorage persistence
- Create dropdown UI for toggling column visibility with checkboxes
- Implement conditional column rendering in ListView
- Add CSS styling for column toggle dropdown component
- Add comprehensive tests for column visibility toggle functionality
- Include changeset for patch release
2026-03-29 18:55:36 -07:00
gsxdsm
95fe32560d feat(KB-019): add grouped list view with section headers
- Implement task grouping logic by columns in ListView component
- Add CSS styling for section headers and grouped layout
- Fix React Fragment keys for proper list rendering
- Update tests for grouped list view functionality
- Add changeset for release notes
2026-03-29 18:43:52 -07:00
gsxdsm
e79e28e717 feat(KB-014): add spec editing and AI revision to dashboard
- Add SpecEditor component with view/edit modes and AI revision UI
- Add spec revision API endpoint with column transition validation
- Enhance TriageProcessor for re-specification with feedback support
- Integrate Spec tab in TaskDetailModal with full edit capabilities
- Add comprehensive tests for SpecEditor and revision workflows
2026-03-29 18:42:41 -07:00
gsxdsm
70a28b54a7 feat(KB-017): add size badge to TaskCard component
- Add SizeBadge sub-component to display task size (XS/S/M/L/XL) in TaskCard

- Add CSS styling with color-coded badges for each size level

- Add comprehensive tests for size badge rendering across all size variants
2026-03-29 18:33:53 -07:00
gsxdsm
234f568e12 feat(KB-009): add dedicated Activity tab to Task Detail Modal
- Add Activity tab to tab bar alongside Definition, Agent Log, and Steering

- Move activity feed from Definition tab to dedicated Activity tab

- Update tab state type to include 'activity'

- Add comprehensive Activity tab tests (rendering, empty state, tab switching)

- Update existing tests to work with 4 tabs
2026-03-29 18:26:26 -07:00
gsxdsm
82349f5c64 feat(KB-006): add clickable task dependencies in dashboard
- Make TaskCard dependency badges clickable to open task detail
- Make TaskDetailModal dependency links clickable for navigation
- Wire onOpenDetail callback through Column and WorktreeGroup components
- Add comprehensive tests for clickable dependency interactions
- Simplify GitHubImportModal component and update related tests
2026-03-29 18:18:33 -07:00
gsxdsm
9efef163f9 feat(KB-018): simplify GitHub import modal remote selection
- Simplify remote selection UI in GitHub import modal
- Refactor GitHubImportModal component for better UX
- Update and expand test coverage for modal interactions
- Add changeset documenting the UI simplification
2026-03-29 18:13:08 -07:00
gsxdsm
53e09ce581 feat(KB-004): add GitHub PR creation and comment monitoring
- Add PR fields (prInfo, prNumber, prUrl) to Task type and TaskStore with updatePrInfo method
- Add PR Management API endpoints: create, status, refresh with per-repo rate limiting
- Add GitHubClient for PR creation and status fetching with comment support
- Add PrSection component for PR status display and actions in dashboard
- Add PR comment monitoring engine with PrMonitor and PrCommentHandler
- Integrate PR monitoring into scheduler for automatic PR tracking
- Add comprehensive tests for PR features in all packages
2026-03-29 18:10:35 -07:00
gsxdsm
88ca088eda feat(KB-015): add git remote selection to GitHub import modal
- Add backend API endpoint to list git remotes for a repository
- Add frontend API client and types for git remotes
- Update GitHub import modal with remote dropdown selector
- Add tests for git remotes API and import modal
2026-03-29 17:57:47 -07:00
gsxdsm
ca46c019fb test(KB-013): add step progress tests and fix type error 2026-03-29 17:56:45 -07:00
gsxdsm
478e7ffac3 feat(KB-005): add ListView component with board/list view toggle
- Create ListView component with sorting, filtering, and drag-and-drop support
- Add view toggle buttons to Header for switching between board and list views
- Integrate view switching in App with localStorage persistence
- Add comprehensive tests for ListView, Header view toggle, and App integration
- Add CSS styles for list view layout and toggle button states
2026-03-29 17:53:03 -07:00
gsxdsm
80abb826ee feat(KB-003): add task steering feature with UI and prompt injection
- Add SteeringComment type to core types for user steering input
- Add addSteeringComment method to TaskStore with persistence
- Add POST /api/tasks/:id/steer endpoint for adding steering comments
- Add frontend API client and SteeringTab UI component
- Inject steering comments into execution prompt for agent guidance
- Add comprehensive tests for store, API, UI, and executor components
- Include changeset for patch release
2026-03-29 17:40:42 -07:00
gsxdsm
5214cc0657 feat(KB-002): add interactive GitHub issue import
- Add --interactive (-i) flag to 'kb task import' CLI command for selective import
- Add GitHubImportModal component to dashboard with issue browser and selection
- Add /api/github/issues/fetch and /api/github/issues/import API endpoints
- Add kb_task_import_github_issue and kb_task_browse_github_issues tools to pi extension
- Add comprehensive tests for CLI, dashboard API, and UI components
2026-03-29 17:40:28 -07:00
Dustin Byrne
51c4afdcae feat(KB-189): suppress duplicate agent badges on consecutive inline entries
- Add showBadge logic to skip badge on consecutive inline entries from same agent/type
- Always show badge on block-level entries (tool, tool_result, tool_error)
- Re-show badge on agent transitions and type changes within inline entries
- Add 7 test cases covering deduplication, transitions, block-level, and no-agent scenarios
2026-03-28 21:52:13 -04:00
Dustin Byrne
478ba72044 fix(KB-186): add ID-based tiebreaker to sort comparators for stable ordering
- Add numeric ID tiebreaker to TaskStore.listTasks() when createdAt timestamps match
- Add same tiebreaker to InlineCreateCard and TaskDetailModal dependency dropdown sorts
- Add store-sort integration test verifying ascending ID order with identical timestamps
- Add InlineCreateCard tests for identical-timestamp dropdown ordering and search filtering
- Add TaskDetailModal test for identical-timestamp dependency dropdown ordering
2026-03-28 19:40:17 -04:00
Dustin Byrne
b5717562f8 feat(KB-185): sort dependency dropdown newest-first in InlineCreateCard
- Sort dep dropdown items by createdAt descending (newest first)
- Clone tasks array before sorting to avoid mutating props
- Add tests verifying newest-first order for both unfiltered and filtered lists
2026-03-28 19:19:33 -04:00
Dustin Byrne
3e7966042c fix(KB-183): prevent dep-dropdown clicks from dismissing InlineCreateCard
- Add onMouseDown preventDefault on dep-dropdown and items to retain focus
- Extend focusout guard to check dependencies and showDeps state before cancelling
- Add useEffect dependency array entries for dependencies and showDeps
- Add tests for mouseDown preventDefault and blur-with-deps retention
2026-03-28 18:15:48 -04:00
Dustin Byrne
494de14820 feat(KB-184): change autoMerge default from false to true
- Update DEFAULT_SETTINGS in core types to set autoMerge: true
- Update initial state defaults in App and SettingsModal components
- Update test fixtures in App, Board, and SettingsModal tests
- Update kb-board skill docs to reflect new default
- Add minor changeset for the default change
2026-03-28 18:14:16 -04:00
Dustin Byrne
acb246a659 fix(KB-181): preserve active-agent glow during soft-pause
- Replace combined engineStopped prop with globalPaused to decouple hard stop from soft pause
- Thread globalPaused through Board, Column, WorktreeGroup, and TaskCard components
- Active-agent glow now only suppressed on hard pause (globalPaused), not soft pause (enginePaused)
- Update tests to verify soft-pause preserves glow and hard-pause suppresses it
- Add changeset for patch release
2026-03-28 17:26:49 -04:00
Dustin Byrne
6ff64597d8 feat(KB-180): rename pause button titles from 'AI engine' to 'scheduling'
- Update Header pause button titles to 'Pause scheduling' / 'Resume scheduling'
- Update Header unit tests to assert new title strings
- Update App integration tests for engine pause flows to use new titles
2026-03-28 17:17:14 -04:00
Dustin Byrne
96f1070108 Revert "fix(KB-166): revert mobile board flex layout from KB-164"
This reverts commit 042cddcb7a281e9886be21ee47b42d50d75a7706.
2026-03-28 16:30:23 -04:00
Dustin Byrne
85ea8fb545 feat(KB-165): add responsive mobile layout for settings modal
- Add mobile CSS in @media query to stack settings sidebar horizontally above content
- Style nav items as horizontal scrollable tabs with bottom-border active indicator
- Adjust settings content, form groups, and auth provider rows for narrow viewports
- Add SettingsModal tests verifying .settings-layout, .settings-sidebar, and .settings-content structure
- Add test for active nav item class toggling and auth provider row DOM structure
2026-03-28 16:30:23 -04:00
Dustin Byrne
cf7b385549 fix(KB-166): revert mobile board flex layout from KB-164
- Remove mobile board flex/snap-scroll CSS overrides from styles.css
- Remove Board tests asserting direct-child column structure and semantic tag
- Delete fix-mobile-board-double-scrollbar changeset
- Retain mobile modal full-screen overrides
2026-03-28 16:30:23 -04:00
Dustin Byrne
7259b652e6 feat(KB-164): fix mobile board double scrollbar with flex layout
- Switch board from 5-column grid to horizontally-scrollable flex layout on viewports ≤768px
- Add snap-scrolling and fixed min-width columns for polished mobile swipe
- Prevent ancestor elements (html, body, #root) from producing a second scrollbar
- Add board structure tests verifying columns are direct children of main element
- Add changeset for the mobile board fix (patch)
2026-03-28 16:30:23 -04:00
Dustin Byrne
c4f3c39c64 feat(KB-162): add mobile responsive layout for task detail modal
- Add mobile-first CSS with full-screen modal, wrapped actions, and reduced spacing at ≤768px
- Extract inline tab styles from TaskDetailModal.tsx into CSS classes (.detail-tabs, .detail-tab, .detail-tab-active)
- Add @media query for modal, header, body, actions, and tabs responsive adjustments
- Add tests verifying modal structure, CSS class usage, and action button presence for mobile layout
2026-03-28 16:30:23 -04:00
Dustin Byrne
81ab64bdf7 feat(KB-160): thread engineStopped prop to suppress agent-active indicator
- Derive engineStopped from globalPaused/enginePaused in App and pass through Board → Column → WorktreeGroup → TaskCard
- Guard isAgentActive in TaskCard with !engineStopped so the pulse animation stops when the engine is paused
- Update Board test to supply the new engineStopped prop
- Add TaskCard tests covering engineStopped=true, false, and undefined (backward compat)
- Add engineStopped to all intermediate component interfaces
2026-03-28 16:30:23 -04:00
Dustin Byrne
cac10af5e1 feat(KB-157): add soft-pause (enginePaused) alongside hard-stop (globalPause)
- Add enginePaused field to Settings type with soft-pause semantics (drain queue, don't kill agents)
- Gate scheduler, triage, auto-merge, and periodic merge retry on enginePaused
- Add Pause and Stop buttons to dashboard Header replacing single toggle
- Wire enginePaused state through App with optimistic toggle and unpause resume logic
- Add tests for scheduler, triage, dashboard CLI, Header, and App covering pause behavior
2026-03-28 16:30:23 -04:00
Dustin Byrne
40dacb49d3 feat(KB-156): add search input to dependency dropdowns
- Add searchable text input to TaskDetailModal dependency dropdown with filtering by id, title, and description
- Add matching search input to InlineCreateCard dependency dropdown
- Add sticky .dep-dropdown-search CSS with focus styling
- Reset search term when dropdown closes and reopens
- Add tests for search filtering, case-insensitive matching, empty state, and reset behavior
2026-03-28 16:30:23 -04:00
Dustin Byrne
94bb4ca6a0 feat(KB-155): sort dependency dropdown newest-first by createdAt
- Sort availableTasks in TaskDetailModal by createdAt descending (newest first)
- Add test verifying dropdown items appear in newest-first order
- Exclude current task from dropdown list as before
2026-03-28 16:30:23 -04:00
Dustin Byrne
50821fc820 feat(KB-145): add global pause button to halt all AI engine activity
- Add globalPause setting to core Settings type with default false
- Guard scheduler, triage, and auto-merge queue to skip work when globalPause is active
- Add pause/play toggle button in dashboard Header with optimistic UI and rollback on failure
- Add tests for scheduler, triage, Header, and App global pause behavior
- Include minor changeset for the new feature
2026-03-28 16:30:23 -04:00
Dustin Byrne
74955c8472 feat(KB-136): add sign-in hint when no providers are authenticated
- Show 'Sign in to at least one provider to get started' message when all OAuth providers are unauthenticated
- Provider rows remain visible below the hint for easy sign-in
- Hide hint automatically when at least one provider is authenticated
- Add tests for both hint-visible and hint-hidden states
2026-03-27 20:23:26 -04:00
Dustin Byrne
bef73c9449 feat(KB-133): fix auto-scroll to use proximity-to-bottom detection
- Replace scroll-direction tracking with proximity-to-bottom check (40px threshold)
- Remove lastScrollTopRef in favor of comparing scrollTop + clientHeight to scrollHeight
- Update existing tests to use container geometry instead of scroll direction
- Add test for scrolling down but not near bottom (stays disabled)
- Add test for exact-bottom edge case (re-enables auto-scroll)
2026-03-27 20:10:41 -04:00
Dustin Byrne
9348c50567 feat(KB-132): auto-open Settings to Authentication tab when unauthenticated
- Add initialSection prop to SettingsModal to allow opening to a specific tab
- Export SectionId type from SettingsModal for use by parent components
- Check auth status on App mount and auto-open Settings to Authentication tab when all providers are unauthenticated
- Reset initialSection on modal close so subsequent manual opens default to General
- Add comprehensive tests for auto-open behavior and initialSection prop
2026-03-27 20:10:41 -04:00
Dustin Byrne
dc821973fa feat(KB-119): add configurable thinking effort level
- Add defaultThinkingLevel to core Settings types and exports
- Thread thinking level through engine executor, merger, reviewer, triage, and pi
- Add effort dropdown to Model settings UI in SettingsModal
- Add tests for thinking effort dropdown in SettingsModal
2026-03-26 23:13:40 -04:00
Dustin Byrne
c802108a02 refactor(HAI-116): rename kb to hai across all packages, CLI, and docs
- Rename npm packages from @kb/* to @hai/* and update all workspace references
- Rename CLI binary from kb to hai and config directory from .kb to .hai
- Update dashboard UI branding, titles, and references from kb to hai
- Update all test files, CI workflows, and documentation to reflect new naming
- Run comprehensive grep verification to ensure no stale kb references remain
2026-03-26 22:44:11 -04:00
Dustin Byrne
a1e824015b feat(HAI-105): polish dashboard UI styles and migrate inline styles to CSS
- Enhance CSS custom properties and add form control styling
- Polish settings layout, sidebar, and auth card styles
- Add checkbox styling, modal refinements, and migrate inline styles from SettingsModal
- Add structural test assertions for new CSS classes in SettingsModal
- Expand styles.css with ~170 new lines of maintainable, token-based CSS
2026-03-26 22:44:11 -04:00
Dustin Byrne
a8b767d6fc feat(HAI-098): add model selection and configuration support
- Extend Settings type with model provider and model name fields
- Add backend API endpoint to list available models
- Add frontend API client for fetching models
- Add model settings section to SettingsModal with provider/model dropdowns
- Update engine executor to use the selected model from settings
2026-03-26 22:44:11 -04:00
Dustin Byrne
7955897013 feat(HAI-095): add authentication settings UI with backend API
- Add backend auth API endpoints (GET/PUT) with validation in routes.ts
- Create frontend API client functions for fetching and updating auth config
- Add Authentication Settings section to SettingsModal with token input form
- Add comprehensive tests for routes, API client, and SettingsModal components
- Wire up auth settings routes in dashboard server
2026-03-26 19:39:31 -04:00
Dustin Byrne
5fc95d4e1f feat(HAI-097): add scroll-direction auto-follow to AgentLogViewer
- Replace proximity-based auto-scroll with scroll-direction detection
- Track last scroll position via ref to determine up/down direction
- Scrolling up disables auto-scroll, scrolling down re-enables it
- Add tests for auto-scroll default behavior and direction toggling
2026-03-26 19:29:59 -04:00
Dustin Byrne
30593e5f6b feat(HAI-094): add includeTaskIdInCommit setting to control commit scope
- Add includeTaskIdInCommit boolean to Settings type with default true
- Refactor merger to dynamically build system prompt based on setting
- Update fallback commit message to respect the toggle
- Add checkbox to Settings UI under Merge section
- Add unit tests for merger and SettingsModal behavior
2026-03-26 19:29:45 -04:00
Dustin Byrne
2ab34bc11a feat(HAI-089): add logo SVG to header component with tests
- Add logo.svg image element to Header component before the h1 title
- Add header-logo CSS class with sizing and flex-shrink styles
- Update header-left alignment from baseline to center
- Add Header component tests covering logo rendering and position
2026-03-26 01:05:27 -04:00
Dustin Byrne
2baa119969 feat(HAI-082): display tool call details in AgentLogViewer
- Extend AgentLogEntry type with optional detail field for tool metadata
- Thread tool args through engine executor callbacks to populate detail
- Render tool detail (name, args) in AgentLogViewer component
- Add unit tests for store, executor, and AgentLogViewer changes
2026-03-26 00:59:11 -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
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
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
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
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
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