UNPKG

@earendil-works/pi-coding-agent

Version:

Coding agent CLI with read, bash, edit, write tools and session management

60 lines 2.48 kB
import { Loader } from "@earendil-works/pi-tui"; import { theme } from "../theme/theme.js"; import { CountdownTimer } from "./countdown-timer.js"; import { keyText } from "./keybinding-hints.js"; export class StatusIndicator extends Loader { kind; constructor(kind, ui, spinnerColorFn, messageColorFn, message, indicator) { super(ui, spinnerColorFn, messageColorFn, message, indicator); this.kind = kind; } dispose() { this.stop(); } } export class WorkingStatusIndicator extends StatusIndicator { constructor(ui, message, indicator) { super("working", ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), message, indicator); } } export class RetryStatusIndicator extends StatusIndicator { countdown; constructor(ui, attempt, maxAttempts, delayMs) { const retryMessage = (seconds) => `Retrying (${attempt}/${maxAttempts}) in ${seconds}s... (${keyText("app.interrupt")} to cancel)`; super("retry", ui, (spinner) => theme.fg("warning", spinner), (text) => theme.fg("muted", text), retryMessage(Math.ceil(delayMs / 1000))); this.countdown = new CountdownTimer(delayMs, ui, (seconds) => { this.setMessage(retryMessage(seconds)); }, () => { this.countdown = undefined; }); } dispose() { this.countdown?.dispose(); this.countdown = undefined; super.dispose(); } } export class CompactionStatusIndicator extends StatusIndicator { constructor(ui, reason) { const cancelHint = `(${keyText("app.interrupt")} to cancel)`; const label = reason === "manual" ? `Compacting context... ${cancelHint}` : `${reason === "overflow" ? "Context overflow detected, " : ""}Auto-compacting... ${cancelHint}`; super("compaction", ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), label); } } export class BranchSummaryStatusIndicator extends StatusIndicator { constructor(ui) { super("branchSummary", ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), `Summarizing branch... (${keyText("app.interrupt")} to cancel)`); } } export class IdleStatus { invalidate() { // No cached state to invalidate. } render(width) { const emptyLine = " ".repeat(width); return [emptyLine, emptyLine]; } } //# sourceMappingURL=status-indicator.js.map