READ DESCRIPTON!!!

you need to change username and bearer token areas!
Anonymous
python
02/09/2025 1:06 PM
9.5 KB
129
No Index
from rich import print
import requests
import os
from datetime import datetime
from pathlib import Path
import sqlite3
import json
import time
def decode_varint(buffer):
    """Decode a protobuf varint to integer."""
    value = 0
    shift = 0
    
    for byte in buffer:
        value |= (byte & 0x7F) << shift
        if not (byte & 0x80):
            break
        shift += 7
    
    # Handle negative numbers (two's complement)
    if value > 0x7FFFFFFFFFFFFFFF:
        value = value - (1 << 64)
        
    return value

def decode_queue_position(response_bytes):
    """Decode the protobuf response for queue position."""
    if not response_bytes or len(response_bytes) < 2:
        raise ValueError("Invalid response bytes")
        
    if response_bytes[0] != 0x08:  # Field 1, wire type 0
        raise ValueError("Unexpected protobuf format")
    return decode_varint(response_bytes[1:])

def get_latest_edited_file(workspace_path: str = None) -> str:
    if workspace_path is None:
        workspace_path = r"C:\Users\your_username_here\AppData\Roaming\Cursor\User\workspaceStorage"
    
    try:
        # Get all files recursively
        latest_time = 0
        latest_file = None
        target_file = "state.vscdb"
        
        for root, dirs, files in os.walk(workspace_path):
            if target_file in files:
                file_path = os.path.join(root, target_file)
                try:
                    # Get the last modified time
                    mtime = os.path.getmtime(file_path)
                    if mtime > latest_time:
                        latest_time = mtime
                        latest_file = file_path
                except OSError:
                    continue
        
        if latest_file:
            return latest_file
        else:
            print("[bold red]No state.vscdb files found in workspace storage[/bold red]")
            return None
            
    except Exception as e:
        print(f"[bold red]Error accessing workspace storage:[/bold red] {str(e)}")
        return None

def get_ai_generations(db_path: str = None):
    if db_path is None:
        db_path = get_latest_edited_file()
        if not db_path:
            return None
    
    try:
        # Connect to the database
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # Query for aiService.generations
        cursor.execute("SELECT key, value FROM ItemTable WHERE key LIKE 'aiService.generations%'")
        rows = cursor.fetchall()
        
        generations = []
        for row in rows:
            key, value = row
            try:
                # Parse the JSON value
                gen_data = json.loads(value)
                generations.append({
                    'key': key,
                    'data': gen_data
                })
            except json.JSONDecodeError:
                print(f"[bold yellow]Warning: Could not parse JSON for key {key}[/bold yellow]")
                continue
        
        # Print the generations in a readable format
        if generations:
            pass
        else:
            print("[bold yellow]No AI generations found in the database[/bold yellow]")
            
        return generations
        
    except sqlite3.Error as e:
        print(f"[bold red]SQLite error:[/bold red] {str(e)}")
        return None
    except Exception as e:
        print(f"[bold red]Error reading generations:[/bold red] {str(e)}")
        return None
    finally:
        if 'conn' in locals():
            conn.close()

def queuePosition(request_id: str, model: str) -> int:
    url = "https://api2.cursor.sh/aiserver.v1.AiService/CheckQueuePosition"
    
    headers = {
        "accept-encoding": "gzip",
        "authorization": "Bearer your bearer token here",
        "connect-protocol-version": "1",
        "content-type": "application/proto",
        "user-agent": "connect-es/1.6.1",
        "x-ghost-mode": "true"
    }
    
    # Protobuf request data
    data = f"\n${request_id}\u0012\u000f\n\u000b{model}\"\u0000"
    
    try:
        response = requests.post(url, headers=headers, data=data)
        
        # Check response status
        if response.status_code != 200:
            print(f"[bold red]Error: HTTP {response.status_code}[/bold red]")
            return None
            
        # Verify content type
        if response.headers.get("content-type") != "application/proto":
            print("[bold red]Error: Unexpected content type[/bold red]")
            return None
            
        # Verify response content
        if not response.content:
            print("Request processing...")
            return None
            
        return decode_queue_position(response.content)
        
    except requests.RequestException as e:
        print(f"[bold red]Network error:[/bold red] {str(e)}")
        return None
    except ValueError as e:
        print(f"[bold red]Decoding error:[/bold red] {str(e)}")
        return None
    except Exception as e:
        print(f"[bold red]Unexpected error:[/bold red] {str(e)}")
        return None

def get_latest_composer_uuid(db_path: str = None) -> str:
    generations = get_ai_generations(db_path)
    if not generations:
        return None
        
    latest_time = 0
    latest_uuid = None
    
    for gen in generations:
        try:
            data = gen['data']
            # Handle case where data is a list
            if isinstance(data, list):
                for item in data:
                    if isinstance(item, dict) and item.get('type') == 'composer':
                        unix_ms = int(item.get('unixMs', 0))
                        if unix_ms > latest_time:
                            latest_time = unix_ms
                            latest_uuid = item.get('generationUUID')
            # Handle case where data is a dict
            elif isinstance(data, dict) and data.get('type') == 'composer':
                unix_ms = int(data.get('unixMs', 0))
                if unix_ms > latest_time:
                    latest_time = unix_ms
                    latest_uuid = data.get('generationUUID')
        except (KeyError, ValueError, TypeError) as e:
            print(f"[bold yellow]Warning: Error processing generation: {str(e)}[/bold yellow]")
            continue
    
    if latest_uuid:
        timestamp = datetime.fromtimestamp(latest_time / 1000).strftime('%Y-%m-%d %H:%M:%S')
        return latest_uuid
    else:
        print("[bold yellow]No composer generations found[/bold yellow]")
        return None

# Example usage
if __name__ == "__main__":
    #clear the console
    os.system('cls' if os.name == 'nt' else 'clear')
    while True:
        generations = get_ai_generations()
        latest_uuid = get_latest_composer_uuid()
        # Test queue position
        if latest_uuid:
            request_id = latest_uuid
            model = "deepseek-r1" # model name is not important for the queue position
            
            position = queuePosition(request_id, model)
            if position is not None:
                print(f"[bold green]Queue Position:[/bold green] {position}")
        else:
            print("[bold yellow]No composer generations found[/bold yellow]")
        time.sleep(0.5)
Editor is loading...
Leave a Comment