// @generated by protoc-gen-es v2.13.0 with parameter "target=ts,import_extension=js"
// @generated from file soulfire/bot.proto (package soulfire.v1, syntax proto3)
/* eslint-disable */

import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
import { file_soulfire_common } from "./common_pb.js";
import { file_soulfire_api_docs } from "./api_docs_pb.js";
import { file_google_api_annotations } from "../google/api/annotations_pb.js";
import { file_google_api_field_behavior } from "../google/api/field_behavior_pb.js";
import type { Timestamp, Value } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file soulfire/bot.proto.
 */
export const file_soulfire_bot: GenFile = /*@__PURE__*/
  fileDesc(" ", [file_soulfire_common, file_soulfire_api_docs, file_google_api_annotations, file_google_api_field_behavior, file_google_protobuf_timestamp, file_google_protobuf_struct]);

/**
 * Request message for retrieving detailed information about a specific bot.
 * Used by the GetBotInfo RPC to fetch a single bot's live state with full inventory data.
 *
 * @generated from message soulfire.v1.BotInfoRequest
 */
export type BotInfoRequest = Message<"soulfire.v1.BotInfoRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   * Must be a valid UUID string format (e.g., "550e8400-e29b-41d4-a716-446655440000").
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot (Minecraft account UUID).
   * Must be a valid UUID string format.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotInfoRequest.
 * Use `create(BotInfoRequestSchema)` to create a new message.
 */
export const BotInfoRequestSchema: GenMessage<BotInfoRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 0);

/**
 * Request message for listing all bots in an instance.
 * Used by the GetBotList RPC to enumerate all configured bots.
 *
 * @generated from message soulfire.v1.BotListRequest
 */
export type BotListRequest = Message<"soulfire.v1.BotListRequest"> & {
  /**
   * The UUID of the SoulFire instance to list bots from.
   * Must be a valid UUID string format.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;
};

/**
 * Describes the message soulfire.v1.BotListRequest.
 * Use `create(BotListRequestSchema)` to create a new message.
 */
export const BotListRequestSchema: GenMessage<BotListRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 1);

/**
 * Durable intent and current controller state for one configured bot.
 *
 * @generated from message soulfire.v1.BotStatus
 */
export type BotStatus = Message<"soulfire.v1.BotStatus"> & {
  /**
   * @generated from field: string profile_id = 1;
   */
  profileId: string;

  /**
   * @generated from field: soulfire.v1.BotDesiredState desired_state = 2;
   */
  desiredState: BotDesiredState;

  /**
   * @generated from field: soulfire.v1.BotRuntimeState runtime_state = 3;
   */
  runtimeState: BotRuntimeState;

  /**
   * @generated from field: optional string last_error = 4;
   */
  lastError?: string | undefined;

  /**
   * @generated from field: google.protobuf.Timestamp updated_at = 5;
   */
  updatedAt?: Timestamp | undefined;
};

/**
 * Describes the message soulfire.v1.BotStatus.
 * Use `create(BotStatusSchema)` to create a new message.
 */
export const BotStatusSchema: GenMessage<BotStatus> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 2);

/**
 * Aggregate bot state for an instance.
 *
 * @generated from message soulfire.v1.BotFleetSummary
 */
export type BotFleetSummary = Message<"soulfire.v1.BotFleetSummary"> & {
  /**
   * @generated from field: uint32 total_bots = 1;
   */
  totalBots: number;

  /**
   * @generated from field: uint32 desired_bots = 2;
   */
  desiredBots: number;

  /**
   * @generated from field: uint32 online_bots = 3;
   */
  onlineBots: number;

  /**
   * @generated from field: uint32 starting_bots = 4;
   */
  startingBots: number;

  /**
   * @generated from field: uint32 retrying_bots = 5;
   */
  retryingBots: number;

  /**
   * @generated from field: uint32 failed_bots = 6;
   */
  failedBots: number;
};

/**
 * Describes the message soulfire.v1.BotFleetSummary.
 * Use `create(BotFleetSummarySchema)` to create a new message.
 */
export const BotFleetSummarySchema: GenMessage<BotFleetSummary> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 3);

/**
 * Changes persistent desired state for a batch of configured bots.
 *
 * @generated from message soulfire.v1.SetBotsDesiredStateRequest
 */
export type SetBotsDesiredStateRequest = Message<"soulfire.v1.SetBotsDesiredStateRequest"> & {
  /**
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * @generated from field: repeated string bot_ids = 2;
   */
  botIds: string[];

  /**
   * @generated from field: soulfire.v1.BotDesiredState desired_state = 3;
   */
  desiredState: BotDesiredState;
};

/**
 * Describes the message soulfire.v1.SetBotsDesiredStateRequest.
 * Use `create(SetBotsDesiredStateRequestSchema)` to create a new message.
 */
export const SetBotsDesiredStateRequestSchema: GenMessage<SetBotsDesiredStateRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 4);

/**
 * @generated from message soulfire.v1.SetBotsDesiredStateResponse
 */
export type SetBotsDesiredStateResponse = Message<"soulfire.v1.SetBotsDesiredStateResponse"> & {
  /**
   * @generated from field: repeated soulfire.v1.BotStatus bots = 1;
   */
  bots: BotStatus[];
};

/**
 * Describes the message soulfire.v1.SetBotsDesiredStateResponse.
 * Use `create(SetBotsDesiredStateResponseSchema)` to create a new message.
 */
export const SetBotsDesiredStateResponseSchema: GenMessage<SetBotsDesiredStateResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 5);

/**
 * Reconnects a batch of bots and leaves their desired state set to running.
 *
 * @generated from message soulfire.v1.RestartBotsRequest
 */
export type RestartBotsRequest = Message<"soulfire.v1.RestartBotsRequest"> & {
  /**
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * @generated from field: repeated string bot_ids = 2;
   */
  botIds: string[];
};

/**
 * Describes the message soulfire.v1.RestartBotsRequest.
 * Use `create(RestartBotsRequestSchema)` to create a new message.
 */
export const RestartBotsRequestSchema: GenMessage<RestartBotsRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 6);

/**
 * @generated from message soulfire.v1.RestartBotsResponse
 */
export type RestartBotsResponse = Message<"soulfire.v1.RestartBotsResponse"> & {
  /**
   * @generated from field: repeated soulfire.v1.BotStatus bots = 1;
   */
  bots: BotStatus[];
};

/**
 * Describes the message soulfire.v1.RestartBotsResponse.
 * Use `create(RestartBotsResponseSchema)` to create a new message.
 */
export const RestartBotsResponseSchema: GenMessage<RestartBotsResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 7);

/**
 * @generated from message soulfire.v1.WatchBotStatusesRequest
 */
export type WatchBotStatusesRequest = Message<"soulfire.v1.WatchBotStatusesRequest"> & {
  /**
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;
};

/**
 * Describes the message soulfire.v1.WatchBotStatusesRequest.
 * Use `create(WatchBotStatusesRequestSchema)` to create a new message.
 */
export const WatchBotStatusesRequestSchema: GenMessage<WatchBotStatusesRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 8);

/**
 * @generated from message soulfire.v1.BotStatusSnapshot
 */
export type BotStatusSnapshot = Message<"soulfire.v1.BotStatusSnapshot"> & {
  /**
   * @generated from field: repeated soulfire.v1.BotStatus bots = 1;
   */
  bots: BotStatus[];
};

/**
 * Describes the message soulfire.v1.BotStatusSnapshot.
 * Use `create(BotStatusSnapshotSchema)` to create a new message.
 */
export const BotStatusSnapshotSchema: GenMessage<BotStatusSnapshot> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 9);

/**
 * @generated from message soulfire.v1.WatchBotStatusesResponse
 */
export type WatchBotStatusesResponse = Message<"soulfire.v1.WatchBotStatusesResponse"> & {
  /**
   * @generated from oneof soulfire.v1.WatchBotStatusesResponse.event
   */
  event: {
    /**
     * @generated from field: soulfire.v1.BotStatusSnapshot snapshot = 1;
     */
    value: BotStatusSnapshot;
    case: "snapshot";
  } | {
    /**
     * @generated from field: soulfire.v1.BotStatus update = 2;
     */
    value: BotStatus;
    case: "update";
  } | {
    /**
     * @generated from field: string removed_bot_id = 3;
     */
    value: string;
    case: "removedBotId";
  } | { case: undefined; value?: undefined };
};

/**
 * Describes the message soulfire.v1.WatchBotStatusesResponse.
 * Use `create(WatchBotStatusesResponseSchema)` to create a new message.
 */
export const WatchBotStatusesResponseSchema: GenMessage<WatchBotStatusesResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 10);

/**
 * Entry representing a single bot in the bot list.
 * Contains summary information suitable for display in a list view.
 *
 * @generated from message soulfire.v1.BotListEntry
 */
export type BotListEntry = Message<"soulfire.v1.BotListEntry"> & {
  /**
   * The Minecraft profile UUID of the bot.
   * This uniquely identifies the bot within the instance.
   *
   * @generated from field: string profile_id = 1;
   */
  profileId: string;

  /**
   * Whether the bot is currently connected to a Minecraft server.
   * When false, the bot exists in configuration but is not active.
   *
   * @generated from field: bool is_online = 2;
   */
  isOnline: boolean;

  /**
   * Live state of the bot if online and player data is available.
   * Will be absent if the bot is offline or the player hasn't fully spawned.
   * Note: For list views, inventory data is NOT included (too expensive).
   *
   * @generated from field: optional soulfire.v1.BotLiveState live_state = 3;
   */
  liveState?: BotLiveState | undefined;

  /**
   * Network latency (ping) of the bot to the connected Minecraft server, in
   * milliseconds. Present only when the bot is online and the server has
   * reported a latency value for it.
   *
   * @generated from field: optional int32 ping_ms = 4;
   */
  pingMs?: number | undefined;

  /**
   * Fine-grained connection phase. Where is_online is a coarse boolean, this
   * distinguishes connecting / connected / spawned / disconnected states.
   *
   * @generated from field: soulfire.v1.BotConnectionPhase connection_phase = 5;
   */
  connectionPhase: BotConnectionPhase;

  /**
   * Last known account (player) name of the bot, for convenient display in
   * list views without joining against the instance account configuration.
   * Absent if the name is unknown.
   *
   * @generated from field: optional string account_name = 6;
   */
  accountName?: string | undefined;

  /**
   * Persistent desired state and current controller state.
   *
   * @generated from field: soulfire.v1.BotStatus status = 7;
   */
  status?: BotStatus | undefined;
};

/**
 * Describes the message soulfire.v1.BotListEntry.
 * Use `create(BotListEntrySchema)` to create a new message.
 */
export const BotListEntrySchema: GenMessage<BotListEntry> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 11);

/**
 * Response containing the list of all bots in an instance.
 *
 * @generated from message soulfire.v1.BotListResponse
 */
export type BotListResponse = Message<"soulfire.v1.BotListResponse"> & {
  /**
   * All bots configured in the instance, both online and offline.
   * The order is determined by the account configuration order.
   *
   * @generated from field: repeated soulfire.v1.BotListEntry bots = 1;
   */
  bots: BotListEntry[];
};

/**
 * Describes the message soulfire.v1.BotListResponse.
 * Use `create(BotListResponseSchema)` to create a new message.
 */
export const BotListResponseSchema: GenMessage<BotListResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 12);

/**
 * Represents an item in an inventory slot.
 * Used for both container slots and carried (cursor) items.
 *
 * @generated from message soulfire.v1.InventorySlot
 */
export type InventorySlot = Message<"soulfire.v1.InventorySlot"> & {
  /**
   * The slot index within the container.
   * - For container menus: 0 to (total_slots - 1)
   * - For player inventory: 0-4 crafting, 5-8 armor, 9-35 main inventory, 36-44 hotbar, 45 offhand
   * - For carried items (cursor): -1 is used as a special indicator
   *
   * @generated from field: int32 slot = 1;
   */
  slot: number;

  /**
   * The Minecraft item identifier in namespaced format.
   * Examples: "minecraft:diamond_sword", "minecraft:stone", "minecraft:enchanted_book"
   *
   * @generated from field: string item_id = 2;
   */
  itemId: string;

  /**
   * The number of items in this stack.
   * Range: 1 to the item's maximum stack size (typically 1, 16, or 64).
   *
   * @generated from field: int32 count = 3;
   */
  count: number;

  /**
   * The custom display name of the item, if it has been renamed.
   * Only present when the item has a custom name component (e.g., renamed in an anvil).
   * Contains the plain text string, not JSON text components.
   *
   * @generated from field: optional string display_name = 4;
   */
  displayName?: string | undefined;

  /**
   * Base64-encoded square icon image for this item's inventory render.
   * The image is rendered server-side to match the item's resolved in-game appearance.
   * Static items are sent as PNG. Animated items may be sent as GIF.
   *
   * @generated from field: optional string icon_base64 = 5;
   */
  iconBase64?: string | undefined;

  /**
   * MIME type for the rendered item icon image.
   * Values: "image/png" or "image/gif".
   *
   * @generated from field: optional string icon_mime_type = 6;
   */
  iconMimeType?: string | undefined;
};

/**
 * Describes the message soulfire.v1.InventorySlot.
 * Use `create(InventorySlotSchema)` to create a new message.
 */
export const InventorySlotSchema: GenMessage<InventorySlot> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 13);

/**
 * Real-time state of a connected bot.
 * Contains position, health, inventory, and other live game data.
 *
 * @generated from message soulfire.v1.BotLiveState
 */
