export const PACKAGE_SCOPE = "@hyperprior" as const; export interface ToolResultStatus { ok: boolean; message: string; } export function trimOutput(value: string, maxLength = 12_000): string { if (!value) return ""; return value.length <= maxLength ? value : `${value.slice(0, maxLength - 12)}\n... [truncated]`; } export function withAtPrefix(path: string): string { return path.startsWith("@") ? path.slice(1) : path; } export function isProtectedPath(path: string, protectedPaths: string[]): boolean { const lower = path.toLowerCase(); return protectedPaths.some((entry) => { const normalized = entry.toLowerCase().replace(/^\/+/, ""); return lower === normalized || lower.startsWith(`${normalized}/`); }); } export function parseCodeOrText(input?: string): string { return (input || "").trim(); } export function formatCommandOutput(output: string): string { return trimOutput((output || "").replace(/\r/g, "")); } export function safeString(value: unknown): string { return typeof value === "string" ? value : JSON.stringify(value, null, 2); }