UNPKG

buroventures-harald-code

Version:

Harald Code - AI-powered coding assistant CLI

138 lines (137 loc) 4.83 kB
/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { Content } from '@google/genai'; import { HistoryItemWithoutId } from '../types.js'; import { Config, GitService, Logger } from 'buroventures-harald-code-core'; import { LoadedSettings } from '../../config/settings.js'; import { UseHistoryManagerReturn } from '../hooks/useHistoryManager.js'; import type { HistoryItem } from '../types.js'; import { SessionStatsState } from '../contexts/SessionContext.js'; export interface CommandContext { invocation?: { /** The raw, untrimmed input string from the user. */ raw: string; /** The primary name of the command that was matched. */ name: string; /** The arguments string that follows the command name. */ args: string; }; services: { config: Config | null; settings: LoadedSettings; git: GitService | undefined; logger: Logger; }; ui: { /** Adds a new item to the history display. */ addItem: UseHistoryManagerReturn['addItem']; /** Clears all history items and the console screen. */ clear: () => void; /** * Sets the transient debug message displayed in the application footer in debug mode. */ setDebugMessage: (message: string) => void; /** The currently pending history item, if any. */ pendingItem: HistoryItemWithoutId | null; /** * Sets a pending item in the history, which is useful for indicating * that a long-running operation is in progress. * * @param item The history item to display as pending, or `null` to clear. */ setPendingItem: (item: HistoryItemWithoutId | null) => void; /** * Loads a new set of history items, replacing the current history. * * @param history The array of history items to load. */ loadHistory: UseHistoryManagerReturn['loadHistory']; /** Toggles a special display mode. */ toggleCorgiMode: () => void; toggleVimEnabled: () => Promise<boolean>; }; session: { stats: SessionStatsState; resetSession: () => void; /** A transient list of shell commands the user has approved for this session. */ sessionShellAllowlist: Set<string>; }; } /** * The return type for a command action that results in scheduling a tool call. */ export interface ToolActionReturn { type: 'tool'; toolName: string; toolArgs: Record<string, unknown>; } /** The return type for a command action that results in the app quitting. */ export interface QuitActionReturn { type: 'quit'; messages: HistoryItem[]; } /** * The return type for a command action that results in a simple message * being displayed to the user. */ export interface MessageActionReturn { type: 'message'; messageType: 'info' | 'error'; content: string; } /** * The return type for a command action that needs to open a dialog. */ export interface OpenDialogActionReturn { type: 'dialog'; dialog: 'auth' | 'theme' | 'editor' | 'privacy'; } /** * The return type for a command action that results in replacing * the entire conversation history. */ export interface LoadHistoryActionReturn { type: 'load_history'; history: HistoryItemWithoutId[]; clientHistory: Content[]; } /** * The return type for a command action that should immediately submit * content as a prompt to the Gemini model. */ export interface SubmitPromptActionReturn { type: 'submit_prompt'; content: string; } /** * The return type for a command action that needs to pause and request * confirmation for a set of shell commands before proceeding. */ export interface ConfirmShellCommandsActionReturn { type: 'confirm_shell_commands'; /** The list of shell commands that require user confirmation. */ commandsToConfirm: string[]; /** The original invocation context to be re-run after confirmation. */ originalInvocation: { raw: string; }; } export type SlashCommandActionReturn = ToolActionReturn | MessageActionReturn | QuitActionReturn | OpenDialogActionReturn | LoadHistoryActionReturn | SubmitPromptActionReturn | ConfirmShellCommandsActionReturn; export declare enum CommandKind { BUILT_IN = "built-in", FILE = "file", MCP_PROMPT = "mcp-prompt" } export interface SlashCommand { name: string; altNames?: string[]; description: string; kind: CommandKind; extensionName?: string; action?: (context: CommandContext, args: string) => void | SlashCommandActionReturn | Promise<void | SlashCommandActionReturn>; completion?: (context: CommandContext, partialArg: string) => Promise<string[]>; subCommands?: SlashCommand[]; }