export type BotLiveState = Message<"soulfire.v1.BotLiveState"> & {
  /**
   * X coordinate in the Minecraft world (east/west axis).
   * East is positive, West is negative.
   *
   * @generated from field: double x = 1;
   */
  x: number;

  /**
   * Y coordinate in the Minecraft world (vertical axis).
   * Increases upward. Sea level is typically around 63.
   *
   * @generated from field: double y = 2;
   */
  y: number;

  /**
   * Z coordinate in the Minecraft world (north/south axis).
   * South is positive, North is negative.
   *
   * @generated from field: double z = 3;
   */
  z: number;

  /**
   * Vertical rotation (pitch) in degrees.
   * Range: -90 (looking straight up) to 90 (looking straight down).
   * 0 is looking at the horizon.
   *
   * @generated from field: float xRot = 4;
   */
  xRot: number;

  /**
   * Horizontal rotation (yaw) in degrees.
   * Range: -180 to 180. 0 = South, 90 = West, -90 = East, +/-180 = North.
   *
   * @generated from field: float yRot = 5;
   */
  yRot: number;

  /**
   * Current health points.
   * Range: 0 (dead) to max_health. 1 point = half a heart in the UI.
   *
   * @generated from field: float health = 6;
   */
  health: number;

  /**
   * Maximum health points the player can have.
   * Default is 20 (10 hearts). Can be modified by effects or attributes.
   *
   * @generated from field: float max_health = 7;
   */
  maxHealth: number;

  /**
   * Current hunger/food level.
   * Range: 0 (starving) to 20 (full). 1 point = half a drumstick in the UI.
   * Below 6, the player cannot sprint. At 0, health starts draining.
   *
   * @generated from field: int32 food_level = 8;
   */
  foodLevel: number;

  /**
   * Current saturation level.
   * Range: 0 to food_level. Acts as a buffer before hunger depletes.
   * When saturation is above 0, hunger bar doesn't decrease while performing actions.
   *
   * @generated from field: float saturation_level = 9;
   */
  saturationLevel: number;

  /**
   * Inventory slots containing items (only non-empty slots are included).
   * For list views (GetBotList), this will be empty for performance.
   * For detail views (GetBotInfo), contains all non-empty slots from the player inventory.
   *
   * @generated from field: repeated soulfire.v1.InventorySlot inventory = 10;
   */
  inventory: InventorySlot[];

  /**
   * Currently selected hotbar slot index.
   * Range: 0 to 8, corresponding to hotbar slots 1-9 in the UI.
   *
   * @generated from field: int32 selected_hotbar_slot = 11;
   */
  selectedHotbarSlot: number;

  /**
   * The dimension the player is currently in.
   * Format: namespaced identifier (e.g., "minecraft:overworld", "minecraft:the_nether", "minecraft:the_end").
   * Custom dimensions will use their server-defined namespace.
   *
   * @generated from field: string dimension = 12;
   */
  dimension: string;

  /**
   * Player's current experience level (the number shown on the XP bar).
   * Range: 0 to theoretically unlimited (typically 0-30+ for enchanting).
   *
   * @generated from field: int32 experience_level = 13;
   */
  experienceLevel: number;

  /**
   * Progress towards the next experience level.
   * Range: 0.0 (just reached current level) to 1.0 (about to level up).
   *
   * @generated from field: float experience_progress = 14;
   */
  experienceProgress: number;

  /**
   * Skin texture hash for avatar rendering.
   * This is the hash extracted from the texture URL in the player's game profile.
   * Can be used with services like mc-heads.net: https://mc-heads.net/body/<hash>
   * Will be absent if the player has no custom skin or skin data is unavailable.
   *
   * @generated from field: optional string skin_texture_hash = 15;
   */
  skinTextureHash?: string | undefined;

  /**
   * Current game mode of the player.
   * Determines available actions (breaking blocks, flying, taking damage, etc.).
   *
   * @generated from field: soulfire.v1.GameMode game_mode = 16;
   */
  gameMode: GameMode;
};

/**
 * Describes the message soulfire.v1.BotLiveState.
 * Use `create(BotLiveStateSchema)` to create a new message.
 */
export const BotLiveStateSchema: GenMessage<BotLiveState> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 14);

/**
 * Response containing detailed information about a specific bot.
 *
 * @generated from message soulfire.v1.BotInfoResponse
 */
export type BotInfoResponse = Message<"soulfire.v1.BotInfoResponse"> & {
  /**
   * Live state of the bot including full inventory data.
   * Will be absent if the bot is offline or player data is not available.
   * When present, includes complete inventory slot information.
   *
   * @generated from field: optional soulfire.v1.BotLiveState live_state = 2;
   */
  liveState?: BotLiveState | undefined;

  /**
   * Persistent desired state and current controller state.
   *
   * @generated from field: soulfire.v1.BotStatus status = 3;
   */
  status?: BotStatus | undefined;
};

/**
 * Describes the message soulfire.v1.BotInfoResponse.
 * Use `create(BotInfoResponseSchema)` to create a new message.
 */
export const BotInfoResponseSchema: GenMessage<BotInfoResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 15);

/**
 * Request to update a single configuration entry for a specific bot.
 * This allows granular updates without replacing the entire configuration.
 *
 * @generated from message soulfire.v1.BotUpdateConfigEntryRequest
 */
export type BotUpdateConfigEntryRequest = Message<"soulfire.v1.BotUpdateConfigEntryRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to update configuration for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * The settings namespace (e.g., plugin ID or "bot" for core bot settings).
   * Examples: "bot", "auto-reconnect", "chat-message-controller"
   *
   * @generated from field: string namespace = 3;
   */
  namespace: string;

  /**
   * The key within the namespace to update.
   * Must be a valid setting key defined for that namespace.
   *
   * @generated from field: string key = 4;
   */
  key: string;

  /**
   * The new value to set for this configuration entry.
   * Must be a valid protobuf Value (null, number, string, bool, list, or struct).
   *
   * @generated from field: google.protobuf.Value value = 5;
   */
  value?: Value | undefined;
};

/**
 * Describes the message soulfire.v1.BotUpdateConfigEntryRequest.
 * Use `create(BotUpdateConfigEntryRequestSchema)` to create a new message.
 */
export const BotUpdateConfigEntryRequestSchema: GenMessage<BotUpdateConfigEntryRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 16);

/**
 * Response for bot configuration entry update.
 * Empty on success; errors are returned via gRPC status.
 *
 * @generated from message soulfire.v1.BotUpdateConfigEntryResponse
 */
export type BotUpdateConfigEntryResponse = Message<"soulfire.v1.BotUpdateConfigEntryResponse"> & {
};

/**
 * Describes the message soulfire.v1.BotUpdateConfigEntryResponse.
 * Use `create(BotUpdateConfigEntryResponseSchema)` to create a new message.
 */
export const BotUpdateConfigEntryResponseSchema: GenMessage<BotUpdateConfigEntryResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 17);

/**
 * Request to render the bot's point-of-view as an image.
 * Uses software rendering to generate a PNG image of what the bot "sees".
 *
 * @generated from message soulfire.v1.BotRenderPovRequest
 */
export type BotRenderPovRequest = Message<"soulfire.v1.BotRenderPovRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to render POV for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Desired image width in pixels.
   * Default: 854 (if 0 or not provided).
   * Maximum: 1920 (values above this are clamped).
   * Minimum: 1 (values below this are clamped).
   *
   * @generated from field: int32 width = 3;
   */
  width: number;

  /**
   * Desired image height in pixels.
   * Default: 480 (if 0 or not provided).
   * Maximum: 1080 (values above this are clamped).
   * Minimum: 1 (values below this are clamped).
   *
   * @generated from field: int32 height = 4;
   */
  height: number;

  /**
   * Maximum render distance in blocks.
   * Default: the bot's current render distance setting.
   * Maximum: 2048 (values above this are clamped).
   *
   * @generated from field: optional int32 max_distance = 5;
   */
  maxDistance?: number | undefined;

  /**
   * Vertical field of view in degrees.
   * Default: the renderer default FOV.
   * Valid range: 1.0 to 179.0.
   *
   * @generated from field: optional double fov = 6;
   */
  fov?: number | undefined;

  /**
   * Optional camera X coordinate.
   * Defaults to the bot's current eye position.
   *
   * @generated from field: optional double camera_x = 7;
   */
  cameraX?: number | undefined;

  /**
   * Optional camera Y coordinate.
   * Defaults to the bot's current eye position.
   *
   * @generated from field: optional double camera_y = 8;
   */
  cameraY?: number | undefined;

  /**
   * Optional camera Z coordinate.
   * Defaults to the bot's current eye position.
   *
   * @generated from field: optional double camera_z = 9;
   */
  cameraZ?: number | undefined;

  /**
   * Optional yaw in degrees.
   * Defaults to the bot's current yaw.
   *
   * @generated from field: optional float y_rot = 10;
   */
  yRot?: number | undefined;

  /**
   * Optional pitch in degrees.
   * Defaults to the bot's current pitch.
   *
   * @generated from field: optional float x_rot = 11;
   */
  xRot?: number | undefined;

  /**
   * Whether to render the HUD overlay.
   * Default: true.
   *
   * @generated from field: optional bool include_hud = 12;
   */
  includeHud?: boolean | undefined;

  /**
   * Whether to render first-person hands and held items.
   * Default: true.
   *
   * @generated from field: optional bool include_hands = 13;
   */
  includeHands?: boolean | undefined;

  /**
   * Whether to include renderer debug counters in the response.
   * Default: false.
   *
   * @generated from field: bool include_debug_trace = 14;
   */
  includeDebugTrace: boolean;
};

/**
 * Describes the message soulfire.v1.BotRenderPovRequest.
 * Use `create(BotRenderPovRequestSchema)` to create a new message.
 */
export const BotRenderPovRequestSchema: GenMessage<BotRenderPovRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 18);

/**
 * Response containing the rendered POV image.
 *
 * @generated from message soulfire.v1.BotRenderPovResponse
 */
export type BotRenderPovResponse = Message<"soulfire.v1.BotRenderPovResponse"> & {
  /**
   * Base64-encoded PNG image data.
   * Decode with standard Base64 decoder to get raw PNG bytes.
   * See metadata for the effective render settings used.
   *
   * @generated from field: string image_base64 = 1;
   */
  imageBase64: string;

  /**
   * MIME type for image_base64.
   *
   * @generated from field: string image_mime_type = 2;
   */
  imageMimeType: string;

  /**
   * Effective render settings used for this frame.
   *
   * @generated from field: soulfire.v1.BotRenderPovMetadata metadata = 3;
   */
  metadata?: BotRenderPovMetadata | undefined;

  /**
   * Optional debug counters and samples.
   * Present only when include_debug_trace is true.
   *
   * @generated from field: optional soulfire.v1.BotRenderPovDebugTrace debug_trace = 4;
   */
  debugTrace?: BotRenderPovDebugTrace | undefined;
};

/**
 * Describes the message soulfire.v1.BotRenderPovResponse.
 * Use `create(BotRenderPovResponseSchema)` to create a new message.
 */
export const BotRenderPovResponseSchema: GenMessage<BotRenderPovResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 19);

/**
 * Effective settings used for a rendered POV frame.
 *
 * @generated from message soulfire.v1.BotRenderPovMetadata
 */
export type BotRenderPovMetadata = Message<"soulfire.v1.BotRenderPovMetadata"> & {
  /**
   * Final image width in pixels after defaults and clamping.
   *
   * @generated from field: int32 width = 1;
   */
  width: number;

  /**
   * Final image height in pixels after defaults and clamping.
   *
   * @generated from field: int32 height = 2;
   */
  height: number;

  /**
   * Field of view in degrees.
   *
   * @generated from field: double fov = 3;
   */
  fov: number;

  /**
   * Maximum render distance in blocks.
   *
   * @generated from field: int32 max_distance = 4;
   */
  maxDistance: number;

  /**
   * Camera X coordinate.
   *
   * @generated from field: double camera_x = 5;
   */
  cameraX: number;

  /**
   * Camera Y coordinate.
   *
   * @generated from field: double camera_y = 6;
   */
  cameraY: number;

  /**
   * Camera Z coordinate.
   *
   * @generated from field: double camera_z = 7;
   */
  cameraZ: number;

  /**
   * Camera yaw in degrees.
   *
   * @generated from field: float y_rot = 8;
   */
  yRot: number;

  /**
   * Camera pitch in degrees.
   *
   * @generated from field: float x_rot = 9;
   */
  xRot: number;

  /**
   * Whether the HUD overlay was rendered.
   *
   * @generated from field: bool included_hud = 10;
   */
  includedHud: boolean;

  /**
   * Whether first-person hands and held items were rendered.
   *
   * @generated from field: bool included_hands = 11;
   */
  includedHands: boolean;
};

/**
 * Describes the message soulfire.v1.BotRenderPovMetadata.
 * Use `create(BotRenderPovMetadataSchema)` to create a new message.
 */
export const BotRenderPovMetadataSchema: GenMessage<BotRenderPovMetadata> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 20);

/**
 * Renderer debug counters and samples for a single POV render.
 *
 * @generated from message soulfire.v1.BotRenderPovDebugTrace
 */
