/** * Internal shell-quoting and sandbox-result classification helpers. * * @module @deepseek-ai/dsh-bash-sandbox/helpers */ import type { BashRunResult } from '@deepseek-ai/dsh-bash' /** * Quote one string as a single-quoted POSIX shell word. * @param text - raw argv element to preserve through the outer shell parse. * @returns the quoted shell word. */ export function shellQuote(text: string): string { return `'${text.replaceAll("'", String.raw`'\''`)}'` } /** * Classify a failed run against the selected backend's denial dialect. * @param result - settled foreground run. * @param signatures - case-insensitive denial substrings from the active wrap. * @returns whether the failed run matches that denial dialect. */ export function classifyDenial(result: BashRunResult, signatures: readonly string[]): boolean { return matchesSignature(result.exitCode, result.stderr.text, signatures) } /** * Classify a failed run against the selected backend's runner-failure dialect. * @param result - settled foreground run. * @param signatures - case-insensitive runner-failure substrings from the active wrap. * @returns whether the failed run matches that runner-failure dialect. */ export function classifyRunnerFailure(result: BashRunResult, signatures: readonly string[]): boolean { return matchesSignature(result.exitCode, result.stderr.text, signatures) } /** * Match a non-zero exit against case-insensitive stderr signatures. * @param exitCode - process exit code; null means signal termination. * @param stderr - collected stderr text. * @param signatures - substrings identifying the selected backend's dialect. * @returns whether this is a non-zero exit whose stderr matches a signature. */ export function matchesSignature(exitCode: number | null, stderr: string, signatures: readonly string[]): boolean { if (exitCode === null || exitCode === 0) return false const lowered = stderr.toLowerCase() return signatures.some(signature => lowered.includes(signature.toLowerCase())) }