@inso_web/els-mcp
Version:
MCP-сервер поверх INSO Error Logs Service. Read-only tools (search, analytics, fingerprinting, correlations) для подключения Claude Desktop/Code и ChatGPT к логам ошибок. Streamable HTTP transport + stdio для npx-запуска.
74 lines • 2.78 kB
JavaScript
/**
* Применяет `response_format` к массиву ErrorLog items.
*
* - `compact` (default): убирает `stack`, `componentStack`, `userAgent`,
* обрезает `message` до 200 символов. Подходит для LLM-context-safe browse.
* - `full`: возвращает items как есть.
* - `summary`: только traceId/message/level/lastSeen/count.
*
* Также возвращает флаг `truncated` — true, если хотя бы один message был обрезан
* (используется в `_meta.truncated`).
*/
const MESSAGE_MAX_COMPACT = 200;
const MESSAGE_MAX_SUMMARY = 200;
export function applyResponseFormat(items, format) {
if (format === 'full') {
return { items, truncated: false };
}
if (format === 'summary') {
let truncated = false;
const result = items.map((row) => {
const msg = row.message ?? '';
const sliced = msg.length > MESSAGE_MAX_SUMMARY ? msg.slice(0, MESSAGE_MAX_SUMMARY) : msg;
if (sliced.length < msg.length)
truncated = true;
return {
traceId: row.traceId,
message: sliced,
level: row.level,
lastSeen: row.receivedAt,
};
});
return { items: result, truncated };
}
// compact (default)
let truncated = false;
const result = items.map((row) => {
const msg = row.message ?? '';
const sliced = msg.length > MESSAGE_MAX_COMPACT ? msg.slice(0, MESSAGE_MAX_COMPACT) : msg;
if (sliced.length < msg.length)
truncated = true;
return {
traceId: row.traceId,
level: row.level,
message: sliced,
serviceName: row.serviceName || null,
url: row.url ?? null,
fingerprint: row.fingerprint ?? null,
receivedAt: row.receivedAt,
};
});
return { items: result, truncated };
}
/**
* Сокращает поля одного ErrorLog (для get_log_details при compact-format).
*/
export function applyResponseFormatSingle(row, format) {
if (format === 'full')
return { log: row, truncated: false };
const msg = row.message ?? '';
const sliced = msg.length > MESSAGE_MAX_COMPACT ? msg.slice(0, MESSAGE_MAX_COMPACT) : msg;
return {
log: {
traceId: row.traceId,
level: row.level,
message: sliced,
serviceName: row.serviceName || null,
url: row.url ?? null,
fingerprint: row.fingerprint ?? null,
receivedAt: row.receivedAt,
},
truncated: sliced.length < msg.length,
};
}
//# sourceMappingURL=responseFormat.js.map