export type BotRenderPovDebugTrace = Message<"soulfire.v1.BotRenderPovDebugTrace"> & {
  /**
   * @generated from field: int64 render_id = 1;
   */
  renderId: bigint;

  /**
   * @generated from field: int64 chunks_considered = 2;
   */
  chunksConsidered: bigint;

  /**
   * @generated from field: int64 chunks_loaded = 3;
   */
  chunksLoaded: bigint;

  /**
   * @generated from field: int64 sections_visible = 4;
   */
  sectionsVisible: bigint;

  /**
   * @generated from field: int64 sections_meshed = 5;
   */
  sectionsMeshed: bigint;

  /**
   * @generated from field: int64 section_cache_hits = 6;
   */
  sectionCacheHits: bigint;

  /**
   * @generated from field: int64 section_cache_misses = 7;
   */
  sectionCacheMisses: bigint;

  /**
   * @generated from field: int64 block_quads = 8;
   */
  blockQuads: bigint;

  /**
   * @generated from field: int64 entities_considered = 9;
   */
  entitiesConsidered: bigint;

  /**
   * @generated from field: int64 entities_visible = 10;
   */
  entitiesVisible: bigint;

  /**
   * @generated from field: int64 billboards = 11;
   */
  billboards: bigint;

  /**
   * @generated from field: int64 weather_billboards = 12;
   */
  weatherBillboards: bigint;

  /**
   * @generated from field: int64 vanilla_block_geometry_hits = 13;
   */
  vanillaBlockGeometryHits: bigint;

  /**
   * @generated from field: int64 vanilla_block_geometry_fallbacks = 14;
   */
  vanillaBlockGeometryFallbacks: bigint;

  /**
   * @generated from field: int64 resource_block_geometry_fallbacks = 15;
   */
  resourceBlockGeometryFallbacks: bigint;

  /**
   * @generated from field: int64 inventory_icon_ignored = 16;
   */
  inventoryIconIgnored: bigint;

  /**
   * @generated from field: int64 unknown_render_pipelines = 17;
   */
  unknownRenderPipelines: bigint;

  /**
   * @generated from field: int64 runtime_texture_mirror_skips = 18;
   */
  runtimeTextureMirrorSkips: bigint;

  /**
   * @generated from field: int64 opaque_triangles = 19;
   */
  opaqueTriangles: bigint;

  /**
   * @generated from field: int64 cutout_triangles = 20;
   */
  cutoutTriangles: bigint;

  /**
   * @generated from field: int64 translucent_triangles = 21;
   */
  translucentTriangles: bigint;

  /**
   * @generated from field: int64 world_collect_nanos = 22;
   */
  worldCollectNanos: bigint;

  /**
   * @generated from field: int64 dynamic_collect_nanos = 23;
   */
  dynamicCollectNanos: bigint;

  /**
   * @generated from field: int64 raster_nanos = 24;
   */
  rasterNanos: bigint;

  /**
   * @generated from field: int64 total_nanos = 25;
   */
  totalNanos: bigint;

  /**
   * @generated from field: int64 text_submissions = 26;
   */
  textSubmissions: bigint;

  /**
   * @generated from field: repeated soulfire.v1.BotRenderPovTextSubmission text_samples = 27;
   */
  textSamples: BotRenderPovTextSubmission[];

  /**
   * @generated from field: repeated string notable_events = 28;
   */
  notableEvents: string[];

  /**
   * @generated from field: repeated string detailed_failures = 29;
   */
  detailedFailures: string[];
};

/**
 * Describes the message soulfire.v1.BotRenderPovDebugTrace.
 * Use `create(BotRenderPovDebugTraceSchema)` to create a new message.
 */
export const BotRenderPovDebugTraceSchema: GenMessage<BotRenderPovDebugTrace> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 21);

/**
 * Sample of text submitted while rendering a debug frame.
 *
 * @generated from message soulfire.v1.BotRenderPovTextSubmission
 */
export type BotRenderPovTextSubmission = Message<"soulfire.v1.BotRenderPovTextSubmission"> & {
  /**
   * @generated from field: string source = 1;
   */
  source: string;

  /**
   * @generated from field: string text = 2;
   */
  text: string;

  /**
   * @generated from field: bool shadow = 3;
   */
  shadow: boolean;

  /**
   * @generated from field: string display_mode = 4;
   */
  displayMode: string;

  /**
   * @generated from field: int32 light = 5;
   */
  light: number;

  /**
   * @generated from field: string color = 6;
   */
  color: string;

  /**
   * @generated from field: string background_color = 7;
   */
  backgroundColor: string;

  /**
   * @generated from field: string outline_color = 8;
   */
  outlineColor: string;
};

/**
 * Describes the message soulfire.v1.BotRenderPovTextSubmission.
 * Use `create(BotRenderPovTextSubmissionSchema)` to create a new message.
 */
export const BotRenderPovTextSubmissionSchema: GenMessage<BotRenderPovTextSubmission> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 22);

/**
 * Request to continuously render a bot's point of view.
 *
 * @generated from message soulfire.v1.BotWatchPovRequest
 */
export type BotWatchPovRequest = Message<"soulfire.v1.BotWatchPovRequest"> & {
  /**
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * @generated from field: int32 width = 3;
   */
  width: number;

  /**
   * @generated from field: int32 height = 4;
   */
  height: number;

  /**
   * @generated from field: optional int32 max_distance = 5;
   */
  maxDistance?: number | undefined;

  /**
   * @generated from field: optional double fov = 6;
   */
  fov?: number | undefined;

  /**
   * @generated from field: optional double camera_x = 7;
   */
  cameraX?: number | undefined;

  /**
   * @generated from field: optional double camera_y = 8;
   */
  cameraY?: number | undefined;

  /**
   * @generated from field: optional double camera_z = 9;
   */
  cameraZ?: number | undefined;

  /**
   * @generated from field: optional float y_rot = 10;
   */
  yRot?: number | undefined;

  /**
   * @generated from field: optional float x_rot = 11;
   */
  xRot?: number | undefined;

  /**
   * @generated from field: optional bool include_hud = 12;
   */
  includeHud?: boolean | undefined;

  /**
   * @generated from field: optional bool include_hands = 13;
   */
  includeHands?: boolean | undefined;

  /**
   * @generated from field: bool include_debug_trace = 14;
   */
  includeDebugTrace: boolean;

  /**
   * Target interval between frames. Defaults to 1000 ms and is clamped to
   * 100-60000 ms. Frames are dropped while the transport is not ready.
   *
   * @generated from field: int32 interval_ms = 15;
   */
  intervalMs: number;
};

/**
 * Describes the message soulfire.v1.BotWatchPovRequest.
 * Use `create(BotWatchPovRequestSchema)` to create a new message.
 */
export const BotWatchPovRequestSchema: GenMessage<BotWatchPovRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 23);

/**
 * A rendered frame from a POV stream.
 *
 * @generated from message soulfire.v1.BotPovFrame
 */
export type BotPovFrame = Message<"soulfire.v1.BotPovFrame"> & {
  /**
   * @generated from field: uint64 sequence = 1;
   */
  sequence: bigint;

  /**
   * @generated from field: google.protobuf.Timestamp captured_at = 2;
   */
  capturedAt?: Timestamp | undefined;

  /**
   * @generated from field: soulfire.v1.BotRenderPovResponse render = 3;
   */
  render?: BotRenderPovResponse | undefined;

  /**
   * Number of scheduled frames skipped since the previous delivered frame
   * because the client or transport could not accept more data.
   *
   * @generated from field: uint64 dropped_before = 4;
   */
  droppedBefore: bigint;
};

/**
 * Describes the message soulfire.v1.BotPovFrame.
 * Use `create(BotPovFrameSchema)` to create a new message.
 */
export const BotPovFrameSchema: GenMessage<BotPovFrame> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 24);

/**
 * Request for bounded, top-down world data suitable for map viewers.
 *
 * @generated from message soulfire.v1.BotWorldMapRequest
 */
export type BotWorldMapRequest = Message<"soulfire.v1.BotWorldMapRequest"> & {
  /**
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Center coordinates. Each defaults to the bot's current block position.
   *
   * @generated from field: optional int32 center_x = 3;
   */
  centerX?: number | undefined;

  /**
   * @generated from field: optional int32 center_z = 4;
   */
  centerZ?: number | undefined;

  /**
   * Radius in blocks. Defaults to 64 and is clamped to 1-256.
   *
   * @generated from field: int32 radius = 5;
   */
  radius: number;

  /**
   * Distance between sampled columns. Defaults to 1 and is clamped to 1-16.
   *
   * @generated from field: int32 sample_step = 6;
   */
  sampleStep: number;

  /**
   * Include nearby entity overlays in the returned snapshot.
   *
   * @generated from field: bool include_entities = 7;
   */
  includeEntities: boolean;
};

/**
 * Describes the message soulfire.v1.BotWorldMapRequest.
 * Use `create(BotWorldMapRequestSchema)` to create a new message.
 */
export const BotWorldMapRequestSchema: GenMessage<BotWorldMapRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 25);

/**
 * One sampled surface column in a top-down world map.
 *
 * @generated from message soulfire.v1.BotWorldMapColumn
 */
export type BotWorldMapColumn = Message<"soulfire.v1.BotWorldMapColumn"> & {
  /**
   * @generated from field: int32 x = 1;
   */
  x: number;

  /**
   * @generated from field: int32 z = 2;
   */
  z: number;

  /**
   * @generated from field: bool loaded = 3;
   */
  loaded: boolean;

  /**
   * @generated from field: optional int32 surface_y = 4;
   */
  surfaceY?: number | undefined;

  /**
   * @generated from field: optional string block_id = 5;
   */
  blockId?: string | undefined;

  /**
   * @generated from field: optional string biome_id = 6;
   */
  biomeId?: string | undefined;

  /**
   * @generated from field: int32 sky_light = 7;
   */
  skyLight: number;

  /**
   * @generated from field: int32 block_light = 8;
   */
  blockLight: number;
};

/**
 * Describes the message soulfire.v1.BotWorldMapColumn.
 * Use `create(BotWorldMapColumnSchema)` to create a new message.
 */
export const BotWorldMapColumnSchema: GenMessage<BotWorldMapColumn> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 26);

/**
 * Entity overlay for a top-down world map.
 *
 * @generated from message soulfire.v1.BotWorldMapEntity
 */
export type BotWorldMapEntity = Message<"soulfire.v1.BotWorldMapEntity"> & {
  /**
   * @generated from field: string entity_id = 1;
   */
  entityId: string;

  /**
   * @generated from field: string entity_type = 2;
   */
  entityType: string;

  /**
   * @generated from field: string display_name = 3;
   */
  displayName: string;

  /**
   * @generated from field: double x = 4;
   */
  x: number;

  /**
   * @generated from field: double y = 5;
   */
  y: number;

  /**
   * @generated from field: double z = 6;
   */
  z: number;

  /**
   * @generated from field: float yaw = 7;
   */
  yaw: number;
};

/**
 * Describes the message soulfire.v1.BotWorldMapEntity.
 * Use `create(BotWorldMapEntitySchema)` to create a new message.
 */
export const BotWorldMapEntitySchema: GenMessage<BotWorldMapEntity> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 27);

/**
 * A bounded, rectangular top-down world sample.
 *
 * @generated from message soulfire.v1.BotWorldMapResponse
 */
export type BotWorldMapResponse = Message<"soulfire.v1.BotWorldMapResponse"> & {
  /**
   * @generated from field: string dimension = 1;
   */
  dimension: string;

  /**
   * @generated from field: int32 center_x = 2;
   */
  centerX: number;

  /**
   * @generated from field: int32 center_z = 3;
   */
  centerZ: number;

  /**
   * @generated from field: int32 radius = 4;
   */
  radius: number;

  /**
   * @generated from field: int32 sample_step = 5;
   */
  sampleStep: number;

  /**
   * @generated from field: int32 min_y = 6;
   */
  minY: number;

  /**
   * @generated from field: int32 max_y = 7;
   */
  maxY: number;

  /**
   * @generated from field: int64 world_revision = 8;
   */
  worldRevision: bigint;

  /**
   * @generated from field: google.protobuf.Timestamp sampled_at = 9;
   */
  sampledAt?: Timestamp | undefined;

  /**
   * @generated from field: repeated soulfire.v1.BotWorldMapColumn columns = 10;
   */
  columns: BotWorldMapColumn[];

  /**
   * @generated from field: repeated soulfire.v1.BotWorldMapEntity entities = 11;
   */
  entities: BotWorldMapEntity[];
};

/**
 * Describes the message soulfire.v1.BotWorldMapResponse.
 * Use `create(BotWorldMapResponseSchema)` to create a new message.
 */
export const BotWorldMapResponseSchema: GenMessage<BotWorldMapResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 28);

/**
 * Request to perform a click action on an inventory slot.
 * Simulates the various mouse click interactions available in Minecraft inventory UIs.
 *
 * @generated from message soulfire.v1.BotInventoryClickRequest
 */
export type BotInventoryClickRequest = Message<"soulfire.v1.BotInventoryClickRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot performing the inventory action.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * The slot index to click.
   * Valid range depends on the currently open container.
   * Special value: -999 for clicking outside the inventory (dropping items).
   *
   * @generated from field: int32 slot = 3;
   */
  slot: number;

  /**
   * The type of click to perform.
   * Different click types have different effects on items.
   *
   * @generated from field: soulfire.v1.ClickType click_type = 4;
   */
  clickType: ClickType;

  /**
   * For SWAP_HOTBAR click type: which hotbar slot to swap with.
   * Range: 0-8 (corresponding to hotbar slots 1-9).
   * Ignored for other click types.
   *
   * @generated from field: int32 hotbar_slot = 5;
   */
  hotbarSlot: number;
};

/**
 * Describes the message soulfire.v1.BotInventoryClickRequest.
 * Use `create(BotInventoryClickRequestSchema)` to create a new message.
 */
export const BotInventoryClickRequestSchema: GenMessage<BotInventoryClickRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 29);

/**
 * Response for inventory click action.
 *
 * @generated from message soulfire.v1.BotInventoryClickResponse
 */
export type BotInventoryClickResponse = Message<"soulfire.v1.BotInventoryClickResponse"> & {
  /**
   * Whether the click action was successfully sent to the server.
   * Note: This indicates the action was sent, not that the server accepted it.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Invalid click type"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotInventoryClickResponse.
 * Use `create(BotInventoryClickResponseSchema)` to create a new message.
 */
export const BotInventoryClickResponseSchema: GenMessage<BotInventoryClickResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 30);

/**
 * Request to get the current state of the bot's open container/inventory.
 *
 * @generated from message soulfire.v1.BotInventoryStateRequest
 */
export type BotInventoryStateRequest = Message<"soulfire.v1.BotInventoryStateRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to get inventory state for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotInventoryStateRequest.
 * Use `create(BotInventoryStateRequestSchema)` to create a new message.
 */
export const BotInventoryStateRequestSchema: GenMessage<BotInventoryStateRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 31);

/**
 * A group of slots that should be rendered together in the UI.
 * Defines the layout grid for a section of the inventory.
 *
 * @generated from message soulfire.v1.SlotRegion
 */
