Current development tasks and feature backlog for OpenSync.
OpenSync supports two AI coding tools: OpenCode and Claude Code.
- (add next task here)
- Full Factory Droid support as third sync source
- Created src/lib/source.ts with getSourceLabel and getSourceColorClass utilities
- Added factoryDroid stats tracking in convex/evals.ts (bySource.factoryDroid)
- Updated Context.tsx to use source utilities for badges
- Added Factory Droid plugin card in Dashboard setup banner (3-column grid)
- Refactored Dashboard source badges to use utilities (FD shows orange)
- Added Factory Droid stat card on Evals page
- Added droid-sync link in Settings Plugin Setup section
- Updated API key description to mention droid-sync
- Added droid-sync community plugin to README Ecosystem table
- Links to GitHub repo (yemyat/droid-sync-plugin) and npm package (droid-sync)
- Marked as community-built plugin for Factory Droid sessions
- AI Coding Agents section in Settings page
- Two-column layout: Plugin Setup (left) + AI Coding Agents (right)
- Added enabledAgents field to users table in schema
- Added updateEnabledAgents mutation
- Updated me query to return enabledAgents
- Checkbox list with 12 CLI tools grouped by status (supported, community, planned, TBD)
- Status badges with theme-aware colors
- OpenCode and Claude Code enabled by default for backward compatibility
- Source filter dropdown respects user's enabled agents
- Dashboard SourceDropdown filters options based on enabledAgents
- Evals page source filter respects enabledAgents
- Defaults to ["opencode", "claude-code"] for existing users without preference
- Added "Syncs with" section on Login page above Getting Started
- OpenCode icon with dark/light theme switching
- Claude Code icon (inline SVG with currentColor)
- Factory Droid icon (inline SVG with currentColor)
- Cursor icon with "coming soon" badge on top for alignment
- All icons adapt to dark/tan theme
- Added reusable prompt template for adding CLI/npm packages to homepage Getting Started section
- Template file: docs/add-package-to-home-prompt.md
- Supports badge types: npm (default), community, cli
- Pattern follows existing plugin links structure in Login.tsx
-
Custom themed source filter dropdown in Dashboard (replaces native select with dark/tan mode support)
-
Fix production logout on page refresh (devMode=true, simplified ProtectedRoute with Convex auth)
-
Settings back link navigates to /dashboard instead of homepage
-
Terms of Service and Privacy Policy modals in homepage footer and Settings page
-
Public homepage: logged-in users stay on homepage with "Go to Dashboard" button, no auto-redirect
-
Docs page search with typeahead (client-side, instant results, Cmd+K shortcut, hash navigation)
-
Fix filter UI alignment
-
Add API rename and Claude API config
-
Notifications UI match existing design
-
Dedicated context search page (/context) system
-
Search results highlighting
-
Pagination for large session lists
-
update docs
-
Delete user data and profile option
-
Database schema design (users, sessions, messages, parts, embeddings)
-
WorkOS AuthKit integration
-
Session sync endpoints (POST /sync/session, /message, /batch)
-
Public API endpoints (sessions, search, export, stats)
-
Full-text search on sessions and messages
-
Semantic search with vector embeddings
-
Hybrid search with RRF scoring
-
Dashboard with session list and viewer
-
Public session sharing (/s/:slug)
-
Settings page with usage stats
-
API key generation and management
-
Interactive docs page
-
Markdown export
-
README and documentation
-
opencode-sync-plugin published to npm (npmjs.com/package/opencode-sync-plugin)
-
Fixed Netlify build errors (vite-env.d.ts, @types/node, tsconfig types)
-
Fixed Netlify SPA routing 404 errors (_redirects, netlify.toml)
-
Added 404 catch-all route and WorkOS auth sync detection
-
GET /sync/sessions/list endpoint for listing session external IDs (used by sync CLI --all)
-
Dashboard redesign with Overview, Sessions, Analytics views
-
Analytics queries (dailyStats, modelStats, projectStats, providerStats, summaryStats)
-
Reusable chart components (BarChart, AreaChart, DonutChart, Sparkline, ProgressBar, StatCard)
-
Session filtering by model, project, provider
-
Session sorting by date, tokens, cost, duration
-
Settings page redesign with tabbed interface
-
Mobile-responsive dashboard layout
-
Tan mode theme toggle for Dashboard, Settings, and Docs pages (dark mode default)
-
Theme switcher icon in header with localStorage persistence
-
Added Netlify logo to login page footer
-
Added close icon (X) to session detail panel for desktop
-
Hidden scrollbar on sessions list while keeping scroll functionality
-
Fixed Tokens/Cost/Duration table header alignment
-
Fixed markdown download with sanitized filenames and loading state
-
Timeline view for sessions (DAW-style track visualization grouped by project)
-
Horizontal drag scrolling for sessions list and timeline view
-
Sessions view mode toggle (list/timeline)
-
Enhanced Analytics with efficiency metrics (tokens/message, cost per 1K, prompt/completion ratio)
-
Extended project analytics table with full token breakdown and duration
-
Removed Daily Activity chart from Analytics (replaced with detailed metrics)
-
Projects Overview filtering (search, min sessions, min tokens) with sortable columns
-
WorkOS login fix: session persistence across page refresh with proper callback handling
-
Plugin Setup section in Settings with Convex URL and API Key display
-
WORKOS-AUTH.md documentation for auth architecture
-
ConsumptionBreakdown component with stacked bar chart, credit bar, and usage table
-
Overview layout reorder: Usage Overview up, Token Usage and Model Distribution to bottom
-
Dashboard footer with GitHub repo link and "powered by convex" attribution
-
CSV export for all user session data (exportAllDataCSV Convex query)
-
Export CSV button in sessions view toolbar next to list/timeline toggle
-
Fixed Consumption Breakdown filters (project/model selection now filters data)
-
Added Tokens/Cost toggle for chart visualization in Usage Overview
-
Added prompt/completion token breakdown to usage table
-
Fixed markdown export to include message content (textContent fallback)
-
Privacy messaging on login page ("Private - your data stays in your account")
-
Removed EnvStatus debug component from login footer
-
Fixed session persistence on page refresh with retry mechanism and timeout handling
-
ConfirmModal component for themed confirmation dialogs
-
Session delete confirmation modal (replaces browser confirm())
-
Fixed StackedBarChart height rendering for proper bar display
-
Date range selector in Usage Overview (7/14/30/60/90 days)
-
Source field added to sessions schema (opencode vs claude-code)
-
Source dropdown filter in dashboard header (All Sources / OpenCode / Claude Code)
-
All analytics queries updated to filter by source
-
claude-code-sync plugin backend integration completed
-
Source badges (CC/OC) on session list items and detail header
-
sourceStats query for session distribution by source
-
messages.upsert accepts source param for auto-created sessions
-
CSV export includes Source column and exports all sessions
-
Evals tab integrated into Dashboard (Overview, Sessions, Evals, Analytics)
-
Session sync timeout in ProtectedRoute (5s max, redirects to login on failure)
None currently.
- Fixed write conflicts in Convex mutations causing OCC retries
- Added 5-second dedup window to messages:upsert for idempotency
- Added 10-second dedup window to sessions:upsert for idempotency
- Refactored messages:upsert to combine multiple session patches into single write
- Added Promise.all for parallel parts deletion and insertion
- Added idempotency checks to embeddings:store and storeMessageEmbedding (replace pattern)
- Created sessions:batchUpsert mutation for bulk session sync
- Created messages:batchUpsert mutation for bulk message sync
- Updated /sync/batch endpoint to use batch mutations instead of loops
- Updated convex-write-conflicts.mdc with OpenSync-specific patterns
- Real-time Platform Stats leaderboard on Login/homepage
- Top 5 models by total tokens used
- Token breakdown (prompt vs completion with visual progress bar)
- Total messages count across all sessions
- Positioned above Open Source footer link
- Shows 0 values when database is empty (no hiding)
- Updates in real-time via Convex when data syncs
- Supports both dark and tan themes
- publicPlatformStats query (no auth required)
- Added Discord and Support icons to Login page footer
- Discord icon links to convex.dev/community
- Support icon (MessageCircleQuestion) links to GitHub issues page
- Icons placed next to existing GitHub icon in bottom left footer
- Fixed provider display showing "unknown" for antigravity-oauth and anthropic-oauth sessions (GitHub #2)
- Added inferProvider helper function to convex/analytics.ts
- Infers provider from model name when provider field is missing (anthropic, openai, google, mistral, cohere, meta, deepseek, groq)
- Applied consistently in providerStats query, sessionsWithDetails filtering, and session list return values
- Filter dropdown and provider chart now show correct provider names
- Backward compatible: preserves existing provider values, only infers when missing
- Fixed auth session persistence issue (GitHub #1)
- Users no longer need to sign in again on page refresh
- Direct navigation to protected routes now works
- Added dedicated CallbackHandler for OAuth code processing
- Added return-to URL preservation in sessionStorage
- Added devMode config for production session handling
- 10-second timeout on callback processing to prevent stuck states
- Added /dashboard route (alias to /)
- Added /profile route (shows Settings with profile tab selected)
-
Context search slide-over panel for better UX
- Click search results to preview session in slide-over panel (no navigation)
- Full session details with message thread and syntax highlighting
- Copy/Download/Public Link actions in panel header
- "Open in Dashboard" button for full view (deep links to Sessions tab with session selected)
- Message highlighting when clicking message search results
- Escape key and backdrop click to close
- Dashboard now reads ?session= URL param to auto-select session and switch to Sessions tab
- Cmd/Ctrl+K on Dashboard navigates to Context search
- Fixed tan mode prose styling (prose-zinc for proper text colors)
-
Documentation updates for local deployment and external links
- Added Watch the demo link on Login page CTA (links to X demo video)
- Added 100% local deployment section in Docs page (/docs#requirements-local)
- Added 100% local deployment instructions in OPENSYNC-SETUP.md
- Trust message on Login page now mentions cloud version with link to local docs
- Added links to opencode.ai and claude.ai in Docs page hero and plugin sections
-
Mobile optimization for Login and Dashboard pages
- Fixed Getting Started section on Login page (was hidden on mobile with the dashboard preview)
- Dashboard header: smaller padding, source dropdown hidden on small mobile, scrollable view toggles
- Sessions filter bar: wrapping layout, icon-only filter button on mobile, hidden timeline view
- Session rows: stacked mobile layout vs 12-column desktop grid
- Analytics filter bar: responsive search input, hidden advanced filters on mobile
- Footer: condensed text on mobile
- Added mobile Context icon in header nav
-
Fixed public sessions not showing all data and missing theme toggle
- Added dark/tan theme toggle button (Sun/Moon icons) to public session header
- Added content normalization helpers (getTextContent, getToolCallDetails, getToolResult)
- Added textContent fallback when message.parts has no displayable content
- Added tool-result part type rendering (was missing)
- Updated all styling to use theme-aware classes
-
Added install.md for AI agent installation (follows installmd.org spec for self-hosting setup)
-
Fixed setup banner flash on dashboard refresh (banner now checks loading state before rendering)
-
Collapsible Profile section in Settings (collapsed by default, hides email for video demos)
-
Removed user email from dropdown menus (Dashboard, Context, Evals, Header) for cleaner UX
-
Page-specific theme defaults configuration
- Added PAGE_THEME_DEFAULTS config object in theme.tsx
- Added usePageTheme hook to apply different defaults per page
- Login page defaults to dark, dashboard/docs/settings default to tan
- User preferences in localStorage always take priority over page defaults
-
Fixed delete account partial deletion and redirect issues
- Changed deleteAccount action to delete Convex data first, then WorkOS
- Prevents partial deletion when WorkOS deletion triggers session invalidation
- Fixed redirect to homepage instead of WorkOS logout URL after deletion
- Removed signOut() call which caused browser redirect interruption
-
Login page feature list improvements
- Updated tagline to mention eval datasets
- Added Tag feature bullet for eval organization
- Improved keyword colors for better dark mode contrast
- Improved trust message and plugin link readability
- Hidden scrollbar added to Docs sidebar and main content
-
Comprehensive documentation page update (Docs.tsx)
- Added "Use Hosted Version" section as first section
- Features section with Sync, Search, Private, Export, Delete, API
- Plugin installation instructions for hosted opensync.dev
- Login and sync walkthrough for both opencode-sync-plugin and claude-code-sync
- Left sidebar with collapsible navigation and anchor tags
- Right table of contents for on-page navigation
- Copy as Markdown button per section and full page
- View as Markdown mode for entire documentation
- Mobile responsive design with slide-out sidebar
- llms.txt file for AI assistants
-
Login page mockup updated to match Dashboard features
- View tabs row (overview/sessions/evals/analytics)
- 4 stats instead of 3 (sessions, tokens, cost, duration)
- OC/CC source badges on session items
- GitHub icon link in footer (bottom left)
-
Setup banner for new users on Dashboard Overview
- Shows when totalSessions === 0 with links to both sync plugins
- Two plugin cards: opencode-sync-plugin (OC) and claude-code-sync (CC)
- npm install commands and GitHub/npm links for each
- Dismissible with X button, persists in localStorage
-
Dashboard UX improvement: removed search bar, added search icon to Context link
- Search functionality consolidated into dedicated Context page
- Cleaner header with Context link as search entry point
- Removed unused searchQuery state, keyboard handler, and searchResults query
-
Login page tan mode theme support with footer theme switcher
- Added ThemeSwitcher component to bottom right footer
- Full theme-aware styling for all Login page elements
- Logo inversion for tan mode (Convex, WorkOS, Netlify)
- Theme persists via localStorage
-
Delete user data and account options
- Added deleteAllData mutation (removes sessions, messages, parts, embeddings, apiLogs)
- Added deleteAccount action (calls WorkOS API DELETE /user_management/users/:id)
- Danger Zone section in Settings Profile tab with confirmation modals
- Trust message on login page about data privacy and control
- Getting started section with plugin links on login page
-
Fixed Claude Code session content rendering (empty blocks issue)
- Added content normalization helpers to handle different formats (string vs object)
- SessionViewer now properly extracts text from
{ text: "..." }or{ content: "..." }formats - Added fallback to
message.textContentwhen parts are empty - Updated markdown export, API export, and context functions with same normalization
- Fixed searchable text extraction in message upsert for better full-text search
- Enhanced embedding generation to use parts content as fallback
Authentication: All plugins use API Key auth (osk_* prefix). See PLUGIN-AUTH-PRD.md.
- opencode-sync-plugin (npm package for OpenCode CLI) - Published: npmjs.com/package/opencode-sync-plugin
- API Key authentication (no browser OAuth)
- Session lifecycle hooks
- CLI commands (login, logout, status, config)
- Config file (~/.config/opencode-sync/config.json)
- URL normalization (.cloud to .site)
- claude-code-sync plugin (npm package for Claude Code) - Published: npmjs.com/package/claude-code-sync
- API Key authentication (no browser OAuth)
- Event hooks (SessionStart, UserPromptSubmit, PostToolUse, SessionEnd)
- CLI commands (login, logout, status, config, setup, verify, synctest)
- Config file (~/.config/claude-code-sync/config.json)
- URL normalization (.cloud to .site)
- OpenSync backend integration (source field, source badge, sourceStats query)
- Add source field to sessions schema (opencode vs claude-code)
- Source filtering in session list (OpenCode / Claude Code / All)
See SYNC-FOR-EVALS-PRD.md for full specification.
- Schema: Add evalReady, reviewedAt, evalNotes, evalTags fields
- EvalReadyToggle component in session detail
- Evals page with eval-ready session list
- EvalExportModal with format selection
- Export formats:
- DeepEval JSON
- OpenAI Evals JSONL
- Filesystem (plain text files)
- WhatsNextPanel with copy-paste commands (future enhancement)
- convex/evals.ts functions
- Message-level embeddings (messageEmbeddings table with vector index)
- Dedicated context search page (/context)
- Paginated search results (20 per page)
- Full-text search without OpenAI API key
- Token budget controls
- Saved searches / bookmarks
- Expose the existing search APIs as MCP tools that agents can call directly
- Copy format options (plain, markdown, XML tags)
- Model Comparison Dashboard (basic version implemented)
- Analytics overview with 30-day range
- Usage charts by model
- Model comparison with progress bars
- Efficiency metrics (tokens per message, cost per 1K tokens, prompt/completion ratio)
- Date range selector (custom ranges)
Deferred. See PRD-FEATURES.md.
- Listing creation wizard
- Anonymization utilities
- Marketplace browser
- Payment integration (Stripe)
- Add error boundaries to pages
- Add loading skeletons
- Add test coverage
- Add rate limiting to API endpoints
- Add request validation middleware
- Migration script for source field on existing sessions (handled via default value in queries)
- Write conflict prevention (dedup windows, batch mutations, idempotency checks)
| Repo | Purpose | Language | Auth | Status |
|---|---|---|---|---|
| opencode-sync-plugin | npm package for OpenCode CLI | TypeScript | API Key (osk_*) | Published |
| claude-code-sync | npm package for Claude Code | TypeScript | API Key (osk_*) | Published |
- Plugins are separate repos from this backend
- Both plugins use TypeScript/JavaScript (npm packages)
- Plugins authenticate with API Keys (
osk_*), not WorkOS OAuth - Web UI continues to use WorkOS AuthKit for browser authentication
- Plugins accept both
.convex.cloudand.convex.siteURLs, normalize to.sitefor API calls - Source field distinguishes session origins: "opencode" (default) vs "claude-code"
- Existing sessions without source field are treated as "opencode" for backward compatibility
- Dashboard source dropdown filters all views (Overview, Sessions, Analytics)
- Eval export feature targets DeepEval, OpenAI Evals, and Promptfoo frameworks
- Marketplace payment uses Convex Stripe component (future)
- See PLUGIN-AUTH-PRD.md for full plugin authentication specification
- See CLAUDE-CODE-PLUGIN.md for Claude Code plugin documentation