Skip to main content

TypeScript Types

shared/types.ts is the single source of truth for all TypeScript interfaces shared between the client and server. Both sides import from this file, ensuring type consistency across the entire application.

Session Types

Session

Represents a full chat session including all messages.

interface Session {
id: string;
title: string;
templateId?: string;
projectId?: string;
createdAt: string;
updatedAt: string;
messages: Message[];
}

Message

A single message within a session.

interface Message {
id: string;
role: "user" | "assistant";
content: string;
source?: "voice" | "text";
timestamp: string;
isError?: boolean;
}

SessionMeta

Session metadata without the full message array — used for listing sessions efficiently.

type SessionMeta = Omit<Session, "messages"> & {
messageCount: number;
};

Project Types

Project

A project that groups related sessions together.

interface Project {
id: string;
name: string;
description: string;
color: string;
createdAt: string;
updatedAt: string;
}

ProjectMeta

Project metadata enriched with a count of associated sessions.

type ProjectMeta = Project & {
sessionCount: number;
};

Template Types

Template

A prompt template with its full content.

interface Template {
id: string;
title: string;
description: string;
category: string;
tags: string[];
source: "local" | "community";
content: string;
author?: string;
version?: string;
variables?: TemplateVariable[];
createdAt: string;
updatedAt: string;
}

TemplateVariable

Defines a variable placeholder within a template.

interface TemplateVariable {
name: string;
label: string;
default?: string;
required?: boolean;
}

TemplateMeta

Template metadata without the content body — used for listing templates.

type TemplateMeta = Omit<Template, "content">;

Vosk STT Model Types

VoskModelManifest

Describes a Vosk speech-to-text model as listed in the manifest.

interface VoskModelManifest {
id: string;
name: string;
language: string;
size: string;
accuracy: string;
minRAM: string;
url: string;
default: boolean;
}

VoskModelInfo

Extends the manifest with runtime status information.

type VoskModelInfo = VoskModelManifest & {
downloaded: boolean;
active: boolean;
};

AI / Settings Types

AIProviderConfig

Configuration for a single AI provider.

interface AIProviderConfig {
apiKey: string;
model: string;
baseUrl: string;
}

AISettings

All AI-related settings, supporting multiple providers.

interface AISettings {
provider: string;
providers: Record<string, AIProviderConfig>;
systemPrompt?: string;
temperature?: number;
maxTokens?: number;
thinkingEnabled?: boolean;
planMode?: boolean;
positivePrompt?: string;
negativePrompt?: string;
}

Settings

Top-level application settings object.

interface Settings {
ai: AISettings;
stt: {
activeModel: string;
sampleRate: number;
};
general: {
theme: string;
};
onboarding: {
completed: boolean;
};
}

WebSocket / STT Event Types

TranscriptEvent

Emitted by the STT WebSocket when speech is recognized.

interface TranscriptEvent {
type: "partial" | "final";
text: string;
}

STTError

Emitted when an STT error occurs.

interface STTError {
type: "error";
message: string;
}

STTReady

Emitted when the STT WebSocket is ready to receive audio.

interface STTReady {
type: "ready";
}

Document Types

AttachedDocument

Represents a document attached to a session message.

interface AttachedDocument {
id: string;
name: string;
type: string;
content: string;
size: number;
}

API Types

GenerateRequest

Request body for the /api/generate endpoint.

interface GenerateRequest {
systemPrompt: string;
messages: Message[];
stream?: boolean;
temperature?: number;
maxTokens?: number;
thinkingEnabled?: boolean;
}

ApiResponse<T>

Standard API success response wrapper.

interface ApiResponse<T> {
ok: true;
data: T;
}

ApiError

Standard API error response.

interface ApiError {
ok: false;
error: string;
}