export type SlotRegion = Message<"soulfire.v1.SlotRegion"> & {
  /**
   * Unique identifier for this region within the container.
   * Examples: "container", "player_inventory", "player_hotbar", "crafting_output"
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * Display label for this region.
   * Examples: "Chest", "Inventory", "Hotbar", "Crafting Grid"
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * First slot index belonging to this region.
   * Slots are numbered sequentially from 0 across all regions.
   *
   * @generated from field: int32 start_index = 3;
   */
  startIndex: number;

  /**
   * Total number of slots in this region.
   *
   * @generated from field: int32 slot_count = 4;
   */
  slotCount: number;

  /**
   * Number of columns for grid layout.
   * Common values: 9 (standard inventory width), 3 (dispenser), 1 (armor column)
   *
   * @generated from field: int32 columns = 5;
   */
  columns: number;

  /**
   * The type of region, affecting rendering behavior.
   *
   * @generated from field: soulfire.v1.SlotRegionType type = 6;
   */
  type: SlotRegionType;
};

/**
 * Describes the message soulfire.v1.SlotRegion.
 * Use `create(SlotRegionSchema)` to create a new message.
 */
export const SlotRegionSchema: GenMessage<SlotRegion> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 32);

/**
 * A clickable button in a container menu.
 * Used for special interactions like enchantment selection, stonecutter recipes, trade offers, etc.
 *
 * @generated from message soulfire.v1.ContainerButton
 */
export type ContainerButton = Message<"soulfire.v1.ContainerButton"> & {
  /**
   * Button ID to send to the server when clicking.
   * The meaning depends on the container type.
   *
   * @generated from field: int32 button_id = 1;
   */
  buttonId: number;

  /**
   * Display label for the button.
   * Examples: "Enchant Slot 1", "Recipe 5", "8x Emerald -> 1x Diamond Pickaxe"
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Optional item ID for displaying an icon.
   * Example: "minecraft:enchanted_book", "minecraft:stone_bricks"
   *
   * @generated from field: optional string icon_item_id = 3;
   */
  iconItemId?: string | undefined;

  /**
   * Optional tooltip/description text with additional details.
   * Examples: "Requires 3 lapis, 30 levels", "Out of stock"
   *
   * @generated from field: optional string description = 4;
   */
  description?: string | undefined;

  /**
   * Whether the button is currently disabled (cannot be clicked).
   * Reasons vary by container: missing materials, out of stock, insufficient levels, etc.
   *
   * @generated from field: bool disabled = 5;
   */
  disabled: boolean;

  /**
   * Whether this button is currently selected/active.
   * Used for toggle-style buttons or to show current selection.
   *
   * @generated from field: bool selected = 6;
   */
  selected: boolean;
};

/**
 * Describes the message soulfire.v1.ContainerButton.
 * Use `create(ContainerButtonSchema)` to create a new message.
 */
export const ContainerButtonSchema: GenMessage<ContainerButton> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 33);

/**
 * Text input field in a container menu.
 * Currently only used by the anvil for item renaming.
 *
 * @generated from message soulfire.v1.ContainerTextInput
 */
export type ContainerTextInput = Message<"soulfire.v1.ContainerTextInput"> & {
  /**
   * Field identifier for the SetContainerText RPC.
   * Currently supported: "item_name" (anvil rename)
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * Display label for the input field.
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Current text value in the field.
   * For anvil: the item's current custom name, or empty if none.
   *
   * @generated from field: string current_value = 3;
   */
  currentValue: string;

  /**
   * Maximum allowed character length.
   * For anvil: 50 characters.
   * Value of 0 means no limit.
   *
   * @generated from field: int32 max_length = 4;
   */
  maxLength: number;

  /**
   * Placeholder text shown when field is empty.
   *
   * @generated from field: string placeholder = 5;
   */
  placeholder: string;
};

/**
 * Describes the message soulfire.v1.ContainerTextInput.
 * Use `create(ContainerTextInputSchema)` to create a new message.
 */
export const ContainerTextInputSchema: GenMessage<ContainerTextInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 34);

/**
 * A page from a book, used for lectern display.
 *
 * @generated from message soulfire.v1.BookPage
 */
export type BookPage = Message<"soulfire.v1.BookPage"> & {
  /**
   * Zero-indexed page number.
   *
   * @generated from field: int32 page_number = 1;
   */
  pageNumber: number;

  /**
   * Page content text.
   * May contain Minecraft formatting codes (section symbols).
   *
   * @generated from field: string content = 2;
   */
  content: string;
};

/**
 * Describes the message soulfire.v1.BookPage.
 * Use `create(BookPageSchema)` to create a new message.
 */
export const BookPageSchema: GenMessage<BookPage> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 35);

/**
 * Complete layout description for an open container menu.
 * Provides all information needed to render the container UI.
 *
 * @generated from message soulfire.v1.ContainerLayout
 */
export type ContainerLayout = Message<"soulfire.v1.ContainerLayout"> & {
  /**
   * Container title/name displayed at the top.
   * Examples: "Chest", "Crafting Table", "Inventory", custom container names.
   *
   * @generated from field: string title = 1;
   */
  title: string;

  /**
   * Ordered list of slot regions defining the container layout.
   * Regions are listed in rendering order (typically container slots first, then player inventory).
   *
   * @generated from field: repeated soulfire.v1.SlotRegion regions = 2;
   */
  regions: SlotRegion[];

  /**
   * Total number of slots in the container.
   * Sum of all region slot_counts.
   *
   * @generated from field: int32 total_slots = 3;
   */
  totalSlots: number;

  /**
   * Available action buttons for this container.
   * Present for: stonecutter (recipes), enchanting table (3 enchant options),
   * loom (patterns), villager trading (trade offers), beacon (effects), etc.
   *
   * @generated from field: repeated soulfire.v1.ContainerButton buttons = 4;
   */
  buttons: ContainerButton[];

  /**
   * Container type identifier for client-specific rendering.
   * Values: "inventory", "chest", "dispenser", "hopper", "furnace", "crafting",
   *         "anvil", "enchanting", "brewing", "beacon", "shulker", "grindstone",
   *         "stonecutter", "loom", "cartography", "smithing", "merchant",
   *         "crafter", "lectern", "generic"
   *
   * @generated from field: string container_type = 5;
   */
  containerType: string;

  /**
   * Text input fields available in this container.
   * Currently only populated for anvil menus.
   *
   * @generated from field: repeated soulfire.v1.ContainerTextInput text_inputs = 6;
   */
  textInputs: ContainerTextInput[];

  /**
   * Book pages for lectern containers.
   * Contains all pages of the book on the lectern.
   *
   * @generated from field: repeated soulfire.v1.BookPage book_pages = 7;
   */
  bookPages: BookPage[];

  /**
   * Current page being displayed (for lectern).
   * Zero-indexed into book_pages.
   *
   * @generated from field: int32 current_book_page = 8;
   */
  currentBookPage: number;
};

/**
 * Describes the message soulfire.v1.ContainerLayout.
 * Use `create(ContainerLayoutSchema)` to create a new message.
 */
export const ContainerLayoutSchema: GenMessage<ContainerLayout> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 36);

/**
 * Response containing the current inventory/container state.
 *
 * @generated from message soulfire.v1.BotInventoryStateResponse
 */
export type BotInventoryStateResponse = Message<"soulfire.v1.BotInventoryStateResponse"> & {
  /**
   * Layout information describing the container structure.
   *
   * @generated from field: soulfire.v1.ContainerLayout layout = 1;
   */
  layout?: ContainerLayout | undefined;

  /**
   * All slots containing items (empty slots are omitted).
   *
   * @generated from field: repeated soulfire.v1.InventorySlot slots = 2;
   */
  slots: InventorySlot[];

  /**
   * Item currently held on the cursor (being moved).
   * Absent if cursor is empty.
   *
   * @generated from field: optional soulfire.v1.InventorySlot carried_item = 3;
   */
  carriedItem?: InventorySlot | undefined;

  /**
   * Currently selected hotbar slot index (0-8).
   *
   * @generated from field: int32 selected_hotbar_slot = 4;
   */
  selectedHotbarSlot: number;
};

/**
 * Describes the message soulfire.v1.BotInventoryStateResponse.
 * Use `create(BotInventoryStateResponseSchema)` to create a new message.
 */
export const BotInventoryStateResponseSchema: GenMessage<BotInventoryStateResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 37);

/**
 * Request to close the currently open container.
 *
 * @generated from message soulfire.v1.BotCloseContainerRequest
 */
export type BotCloseContainerRequest = Message<"soulfire.v1.BotCloseContainerRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to close container for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotCloseContainerRequest.
 * Use `create(BotCloseContainerRequestSchema)` to create a new message.
 */
export const BotCloseContainerRequestSchema: GenMessage<BotCloseContainerRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 38);

/**
 * Response for container close action.
 *
 * @generated from message soulfire.v1.BotCloseContainerResponse
 */
export type BotCloseContainerResponse = Message<"soulfire.v1.BotCloseContainerResponse"> & {
  /**
   * Whether the close action was successful.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;
};

/**
 * Describes the message soulfire.v1.BotCloseContainerResponse.
 * Use `create(BotCloseContainerResponseSchema)` to create a new message.
 */
export const BotCloseContainerResponseSchema: GenMessage<BotCloseContainerResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 39);

/**
 * Request to open the player's inventory screen.
 * This sends a packet to the server to open the inventory UI.
 *
 * @generated from message soulfire.v1.BotOpenInventoryRequest
 */
export type BotOpenInventoryRequest = Message<"soulfire.v1.BotOpenInventoryRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to open inventory for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotOpenInventoryRequest.
 * Use `create(BotOpenInventoryRequestSchema)` to create a new message.
 */
export const BotOpenInventoryRequestSchema: GenMessage<BotOpenInventoryRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 40);

/**
 * Response for inventory open action.
 *
 * @generated from message soulfire.v1.BotOpenInventoryResponse
 */
export type BotOpenInventoryResponse = Message<"soulfire.v1.BotOpenInventoryResponse"> & {
  /**
   * Whether the open inventory action was successful.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;
};

/**
 * Describes the message soulfire.v1.BotOpenInventoryResponse.
 * Use `create(BotOpenInventoryResponseSchema)` to create a new message.
 */
export const BotOpenInventoryResponseSchema: GenMessage<BotOpenInventoryResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 41);

/**
 * Request to simulate a mouse click action in the game world.
 * Used for attacking entities, breaking blocks, using items, and interacting with blocks/entities.
 *
 * @generated from message soulfire.v1.BotMouseClickRequest
 */
export type BotMouseClickRequest = Message<"soulfire.v1.BotMouseClickRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot performing the click.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Which mouse button to simulate clicking.
   *
   * @generated from field: soulfire.v1.MouseButton button = 3;
   */
  button: MouseButton;
};

/**
 * Describes the message soulfire.v1.BotMouseClickRequest.
 * Use `create(BotMouseClickRequestSchema)` to create a new message.
 */
export const BotMouseClickRequestSchema: GenMessage<BotMouseClickRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 42);

/**
 * Response for mouse click action.
 *
 * @generated from message soulfire.v1.BotMouseClickResponse
 */
export type BotMouseClickResponse = Message<"soulfire.v1.BotMouseClickResponse"> & {
  /**
   * Whether the click action was successfully performed.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Invalid mouse button"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotMouseClickResponse.
 * Use `create(BotMouseClickResponseSchema)` to create a new message.
 */
export const BotMouseClickResponseSchema: GenMessage<BotMouseClickResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 43);

/**
 * Request to click a container-specific action button.
 * Used for stonecutter recipes, enchantment selection, villager trades, beacon effects, etc.
 *
 * @generated from message soulfire.v1.BotContainerButtonClickRequest
 */
export type BotContainerButtonClickRequest = Message<"soulfire.v1.BotContainerButtonClickRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot clicking the button.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * The button ID to click.
   * Valid values depend on container type:
   * - Stonecutter: 0-99 (recipe index)
   * - Enchanting table: 0-2 (enchantment slot)
   * - Loom: 0-99 (pattern index)
   * - Villager: 0 to (offer count - 1)
   * - Beacon: mob effect registry ID, -1 for confirm
   * - Crafter: 0-8 (slot toggle index)
   * - Lectern: 1=prev page, 2=next page, 3=take book
   *
   * @generated from field: int32 button_id = 3;
   */
  buttonId: number;
};

/**
 * Describes the message soulfire.v1.BotContainerButtonClickRequest.
 * Use `create(BotContainerButtonClickRequestSchema)` to create a new message.
 */
export const BotContainerButtonClickRequestSchema: GenMessage<BotContainerButtonClickRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 44);

/**
 * Response for container button click action.
 *
 * @generated from message soulfire.v1.BotContainerButtonClickResponse
 */
export type BotContainerButtonClickResponse = Message<"soulfire.v1.BotContainerButtonClickResponse"> & {
  /**
   * Whether the button click was successfully queued.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Invalid button ID for this container type"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotContainerButtonClickResponse.
 * Use `create(BotContainerButtonClickResponseSchema)` to create a new message.
 */
export const BotContainerButtonClickResponseSchema: GenMessage<BotContainerButtonClickResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 45);

/**
 * Request to set text in a container text input field.
 * Currently only supports anvil item renaming.
 *
 * @generated from message soulfire.v1.BotSetContainerTextRequest
 */
export type BotSetContainerTextRequest = Message<"soulfire.v1.BotSetContainerTextRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot setting the text.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Which field to set the text for.
   * Currently supported: "item_name" (anvil rename)
   *
   * @generated from field: string field_id = 3;
   */
  fieldId: string;

  /**
   * The text value to set.
   * For anvil: max 50 characters for the item name.
   *
   * @generated from field: string text = 4;
   */
  text: string;
};

/**
 * Describes the message soulfire.v1.BotSetContainerTextRequest.
 * Use `create(BotSetContainerTextRequestSchema)` to create a new message.
 */
export const BotSetContainerTextRequestSchema: GenMessage<BotSetContainerTextRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 46);

/**
 * Response for container text input action.
 *
 * @generated from message soulfire.v1.BotSetContainerTextResponse
 */
export type BotSetContainerTextResponse = Message<"soulfire.v1.BotSetContainerTextResponse"> & {
  /**
   * Whether the text was successfully set.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Unsupported container or field ID: <type>/<field_id>"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotSetContainerTextResponse.
 * Use `create(BotSetContainerTextResponseSchema)` to create a new message.
 */
export const BotSetContainerTextResponseSchema: GenMessage<BotSetContainerTextResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 47);

