- Automations: the approval mode is a selection in the list; PATCH /jobs/{id}
writes permission_mode into the job file's frontmatter (rest of the file
unchanged, invalid modes rejected). "Allow everything" lets nightly runs work
without waiting for approvals via Telegram until the timeout.
- Session.telegram_quiet: approvals and questions of a chat (and its subagents)
are not sent to Telegram; the chat open in Telegram always reports. Toggle in
the chat's ⋯ menu when a bot is paired. New chats from the web UI and
automation runs start quiet; chats started from Telegram and existing chats
keep reporting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
220 lines
6.1 KiB
TypeScript
220 lines
6.1 KiB
TypeScript
// Mirrors server/src/types.rs
|
|
|
|
export interface ImageData {
|
|
media_type: string;
|
|
/** Base64 bytes; absent when the server stores the image separately (blob). */
|
|
data?: string;
|
|
/** SHA-256 of a stored image: GET /api/blobs/<blob>. */
|
|
blob?: string;
|
|
/** Size in bytes of a stored image. */
|
|
size?: number;
|
|
}
|
|
|
|
export type Part =
|
|
| { type: "text"; text: string }
|
|
| { type: "image"; image: ImageData }
|
|
| { type: "reasoning"; text: string; signature?: string }
|
|
| { type: "tool_call"; id: string; name: string; input: any }
|
|
| {
|
|
type: "tool_result";
|
|
call_id: string;
|
|
name: string;
|
|
content: string;
|
|
images?: ImageData[];
|
|
is_error: boolean;
|
|
meta?: any;
|
|
}
|
|
| { type: "summary"; text: string; auto?: boolean; tokens?: number };
|
|
|
|
export interface Usage {
|
|
input_tokens: number;
|
|
output_tokens: number;
|
|
cache_read_tokens: number;
|
|
cache_write_tokens: number;
|
|
}
|
|
|
|
export interface Message {
|
|
id: string;
|
|
role: "user" | "assistant";
|
|
parts: Part[];
|
|
model?: string;
|
|
usage?: Usage;
|
|
created_at: number;
|
|
}
|
|
|
|
export interface Todo {
|
|
content: string;
|
|
status: "pending" | "in_progress" | "completed";
|
|
}
|
|
|
|
export interface Session {
|
|
id: string;
|
|
title: string;
|
|
cwd: string;
|
|
model: string;
|
|
agent: string;
|
|
permission_mode: "default" | "auto" | "accept_edits" | "bypass";
|
|
parent_id?: string;
|
|
created_at: number;
|
|
updated_at: number;
|
|
todos: Todo[] | null;
|
|
last_usage?: Usage | null;
|
|
busy?: boolean;
|
|
owner_id?: string | null;
|
|
/** Craft: clean room (true) or deep (false); undefined = server default. */
|
|
clean_room?: boolean | null;
|
|
/** Craft workflow phase reported by the agent. */
|
|
phase?: string;
|
|
/** Isolated git worktree of the session. */
|
|
worktree?: { repo: string; path: string; branch: string; base: string; sub?: string } | null;
|
|
/** Listed because it was shared with the current user. */
|
|
shared?: boolean;
|
|
pinned?: boolean;
|
|
archived?: boolean;
|
|
folder?: string | null;
|
|
/** Instructions for this chat (added to the system prompt). */
|
|
instructions?: string;
|
|
/** Approvals and questions of this chat are not sent to Telegram. */
|
|
telegram_quiet?: boolean;
|
|
}
|
|
|
|
export interface QuestionOption {
|
|
label: string;
|
|
description?: string;
|
|
}
|
|
|
|
export interface Question {
|
|
question: string;
|
|
header?: string;
|
|
options: QuestionOption[];
|
|
multi_select?: boolean;
|
|
}
|
|
|
|
export interface PermissionRequest {
|
|
type: "permission_request";
|
|
id: string;
|
|
session_id: string;
|
|
root_session_id?: string;
|
|
tool: string;
|
|
title: string;
|
|
input: any;
|
|
diff?: string;
|
|
}
|
|
|
|
export interface QuestionRequest {
|
|
type: "question_request";
|
|
id: string;
|
|
session_id: string;
|
|
root_session_id?: string;
|
|
source: string;
|
|
questions: Question[];
|
|
}
|
|
|
|
export type ServerEvent =
|
|
| { type: "session_updated"; session: Session }
|
|
| { type: "session_deleted"; session_id: string }
|
|
| { type: "session_status"; session_id: string; busy: boolean }
|
|
| { type: "message_added"; session_id: string; message: Message }
|
|
| { type: "text_delta"; session_id: string; message_id: string; text: string }
|
|
| { type: "reasoning_delta"; session_id: string; message_id: string; text: string }
|
|
| { type: "tool_started"; session_id: string; message_id: string; call_id: string; name: string; input: any }
|
|
| { type: "tool_progress"; session_id: string; call_id: string; output: string }
|
|
| PermissionRequest
|
|
| { type: "permission_resolved"; id: string; session_id: string }
|
|
| QuestionRequest
|
|
| { type: "question_resolved"; id: string; session_id: string }
|
|
| { type: "error"; session_id: string; message: string }
|
|
| { type: "waiting"; session_id: string; reason: string | null }
|
|
| { type: "queue_updated"; session_id: string; items: QueueItem[] }
|
|
| { type: "step_started"; session_id: string; message_id: string; started_at: number; prompt_tokens: number; estimated: boolean }
|
|
| { type: "compaction"; session_id: string; state: "started" | "done" | "failed"; auto: boolean; tokens: number | null; limit: number | null }
|
|
| { type: "mcp_status"; servers: Record<string, McpServerStatus> }
|
|
| { type: "resync" };
|
|
|
|
export interface McpServerStatus {
|
|
status: { state: "disabled" | "connecting" | "connected" | "failed"; tools?: number; error?: string };
|
|
tools: { name: string; description: string }[];
|
|
}
|
|
|
|
export interface ModelInfo {
|
|
id: string;
|
|
name: string;
|
|
context?: number;
|
|
max_output?: number | null;
|
|
reasoning: boolean;
|
|
vision: boolean;
|
|
effort?: string | null;
|
|
input_price?: number | null;
|
|
output_price?: number | null;
|
|
cache_read_price?: number | null;
|
|
cache_write_price?: number | null;
|
|
}
|
|
|
|
export interface ProviderModels {
|
|
provider: string;
|
|
models: ModelInfo[];
|
|
}
|
|
|
|
export interface AgentInfo {
|
|
name: string;
|
|
description: string;
|
|
mode: "primary" | "subagent";
|
|
read_only: boolean;
|
|
/** "coding" or "chat" (plain conversation prompt). */
|
|
style?: "coding" | "chat";
|
|
model?: string | null;
|
|
tools?: string[] | null;
|
|
source: "builtin" | "config" | "file" | "personal";
|
|
max_parallel?: number | null;
|
|
refine?: { rounds: number; model?: string | null; criteria?: string | null } | null;
|
|
/** Source file of Markdown agents. */
|
|
path?: string | null;
|
|
}
|
|
|
|
export interface Aggregate {
|
|
requests: number;
|
|
input_tokens: number;
|
|
output_tokens: number;
|
|
cache_read_tokens: number;
|
|
cache_write_tokens: number;
|
|
cost: number;
|
|
errors: number;
|
|
avg_ttft_ms: number;
|
|
output_tps: number;
|
|
prefill_tps: number;
|
|
cache_hit_rate: number;
|
|
duration_ms: number;
|
|
}
|
|
|
|
export interface User {
|
|
id: string;
|
|
username: string;
|
|
display_name: string;
|
|
role: "admin" | "user";
|
|
has_password: boolean;
|
|
oidc: boolean;
|
|
disabled: boolean;
|
|
created_at: number;
|
|
monthly_quota?: number | null;
|
|
}
|
|
|
|
export interface Info {
|
|
name: string;
|
|
version: string;
|
|
commit?: string;
|
|
/** Newer release (admins only). */
|
|
update?: { version: string; url: string; notes: string } | null;
|
|
setup_required: boolean;
|
|
/** Prebuilt terminal client binaries can be downloaded from this server. */
|
|
cli_builds?: boolean;
|
|
oidc: { label: string } | null;
|
|
user: User | null;
|
|
}
|
|
|
|
export interface QueueItem {
|
|
id: string;
|
|
parts: Part[];
|
|
source: "user" | "background";
|
|
created_at: number;
|
|
}
|