mlld
Version:
mlld: llm scripting language
237 lines (234 loc) • 6.72 kB
JavaScript
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 = /(?<!@)\.([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