/**
 * Request to change the selected hotbar slot.
 *
 * @generated from message soulfire.v1.BotSetHotbarSlotRequest
 */
export type BotSetHotbarSlotRequest = Message<"soulfire.v1.BotSetHotbarSlotRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to change hotbar selection for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Hotbar slot index to select.
   * Range: 0-8 (corresponding to slots 1-9 in the UI).
   *
   * @generated from field: int32 slot = 3;
   */
  slot: number;
};

/**
 * Describes the message soulfire.v1.BotSetHotbarSlotRequest.
 * Use `create(BotSetHotbarSlotRequestSchema)` to create a new message.
 */
export const BotSetHotbarSlotRequestSchema: GenMessage<BotSetHotbarSlotRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 48);

/**
 * Response for hotbar slot selection.
 *
 * @generated from message soulfire.v1.BotSetHotbarSlotResponse
 */
export type BotSetHotbarSlotResponse = Message<"soulfire.v1.BotSetHotbarSlotResponse"> & {
  /**
   * Whether the hotbar slot was successfully changed.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Hotbar slot must be between 0 and 8, got: <slot>",
   *                  "Player is not available"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotSetHotbarSlotResponse.
 * Use `create(BotSetHotbarSlotResponseSchema)` to create a new message.
 */
export const BotSetHotbarSlotResponseSchema: GenMessage<BotSetHotbarSlotResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 49);

/**
 * Request to update the bot's movement state.
 * Each field is optional to allow partial updates - only specified fields are changed.
 * The movement state persists until explicitly changed or reset.
 *
 * @generated from message soulfire.v1.BotSetMovementStateRequest
 */
export type BotSetMovementStateRequest = Message<"soulfire.v1.BotSetMovementStateRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to control.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * W key state - move forward.
   * true = pressing W, false = not pressing W
   *
   * @generated from field: optional bool forward = 3;
   */
  forward?: boolean | undefined;

  /**
   * S key state - move backward.
   * true = pressing S, false = not pressing S
   *
   * @generated from field: optional bool backward = 4;
   */
  backward?: boolean | undefined;

  /**
   * A key state - strafe left.
   * true = pressing A, false = not pressing A
   *
   * @generated from field: optional bool left = 5;
   */
  left?: boolean | undefined;

  /**
   * D key state - strafe right.
   * true = pressing D, false = not pressing D
   *
   * @generated from field: optional bool right = 6;
   */
  right?: boolean | undefined;

  /**
   * Space key state - jump.
   * true = pressing Space, false = not pressing Space
   * When held, the bot will jump repeatedly.
   *
   * @generated from field: optional bool jump = 7;
   */
  jump?: boolean | undefined;

  /**
   * Shift key state - sneak/crouch.
   * true = sneaking, false = not sneaking
   * While sneaking: slower movement, won't fall off edges, crouching animation.
   *
   * @generated from field: optional bool sneak = 8;
   */
  sneak?: boolean | undefined;

  /**
   * Ctrl key state - sprint.
   * true = sprinting, false = not sprinting
   * Requires forward movement and sufficient hunger (food level >= 6).
   *
   * @generated from field: optional bool sprint = 9;
   */
  sprint?: boolean | undefined;
};

/**
 * Describes the message soulfire.v1.BotSetMovementStateRequest.
 * Use `create(BotSetMovementStateRequestSchema)` to create a new message.
 */
export const BotSetMovementStateRequestSchema: GenMessage<BotSetMovementStateRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 50);

/**
 * Response for movement state update.
 *
 * @generated from message soulfire.v1.BotSetMovementStateResponse
 */
export type BotSetMovementStateResponse = Message<"soulfire.v1.BotSetMovementStateResponse"> & {
  /**
   * Whether the movement state was successfully updated.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotSetMovementStateResponse.
 * Use `create(BotSetMovementStateResponseSchema)` to create a new message.
 */
export const BotSetMovementStateResponseSchema: GenMessage<BotSetMovementStateResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 51);

/**
 * Request to reset all movement to stopped state.
 * Equivalent to releasing all movement keys (WASD, Space, Shift, Ctrl).
 *
 * @generated from message soulfire.v1.BotResetMovementRequest
 */
export type BotResetMovementRequest = Message<"soulfire.v1.BotResetMovementRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to stop movement for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotResetMovementRequest.
 * Use `create(BotResetMovementRequestSchema)` to create a new message.
 */
export const BotResetMovementRequestSchema: GenMessage<BotResetMovementRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 52);

/**
 * Response for movement reset.
 *
 * @generated from message soulfire.v1.BotResetMovementResponse
 */
export type BotResetMovementResponse = Message<"soulfire.v1.BotResetMovementResponse"> & {
  /**
   * Whether the movement was successfully reset.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotResetMovementResponse.
 * Use `create(BotResetMovementResponseSchema)` to create a new message.
 */
export const BotResetMovementResponseSchema: GenMessage<BotResetMovementResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 53);

/**
 * Request to set the bot's view rotation (look direction).
 * Used to aim the bot's view at specific targets or directions.
 *
 * @generated from message soulfire.v1.BotSetRotationRequest
 */
export type BotSetRotationRequest = Message<"soulfire.v1.BotSetRotationRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to rotate.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Horizontal rotation angle in degrees (yaw).
   * Range: -180 to 180 (values outside this range are normalized).
   * Direction mapping: 0 = South, 90 = West, -90 = East, +/-180 = North.
   *
   * @generated from field: float yaw = 3;
   */
  yaw: number;

  /**
   * Vertical rotation angle in degrees (pitch).
   * Range: -90 to 90 (values outside this range are clamped).
   * Direction mapping: -90 = looking up, 0 = horizon, 90 = looking down.
   *
   * @generated from field: float pitch = 4;
   */
  pitch: number;
};

/**
 * Describes the message soulfire.v1.BotSetRotationRequest.
 * Use `create(BotSetRotationRequestSchema)` to create a new message.
 */
export const BotSetRotationRequestSchema: GenMessage<BotSetRotationRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 54);

/**
 * Response for rotation update.
 *
 * @generated from message soulfire.v1.BotSetRotationResponse
 */
export type BotSetRotationResponse = Message<"soulfire.v1.BotSetRotationResponse"> & {
  /**
   * Whether the rotation was successfully set.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "Player is not available"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotSetRotationResponse.
 * Use `create(BotSetRotationResponseSchema)` to create a new message.
 */
export const BotSetRotationResponseSchema: GenMessage<BotSetRotationResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 55);

/**
 * Body element that can appear in a dialog.
 * Dialogs can contain a mix of text and item displays.
 *
 * @generated from message soulfire.v1.DialogBodyElement
 */
export type DialogBodyElement = Message<"soulfire.v1.DialogBodyElement"> & {
  /**
   * @generated from oneof soulfire.v1.DialogBodyElement.element
   */
  element: {
    /**
     * Plain text message element.
     *
     * @generated from field: soulfire.v1.DialogPlainMessage plain_message = 1;
     */
    value: DialogPlainMessage;
    case: "plainMessage";
  } | {
    /**
     * Item display element (shows a Minecraft item).
     *
     * @generated from field: soulfire.v1.DialogItem item = 2;
     */
    value: DialogItem;
    case: "item";
  } | { case: undefined; value?: undefined };
};

/**
 * Describes the message soulfire.v1.DialogBodyElement.
 * Use `create(DialogBodyElementSchema)` to create a new message.
 */
export const DialogBodyElementSchema: GenMessage<DialogBodyElement> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 56);

/**
 * Plain text message in a dialog body.
 *
 * @generated from message soulfire.v1.DialogPlainMessage
 */
export type DialogPlainMessage = Message<"soulfire.v1.DialogPlainMessage"> & {
  /**
   * Text content, typically a JSON text component string.
   * May contain formatting, colors, click events, etc.
   *
   * @generated from field: string contents = 1;
   */
  contents: string;

  /**
   * Display width in pixels.
   * Range: 1-1024, default: 200.
   *
   * @generated from field: int32 width = 2;
   */
  width: number;
};

/**
 * Describes the message soulfire.v1.DialogPlainMessage.
 * Use `create(DialogPlainMessageSchema)` to create a new message.
 */
export const DialogPlainMessageSchema: GenMessage<DialogPlainMessage> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 57);

/**
 * Item display element in a dialog body.
 *
 * @generated from message soulfire.v1.DialogItem
 */
export type DialogItem = Message<"soulfire.v1.DialogItem"> & {
  /**
   * Minecraft item identifier.
   * Example: "minecraft:diamond", "minecraft:netherite_sword"
   *
   * @generated from field: string item_id = 1;
   */
  itemId: string;

  /**
   * Item count/stack size to display.
   *
   * @generated from field: int32 count = 2;
   */
  count: number;

  /**
   * Optional description text below the item.
   *
   * @generated from field: optional string description = 3;
   */
  description?: string | undefined;

  /**
   * Whether to show the item frame decoration around the item.
   * Default: true.
   *
   * @generated from field: bool show_decoration = 4;
   */
  showDecoration: boolean;

  /**
   * Whether to show the item tooltip on hover.
   * Default: true.
   *
   * @generated from field: bool show_tooltip = 5;
   */
  showTooltip: boolean;

  /**
   * Display width in pixels.
   * Range: 1-256, default: 16.
   *
   * @generated from field: int32 width = 6;
   */
  width: number;

  /**
   * Display height in pixels.
   * Range: 1-256, default: 16.
   *
   * @generated from field: int32 height = 7;
   */
  height: number;
};

/**
 * Describes the message soulfire.v1.DialogItem.
 * Use `create(DialogItemSchema)` to create a new message.
 */
export const DialogItemSchema: GenMessage<DialogItem> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 58);

/**
 * Input control that can appear in a dialog.
 * Allows dialogs to gather user input before submission.
 *
 * @generated from message soulfire.v1.DialogInput
 */
export type DialogInput = Message<"soulfire.v1.DialogInput"> & {
  /**
   * @generated from oneof soulfire.v1.DialogInput.input
   */
  input: {
    /**
     * Text input field (single or multi-line).
     *
     * @generated from field: soulfire.v1.DialogTextInput text = 1;
     */
    value: DialogTextInput;
    case: "text";
  } | {
    /**
     * Boolean checkbox input.
     *
     * @generated from field: soulfire.v1.DialogBooleanInput boolean = 2;
     */
    value: DialogBooleanInput;
    case: "boolean";
  } | {
    /**
     * Dropdown/combo box for selecting one option.
     *
     * @generated from field: soulfire.v1.DialogSingleOptionInput single_option = 3;
     */
    value: DialogSingleOptionInput;
    case: "singleOption";
  } | {
    /**
     * Slider for selecting a number in a range.
     *
     * @generated from field: soulfire.v1.DialogNumberRangeInput number_range = 4;
     */
    value: DialogNumberRangeInput;
    case: "numberRange";
  } | { case: undefined; value?: undefined };
};

/**
 * Describes the message soulfire.v1.DialogInput.
 * Use `create(DialogInputSchema)` to create a new message.
 */
export const DialogInputSchema: GenMessage<DialogInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 59);

/**
 * Text input field in a dialog.
 *
 * @generated from message soulfire.v1.DialogTextInput
 */
export type DialogTextInput = Message<"soulfire.v1.DialogTextInput"> & {
  /**
   * Identifier used when submitting the dialog.
   *
   * @generated from field: string key = 1;
   */
  key: string;

  /**
   * Display label for the field.
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Display width in pixels.
   * Range: 1-1024, default: 200.
   *
   * @generated from field: int32 width = 3;
   */
  width: number;

  /**
   * Whether to show the label.
   * Default: true.
   *
   * @generated from field: bool label_visible = 4;
   */
  labelVisible: boolean;

  /**
   * Initial/default value.
   *
   * @generated from field: string initial = 5;
   */
  initial: string;

  /**
   * Maximum character length.
   * Default: 32.
   *
   * @generated from field: int32 max_length = 6;
   */
  maxLength: number;

  /**
   * Whether to allow multi-line input.
   *
   * @generated from field: bool multiline = 7;
   */
  multiline: boolean;

  /**
   * Maximum lines for multiline input.
   *
   * @generated from field: int32 multiline_max_lines = 8;
   */
  multilineMaxLines: number;

  /**
   * Display height for multiline input in pixels.
   *
   * @generated from field: int32 multiline_height = 9;
   */
  multilineHeight: number;
};

/**
 * Describes the message soulfire.v1.DialogTextInput.
 * Use `create(DialogTextInputSchema)` to create a new message.
 */
export const DialogTextInputSchema: GenMessage<DialogTextInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 60);

/**
 * Boolean checkbox input in a dialog.
 *
 * @generated from message soulfire.v1.DialogBooleanInput
 */
export type DialogBooleanInput = Message<"soulfire.v1.DialogBooleanInput"> & {
  /**
   * Identifier used when submitting the dialog.
   *
   * @generated from field: string key = 1;
   */
  key: string;

  /**
   * Display label for the checkbox.
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Initial checked state.
   * Default: false.
   *
   * @generated from field: bool initial = 3;
   */
  initial: boolean;

  /**
   * String value to submit when checked.
   * Default: "true".
   *
   * @generated from field: string on_true = 4;
   */
  onTrue: string;

  /**
   * String value to submit when unchecked.
   * Default: "false".
   *
   * @generated from field: string on_false = 5;
   */
  onFalse: string;
};

/**
 * Describes the message soulfire.v1.DialogBooleanInput.
 * Use `create(DialogBooleanInputSchema)` to create a new message.
 */
export const DialogBooleanInputSchema: GenMessage<DialogBooleanInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 61);

/**
 * Single option selection input (dropdown/combo box) in a dialog.
 *
 * @generated from message soulfire.v1.DialogSingleOptionInput
 */
