openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
55 lines (54 loc) • 1.53 kB
JavaScript
//#region packages/gateway-protocol/src/session-agent-status.ts
const SESSION_AGENT_ATTENTION_ICON_IDS = [
"hand",
"key",
"alert",
"flag",
"lock",
"hourglass"
];
const SESSION_COLOR_IDS = [
"red",
"blue",
"green",
"yellow",
"purple",
"orange",
"pink",
"cyan"
];
function normalizeSessionColorValue(value) {
const normalized = value.trim().toLowerCase();
return SESSION_COLOR_IDS.find((id) => id === normalized) ?? null;
}
const SESSION_ICON_GLYPH_IDS = [
"braces",
"book",
"monitor",
"bot",
"kanban",
"coins"
];
const SESSION_ICON_GLYPH_ID_SET = new Set(SESSION_ICON_GLYPH_IDS);
let sessionIconRe;
function sessionIconPattern() {
if (sessionIconRe === void 0) try {
sessionIconRe = /* @__PURE__ */ new RegExp("^\\p{RGI_Emoji}$", "v");
} catch {
sessionIconRe = null;
}
return sessionIconRe;
}
function isSingleNonAsciiGrapheme(value) {
if (value.length > 16 || /^[!-~]$/u.test(value)) return false;
return [...new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(value)].length === 1;
}
function normalizeSessionIconValue(value) {
const normalized = value.trim();
if (!normalized) return null;
if (SESSION_ICON_GLYPH_ID_SET.has(normalized)) return normalized;
const pattern = sessionIconPattern();
return (pattern ? pattern.test(normalized) : isSingleNonAsciiGrapheme(normalized)) ? normalized : null;
}
//#endregion
export { normalizeSessionIconValue as a, normalizeSessionColorValue as i, SESSION_COLOR_IDS as n, SESSION_ICON_GLYPH_IDS as r, SESSION_AGENT_ATTENTION_ICON_IDS as t };