Agent skill

blink-codebase

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/blink-codebase

SKILL.md

Blink Codebase Skill

Purpose

This skill helps Claude understand and work with the Blink project - a Flutter app with REST API backend for managing Cursor IDE chat sessions.

When to Use

Load this skill when:

  • Working with Flutter/Dart code in the lib/ directory
  • Modifying the REST API in rest/cursor_chat_api.py
  • Understanding the architecture and data flow
  • Debugging integration between frontend and backend
  • Adding new features that span both layers

Architecture Overview

Tech Stack

  • Frontend: Flutter (Dart) with Material Design 3
  • Backend: Python FastAPI REST API
  • Database: SQLite (Cursor's state.vscdb)
  • State Management: Provider (configured, ready for use)

Project Structure

blink/
├── lib/                    # Flutter source code
│   ├── main.dart          # App entry + theme
│   ├── models/            # Data models with fromJson/toJson
│   ├── services/          # Business logic layer
│   ├── screens/           # UI screens
│   ├── widgets/           # Reusable components
│   └── utils/             # Theme and utilities
├── rest/                  # REST API service
│   ├── cursor_chat_api.py # FastAPI server
│   ├── requirements_api.txt
│   └── start_api.sh       # Startup script
└── test/                  # Flutter tests

Key Components

1. Data Flow

Flutter UI → ApiService → REST API → SQLite Database

API Endpoint: http://127.0.0.1:8000

2. Core Models

Located in lib/models/:

  • Chat: Full conversation metadata

    • Fields: id, title, status, messages, isArchived, totalLinesAdded/Removed, contextUsagePercent
    • Has fromJson() for API responses
  • Message: Individual chat messages

    • Fields: bubbleId, content, role, timestamp, hasCode, hasTodos, hasToolCall, hasThinking
    • Supports content type flags
  • CodeBlock, TodoItem, ToolCall: Rich content types

3. Services Layer

ApiService (lib/services/api_service.dart):

  • REST API communication
  • Endpoints: /health, /chats, /chats/{id}, /chats/{id}/metadata
  • Error handling with ApiException

ChatService (lib/services/chat_service.dart):

  • Business logic orchestration
  • Caching (5-minute expiry)
  • Search and filtering capabilities
  • Uses ApiService internally

4. UI Patterns

Theme: lib/utils/theme.dart

  • Custom color palette (AppTheme.primary, .codeColor, etc.)
  • Gradients, shadows, spacing constants
  • Status color helpers

Screens:

  • ChatListScreen: Search bar, filters, pull-to-refresh, shimmer loading
  • ChatDetailScreen: Message list, stats header, rich content display

Widgets:

  • MessageBubble: Gradient bubbles with content badges
  • CodeBlockViewer: Syntax highlighting with expand/collapse
  • TodoItemWidget, ToolCallCard, ThinkingBlock: Rich content
  • FilterSheet: Bottom sheet with filter options
  • ChatSearchBar: Debounced search (300ms)

Common Patterns

Adding a New Feature

Frontend (Flutter):

  1. Add model fields if needed (lib/models/)
  2. Update API service method (lib/services/api_service.dart)
  3. Add business logic (lib/services/chat_service.dart)
  4. Create/update widgets (lib/widgets/)
  5. Integrate in screens (lib/screens/)

Backend (API):

  1. Add endpoint to rest/cursor_chat_api.py
  2. Query SQLite database (tables: cursorDiskKV, ItemTable)
  3. Return JSON matching model structure

API Response Structure

dart
// Chat list response
{
  "total": 68,
  "returned": 10,
  "offset": 0,
  "chats": [
    {
      "chat_id": "uuid",
      "name": "Chat title",
      "created_at_iso": "2025-11-11T...",
      "message_count": 42,
      "is_archived": false,
      // ... more fields
    }
  ]
}

// Chat messages response
{
  "chat_id": "uuid",
  "message_count": 42,
  "metadata": { /* chat info */ },
  "messages": [
    {
      "bubble_id": "uuid",
      "type": 1,  // 1=user, 2=assistant
      "type_label": "user",
      "text": "Message content",
      "has_code": false,
      "has_todos": true,
      // ... more flags
    }
  ]
}

Styling Guidelines

  • Use AppTheme constants (never hardcode colors/spacing)
  • Apply AppTheme.radiusMedium for rounded corners
  • Use AppTheme.cardShadow for elevation
  • Follow Material Design 3 principles
  • Gradients for visual hierarchy

State Management

  • Provider is configured in main.dart
  • Currently not actively used (direct service calls)
  • Ready for expansion if needed

Development Workflow

Running the App

bash
# Terminal 1: Start REST API
cd /path/to/blink/rest
python3 cursor_chat_api.py

# Terminal 2: Run Flutter app
cd /path/to/blink
flutter run -d macos  # or chrome, android, ios

Common Tasks

Add new API endpoint:

  1. Add method to ApiService
  2. Add business logic to ChatService
  3. Update UI to call the method

Add new widget:

  1. Create file in lib/widgets/
  2. Import AppTheme for styling
  3. Export from parent screen/widget

Debug API issues:

  1. Check REST API logs (console output)
  2. Check Flutter console for errors
  3. Verify API endpoint in ApiService.baseUrl
  4. Test endpoint directly: curl http://localhost:8000/health

Testing

API Testing

bash
cd rest
python3 test_api.py

Flutter Testing

bash
flutter test
flutter analyze  # Linting

Dependencies

Flutter (pubspec.yaml)

  • http: API calls
  • provider: State management
  • flutter_markdown: Markdown rendering
  • shimmer: Loading animations
  • flutter_syntax_view: Code syntax highlighting
  • intl: Date formatting

Python (requirements_api.txt)

  • fastapi: REST framework
  • uvicorn: ASGI server
  • pydantic: Data validation

Troubleshooting

Common Issues

"Unable to connect to API":

  • Ensure REST API is running on port 8000
  • Check ApiService.baseUrl (use 127.0.0.1 for iOS simulator)
  • For Android emulator: use http://10.0.2.2:8000

"No chats found":

  • Verify Cursor database path in cursor_chat_api.py
  • Check database exists: ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb

Build errors:

bash
flutter clean
flutter pub get

API Reference

REST Endpoints

GET /health

  • Returns: {"status": "healthy", "total_chats": N, "total_messages": N}

GET /chats

  • Query params: include_archived, sort_by, limit, offset
  • Returns: Paginated chat list

GET /chats/{chat_id}

  • Query params: include_metadata, limit
  • Returns: Chat with full message history

GET /chats/{chat_id}/metadata

  • Returns: Chat metadata only (no messages)

Progressive Disclosure

Basic Understanding (Start Here)

  • This is a Flutter app that displays Cursor IDE chat history
  • It connects to a local REST API that reads from Cursor's SQLite database
  • Material Design 3 with custom theme
  • Search, filtering, and rich content display

Intermediate Details

  • Two-layer architecture: Flutter UI + Python REST API
  • Caching strategy with 5-minute expiry
  • Content types: code blocks, todos, tool calls, thinking blocks
  • Real-time search with 300ms debounce

Advanced Patterns

  • Direct SQLite queries in Python backend
  • JSON deserialization through model factories
  • Gradient-based UI hierarchy
  • Composable widget system
  • Extensible for WebSocket real-time updates

Related Resources

Didn't find tool you were looking for?

Be as detailed as possible for better results