export type DialogSingleOptionInput = Message<"soulfire.v1.DialogSingleOptionInput"> & {
  /**
   * Identifier used when submitting the dialog.
   *
   * @generated from field: string key = 1;
   */
  key: string;

  /**
   * Display label for the dropdown.
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Whether to show the label.
   * Default: true.
   *
   * @generated from field: bool label_visible = 3;
   */
  labelVisible: boolean;

  /**
   * Display width in pixels.
   * Range: 1-1024, default: 200.
   *
   * @generated from field: int32 width = 4;
   */
  width: number;

  /**
   * Available options to choose from.
   *
   * @generated from field: repeated soulfire.v1.DialogOption options = 5;
   */
  options: DialogOption[];

  /**
   * ID of the initially selected option.
   *
   * @generated from field: string initial_option_id = 6;
   */
  initialOptionId: string;
};

/**
 * Describes the message soulfire.v1.DialogSingleOptionInput.
 * Use `create(DialogSingleOptionInputSchema)` to create a new message.
 */
export const DialogSingleOptionInputSchema: GenMessage<DialogSingleOptionInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 62);

/**
 * An option in a single-option input.
 *
 * @generated from message soulfire.v1.DialogOption
 */
export type DialogOption = Message<"soulfire.v1.DialogOption"> & {
  /**
   * Option identifier (submitted value).
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * Display text for the option.
   * If empty, the id is used for display.
   *
   * @generated from field: string display = 2;
   */
  display: string;
};

/**
 * Describes the message soulfire.v1.DialogOption.
 * Use `create(DialogOptionSchema)` to create a new message.
 */
export const DialogOptionSchema: GenMessage<DialogOption> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 63);

/**
 * Number range slider input in a dialog.
 *
 * @generated from message soulfire.v1.DialogNumberRangeInput
 */
export type DialogNumberRangeInput = Message<"soulfire.v1.DialogNumberRangeInput"> & {
  /**
   * Identifier used when submitting the dialog.
   *
   * @generated from field: string key = 1;
   */
  key: string;

  /**
   * Display label for the slider.
   *
   * @generated from field: string label = 2;
   */
  label: string;

  /**
   * Translation key for formatting the label with the current value.
   *
   * @generated from field: string label_format = 3;
   */
  labelFormat: string;

  /**
   * Display width in pixels.
   * Range: 1-1024, default: 200.
   *
   * @generated from field: int32 width = 4;
   */
  width: number;

  /**
   * Minimum value (left side of slider).
   *
   * @generated from field: double start = 5;
   */
  start: number;

  /**
   * Maximum value (right side of slider).
   *
   * @generated from field: double end = 6;
   */
  end: number;

  /**
   * Step size for discrete values.
   * If 0, continuous values are allowed.
   *
   * @generated from field: double step = 7;
   */
  step: number;

  /**
   * Initial/default value.
   *
   * @generated from field: double initial = 8;
   */
  initial: number;
};

/**
 * Describes the message soulfire.v1.DialogNumberRangeInput.
 * Use `create(DialogNumberRangeInputSchema)` to create a new message.
 */
export const DialogNumberRangeInputSchema: GenMessage<DialogNumberRangeInput> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 64);

/**
 * Action that can be triggered by a dialog button.
 *
 * @generated from message soulfire.v1.DialogAction
 */
export type DialogAction = Message<"soulfire.v1.DialogAction"> & {
  /**
   * @generated from oneof soulfire.v1.DialogAction.action
   */
  action: {
    /**
     * Open a URL in the browser.
     *
     * @generated from field: soulfire.v1.DialogOpenUrlAction open_url = 1;
     */
    value: DialogOpenUrlAction;
    case: "openUrl";
  } | {
    /**
     * Run a chat command.
     *
     * @generated from field: soulfire.v1.DialogRunCommandAction run_command = 2;
     */
    value: DialogRunCommandAction;
    case: "runCommand";
  } | {
    /**
     * Suggest a command (put in chat box without sending).
     *
     * @generated from field: soulfire.v1.DialogSuggestCommandAction suggest_command = 3;
     */
    value: DialogSuggestCommandAction;
    case: "suggestCommand";
  } | {
    /**
     * Copy text to clipboard.
     *
     * @generated from field: soulfire.v1.DialogCopyToClipboardAction copy_to_clipboard = 4;
     */
    value: DialogCopyToClipboardAction;
    case: "copyToClipboard";
  } | {
    /**
     * Show another dialog.
     *
     * @generated from field: soulfire.v1.DialogShowDialogAction show_dialog = 5;
     */
    value: DialogShowDialogAction;
    case: "showDialog";
  } | {
    /**
     * Custom server-defined action.
     *
     * @generated from field: soulfire.v1.DialogCustomAction custom = 6;
     */
    value: DialogCustomAction;
    case: "custom";
  } | {
    /**
     * Run a command with input placeholders.
     *
     * @generated from field: soulfire.v1.DialogDynamicRunCommandAction dynamic_run_command = 7;
     */
    value: DialogDynamicRunCommandAction;
    case: "dynamicRunCommand";
  } | {
    /**
     * Custom action with additional data.
     *
     * @generated from field: soulfire.v1.DialogDynamicCustomAction dynamic_custom = 8;
     */
    value: DialogDynamicCustomAction;
    case: "dynamicCustom";
  } | { case: undefined; value?: undefined };
};

/**
 * Describes the message soulfire.v1.DialogAction.
 * Use `create(DialogActionSchema)` to create a new message.
 */
export const DialogActionSchema: GenMessage<DialogAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 65);

/**
 * Action to open a URL in the user's browser.
 *
 * @generated from message soulfire.v1.DialogOpenUrlAction
 */
export type DialogOpenUrlAction = Message<"soulfire.v1.DialogOpenUrlAction"> & {
  /**
   * The URL to open.
   *
   * @generated from field: string url = 1;
   */
  url: string;
};

/**
 * Describes the message soulfire.v1.DialogOpenUrlAction.
 * Use `create(DialogOpenUrlActionSchema)` to create a new message.
 */
export const DialogOpenUrlActionSchema: GenMessage<DialogOpenUrlAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 66);

/**
 * Action to execute a chat command.
 *
 * @generated from message soulfire.v1.DialogRunCommandAction
 */
export type DialogRunCommandAction = Message<"soulfire.v1.DialogRunCommandAction"> & {
  /**
   * The command to run (including the leading /).
   *
   * @generated from field: string command = 1;
   */
  command: string;
};

/**
 * Describes the message soulfire.v1.DialogRunCommandAction.
 * Use `create(DialogRunCommandActionSchema)` to create a new message.
 */
export const DialogRunCommandActionSchema: GenMessage<DialogRunCommandAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 67);

/**
 * Action to suggest a command (place in chat input).
 *
 * @generated from message soulfire.v1.DialogSuggestCommandAction
 */
export type DialogSuggestCommandAction = Message<"soulfire.v1.DialogSuggestCommandAction"> & {
  /**
   * The command to suggest.
   *
   * @generated from field: string command = 1;
   */
  command: string;
};

/**
 * Describes the message soulfire.v1.DialogSuggestCommandAction.
 * Use `create(DialogSuggestCommandActionSchema)` to create a new message.
 */
export const DialogSuggestCommandActionSchema: GenMessage<DialogSuggestCommandAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 68);

/**
 * Action to copy text to the clipboard.
 *
 * @generated from message soulfire.v1.DialogCopyToClipboardAction
 */
export type DialogCopyToClipboardAction = Message<"soulfire.v1.DialogCopyToClipboardAction"> & {
  /**
   * The text to copy.
   *
   * @generated from field: string value = 1;
   */
  value: string;
};

/**
 * Describes the message soulfire.v1.DialogCopyToClipboardAction.
 * Use `create(DialogCopyToClipboardActionSchema)` to create a new message.
 */
export const DialogCopyToClipboardActionSchema: GenMessage<DialogCopyToClipboardAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 69);

/**
 * Action to display another dialog.
 *
 * @generated from message soulfire.v1.DialogShowDialogAction
 */
export type DialogShowDialogAction = Message<"soulfire.v1.DialogShowDialogAction"> & {
  /**
   * Dialog ID to show (references a registered dialog).
   *
   * @generated from field: string dialog_id = 1;
   */
  dialogId: string;
};

/**
 * Describes the message soulfire.v1.DialogShowDialogAction.
 * Use `create(DialogShowDialogActionSchema)` to create a new message.
 */
export const DialogShowDialogActionSchema: GenMessage<DialogShowDialogAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 70);

/**
 * Custom server-defined action.
 *
 * @generated from message soulfire.v1.DialogCustomAction
 */
export type DialogCustomAction = Message<"soulfire.v1.DialogCustomAction"> & {
  /**
   * Action identifier known to the server.
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * Optional JSON payload for the action.
   *
   * @generated from field: string payload = 2;
   */
  payload: string;
};

/**
 * Describes the message soulfire.v1.DialogCustomAction.
 * Use `create(DialogCustomActionSchema)` to create a new message.
 */
export const DialogCustomActionSchema: GenMessage<DialogCustomAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 71);

/**
 * Dynamic command action with input value substitution.
 *
 * @generated from message soulfire.v1.DialogDynamicRunCommandAction
 */
export type DialogDynamicRunCommandAction = Message<"soulfire.v1.DialogDynamicRunCommandAction"> & {
  /**
   * Command template with placeholders for input values.
   * Placeholders are replaced with user input before execution.
   *
   * @generated from field: string template = 1;
   */
  template: string;
};

/**
 * Describes the message soulfire.v1.DialogDynamicRunCommandAction.
 * Use `create(DialogDynamicRunCommandActionSchema)` to create a new message.
 */
export const DialogDynamicRunCommandActionSchema: GenMessage<DialogDynamicRunCommandAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 72);

/**
 * Dynamic custom action with additional NBT data.
 *
 * @generated from message soulfire.v1.DialogDynamicCustomAction
 */
export type DialogDynamicCustomAction = Message<"soulfire.v1.DialogDynamicCustomAction"> & {
  /**
   * Custom action identifier.
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * Additional NBT data as JSON string.
   *
   * @generated from field: string additions = 2;
   */
  additions: string;
};

/**
 * Describes the message soulfire.v1.DialogDynamicCustomAction.
 * Use `create(DialogDynamicCustomActionSchema)` to create a new message.
 */
export const DialogDynamicCustomActionSchema: GenMessage<DialogDynamicCustomAction> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 73);

/**
 * Button that can appear in a dialog.
 *
 * @generated from message soulfire.v1.DialogButton
 */
export type DialogButton = Message<"soulfire.v1.DialogButton"> & {
  /**
   * Button text (may be a JSON text component).
   *
   * @generated from field: string label = 1;
   */
  label: string;

  /**
   * Optional tooltip shown on hover.
   *
   * @generated from field: optional string tooltip = 2;
   */
  tooltip?: string | undefined;

  /**
   * Button width in pixels.
   * Range: 1-1024, default: 150.
   *
   * @generated from field: int32 width = 3;
   */
  width: number;

  /**
   * Action to perform when clicked.
   *
   * @generated from field: optional soulfire.v1.DialogAction action = 4;
   */
  action?: DialogAction | undefined;
};

/**
 * Describes the message soulfire.v1.DialogButton.
 * Use `create(DialogButtonSchema)` to create a new message.
 */
export const DialogButtonSchema: GenMessage<DialogButton> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 74);

/**
 * Complete server dialog definition.
 * Contains all information needed to render and interact with a dialog.
 *
 * @generated from message soulfire.v1.ServerDialog
 */
export type ServerDialog = Message<"soulfire.v1.ServerDialog"> & {
  /**
   * Dialog identifier from the server.
   * Format: namespaced identifier (e.g., "myserver:welcome_dialog").
   *
   * @generated from field: string id = 1;
   */
  id: string;

  /**
   * The type of dialog, determining overall structure.
   *
   * @generated from field: soulfire.v1.DialogType type = 2;
   */
  type: DialogType;

  /**
   * Dialog title (may be a JSON text component).
   *
   * @generated from field: string title = 3;
   */
  title: string;

  /**
   * Button label when shown as an external/minimized button.
   *
   * @generated from field: optional string external_title = 4;
   */
  externalTitle?: string | undefined;

  /**
   * Body elements (text and items) displayed in the dialog.
   *
   * @generated from field: repeated soulfire.v1.DialogBodyElement body = 5;
   */
  body: DialogBodyElement[];

  /**
   * Input controls for gathering user data.
   *
   * @generated from field: repeated soulfire.v1.DialogInput inputs = 6;
   */
  inputs: DialogInput[];

  /**
   * Whether ESC key can close the dialog.
   * Default: true.
   *
   * @generated from field: bool can_close_with_escape = 7;
   */
  canCloseWithEscape: boolean;

  /**
   * Whether to pause the game in singleplayer.
   * Default: true. No effect in multiplayer.
   *
   * @generated from field: bool pause = 8;
   */
  pause: boolean;

  /**
   * Behavior after an action button is clicked.
   *
   * @generated from field: soulfire.v1.DialogAfterAction after_action = 9;
   */
  afterAction: DialogAfterAction;

  /**
   * For NOTICE type: the single action button.
   *
   * @generated from field: optional soulfire.v1.DialogButton action = 10;
   */
  action?: DialogButton | undefined;

  /**
   * For CONFIRMATION type: the "yes" button.
   *
   * @generated from field: optional soulfire.v1.DialogButton yes = 11;
   */
  yes?: DialogButton | undefined;

  /**
   * For CONFIRMATION type: the "no" button.
   *
   * @generated from field: optional soulfire.v1.DialogButton no = 12;
   */
  no?: DialogButton | undefined;

  /**
   * For MULTI_ACTION type: list of action buttons.
   *
   * @generated from field: repeated soulfire.v1.DialogButton actions = 13;
   */
  actions: DialogButton[];

  /**
   * For MULTI_ACTION and DIALOG_LIST: number of button columns.
   * Default: 2.
   *
   * @generated from field: int32 columns = 14;
   */
  columns: number;

  /**
   * For MULTI_ACTION, SERVER_LINKS, DIALOG_LIST: exit/close button.
   *
   * @generated from field: optional soulfire.v1.DialogButton exit_action = 15;
   */
  exitAction?: DialogButton | undefined;

  /**
   * For SERVER_LINKS and DIALOG_LIST: button width.
   * Default: 150.
   *
   * @generated from field: int32 button_width = 16;
   */
  buttonWidth: number;
};

