117 lines
2.6 KiB
TypeScript
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";
|
|
};
|