/** * @license * Copyright 2025 Vybestack LLC * SPDX-License-Identifier: Apache-2.0 */ import type { SessionMetrics } from '../telemetry/uiTelemetry.js'; /** * Output format for CLI responses */ export declare enum OutputFormat { TEXT = "text", JSON = "json", STREAM_JSON = "stream-json" } export interface JsonError { type: string; message: string; code?: string | number; } export interface JsonOutput { session_id?: string; response?: string; stats?: SessionMetrics; error?: JsonError; } export declare enum JsonStreamEventType { INIT = "init", MESSAGE = "message", TOOL_USE = "tool_use", TOOL_RESULT = "tool_result", ERROR = "error", RESULT = "result" } export interface BaseJsonStreamEvent { type: JsonStreamEventType; timestamp: string; } export interface InitEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.INIT; session_id: string; model: string; } export interface MessageEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.MESSAGE; role: 'user' | 'assistant'; content: string; delta?: boolean; } export interface ToolUseEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.TOOL_USE; tool_name: string; tool_id: string; parameters: Record; } export interface ToolResultEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.TOOL_RESULT; tool_id: string; status: 'success' | 'error'; output?: string; error?: { type: string; message: string; }; } export interface ErrorEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.ERROR; severity: 'warning' | 'error'; message: string; } export interface StreamStats { total_tokens: number; input_tokens: number; output_tokens: number; duration_ms: number; tool_calls: number; } export interface ResultEvent extends BaseJsonStreamEvent { type: JsonStreamEventType.RESULT; status: 'success' | 'error'; error?: { type: string; message: string; }; stats?: StreamStats; } export type JsonStreamEvent = InitEvent | MessageEvent | ToolUseEvent | ToolResultEvent | ErrorEvent | ResultEvent; /** * Formats errors as JSON for programmatic consumption */ export declare class JsonFormatter { /** * Formats an error object as JSON * @param error - The error to format * @param code - Optional error code * @returns JSON string representation of the error */ formatError(error: Error, code?: string | number): string; } /** * Formatter for streaming JSON output. * Emits newline-delimited JSON (JSONL) events to stdout in real-time. */ export declare class StreamJsonFormatter { /** * Formats a single event as a JSON string with newline (JSONL format). * @param event - The stream event to format * @returns JSON string with trailing newline */ formatEvent(event: JsonStreamEvent): string; /** * Emits an event directly to stdout in JSONL format. * @param event - The stream event to emit */ emitEvent(event: JsonStreamEvent): void; /** * Converts SessionMetrics to simplified StreamStats format. * Aggregates token counts across all models. * @param metrics - The session metrics from telemetry * @param durationMs - The session duration in milliseconds * @returns Simplified stats for streaming output */ convertToStreamStats(metrics: SessionMetrics, durationMs: number): StreamStats; }