@earendil-works/pi-coding-agent
Version:
Coding agent CLI with read, bash, edit, write tools and session management
61 lines • 2.85 kB
TypeScript
/**
* The `/mcp` manager view: menus that rebuild while servers connect, a read-only status screen, and
* the sign-in screen that accepts a pasted redirect URL.
*/
import { type Component, type Focusable, type SelectItem, type TUI } from "@earendil-works/pi-tui";
import type { ExtensionCommandContext } from "../../core/extensions/types.ts";
import type { KeybindingsManager } from "../../core/keybindings.ts";
import { type Theme } from "../../modes/interactive/theme/theme.ts";
export interface McpMenu {
title: string;
/** Shown below the title. */
details?: string;
/** Shown below the details in the error color. */
error?: string;
items: SelectItem[];
/** Shown when there are no items. */
empty?: string;
/** Value of the item selected when the menu opens. */
selected?: string;
/** What the confirm key does, for the key hint. */
confirmLabel: string;
/** What the cancel key does, for the key hint. */
cancelLabel: string;
}
export interface McpUi {
/**
* Show a menu and resolve to the chosen item's value, or undefined when cancelled. `subscribe`
* rebuilds the menu on every change, keeping the selected item.
*/
menu(build: () => McpMenu, subscribe?: (listener: () => void) => () => void): Promise<string | undefined>;
/** Show a message while an operation runs. With `onCancel`, the cancel key calls it. */
status(title: string, message: string, onCancel?: () => void): void;
/**
* Show the authorization URL and wait for a pasted redirect URL. Resolves to undefined when
* cancelled or when `signal` aborts (the browser reached the callback).
*/
redirectUrl(title: string, authorizationUrl: string, signal: AbortSignal): Promise<string | undefined>;
}
export declare class McpManagerView implements McpUi, Component, Focusable {
private readonly tui;
private readonly theme;
private readonly keybindings;
private content;
private inputHandler;
private inputTarget;
private _focused;
constructor(tui: TUI, theme: Theme, keybindings: KeybindingsManager);
get focused(): boolean;
set focused(value: boolean);
get capturesViewportInput(): boolean;
private setContent;
menu(build: () => McpMenu, subscribe?: (listener: () => void) => () => void): Promise<string | undefined>;
status(title: string, message: string, onCancel?: () => void): void;
redirectUrl(title: string, authorizationUrl: string, signal: AbortSignal): Promise<string | undefined>;
handleInput(data: string): void;
render(width: number): string[];
invalidate(): void;
}
/** Run `manage` in the manager view until it returns. */
export declare function showMcpManager(ctx: ExtensionCommandContext, manage: (ui: McpUi) => Promise<void>): Promise<void>;
//# sourceMappingURL=ui.d.ts.map