/**
 * Describes the message soulfire.v1.ServerDialog.
 * Use `create(ServerDialogSchema)` to create a new message.
 */
export const ServerDialogSchema: GenMessage<ServerDialog> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 75);

/**
 * Request to get the currently displayed dialog (if any).
 *
 * @generated from message soulfire.v1.BotGetDialogRequest
 */
export type BotGetDialogRequest = Message<"soulfire.v1.BotGetDialogRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to get dialog for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotGetDialogRequest.
 * Use `create(BotGetDialogRequestSchema)` to create a new message.
 */
export const BotGetDialogRequestSchema: GenMessage<BotGetDialogRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 76);

/**
 * Response containing the current dialog state.
 *
 * @generated from message soulfire.v1.BotGetDialogResponse
 */
export type BotGetDialogResponse = Message<"soulfire.v1.BotGetDialogResponse"> & {
  /**
   * The currently displayed dialog.
   * Absent if no dialog is being shown.
   *
   * @generated from field: optional soulfire.v1.ServerDialog dialog = 1;
   */
  dialog?: ServerDialog | undefined;
};

/**
 * Describes the message soulfire.v1.BotGetDialogResponse.
 * Use `create(BotGetDialogResponseSchema)` to create a new message.
 */
export const BotGetDialogResponseSchema: GenMessage<BotGetDialogResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 77);

/**
 * Request to submit a dialog with input values.
 * Used for dialogs that have input fields requiring user data.
 *
 * @generated from message soulfire.v1.BotSubmitDialogRequest
 */
export type BotSubmitDialogRequest = Message<"soulfire.v1.BotSubmitDialogRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot submitting the dialog.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Map of input key to value for each input field.
   * Keys must match the `key` field of DialogInput elements.
   *
   * @generated from field: map<string, string> input_values = 3;
   */
  inputValues: { [key: string]: string };
};

/**
 * Describes the message soulfire.v1.BotSubmitDialogRequest.
 * Use `create(BotSubmitDialogRequestSchema)` to create a new message.
 */
export const BotSubmitDialogRequestSchema: GenMessage<BotSubmitDialogRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 78);

/**
 * Response for dialog submission.
 *
 * @generated from message soulfire.v1.BotSubmitDialogResponse
 */
export type BotSubmitDialogResponse = Message<"soulfire.v1.BotSubmitDialogResponse"> & {
  /**
   * Whether the submission was processed successfully.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "No dialog is currently displayed"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotSubmitDialogResponse.
 * Use `create(BotSubmitDialogResponseSchema)` to create a new message.
 */
export const BotSubmitDialogResponseSchema: GenMessage<BotSubmitDialogResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 79);

/**
 * Request to click a button in the current dialog.
 *
 * @generated from message soulfire.v1.BotClickDialogButtonRequest
 */
export type BotClickDialogButtonRequest = Message<"soulfire.v1.BotClickDialogButtonRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot clicking the button.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;

  /**
   * Index of the button to click.
   * For NOTICE: 0 for the action button
   * For CONFIRMATION: 0 for yes, 1 for no
   * For MULTI_ACTION: index into the actions list
   * Special value: -1 to close/escape the dialog
   *
   * @generated from field: int32 button_index = 3;
   */
  buttonIndex: number;
};

/**
 * Describes the message soulfire.v1.BotClickDialogButtonRequest.
 * Use `create(BotClickDialogButtonRequestSchema)` to create a new message.
 */
export const BotClickDialogButtonRequestSchema: GenMessage<BotClickDialogButtonRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 80);

/**
 * Response for dialog button click.
 *
 * @generated from message soulfire.v1.BotClickDialogButtonResponse
 */
export type BotClickDialogButtonResponse = Message<"soulfire.v1.BotClickDialogButtonResponse"> & {
  /**
   * Whether the button click was processed successfully.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   * Possible errors: "No dialog is currently displayed"
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotClickDialogButtonResponse.
 * Use `create(BotClickDialogButtonResponseSchema)` to create a new message.
 */
export const BotClickDialogButtonResponseSchema: GenMessage<BotClickDialogButtonResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 81);

/**
 * Request to close/dismiss the current dialog.
 *
 * @generated from message soulfire.v1.BotCloseDialogRequest
 */
export type BotCloseDialogRequest = Message<"soulfire.v1.BotCloseDialogRequest"> & {
  /**
   * The UUID of the SoulFire instance containing the bot.
   *
   * @generated from field: string instance_id = 1;
   */
  instanceId: string;

  /**
   * The profile UUID of the bot to close dialog for.
   *
   * @generated from field: string bot_id = 2;
   */
  botId: string;
};

/**
 * Describes the message soulfire.v1.BotCloseDialogRequest.
 * Use `create(BotCloseDialogRequestSchema)` to create a new message.
 */
export const BotCloseDialogRequestSchema: GenMessage<BotCloseDialogRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 82);

/**
 * Response for dialog close.
 *
 * @generated from message soulfire.v1.BotCloseDialogResponse
 */
export type BotCloseDialogResponse = Message<"soulfire.v1.BotCloseDialogResponse"> & {
  /**
   * Whether the dialog was successfully closed.
   *
   * @generated from field: bool success = 1;
   */
  success: boolean;

  /**
   * Error message if success is false.
   *
   * @generated from field: optional string error = 2;
   */
  error?: string | undefined;
};

/**
 * Describes the message soulfire.v1.BotCloseDialogResponse.
 * Use `create(BotCloseDialogResponseSchema)` to create a new message.
 */
export const BotCloseDialogResponseSchema: GenMessage<BotCloseDialogResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_bot, 83);

/**
 * Persistent operator intent for a bot.
 *
 * @generated from enum soulfire.v1.BotDesiredState
 */
export enum BotDesiredState {
  /**
   * @generated from enum value: BOT_DESIRED_STATE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * The bot should remain disconnected.
   *
   * @generated from enum value: BOT_DESIRED_STATE_STOPPED = 1;
   */
  STOPPED = 1,

  /**
   * SoulFire should keep the bot connected according to its reconnect policy.
   *
   * @generated from enum value: BOT_DESIRED_STATE_RUNNING = 2;
   */
  RUNNING = 2,
}

/**
 * Describes the enum soulfire.v1.BotDesiredState.
 */
export const BotDesiredStateSchema: GenEnum<BotDesiredState> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 0);

/**
 * Current state of SoulFire's per-bot connection controller.
 *
 * @generated from enum soulfire.v1.BotRuntimeState
 */
export enum BotRuntimeState {
  /**
   * @generated from enum value: BOT_RUNTIME_STATE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_STOPPED = 1;
   */
  STOPPED = 1,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_QUEUED = 2;
   */
  QUEUED = 2,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_STARTING = 3;
   */
  STARTING = 3,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_RUNNING = 4;
   */
  RUNNING = 4,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_RETRYING = 5;
   */
  RETRYING = 5,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_STOPPING = 6;
   */
  STOPPING = 6,

  /**
   * @generated from enum value: BOT_RUNTIME_STATE_FAILED = 7;
   */
  FAILED = 7,
}

/**
 * Describes the enum soulfire.v1.BotRuntimeState.
 */
export const BotRuntimeStateSchema: GenEnum<BotRuntimeState> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 1);

/**
 * Fine-grained connection phase for a bot, more detailed than the is_online
 * boolean. SPAWNED implies the player entity exists and live_state is available.
 *
 * @generated from enum soulfire.v1.BotConnectionPhase
 */
export enum BotConnectionPhase {
  /**
   * Unknown phase (e.g. for a bot that has never been started).
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * The bot has been created and is establishing its connection / logging in,
   * but the player has not spawned yet.
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_CONNECTING = 1;
   */
  CONNECTING = 1,

  /**
   * The bot is connected to the server (post-login) but has not fully spawned.
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_CONNECTED = 2;
   */
  CONNECTED = 2,

  /**
   * The bot's player has spawned; live_state reflects the player.
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_SPAWNED = 3;
   */
  SPAWNED = 3,

  /**
   * The bot's player is currently dead, awaiting respawn.
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_DIED = 4;
   */
  DIED = 4,

  /**
   * The bot is not connected to a server.
   *
   * @generated from enum value: BOT_CONNECTION_PHASE_DISCONNECTED = 5;
   */
  DISCONNECTED = 5,
}

/**
 * Describes the enum soulfire.v1.BotConnectionPhase.
 */
export const BotConnectionPhaseSchema: GenEnum<BotConnectionPhase> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 2);

/**
 * Minecraft game modes that determine player capabilities.
 *
 * @generated from enum soulfire.v1.GameMode
 */
export enum GameMode {
  /**
   * Unknown or not yet determined game mode.
   *
   * @generated from enum value: GAME_MODE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * Survival mode: resource gathering, health/hunger management, mob combat.
   *
   * @generated from enum value: GAME_MODE_SURVIVAL = 1;
   */
  SURVIVAL = 1,

  /**
   * Creative mode: unlimited resources, instant block breaking, flying, invulnerability.
   *
   * @generated from enum value: GAME_MODE_CREATIVE = 2;
   */
  CREATIVE = 2,

  /**
   * Adventure mode: like survival but cannot break/place blocks without proper tools.
   *
   * @generated from enum value: GAME_MODE_ADVENTURE = 3;
   */
  ADVENTURE = 3,

  /**
   * Spectator mode: invisible, can fly through blocks, cannot interact with the world.
   *
   * @generated from enum value: GAME_MODE_SPECTATOR = 4;
   */
  SPECTATOR = 4,
}

/**
 * Describes the enum soulfire.v1.GameMode.
 */
export const GameModeSchema: GenEnum<GameMode> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 3);

/**
 * Types of inventory click actions available in Minecraft.
 *
 * @generated from enum soulfire.v1.ClickType
 */
export enum ClickType {
  /**
   * Invalid/unspecified click type. Will result in an error.
   *
   * @generated from enum value: CLICK_TYPE_UNSPECIFIED = 0;
   */
  CLICK_TYPE_UNSPECIFIED = 0,

  /**
   * Left mouse click on a slot.
   * - Empty cursor + item in slot: Pick up entire stack to cursor
   * - Item on cursor + empty slot: Place entire stack in slot
   * - Item on cursor + same item in slot: Combine stacks (up to max stack size)
   * - Item on cursor + different item in slot: Swap cursor and slot items
   *
   * @generated from enum value: LEFT_CLICK = 1;
   */
  LEFT_CLICK = 1,

  /**
   * Right mouse click on a slot.
   * - Empty cursor + item in slot: Pick up half the stack (rounded up)
   * - Item on cursor + empty slot: Place one item from cursor
   * - Item on cursor + same item in slot: Place one item from cursor
   * - Item on cursor + different item in slot: Swap cursor and slot items
   *
   * @generated from enum value: RIGHT_CLICK = 2;
   */
  RIGHT_CLICK = 2,

  /**
   * Shift + left click on a slot.
   * Quick-moves the item stack to the opposite inventory section.
   * - From player inventory to container (chest, furnace, etc.)
   * - From container to player inventory
   * - Between hotbar and main inventory
   *
   * @generated from enum value: SHIFT_LEFT_CLICK = 3;
   */
  SHIFT_LEFT_CLICK = 3,

  /**
   * Drop one item from the slot (Q key while hovering over slot).
   * Drops a single item from the stack, leaving the rest.
   *
   * @generated from enum value: DROP_ONE = 4;
   */
  DROP_ONE = 4,

  /**
   * Drop entire stack from the slot (Ctrl+Q while hovering over slot).
   * Drops all items from the stack at once.
   *
   * @generated from enum value: DROP_ALL = 5;
   */
  DROP_ALL = 5,

  /**
   * Swap slot contents with a hotbar slot (number keys 1-9).
   * Requires hotbar_slot field to specify which hotbar slot (0-8).
   * Works regardless of what's in the cursor.
   *
   * @generated from enum value: SWAP_HOTBAR = 6;
   */
  SWAP_HOTBAR = 6,

  /**
   * Middle mouse click (creative mode clone).
   * In creative mode, clones the item to cursor without affecting the slot.
   * No effect in survival mode.
   *
   * @generated from enum value: MIDDLE_CLICK = 7;
   */
  MIDDLE_CLICK = 7,
}

/**
 * Describes the enum soulfire.v1.ClickType.
 */
export const ClickTypeSchema: GenEnum<ClickType> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 4);

/**
 * Describes how a region of slots should be rendered in the UI.
 * Different region types have different visual treatments.
 *
 * @generated from enum soulfire.v1.SlotRegionType
 */
export enum SlotRegionType {
  /**
   * Regular interactive slots that can accept most items.
   *
   * @generated from enum value: SLOT_REGION_NORMAL = 0;
   */
  SLOT_REGION_NORMAL = 0,

  /**
   * Output-only slots (crafting result, furnace output).
   * Items can only be taken out, not placed in.
   *
   * @generated from enum value: SLOT_REGION_OUTPUT = 1;
   */
  SLOT_REGION_OUTPUT = 1,

  /**
   * Display-only slots (lectern book display, some special UIs).
   * May not allow any direct interaction.
   *
   * @generated from enum value: SLOT_REGION_DISPLAY = 2;
   */
  SLOT_REGION_DISPLAY = 2,

  /**
   * Player hotbar slots.
   * Should show selection indicator for the currently selected slot.
   *
   * @generated from enum value: SLOT_REGION_HOTBAR = 3;
   */
  SLOT_REGION_HOTBAR = 3,

  /**
   * Armor slots in player inventory.
   * May display placeholder armor icons when empty.
   *
   * @generated from enum value: SLOT_REGION_ARMOR = 4;
   */
  SLOT_REGION_ARMOR = 4,
}

/**
 * Describes the enum soulfire.v1.SlotRegionType.
 */
export const SlotRegionTypeSchema: GenEnum<SlotRegionType> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 5);

/**
 * Mouse buttons for world interaction.
 *
 * @generated from enum soulfire.v1.MouseButton
 */
