React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. Currently, two official plugins are available:- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:Project Settings layout
Project settings have been moved from dialog/drawer variants to a dedicated page at/projects/:projectId/settings.
- The
ProjectSettingsPagecomponent provides a full-page settings experience with 5 sections:- General - Project name, repository URL, and ticket numbering
- Agents - Default agent selection
- Scripts - Pre/post ticket enhancement scripts
- GitHub - Issue sync and auto-close settings
- Inline Agents - Configure inline agent behavior
- The page uses
MasterDetailLayoutfor consistent sidebar navigation - Settings sections use a consistent card-based layout with polished typography
- Each section component (
TicketNumberingForm,RepositoryDefaultsForm,AgentDefaultsForm,ScriptsForm,GithubIssueSyncSection,InlineAgentForm) follows the same design pattern
MasterDetailLayout
TheMasterDetailLayout<T> component provides a consistent sidebar navigation pattern used across the application with generic type support for strongly-typed items:
Props
| Prop | Type | Description |
|---|---|---|
title | string | Page title displayed in header |
items | T[] | Array of items to display in sidebar |
activeId | string | null | ID of currently active/selected item |
onSelect | (id: string) => void | Callback when item is selected |
renderItem | (item: T, isActive: boolean, defaultRender: () => ReactNode) => ReactNode | Custom renderer for sidebar items (receives defaultRender callback for fallback) |
sidebarFooter | ReactNode | null | Content to render at bottom of sidebar (e.g., Quick Launch) |
sidebarClassName | string | Additional CSS classes for sidebar |
loading | boolean | Show loading state in sidebar |
emptyState | ReactNode | Content when sidebar is empty |
MasterDetailItem Interface
Base interface for sidebar items:ProjectSettingsPage- Project settings with section navigationAgentsPage- Agent selection and managementTerminalsToolWindow- Terminal sessions with worktree list
Hooks
useAttemptConversationPagination
A React hook for managing paginated loading of attempt conversation messages with automatic initial load and manual pagination support.- Automatic initial message load when
attemptIdchanges - Pagination with configurable page size
- Duplicate prevention when appending new messages
- Proper cleanup and state reset on attempt change
New Pages
The sidebar refactor introduced several new dedicated pages:/projects/:projectId/dashboard- Project-specific dashboard with metrics/projects/:projectId/agents- Project-specific agent management/projects/:projectId/github-issues- GitHub issue viewing and syncing/projects/:projectId/worktrees- Git worktree management/projects/:projectId/settings- Full-page project settings (replaced dialog/drawer)/projects/:projectId/terminals- PTY terminal sessions in worktree directories