Project Files
src / helpers / toolProgress.ts
export type ToolStatusContext = {
status?: (message: string) => unknown;
};
export function reportToolStatus(ctx: ToolStatusContext, message: string): void {
try {
if (typeof ctx.status === "function") {
ctx.status(stripTrailingStatusPunctuation(message));
}
} catch {
// Best-effort UI update.
}
}
function stripTrailingStatusPunctuation(message: string): string {
return message.trim().replace(/\.{1,3}$/, "");
}
export function formatToolStep(step: number, totalSteps: number, message?: string): string {
const pct = totalSteps > 0 ? Math.round((step / (totalSteps + 1)) * 100) : 0;
const prefix = `Step ${step}/${totalSteps} (${pct}%)`;
return message ? `${stripTrailingStatusPunctuation(message)} - ${prefix}` : prefix;
}
export function reportToolStep(
ctx: ToolStatusContext,
step: number,
totalSteps: number,
message?: string
): void {
reportToolStatus(ctx, formatToolStep(step, totalSteps, message));
}