Conversation
… web Delete old next.js apps/web, rename web-v2 to web as the primary dashboard. Update all references in package.json, README, and contributing docs. The vite migration is feature-complete (1:1 parity with next.js version) and ready for production.
Convex crons run in UTC server-side, but users were confused seeing "6am UTC" in the label while the actual build ran at 7am their time. Added transparent local↔UTC conversion: users now type times in their timezone, the input displays local time, and we convert to UTC for storage/execution. Works for simple fixed-hour crons; complex expressions (ranges, steps) are timezone-agnostic.
- hoist users, projects, auth.me queries from per-card to parent level * 120 cards each re-creating 3 identical subscriptions = 360 redundant queries * now fetched once and passed as props, eliminating churn on view switch - change default view mode for projects and quick tasks to kanban - fix search param breadcrumb persistence on task detail back navigation * only append ?view param when non-default (not kanban) - remove AnimatePresence wait mode animation on view toggle for instant switching - add vite optimizeDeps.include for pre-bundling heavy deps (except @tiptap/pm) view switching now completes instantly instead of taking 3 seconds
Move footer actions (request changes, view PR, etc.) from right column to full-width bottom bar to improve UX and visual hierarchy
…pattern combines "Run Eva" + "Schedule" and "Build Project" + "Schedule Build" into single split buttons where the primary action is on the left and the schedule dropdown is on the right. improves UI consistency with modern apps (github, linear, vercel) and reduces visual clutter in the task footer and project detail header. also fixes coordinated hover animation across both button halves using group hover.
…ess patterns Replaced inefficient queries that scanned all documents with indexed fan-out patterns. githubRepos.list and agentTasks.getActiveTasks now fetch only user's accessible repos via team memberships and direct connections. Added indexes for scoped queries: by_connected_by, by_repo_and_archived, by_repo_and_enabled. Removed agentRuns.listAll (dead code). Consolidated duplicate patches in updateStatus. Optimized recomputeProjectPhase to use parallel index probes instead of collecting all tasks. Result: reactive query read sets are now proportional to user data, improving both performance and subscription invalidation scope.
…ation when a task/build is scheduled, clicking the left button now opens the schedule popover instead of being non-functional. simplified by using a ref to programmatically click the chevron button rather than managing controlled state. also fixed the active scale animation breaking across button halves — now the wrapper scales while each half cancels its individual press animation. extracted split button components for clarity.
… detail Moved createdAt display from inside TaskDescription component to TaskDetailInline header row, placing it right-aligned next to the scheduled date badge. Removed unused createdAt prop and dayjs import from TaskDescription.
… icons Refactored UserInitials to accept optional pre-fetched user data (skips query) or userId (query). Extracted getUserInitials as a shared export to eliminate duplicate logic. StatusFieldsSection trigger now uses UserInitials with pre-fetched data; dropdown items show icons (Facehash for assignees, IconFolder for projects, IconBrain for models).
…fault/detailed - Reduce token waste by compressing ask/plan/execute prompts ~40% while preserving all behavioral rules - Remove redundant "concise" option (default is already concise-leaning) - Make getResponseLengthInstruction mode-aware (ask controls diagrams, execute controls summary depth, plan returns empty) - Type narrow ResponseLength to "default" | "detailed"
When a new deployment updates chunk hashes, cached HTML may reference chunks that no longer exist. This handler catches vite:preloadError and reloads the page so users fetch the new HTML with correct asset references.
Reduces initial bundle size by lazy-loading route chunks on demand instead of bundling all dependencies upfront. This automatically splits heavy libraries (chart.js, xterm, streamdown, mermaid) so they only load when users navigate to routes that use them.
Move "Use markdown" directive to be dynamic in getResponseLengthInstruction() so it's not hardcoded in sessionWorkflow template.
Treat GnuTLS recv errors, abruptly terminated TLS sessions, and other transient HTTP/2 failures as retryable during sandbox git operations. These errors indicate flaky network hops, not real failures—a manual retry typically succeeds. Expands both quick-task and session sandbox retry markers to catch these cases automatically.
- Preload git global user config in snapshot so sandboxes don't need to run it on creation - Move apt lists cleanup to single location after all apt installs to save ~100MB+ disk space
…cxdn83y1xb Eva: if accessing a hidden repo via url
Always use useNavigate from @tanstack/react-router instead of window.location.href to preserve SPA navigation and client state.
ConvexProviderWithClerk was mounting separately in _global and _repo layouts, causing it to tear down and remount during route transitions. This created a window where queries would fire before auth re-established, resulting in "Not authenticated" errors. Moving the provider to the root ensures it mounts once and persists across all route changes. Split ClientProvider into a connection-only provider (at root) and AuthGate (in layouts) to handle auth gating without affecting the persistent connection.
…sers Render a blank background while Clerk auth is loading instead of showing sign-in/signup buttons. This prevents the flash where authenticated users see the buttons briefly before the useEffect redirect fires.
Replaces useEffect-based redirects with TanStack Router's beforeLoad, eliminating flashes and ensuring redirects happen before component render. ClerkProvider now wraps the entire app above RouterProvider, making auth context available to beforeLoad hooks. Protected routes (_global, _repo) redirect to / if not signed in at navigation time. Landing page (/) redirects to /home if signed in. Unauthenticated handler in AuthGate catches sign-outs on already-mounted pages to redirect back to /.
…s1ah83zmpg
Eva: find all links that point to /quick-tasks?taskId={id}
…28dx83yr0q Eva: chat panel in designs and sessions
…yp8n83yf76 Eva: right click context menu
…ting Replaces read-only custom timeline implementation with kibo-ui Gantt component to enable interactive project date editing. Adds drag-to-resize/move bars, daily/monthly/quarterly range modes, and fixed sidebar with project labels. Implementation details: - New packages/ui/src/kibo/ module with 5 gantt components - Converted all date-fns calls to dayjs from @conductor/shared/dates - Replaced jotai atoms with React context for dragging/scroll state - Inlined lodash.throttle; removed @uidotdev/usehooks dependency - Rewrote ProjectsTimeline.tsx from 612→150 lines as thin Gantt wrapper - Drag-to-move projects triggers projects.update mutation to persist dates - Maintained design system compliance: no shadows/borders, tonal hierarchy Verification: - Zero TypeScript errors in packages/ui and apps/web - No 'any', 'unknown', 'as', or '!' in new code - All phase colors render correctly across 5 project phases
Replaced the custom 310-line ActivityHeatmap with Kibo UI's composable ContributionGraph. Forked source from kibo-ui, converted date-fns → dayjs to match codebase conventions. Rewrote ActivityHeatmap as thin wrapper keeping streak stats and header. Colors now use user's theme accent color via --primary CSS variable. Makes the component consistent with existing kibo Gantt pattern and improves maintainability. Also disabled date-range filtering on heatmap—now always shows full year regardless of stats filter selection.
Added `comfortable` prop to PageWrapper (defaults to false, preserving existing compact behavior for quick tasks/projects). When enabled: - Increases padding from p-3 to p-4 sm:p-6 - Constrains content to max-w-5xl and centers it (header + content align) - Applies to settings, stats, automations, and inbox pages where extra breathing room improves scannability of forms and configuration UIs. Keeps quick tasks/projects/sessions at original compact density since those pages benefit from space efficiency.
Standardizes on Kibo UI across the codebase (Gantt, ContributionGraph) by forking Kibo's kanban and list primitives into packages/ui. App-level KanbanBoard now composes KanbanProvider, KanbanCards, and KanbanCard from Kibo instead of raw dnd-kit hooks. Keeps domain-specific features (nuqs filtering, motion animations, status mutations). Adds a11y announcements for drag operations via Kibo's accessibility config. - New packages/ui/src/kibo/kanban.tsx: KanbanProvider, KanbanBoard, KanbanCards, KanbanCard, KanbanHeader (composable, no tunnel-rat dep) - New packages/ui/src/kibo/list.tsx: ListProvider, ListGroup, ListHeader, ListItems, ListItem (for future use) - Rewrote apps/web kanban to compose Kibo primitives instead of raw DndContext/SortableContext - Rewrote KanbanColumn to use Kibo's KanbanBoard droppable wrapper - Added @dnd-kit/sortable and @dnd-kit/utilities to packages/ui peer dependencies
Prettier reformatted staged files. Minor improvements to list.tsx: added sensors with distance constraint to ListProvider for better UX, adjusted ListItems gap, refined ListGroup and ListItem styling for consistency.
…o-ui data-table Introduces ProjectsTableView and QuickTasksTableView components to provide alternative table-based layouts alongside existing views. Uses kibo-ui's composable data-table primitive for consistent, reusable table functionality across the app.
Removed 7 unused dependencies identified by knip scan: - @daytonaio/sdk, @hookform/resolvers, @pierre/diffs (web duplicates) - react-hook-form, resend, shell-quote (never used) - @solvers-hub/llm-json, @use-gesture/react (unused) - jspdf, jspdf-autotable (dead PDF export code) Kept backend copies of shell-quote and llm-json which are actively used in sandbox/workflow operations.
ThemeSwitcher is a composable theme control component that lets users pick between light, dark, and system theme modes. Uses Radix UI's useControllableState for flexible control integration.
Replaces custom HTML5 video player with media-chrome powered kibo-ui video player for consistent themed control bar. Consolidates speed, volume, seek, and time display into a single inline control surface.
rates prop expects an array-like type, not a string. changed from "1 3 5 8" to [1, 3, 5, 8] to match media-chrome component expectations and fix build error.
Shows active teammates from your teams via avatar stack at bottom of sidebar. Uses existing 2-minute presence heartbeat window to determine online status. Collapses to vertical stack on small sidebar.
Enable team members to see each other's cursor positions in real-time when viewing the same repo page. Leverages existing @convex-dev/presence infrastructure with per-page rooms. Cursors are colored by user's theme accent color and display first name. Positions are throttled to 50ms and use percentage-based coordinates for cross-resolution support.
… loss during tab navigation Repo context was previously wrapped at the pathless /_repo layout and parsed owner/repo from useLocation().pathname manually. During TanStack Router transitions between nested routes (tabs), pathname could momentarily become stale, causing the provider to briefly unmount while child components still rendered — leading to intermittent "useRepo must be used within a RepoProvider" errors. RepoProvider now uses $owner/$repo route params directly via Route.useParams(), which are always stable for the entire repo route subtree. Eliminates the one-frame context gap during tab transitions.
Implement lazy-loaded code block component to improve performance on task descriptions with code snippets. Add AI elements module to ui package for reusable AI-specific UI patterns.
…clic dependency fix - Refactor LazyCodeBlock to use React 19's use() hook with module-level promise caching, eliminating unstyled code flash - Replace react-syntax-highlighter (624KB) with shiki (76KB) for syntax highlighting - Lazy-load FormattedText (tiptap, ~300KB) and RunTimelineItem (streamdown, ~100KB) in TaskDescription and ActivityTimeline - Fix cyclic workspace dependency: move dayjs setup to packages/ui to eliminate @conductor/shared import - Add vendor chunk configuration in vite.config.ts to split radix, convex, and clerk dependencies - Add sideEffects: false to packages/ui and "./ai" sub-path export for better tree-shaking - Results: index chunk -80% (1.4MB → 275KB), TaskDetailInline -92% (1.0MB → 80KB)
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.