UNPKG

mlld

Version:

mlld: llm scripting language

237 lines (234 loc) 6.72 kB
import { extractPath } from './chunk-YRFPMAAJ.mjs'; import { __name } from './chunk-NJQT543K.mjs'; // core/utils/ansi-processor.ts var ANSI_CODES = { // Reset reset: "\x1B[0m", // Modifiers bold: "\x1B[1m", dim: "\x1B[2m", italic: "\x1B[3m", underline: "\x1B[4m", blink: "\x1B[5m", inverse: "\x1B[7m", hidden: "\x1B[8m", strikethrough: "\x1B[9m", // Regular colors (foreground) black: "\x1B[30m", red: "\x1B[31m", green: "\x1B[32m", yellow: "\x1B[33m", blue: "\x1B[34m", magenta: "\x1B[35m", cyan: "\x1B[36m", white: "\x1B[37m", // Bright colors (foreground) bright_black: "\x1B[90m", bright_red: "\x1B[91m", bright_green: "\x1B[92m", bright_yellow: "\x1B[93m", bright_blue: "\x1B[94m", bright_magenta: "\x1B[95m", bright_cyan: "\x1B[96m", bright_white: "\x1B[97m", // Background colors bg_black: "\x1B[40m", bg_red: "\x1B[41m", bg_green: "\x1B[42m", bg_yellow: "\x1B[43m", bg_blue: "\x1B[44m", bg_magenta: "\x1B[45m", bg_cyan: "\x1B[46m", bg_white: "\x1B[47m", // Bright background colors bg_bright_black: "\x1B[100m", bg_bright_red: "\x1B[101m", bg_bright_green: "\x1B[102m", bg_bright_yellow: "\x1B[103m", bg_bright_blue: "\x1B[104m", bg_bright_magenta: "\x1B[105m", bg_bright_cyan: "\x1B[106m", bg_bright_white: "\x1B[107m", // Aliases for convenience gray: "\x1B[90m", grey: "\x1B[90m", bg_gray: "\x1B[100m", bg_grey: "\x1B[100m", // Aliases without underscores brightblack: "\x1B[90m", brightred: "\x1B[91m", brightgreen: "\x1B[92m", brightyellow: "\x1B[93m", brightblue: "\x1B[94m", brightmagenta: "\x1B[95m", brightcyan: "\x1B[96m", brightwhite: "\x1B[97m", bgblack: "\x1B[40m", bgred: "\x1B[41m", bggreen: "\x1B[42m", bgyellow: "\x1B[43m", bgblue: "\x1B[44m", bgmagenta: "\x1B[45m", bgcyan: "\x1B[46m", bgwhite: "\x1B[47m" }; var CODE_PATTERN = /%([a-z_]+)%/gi; var ANSI_ESCAPE_PATTERN = /\x1b\[[0-9;]*m/g; function shouldProcessAnsi(target, options) { if (process.env.NO_COLOR || process.env.MLLD_NO_COLOR === "true") { return false; } if (options?.enabled === false) { return false; } if (options?.forceTTY || process.env.MLLD_FORCE_COLOR === "true") { return true; } if (target === "file") { return false; } if (target === "doc") { return false; } if (target === "stdout") { return process.stdout.isTTY === true; } if (target === "stderr") { return process.stderr.isTTY === true; } return false; } __name(shouldProcessAnsi, "shouldProcessAnsi"); function expandAnsiCodes(text) { return text.replace(CODE_PATTERN, (match, code) => { const lowerCode = code.toLowerCase(); return ANSI_CODES[lowerCode] ?? match; }); } __name(expandAnsiCodes, "expandAnsiCodes"); function stripAnsiMarkers(text) { return text.replace(CODE_PATTERN, ""); } __name(stripAnsiMarkers, "stripAnsiMarkers"); function stripAnsiEscapes(text) { return text.replace(ANSI_ESCAPE_PATTERN, ""); } __name(stripAnsiEscapes, "stripAnsiEscapes"); function processAnsi(text, target, options) { if (shouldProcessAnsi(target, options)) { return expandAnsiCodes(text); } return stripAnsiMarkers(text); } __name(processAnsi, "processAnsi"); function getFormattedText(text) { return { plain: stripAnsiMarkers(text), ansi: expandAnsiCodes(text) }; } __name(getFormattedText, "getFormattedText"); function getAvailableCodes() { return Object.keys(ANSI_CODES); } __name(getAvailableCodes, "getAvailableCodes"); // interpreter/streaming/template-interpolator.ts function interpolateTemplate(template, eventData, format = "text", options) { const { missingValue = "" } = options ?? {}; let result = replaceVariables(template, eventData, format, missingValue); if (format === "ansi") { result = expandAnsiCodes(result); } else if (format === "text" || format === "json") { result = stripAnsiMarkers(result); } result = processEscapes(result); return result; } __name(interpolateTemplate, "interpolateTemplate"); function replaceVariables(template, eventData, format, missingValue) { const variablePattern = /(?<!@)@evt\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*|\[\d+\])*)/g; return template.replace(variablePattern, (_match, path) => { const value = extractPath(eventData, path, { returnUndefined: true }); if (value === void 0) { return missingValue; } return formatValue(value, format); }); } __name(replaceVariables, "replaceVariables"); function formatValue(value, format) { if (value === null) { return format === "json" ? "null" : ""; } if (value === void 0) { return format === "json" ? "null" : ""; } if (typeof value === "string") { if (format === "json") { return JSON.stringify(value); } return value; } if (typeof value === "number" || typeof value === "boolean") { return String(value); } if (Array.isArray(value) || typeof value === "object") { return JSON.stringify(value); } return String(value); } __name(formatValue, "formatValue"); function processEscapes(text) { return text.replace(/@@/g, "@").replace(/%%/g, "%"); } __name(processEscapes, "processEscapes"); function applyTemplates(eventData, templates, options) { const result = { plain: "", ansi: "" }; if (templates.text) { result.plain = interpolateTemplate(templates.text, eventData, "text", options); } if (templates.ansi) { result.ansi = interpolateTemplate(templates.ansi, eventData, "ansi", options); } else if (templates.text) { result.ansi = interpolateTemplate(templates.text, eventData, "text", options); } if (templates.json) { result.json = interpolateTemplate(templates.json, eventData, "json", options); } return result; } __name(applyTemplates, "applyTemplates"); var DEFAULT_TEMPLATES = { thinking: { text: "@evt.text", ansi: "%dim%@evt.text%reset%" }, message: { text: "@evt.chunk", ansi: "@evt.chunk" }, toolUse: { text: "[@evt.name] @evt.input", ansi: "%cyan%[@evt.name]%reset% @evt.input" }, toolResult: { text: "[@evt.toolUseId] @evt.result", ansi: "%green%[@evt.toolUseId]%reset% @evt.result" }, error: { text: "Error: @evt.message", ansi: "%red%Error:%reset% @evt.message" }, metadata: { text: "Tokens: @evt.inputTokens in / @evt.outputTokens out", ansi: "%dim%Tokens: @evt.inputTokens in / @evt.outputTokens out%reset%" } }; export { DEFAULT_TEMPLATES, applyTemplates, expandAnsiCodes, getAvailableCodes, getFormattedText, processAnsi, shouldProcessAnsi, stripAnsiEscapes, stripAnsiMarkers }; //# sourceMappingURL=chunk-NS36QLDY.mjs.map //# sourceMappingURL=chunk-NS36QLDY.mjs.map