Skip to content

Latest commit

 

History

History
418 lines (346 loc) · 21.2 KB

File metadata and controls

418 lines (346 loc) · 21.2 KB

Tasks

Current development tasks and feature backlog for OpenSync.

OpenSync supports two AI coding tools: OpenCode and Claude Code.

Active Tasks

  • (add next task here)

Recently Completed (Factory Droid Full Integration)

  • 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

Recently Completed (Ecosystem)

  • 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

Recently Completed (AI Coding Agents Settings)

  • 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

Recently Completed (Syncs With Section)

  • 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

Recently Completed (Prompt Templates)

  • 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

Completed

  • 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)

In Progress

None currently.

Recently Completed (Write Conflict Fixes)

  • 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

Recently Completed (Platform Stats Leaderboard)

  • 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)

Recently Completed (Footer Icons)

  • 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

Recently Completed (Provider Display Fix)

  • 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

Recently Completed (Auth Session Persistence)

  • 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)

Recently Completed

  • 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.textContent when 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

Backlog

High Priority (Plugins)

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)

High Priority (Core)

  • Source filtering in session list (OpenCode / Claude Code / All)

Medium Priority (Sync for Evals)

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)

Medium Priority (RAG Context Library)

  • 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)

Low Priority (Analytics)

  • 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)

Low Priority (Marketplace)

Deferred. See PRD-FEATURES.md.

  • Listing creation wizard
  • Anonymization utilities
  • Marketplace browser
  • Payment integration (Stripe)

Tech Debt

  • 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)

Plugin Repos

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

Notes

  • 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.cloud and .convex.site URLs, normalize to .site for 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