/** * @license * Copyright 2026 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import type { BYOKModelValidationInput, BYOKProviderInfo, ByokConfigCheckResult, ByokConfigInfo, ByokConfigReference, CheckByokConfigInput, CreateByokConfigInput, DeleteByokConfigInput, UpdateByokConfigInput } from "../protocol/control.js"; import type { AccountInfo, ModelInfo, SessionCreditsUsage, UsageInfo } from "../protocol/common.js"; import type { PluginDetails } from "../types/plugins.js"; import type { SdkAuthPayload } from "../types/auth.js"; export declare const DAEMON_PROTOCOL_VERSION: 2; /** * Reported by the daemon in its initialize result once it accepted an `auth` * payload, i.e. when the account-level query plane is usable on this * connection. Absent for a daemon that only manages Sessions. */ export declare const DAEMON_QUERIES_CAPABILITY = "daemon_queries_v1"; export type JsonPrimitive = string | number | boolean | null; export type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue; }; export type JsonObject = { [key: string]: JsonValue; }; export interface DaemonControlRequestFrame { type: "control_request"; request_id: string; session_id?: string; request: { type: `daemon.${Method}`; } & Params; } export interface DaemonSuccessResponseFrame { type: "control_response"; session_id?: string; response: { subtype: "success"; request_id: string; response?: Result; }; } export interface DaemonErrorResponseFrame { type: "control_response"; session_id?: string; response: { subtype: "error"; request_id: string; error: string; code?: string; retryable?: boolean; details?: JsonObject; }; } export type DaemonControlResponseFrame = DaemonSuccessResponseFrame | DaemonErrorResponseFrame; /** Daemon-private Session failure notification consumed by the SDK transport. */ export interface DaemonSessionUpdatedStatusEventFrame { type: "status_event"; status: "daemon.session_updated"; data: { local_session_id: string; state: "failed"; error: JsonObject; }; } export interface KeepAliveFrame { type: "keep_alive"; } /** A raw Query message carrying a daemon-local Session route. */ export type DaemonWireSessionMessage = JsonObject & { type: string; session_id?: string; }; export type DaemonProtocolFrame = DaemonControlRequestFrame | DaemonControlResponseFrame | DaemonSessionUpdatedStatusEventFrame | KeepAliveFrame | DaemonWireSessionMessage; export type InitializeDaemonParams = { daemon_protocol_version: typeof DAEMON_PROTOCOL_VERSION; sdk_version: string; capabilities: string[]; /** * Daemon-level credentials, independent from the per-Session auth the daemon * forwards to Workers. Omitting it keeps Session management fully functional * while every account-level query fails with `AUTH_REQUIRED`. * * Carries a plaintext credential — it must never reach a log or an error * message. */ auth?: SdkAuthPayload; }; export type InitializeDaemonResult = { daemon_protocol_version: typeof DAEMON_PROTOCOL_VERSION; daemon_version: string; capabilities: string[]; }; export type OpenSessionParams = { worker_args: string[]; cwd?: string; config_dir?: string; }; export type OpenSessionResult = { session_id: string; }; export type SessionRuntimeState = "pending" | "ready" | "inactive" | "failed"; export type DaemonSessionInfo = { local_session_id: string; title: string; cwd?: string; state: SessionRuntimeState; created_at: string; updated_at: string; }; export type ListSessionsParams = Record; export type ListSessionsResult = { sessions: DaemonSessionInfo[]; }; export type RenameSessionParams = { title: string; }; export type RenameSessionResult = { session: DaemonSessionInfo; }; export type CloseSessionParams = Record; export type DeleteSessionParams = { local_session_id: string; }; export type ShutdownParams = Record; /** * Account-level query plane (`daemon_queries_v1`). * * Every method is scoped to the daemon's own credentials rather than to a * Session, so none of them carries a `session_id`. Params and results reuse the * worker control-plane payload types: the daemon answers these from the same * services and must not grow a second definition of the same wire shape. */ export type DaemonQueryMethod = "get_models" | "get_byok_config" | "validate_byok_model" | "list_byok_configs" | "create_byok_config" | "update_byok_config" | "delete_byok_config" | "check_byok_config" | "list_plugins" | "get_usage_info" | "account_info"; export type DaemonGetModelsParams = { /** Any value other than `live` is served from the catalog cache. */ fetchStrategy?: "live" | "cache"; /** Cache identity for the per-account shared catalog; empty for anonymous. */ uid?: string; outerProviders?: string[]; }; export type DaemonGetModelsResult = { models: ModelInfo[]; }; export type DaemonGetByokConfigParams = Record; export type DaemonGetByokConfigResult = { providers: BYOKProviderInfo[]; }; /** * Validates a set of *unsaved* model parameters. `request.type` already carries * the wire discriminant, so the provider's model type key travels as * `model_type` (with `provider_type` accepted as the legacy spelling). */ export type DaemonValidateByokModelParams = BYOKModelValidationInput & { model_type?: string; provider_type?: string; }; export type DaemonValidateByokModelResult = { success: boolean; }; export type DaemonListByokConfigsParams = Record; export type DaemonListByokConfigsResult = { configs: ByokConfigInfo[]; }; export type DaemonCreateByokConfigParams = { config: CreateByokConfigInput; }; export type DaemonCreateByokConfigResult = { config: ByokConfigReference; }; export type DaemonUpdateByokConfigParams = { config: UpdateByokConfigInput; }; export type DaemonDeleteByokConfigParams = { target: DeleteByokConfigInput; }; /** * Checks a *saved or about-to-be-saved* configuration: BYOK models are verified * against the server, custom providers only locally. Business failures arrive * as a success frame carrying `ByokConfigCheckResult`, never as an error frame. */ export type DaemonCheckByokConfigParams = { config: CheckByokConfigInput; }; export type DaemonCheckByokConfigResult = ByokConfigCheckResult; export type DaemonListPluginsParams = Record; export type DaemonListPluginsResult = { plugins: PluginDetails[]; }; export type DaemonGetUsageInfoParams = Record; export type DaemonGetUsageInfoResult = { usage: UsageInfo | null; session: SessionCreditsUsage; /** Account quota lookup failure; the session credits remain usable. */ usage_error?: string; }; export type DaemonAccountInfoParams = Record; export type DaemonAccountInfoResult = { account: AccountInfo; }; export type DaemonCommandMethod = "initialize" | "open_session" | "list_sessions" | "rename_session" | "close_session" | "delete_session" | "shutdown" | DaemonQueryMethod; export interface DaemonCommandParamsMap { initialize: InitializeDaemonParams; open_session: OpenSessionParams; list_sessions: ListSessionsParams; rename_session: RenameSessionParams; close_session: CloseSessionParams; delete_session: DeleteSessionParams; shutdown: ShutdownParams; get_models: DaemonGetModelsParams; get_byok_config: DaemonGetByokConfigParams; validate_byok_model: DaemonValidateByokModelParams; list_byok_configs: DaemonListByokConfigsParams; create_byok_config: DaemonCreateByokConfigParams; update_byok_config: DaemonUpdateByokConfigParams; delete_byok_config: DaemonDeleteByokConfigParams; check_byok_config: DaemonCheckByokConfigParams; list_plugins: DaemonListPluginsParams; get_usage_info: DaemonGetUsageInfoParams; account_info: DaemonAccountInfoParams; } export type DaemonCommandRequest = DaemonControlRequestFrame<"initialize", InitializeDaemonParams> | DaemonControlRequestFrame<"open_session", OpenSessionParams> | DaemonControlRequestFrame<"list_sessions", ListSessionsParams> | DaemonControlRequestFrame<"rename_session", RenameSessionParams> | DaemonControlRequestFrame<"close_session", CloseSessionParams> | DaemonControlRequestFrame<"delete_session", DeleteSessionParams> | DaemonControlRequestFrame<"shutdown", ShutdownParams> | DaemonControlRequestFrame<"get_models", DaemonGetModelsParams> | DaemonControlRequestFrame<"get_byok_config", DaemonGetByokConfigParams> | DaemonControlRequestFrame<"validate_byok_model", DaemonValidateByokModelParams> | DaemonControlRequestFrame<"list_byok_configs", DaemonListByokConfigsParams> | DaemonControlRequestFrame<"create_byok_config", DaemonCreateByokConfigParams> | DaemonControlRequestFrame<"update_byok_config", DaemonUpdateByokConfigParams> | DaemonControlRequestFrame<"delete_byok_config", DaemonDeleteByokConfigParams> | DaemonControlRequestFrame<"check_byok_config", DaemonCheckByokConfigParams> | DaemonControlRequestFrame<"list_plugins", DaemonListPluginsParams> | DaemonControlRequestFrame<"get_usage_info", DaemonGetUsageInfoParams> | DaemonControlRequestFrame<"account_info", DaemonAccountInfoParams>; export interface DaemonCommandResultMap { initialize: InitializeDaemonResult; open_session: OpenSessionResult; list_sessions: ListSessionsResult; rename_session: RenameSessionResult; close_session: null; delete_session: null; shutdown: null; get_models: DaemonGetModelsResult; get_byok_config: DaemonGetByokConfigResult; validate_byok_model: DaemonValidateByokModelResult; list_byok_configs: DaemonListByokConfigsResult; create_byok_config: DaemonCreateByokConfigResult; update_byok_config: null; delete_byok_config: null; check_byok_config: DaemonCheckByokConfigResult; list_plugins: DaemonListPluginsResult; get_usage_info: DaemonGetUsageInfoResult; account_info: DaemonAccountInfoResult; } export declare class DaemonProtocolError extends Error { readonly code: "DAEMON_PROTOCOL_ERROR"; constructor(message: string); } export declare function parseDaemonProtocolLine(line: string): DaemonProtocolFrame; export declare function serializeDaemonProtocolFrame(frame: DaemonProtocolFrame): string; export declare function parseDaemonCommandRequest(frame: DaemonProtocolFrame): DaemonCommandRequest; export declare function parseDaemonCommandResult(method: Method, frame: DaemonSuccessResponseFrame): DaemonCommandResultMap[Method];