clarc/src/types.ts

117 lines
2.6 KiB
TypeScript

// Shared types for claude-remote
// Database entities
export interface Device {
id: number;
secret: string;
name: string | null;
created_at: number;
last_seen: number;
}
export interface Session {
id: number;
device_id: number;
started_at: number;
ended_at: number | null;
cwd: string | null;
command: string | null;
}
export interface Prompt {
id: number;
session_id: number;
created_at: number;
prompt_text: string;
response: string | null;
responded_at: number | null;
}
export interface OutputLog {
id: number;
session_id: number;
timestamp: number;
line: string;
}
// Phase 2: Rich prompt system interfaces
// Represents the structured data format for interactive prompts from Claude Code
export interface PromptOption {
label: string;
value: string;
description?: string;
}
export interface PermissionPrompt {
prompt_type: "permission";
tool_name: string;
tool_input: Record<string, unknown>;
options: PromptOption[];
allows_tab_instructions: boolean;
selected_option: number;
}
export interface QuestionItem {
question: string;
header?: string;
options: PromptOption[];
multi_select: boolean;
allows_other: boolean;
}
export interface QuestionPrompt {
prompt_type: "question";
questions: QuestionItem[];
}
export interface ExitPlanPrompt {
prompt_type: "exit_plan";
options: PromptOption[];
}
export type PromptData = PermissionPrompt | QuestionPrompt | ExitPlanPrompt | null;
export type AnswerResponse =
| { type: "option"; value: string }
| { type: "text"; value: string }
| { type: "tab_instructions"; selected_option: number; instruction: string };
// WebSocket messages (CLI <-> Server)
export type ClientMessage =
| { type: "auth"; secret: string; cwd?: string; command?: string }
| { type: "output"; data: string }
| { type: "resize"; cols: number; rows: number }
| { type: "exit"; code: number }
| { type: "prompt"; session_id: number; prompt_text: string };
export type ServerMessage =
| { type: "authenticated"; session_id: number }
| { type: "input"; data: string }
| { type: "resize"; cols: number; rows: number }
| { type: "ping" };
// SSE events (Server -> Dashboard)
export type SSEEvent =
| {
type: "session_start";
session_id: number;
cwd: string | null;
command: string | null;
}
| { type: "session_end"; session_id: number; exit_code: number }
| { type: "output"; session_id: number; data: string }
| {
type: "prompt";
prompt_id: number;
session_id: number;
prompt_text: string;
}
| {
type: "prompt_response";
prompt_id: number;
response: "approve" | "reject";
};