export enum MouseButton {
  /**
   * Invalid/unspecified button. Will result in an error.
   *
   * @generated from enum value: MOUSE_BUTTON_UNSPECIFIED = 0;
   */
  MOUSE_BUTTON_UNSPECIFIED = 0,

  /**
   * Left mouse button.
   * Actions: Attack entity (if looking at one), start breaking block (if looking at one).
   *
   * @generated from enum value: LEFT_BUTTON = 1;
   */
  LEFT_BUTTON = 1,

  /**
   * Right mouse button.
   * Actions: Use held item, interact with entity (if looking at one),
   *          interact with block (if looking at one, e.g., open chest, press button).
   *
   * @generated from enum value: RIGHT_BUTTON = 2;
   */
  RIGHT_BUTTON = 2,
}

/**
 * Describes the enum soulfire.v1.MouseButton.
 */
export const MouseButtonSchema: GenEnum<MouseButton> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 6);

/**
 * Dialog types matching Minecraft's dialog registry.
 * Determines the overall structure and behavior of the dialog.
 *
 * @generated from enum soulfire.v1.DialogType
 */
export enum DialogType {
  /**
   * Unknown or unrecognized dialog type.
   *
   * @generated from enum value: DIALOG_TYPE_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * Notice dialog with a single action button in the footer.
   * Used for informational messages that require acknowledgment.
   *
   * @generated from enum value: DIALOG_TYPE_NOTICE = 1;
   */
  NOTICE = 1,

  /**
   * Confirmation dialog with Yes/No buttons in the footer.
   * Used for binary choices.
   *
   * @generated from enum value: DIALOG_TYPE_CONFIRMATION = 2;
   */
  CONFIRMATION = 2,

  /**
   * Multi-action dialog with a scrollable list of action buttons.
   * Used for menus with multiple options.
   *
   * @generated from enum value: DIALOG_TYPE_MULTI_ACTION = 3;
   */
  MULTI_ACTION = 3,

  /**
   * Server links dialog displaying clickable links.
   * Used to show server website, Discord, etc.
   *
   * @generated from enum value: DIALOG_TYPE_SERVER_LINKS = 4;
   */
  SERVER_LINKS = 4,

  /**
   * Dialog list with buttons linking to other dialogs.
   * Used for hierarchical menu navigation.
   *
   * @generated from enum value: DIALOG_TYPE_DIALOG_LIST = 5;
   */
  DIALOG_LIST = 5,
}

/**
 * Describes the enum soulfire.v1.DialogType.
 */
export const DialogTypeSchema: GenEnum<DialogType> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 7);

/**
 * Behavior after a dialog action is triggered.
 *
 * @generated from enum soulfire.v1.DialogAfterAction
 */
export enum DialogAfterAction {
  /**
   * Unspecified, use dialog default.
   *
   * @generated from enum value: DIALOG_AFTER_ACTION_UNSPECIFIED = 0;
   */
  UNSPECIFIED = 0,

  /**
   * Close the dialog after the action.
   * This is the default behavior.
   *
   * @generated from enum value: DIALOG_AFTER_ACTION_CLOSE = 1;
   */
  CLOSE = 1,

  /**
   * Keep the dialog open after the action.
   *
   * @generated from enum value: DIALOG_AFTER_ACTION_NONE = 2;
   */
  NONE = 2,

  /**
   * Show a waiting/loading screen while action processes.
   *
   * @generated from enum value: DIALOG_AFTER_ACTION_WAIT_FOR_RESPONSE = 3;
   */
  WAIT_FOR_RESPONSE = 3,
}

/**
 * Describes the enum soulfire.v1.DialogAfterAction.
 */
export const DialogAfterActionSchema: GenEnum<DialogAfterAction> = /*@__PURE__*/
  enumDesc(file_soulfire_bot, 8);

/**
 * Service for managing and controlling Minecraft bots.
 * Provides comprehensive APIs for bot monitoring, movement control,
 * inventory management, and interaction with server dialogs.
 *
 * Permissions:
 * - READ_BOT_INFO: Required for GetBotList, GetBotInfo, GetInventoryState,
 *                  RenderBotPov, GetDialog
 * - CONTROL_BOTS: Required to start, stop, or restart bots
 * - UPDATE_BOT_CONFIG: Required for persistent per-bot setting changes
 * - CONTROL_BOT_ACTIONS: Required for live movement, inventory, and dialog actions
 *
 * Error Handling:
 * - NOT_FOUND: Instance or bot does not exist
 * - FAILED_PRECONDITION: Bot is not online or required game state is unavailable
 * - INTERNAL: Unexpected server errors (check server logs for details)
 *
 * @generated from service soulfire.v1.BotService
 */
export const BotService: GenService<{
  /**
   * Persists whether the selected bots should be running or stopped.
   * The request returns after the desired state is durable. Connections are
   * reconciled asynchronously and can be observed through WatchBotStatuses.
   *
   * @generated from rpc soulfire.v1.BotService.SetBotsDesiredState
   */
  setBotsDesiredState: {
    methodKind: "unary";
    input: typeof SetBotsDesiredStateRequestSchema;
    output: typeof SetBotsDesiredStateResponseSchema;
  },
  /**
   * Forces the selected bots to establish fresh connections.
   *
   * @generated from rpc soulfire.v1.BotService.RestartBots
   */
  restartBots: {
    methodKind: "unary";
    input: typeof RestartBotsRequestSchema;
    output: typeof RestartBotsResponseSchema;
  },
  /**
   * Streams an initial snapshot followed by desired and runtime state changes.
   *
   * @generated from rpc soulfire.v1.BotService.WatchBotStatuses
   */
  watchBotStatuses: {
    methodKind: "server_streaming";
    input: typeof WatchBotStatusesRequestSchema;
    output: typeof WatchBotStatusesResponseSchema;
  },
  /**
   * Returns a list of all bots configured in the specified instance.
   * Includes both online and offline bots with their current status.
   * For online bots, includes live state (position, health, etc.) but NOT full inventory data.
   * Requires READ_BOT_INFO permission.
   *
   * @generated from rpc soulfire.v1.BotService.GetBotList
   */
  getBotList: {
    methodKind: "unary";
    input: typeof BotListRequestSchema;
    output: typeof BotListResponseSchema;
  },
  /**
   * Returns detailed information about a specific bot.
   * Includes full live state with complete inventory data when the bot is online.
   * Requires READ_BOT_INFO permission.
   *
   * @generated from rpc soulfire.v1.BotService.GetBotInfo
   */
  getBotInfo: {
    methodKind: "unary";
    input: typeof BotInfoRequestSchema;
    output: typeof BotInfoResponseSchema;
  },
  /**
   * Updates a single configuration entry for a specific bot.
   * The configuration is persisted to the database immediately.
   * Requires UPDATE_BOT_CONFIG permission.
   *
   * @generated from rpc soulfire.v1.BotService.UpdateBotConfigEntry
   */
  updateBotConfigEntry: {
    methodKind: "unary";
    input: typeof BotUpdateConfigEntryRequestSchema;
    output: typeof BotUpdateConfigEntryResponseSchema;
  },
  /**
   * Renders the bot's point-of-view as a PNG image using software rendering.
   * The bot must be online with a valid player and level.
   * Uses the bot's current render distance setting.
   * Requires READ_BOT_INFO permission.
   *
   * @generated from rpc soulfire.v1.BotService.RenderBotPov
   */
  renderBotPov: {
    methodKind: "unary";
    input: typeof BotRenderPovRequestSchema;
    output: typeof BotRenderPovResponseSchema;
  },
  /**
   * Streams rendered POV frames. Slow consumers receive the newest available
   * frame and an explicit dropped-frame count instead of an unbounded backlog.
   *
   * @generated from rpc soulfire.v1.BotService.WatchBotPov
   */
  watchBotPov: {
    methodKind: "server_streaming";
    input: typeof BotWatchPovRequestSchema;
    output: typeof BotPovFrameSchema;
  },
  /**
   * Samples loaded terrain and optional entity overlays for top-down viewers.
   *
   * @generated from rpc soulfire.v1.BotService.GetBotWorldMap
   */
  getBotWorldMap: {
    methodKind: "unary";
    input: typeof BotWorldMapRequestSchema;
    output: typeof BotWorldMapResponseSchema;
  },
  /**
   * Performs a click action on an inventory/container slot.
   * Supports various click types (left, right, shift, drop, swap, middle).
   * The bot must be online with a valid player and gameMode.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.ClickInventorySlot
   */
  clickInventorySlot: {
    methodKind: "unary";
    input: typeof BotInventoryClickRequestSchema;
    output: typeof BotInventoryClickResponseSchema;
  },
  /**
   * Returns the current state of the bot's open container/inventory.
   * Includes layout information, slot contents, and carried item.
   * The bot must be online with a valid player.
   * Requires READ_BOT_INFO permission.
   *
   * @generated from rpc soulfire.v1.BotService.GetInventoryState
   */
  getInventoryState: {
    methodKind: "unary";
    input: typeof BotInventoryStateRequestSchema;
    output: typeof BotInventoryStateResponseSchema;
  },
  /**
   * Closes the currently open container (chest, crafting table, etc.).
   * Returns to the player inventory view.
   * The bot must be online with a valid player.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.CloseContainer
   */
  closeContainer: {
    methodKind: "unary";
    input: typeof BotCloseContainerRequestSchema;
    output: typeof BotCloseContainerResponseSchema;
  },
  /**
   * Opens the player's inventory screen.
   * Sends a packet to the server to display the inventory UI.
   * The bot must be online with a valid player.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.OpenInventory
   */
  openInventory: {
    methodKind: "unary";
    input: typeof BotOpenInventoryRequestSchema;
    output: typeof BotOpenInventoryResponseSchema;
  },
  /**
   * Simulates a mouse click in the game world.
   * Left click: attack entity or start breaking block.
   * Right click: use item or interact with entity/block.
   * The bot must be online with valid player, level, and gameMode.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.MouseClick
   */
  mouseClick: {
    methodKind: "unary";
    input: typeof BotMouseClickRequestSchema;
    output: typeof BotMouseClickResponseSchema;
  },
  /**
   * Clicks a container-specific action button.
   * Used for: stonecutter recipes, enchanting, loom patterns, villager trades,
   * beacon effects, crafter slot toggles, lectern page navigation.
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.ClickContainerButton
   */
  clickContainerButton: {
    methodKind: "unary";
    input: typeof BotContainerButtonClickRequestSchema;
    output: typeof BotContainerButtonClickResponseSchema;
  },
  /**
   * Sets text in a container's text input field.
   * Currently only supports anvil item renaming (field_id: "item_name").
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.SetContainerText
   */
  setContainerText: {
    methodKind: "unary";
    input: typeof BotSetContainerTextRequestSchema;
    output: typeof BotSetContainerTextResponseSchema;
  },
  /**
   * Changes the selected hotbar slot.
   * Valid slot range: 0-8 (corresponding to slots 1-9 in the UI).
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.SetHotbarSlot
   */
  setHotbarSlot: {
    methodKind: "unary";
    input: typeof BotSetHotbarSlotRequestSchema;
    output: typeof BotSetHotbarSlotResponseSchema;
  },
  /**
   * Updates the bot's movement state (WASD, jump, sneak, sprint).
   * Only specified fields are changed; omitted fields retain their current value.
   * Movement persists until explicitly changed or reset.
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.SetMovementState
   */
  setMovementState: {
    methodKind: "unary";
    input: typeof BotSetMovementStateRequestSchema;
    output: typeof BotSetMovementStateResponseSchema;
  },
  /**
   * Resets all movement to stopped state.
   * Equivalent to releasing all movement keys.
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.ResetMovement
   */
  resetMovement: {
    methodKind: "unary";
    input: typeof BotResetMovementRequestSchema;
    output: typeof BotResetMovementResponseSchema;
  },
  /**
   * Sets the bot's view rotation (look direction).
   * Yaw is normalized to -180 to 180, pitch is clamped to -90 to 90.
   * The action is queued and executed on the next game tick.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.SetRotation
   */
  setRotation: {
    methodKind: "unary";
    input: typeof BotSetRotationRequestSchema;
    output: typeof BotSetRotationResponseSchema;
  },
  /**
   * Returns the currently displayed server dialog (Minecraft 1.21.6+).
   * Dialogs are server-sent UI screens for custom interactions.
   * Returns empty response if no dialog is being shown.
   * Does not require the bot to be online (but dialog will be absent).
   * Requires READ_BOT_INFO permission.
   *
   * @generated from rpc soulfire.v1.BotService.GetDialog
   */
  getDialog: {
    methodKind: "unary";
    input: typeof BotGetDialogRequestSchema;
    output: typeof BotGetDialogResponseSchema;
  },
  /**
   * Submits a dialog with input values.
   * Used for dialogs containing text fields, checkboxes, dropdowns, or sliders.
   * The dialog is closed after submission.
   * Note: Full dialog response packets are not yet implemented; this clears local state.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.SubmitDialog
   */
  submitDialog: {
    methodKind: "unary";
    input: typeof BotSubmitDialogRequestSchema;
    output: typeof BotSubmitDialogResponseSchema;
  },
  /**
   * Clicks a button in the current dialog.
   * Button index depends on dialog type (see BotClickDialogButtonRequest).
   * The dialog is typically closed after the button click.
   * Note: Full dialog button packets are not yet implemented; this clears local state.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.ClickDialogButton
   */
  clickDialogButton: {
    methodKind: "unary";
    input: typeof BotClickDialogButtonRequestSchema;
    output: typeof BotClickDialogButtonResponseSchema;
  },
  /**
   * Closes/dismisses the current dialog.
   * Clears the local dialog state.
   * Requires CONTROL_BOT_ACTIONS permission.
   *
   * @generated from rpc soulfire.v1.BotService.CloseDialog
   */
  closeDialog: {
    methodKind: "unary";
    input: typeof BotCloseDialogRequestSchema;
    output: typeof BotCloseDialogResponseSchema;
  },
}> = /*@__PURE__*/
  serviceDesc(file_soulfire_bot, 0);
