@inso_web/els-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +482 -0
- package/dist/audit/prisma.d.ts +67 -0
- package/dist/audit/prisma.d.ts.map +1 -0
- package/dist/audit/prisma.js +65 -0
- package/dist/audit/prisma.js.map +1 -0
- package/dist/audit/service.d.ts +72 -0
- package/dist/audit/service.d.ts.map +1 -0
- package/dist/audit/service.js +137 -0
- package/dist/audit/service.js.map +1 -0
- package/dist/billing/limits.d.ts +34 -0
- package/dist/billing/limits.d.ts.map +1 -0
- package/dist/billing/limits.js +51 -0
- package/dist/billing/limits.js.map +1 -0
- package/dist/billing/tracker.d.ts +39 -0
- package/dist/billing/tracker.d.ts.map +1 -0
- package/dist/billing/tracker.js +92 -0
- package/dist/billing/tracker.js.map +1 -0
- package/dist/cache/cachedElsClient.d.ts +71 -0
- package/dist/cache/cachedElsClient.d.ts.map +1 -0
- package/dist/cache/cachedElsClient.js +167 -0
- package/dist/cache/cachedElsClient.js.map +1 -0
- package/dist/cache/index.d.ts +10 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/policies.d.ts +60 -0
- package/dist/cache/policies.d.ts.map +1 -0
- package/dist/cache/policies.js +90 -0
- package/dist/cache/policies.js.map +1 -0
- package/dist/cache/redis.d.ts +52 -0
- package/dist/cache/redis.d.ts.map +1 -0
- package/dist/cache/redis.js +134 -0
- package/dist/cache/redis.js.map +1 -0
- package/dist/cache/types.d.ts +32 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +32 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cache/wrapper.d.ts +38 -0
- package/dist/cache/wrapper.d.ts.map +1 -0
- package/dist/cache/wrapper.js +109 -0
- package/dist/cache/wrapper.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +86 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +105 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +211 -0
- package/dist/config.js.map +1 -0
- package/dist/elsClient.d.ts +137 -0
- package/dist/elsClient.d.ts.map +1 -0
- package/dist/elsClient.js +285 -0
- package/dist/elsClient.js.map +1 -0
- package/dist/http/app.d.ts +40 -0
- package/dist/http/app.d.ts.map +1 -0
- package/dist/http/app.js +135 -0
- package/dist/http/app.js.map +1 -0
- package/dist/http/jwks.d.ts +8 -0
- package/dist/http/jwks.d.ts.map +1 -0
- package/dist/http/jwks.js +34 -0
- package/dist/http/jwks.js.map +1 -0
- package/dist/http/middleware/auth.d.ts +11 -0
- package/dist/http/middleware/auth.d.ts.map +1 -0
- package/dist/http/middleware/auth.js +225 -0
- package/dist/http/middleware/auth.js.map +1 -0
- package/dist/http/middleware/dcrRateLimit.d.ts +29 -0
- package/dist/http/middleware/dcrRateLimit.d.ts.map +1 -0
- package/dist/http/middleware/dcrRateLimit.js +59 -0
- package/dist/http/middleware/dcrRateLimit.js.map +1 -0
- package/dist/http/middleware/errorHandler.d.ts +12 -0
- package/dist/http/middleware/errorHandler.d.ts.map +1 -0
- package/dist/http/middleware/errorHandler.js +26 -0
- package/dist/http/middleware/errorHandler.js.map +1 -0
- package/dist/http/middleware/originGuard.d.ts +28 -0
- package/dist/http/middleware/originGuard.d.ts.map +1 -0
- package/dist/http/middleware/originGuard.js +55 -0
- package/dist/http/middleware/originGuard.js.map +1 -0
- package/dist/http/middleware/requestId.d.ts +19 -0
- package/dist/http/middleware/requestId.d.ts.map +1 -0
- package/dist/http/middleware/requestId.js +23 -0
- package/dist/http/middleware/requestId.js.map +1 -0
- package/dist/http/routes/health.d.ts +24 -0
- package/dist/http/routes/health.d.ts.map +1 -0
- package/dist/http/routes/health.js +73 -0
- package/dist/http/routes/health.js.map +1 -0
- package/dist/http/routes/metrics.d.ts +18 -0
- package/dist/http/routes/metrics.d.ts.map +1 -0
- package/dist/http/routes/metrics.js +42 -0
- package/dist/http/routes/metrics.js.map +1 -0
- package/dist/http/routes/wellKnown.d.ts +15 -0
- package/dist/http/routes/wellKnown.d.ts.map +1 -0
- package/dist/http/routes/wellKnown.js +43 -0
- package/dist/http/routes/wellKnown.js.map +1 -0
- package/dist/http/types.d.ts +40 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +9 -0
- package/dist/http/types.js.map +1 -0
- package/dist/instrumentation.d.ts +22 -0
- package/dist/instrumentation.d.ts.map +1 -0
- package/dist/instrumentation.js +38 -0
- package/dist/instrumentation.js.map +1 -0
- package/dist/lib/cursor.d.ts +22 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +95 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/errors.d.ts +49 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +83 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/responseFormat.d.ts +14 -0
- package/dist/lib/responseFormat.d.ts.map +1 -0
- package/dist/lib/responseFormat.js +74 -0
- package/dist/lib/responseFormat.js.map +1 -0
- package/dist/middleware/withMiddleware.d.ts +53 -0
- package/dist/middleware/withMiddleware.d.ts.map +1 -0
- package/dist/middleware/withMiddleware.js +190 -0
- package/dist/middleware/withMiddleware.js.map +1 -0
- package/dist/observability/health.d.ts +51 -0
- package/dist/observability/health.d.ts.map +1 -0
- package/dist/observability/health.js +77 -0
- package/dist/observability/health.js.map +1 -0
- package/dist/observability/index.d.ts +8 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +45 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +75 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +49 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +184 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/tracing.d.ts +28 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +56 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/prompts/index.d.ts +20 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +202 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/redaction/argsRedactor.d.ts +22 -0
- package/dist/redaction/argsRedactor.d.ts.map +1 -0
- package/dist/redaction/argsRedactor.js +97 -0
- package/dist/redaction/argsRedactor.js.map +1 -0
- package/dist/redaction/fields.d.ts +64 -0
- package/dist/redaction/fields.d.ts.map +1 -0
- package/dist/redaction/fields.js +155 -0
- package/dist/redaction/fields.js.map +1 -0
- package/dist/redaction/index.d.ts +52 -0
- package/dist/redaction/index.d.ts.map +1 -0
- package/dist/redaction/index.js +160 -0
- package/dist/redaction/index.js.map +1 -0
- package/dist/redaction/promptInjection.d.ts +32 -0
- package/dist/redaction/promptInjection.d.ts.map +1 -0
- package/dist/redaction/promptInjection.js +68 -0
- package/dist/redaction/promptInjection.js.map +1 -0
- package/dist/redaction/url.d.ts +8 -0
- package/dist/redaction/url.d.ts.map +1 -0
- package/dist/redaction/url.js +26 -0
- package/dist/redaction/url.js.map +1 -0
- package/dist/redaction/userAgent.d.ts +9 -0
- package/dist/redaction/userAgent.d.ts.map +1 -0
- package/dist/redaction/userAgent.js +39 -0
- package/dist/redaction/userAgent.js.map +1 -0
- package/dist/resources/index.d.ts +24 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +150 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +37 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +35 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/baselineCompare.d.ts +36 -0
- package/dist/tools/baselineCompare.d.ts.map +1 -0
- package/dist/tools/baselineCompare.js +69 -0
- package/dist/tools/baselineCompare.js.map +1 -0
- package/dist/tools/errorHeatmap.d.ts +40 -0
- package/dist/tools/errorHeatmap.d.ts.map +1 -0
- package/dist/tools/errorHeatmap.js +69 -0
- package/dist/tools/errorHeatmap.js.map +1 -0
- package/dist/tools/errorHistogram.d.ts +39 -0
- package/dist/tools/errorHistogram.d.ts.map +1 -0
- package/dist/tools/errorHistogram.js +61 -0
- package/dist/tools/errorHistogram.js.map +1 -0
- package/dist/tools/errorStatsBreakdown.d.ts +43 -0
- package/dist/tools/errorStatsBreakdown.d.ts.map +1 -0
- package/dist/tools/errorStatsBreakdown.js +77 -0
- package/dist/tools/errorStatsBreakdown.js.map +1 -0
- package/dist/tools/errorsInSession.d.ts +44 -0
- package/dist/tools/errorsInSession.d.ts.map +1 -0
- package/dist/tools/errorsInSession.js +91 -0
- package/dist/tools/errorsInSession.js.map +1 -0
- package/dist/tools/explainError.d.ts +35 -0
- package/dist/tools/explainError.d.ts.map +1 -0
- package/dist/tools/explainError.js +98 -0
- package/dist/tools/explainError.js.map +1 -0
- package/dist/tools/findCorrelatedErrors.d.ts +43 -0
- package/dist/tools/findCorrelatedErrors.d.ts.map +1 -0
- package/dist/tools/findCorrelatedErrors.js +59 -0
- package/dist/tools/findCorrelatedErrors.js.map +1 -0
- package/dist/tools/findSimilarErrors.d.ts +44 -0
- package/dist/tools/findSimilarErrors.d.ts.map +1 -0
- package/dist/tools/findSimilarErrors.js +59 -0
- package/dist/tools/findSimilarErrors.js.map +1 -0
- package/dist/tools/getLogDetails.d.ts +30 -0
- package/dist/tools/getLogDetails.d.ts.map +1 -0
- package/dist/tools/getLogDetails.js +49 -0
- package/dist/tools/getLogDetails.js.map +1 -0
- package/dist/tools/groupedErrors.d.ts +46 -0
- package/dist/tools/groupedErrors.d.ts.map +1 -0
- package/dist/tools/groupedErrors.js +71 -0
- package/dist/tools/groupedErrors.js.map +1 -0
- package/dist/tools/impactAnalysis.d.ts +42 -0
- package/dist/tools/impactAnalysis.d.ts.map +1 -0
- package/dist/tools/impactAnalysis.js +61 -0
- package/dist/tools/impactAnalysis.js.map +1 -0
- package/dist/tools/index.d.ts +41 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +83 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/listApps.d.ts +27 -0
- package/dist/tools/listApps.d.ts.map +1 -0
- package/dist/tools/listApps.js +78 -0
- package/dist/tools/listApps.js.map +1 -0
- package/dist/tools/queryLogsJql.d.ts +44 -0
- package/dist/tools/queryLogsJql.d.ts.map +1 -0
- package/dist/tools/queryLogsJql.js +107 -0
- package/dist/tools/queryLogsJql.js.map +1 -0
- package/dist/tools/searchLogs.d.ts +60 -0
- package/dist/tools/searchLogs.d.ts.map +1 -0
- package/dist/tools/searchLogs.js +127 -0
- package/dist/tools/searchLogs.js.map +1 -0
- package/dist/tools/topErrorMessages.d.ts +42 -0
- package/dist/tools/topErrorMessages.d.ts.map +1 -0
- package/dist/tools/topErrorMessages.js +63 -0
- package/dist/tools/topErrorMessages.js.map +1 -0
- package/dist/tools/trafficStats.d.ts +39 -0
- package/dist/tools/trafficStats.d.ts.map +1 -0
- package/dist/tools/trafficStats.js +57 -0
- package/dist/tools/trafficStats.js.map +1 -0
- package/dist/tools/triageRecentCritical.d.ts +26 -0
- package/dist/tools/triageRecentCritical.d.ts.map +1 -0
- package/dist/tools/triageRecentCritical.js +81 -0
- package/dist/tools/triageRecentCritical.js.map +1 -0
- package/dist/tools/versionRegression.d.ts +29 -0
- package/dist/tools/versionRegression.d.ts.map +1 -0
- package/dist/tools/versionRegression.js +80 -0
- package/dist/tools/versionRegression.js.map +1 -0
- package/dist/transports/http-server.d.ts +25 -0
- package/dist/transports/http-server.d.ts.map +1 -0
- package/dist/transports/http-server.js +84 -0
- package/dist/transports/http-server.js.map +1 -0
- package/dist/transports/http.d.ts +71 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +315 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +13 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +16 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types.d.ts +150 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolError } from '../lib/errors.js';
|
|
3
|
+
import { encodeCursor, decodeCursor } from '../lib/cursor.js';
|
|
4
|
+
import { applyResponseFormat } from '../lib/responseFormat.js';
|
|
5
|
+
/**
|
|
6
|
+
* Tool: errors_in_session (composite)
|
|
7
|
+
*
|
|
8
|
+
* Wrapper над search_logs с фиксированным sessionId, sortBy=receivedAt asc.
|
|
9
|
+
* Используется когда саппорту дали session-ID — нужно посмотреть всю
|
|
10
|
+
* хронологию ошибок этого пользователя.
|
|
11
|
+
*
|
|
12
|
+
* Cursor — passthrough из search_logs (offset-based wrapper в Phase 1).
|
|
13
|
+
*/
|
|
14
|
+
export const errorsInSessionInputShape = {
|
|
15
|
+
sessionId: z.string().min(1).max(128),
|
|
16
|
+
from: z.string().optional(),
|
|
17
|
+
to: z.string().optional(),
|
|
18
|
+
limit: z.number().int().min(1).max(200).default(20),
|
|
19
|
+
cursor: z.string().nullable().optional(),
|
|
20
|
+
// eslint-disable-next-line camelcase
|
|
21
|
+
response_format: z.enum(['compact', 'full', 'summary']).default('compact'),
|
|
22
|
+
};
|
|
23
|
+
export const errorsInSessionToolDef = {
|
|
24
|
+
name: 'errors_in_session',
|
|
25
|
+
title: 'All errors in a user session',
|
|
26
|
+
description: 'Return chronologically-ordered errors for a single session/user. Use when support gives you a session-ID and asks "what happened in this session?".',
|
|
27
|
+
inputShape: errorsInSessionInputShape,
|
|
28
|
+
};
|
|
29
|
+
function filtersFromArgs(args) {
|
|
30
|
+
return {
|
|
31
|
+
sessionId: args.sessionId,
|
|
32
|
+
from: args.from,
|
|
33
|
+
to: args.to,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function handleErrorsInSession(args, client) {
|
|
37
|
+
try {
|
|
38
|
+
const filters = filtersFromArgs(args);
|
|
39
|
+
let page = 1;
|
|
40
|
+
if (args.cursor && args.cursor.length > 0) {
|
|
41
|
+
const decoded = decodeCursor(args.cursor, filters);
|
|
42
|
+
page = decoded.page ?? 1;
|
|
43
|
+
}
|
|
44
|
+
const params = {
|
|
45
|
+
page,
|
|
46
|
+
limit: args.limit,
|
|
47
|
+
sortBy: 'receivedAt',
|
|
48
|
+
sortOrder: 'asc',
|
|
49
|
+
sessionId: args.sessionId,
|
|
50
|
+
from: args.from,
|
|
51
|
+
to: args.to,
|
|
52
|
+
};
|
|
53
|
+
const { data, elsRequestId } = await client.searchLogs(params);
|
|
54
|
+
const raw = data;
|
|
55
|
+
const { items: formattedItems, truncated } = applyResponseFormat(raw.items ?? [], args.response_format);
|
|
56
|
+
const hasMore = raw.page * raw.limit < raw.total;
|
|
57
|
+
let nextCursor = null;
|
|
58
|
+
if (hasMore && raw.items.length > 0) {
|
|
59
|
+
const lastItem = raw.items[raw.items.length - 1];
|
|
60
|
+
nextCursor = encodeCursor({ receivedAt: lastItem.receivedAt, id: lastItem.id }, filters, raw.page + 1, raw.limit);
|
|
61
|
+
}
|
|
62
|
+
const meta = {
|
|
63
|
+
elsRequestId,
|
|
64
|
+
cached: false,
|
|
65
|
+
ttlSec: 30,
|
|
66
|
+
redactionApplied: false,
|
|
67
|
+
truncated,
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
structuredContent: {
|
|
71
|
+
sessionId: args.sessionId,
|
|
72
|
+
total: raw.total,
|
|
73
|
+
items: formattedItems,
|
|
74
|
+
nextCursor,
|
|
75
|
+
_meta: meta,
|
|
76
|
+
},
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: `Session ${args.sessionId}: ${raw.total} error(s) total, returning ${formattedItems.length}.`,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
if (err instanceof ToolError)
|
|
87
|
+
return err.toToolResult();
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=errorsInSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorsInSession.js","sourceRoot":"","sources":["../../src/tools/errorsInSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElsClient } from '../elsClient.js';
|
|
3
|
+
import type { ToolResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: explain_error (composite + STUB AI)
|
|
6
|
+
*
|
|
7
|
+
* Phase 2 — без Mistral. Возвращаем детали лога + (опционально) контекст
|
|
8
|
+
* similar/correlated + `meta.aiAvailable: false`. Это позволяет LLM-клиенту
|
|
9
|
+
* самому сформулировать explanation на основе собранного контекста.
|
|
10
|
+
*
|
|
11
|
+
* Phase 5 подключит Mistral: добавим summary/likelyCauses/nextSteps.
|
|
12
|
+
*/
|
|
13
|
+
export declare const explainErrorInputShape: {
|
|
14
|
+
traceId: z.ZodString;
|
|
15
|
+
locale: z.ZodDefault<z.ZodEnum<["ru", "en"]>>;
|
|
16
|
+
includeRelated: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
};
|
|
18
|
+
export declare const explainErrorToolDef: {
|
|
19
|
+
name: string;
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
inputShape: {
|
|
23
|
+
traceId: z.ZodString;
|
|
24
|
+
locale: z.ZodDefault<z.ZodEnum<["ru", "en"]>>;
|
|
25
|
+
includeRelated: z.ZodDefault<z.ZodBoolean>;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
type Args = {
|
|
29
|
+
traceId: string;
|
|
30
|
+
locale: 'ru' | 'en';
|
|
31
|
+
includeRelated: boolean;
|
|
32
|
+
};
|
|
33
|
+
export declare function handleExplainError(args: Args, client: ElsClient): Promise<ToolResult>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=explainError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainError.d.ts","sourceRoot":"","sources":["../../src/tools/explainError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;GAQG;AAEH,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;CAM/B,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAuE3F"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolError } from '../lib/errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tool: explain_error (composite + STUB AI)
|
|
5
|
+
*
|
|
6
|
+
* Phase 2 — без Mistral. Возвращаем детали лога + (опционально) контекст
|
|
7
|
+
* similar/correlated + `meta.aiAvailable: false`. Это позволяет LLM-клиенту
|
|
8
|
+
* самому сформулировать explanation на основе собранного контекста.
|
|
9
|
+
*
|
|
10
|
+
* Phase 5 подключит Mistral: добавим summary/likelyCauses/nextSteps.
|
|
11
|
+
*/
|
|
12
|
+
export const explainErrorInputShape = {
|
|
13
|
+
traceId: z.string().min(1).max(128),
|
|
14
|
+
locale: z.enum(['ru', 'en']).default('ru'),
|
|
15
|
+
includeRelated: z.boolean().default(true),
|
|
16
|
+
};
|
|
17
|
+
export const explainErrorToolDef = {
|
|
18
|
+
name: 'explain_error',
|
|
19
|
+
title: 'AI-assisted explanation of an error (Phase 2: details + context, no AI)',
|
|
20
|
+
description: 'Fetch error details and optional related-context (similar + correlated). Phase 2 returns aiAvailable=false (no Mistral wrap yet) — the LLM client should write the explanation from the returned context.',
|
|
21
|
+
inputShape: explainErrorInputShape,
|
|
22
|
+
};
|
|
23
|
+
export async function handleExplainError(args, client) {
|
|
24
|
+
try {
|
|
25
|
+
const { data: details, elsRequestId } = await client.getLogDetails(args.traceId);
|
|
26
|
+
let similarCount24h;
|
|
27
|
+
let correlatedTraces;
|
|
28
|
+
const warnings = [];
|
|
29
|
+
if (args.includeRelated) {
|
|
30
|
+
try {
|
|
31
|
+
const { data: similar } = await client.findSimilarErrors(args.traceId, {});
|
|
32
|
+
const sim = (similar ?? {});
|
|
33
|
+
if (typeof sim.last24h === 'number')
|
|
34
|
+
similarCount24h = sim.last24h;
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof ToolError) {
|
|
38
|
+
warnings.push(`find_similar_errors failed: ${err.code}`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
warnings.push('find_similar_errors failed: INTERNAL');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const { data: correlated } = await client.findCorrelatedErrors(args.traceId, {});
|
|
46
|
+
const corr = (correlated ?? {});
|
|
47
|
+
const list = Array.isArray(corr.correlated) ? corr.correlated : [];
|
|
48
|
+
correlatedTraces = list
|
|
49
|
+
.map((c) => (typeof c.traceId === 'string' ? c.traceId : null))
|
|
50
|
+
.filter((t) => t !== null)
|
|
51
|
+
.slice(0, 10);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (err instanceof ToolError) {
|
|
55
|
+
warnings.push(`find_correlated_errors failed: ${err.code}`);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
warnings.push('find_correlated_errors failed: INTERNAL');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const meta = {
|
|
63
|
+
elsRequestId,
|
|
64
|
+
cached: false,
|
|
65
|
+
ttlSec: 60,
|
|
66
|
+
redactionApplied: false,
|
|
67
|
+
degraded: true,
|
|
68
|
+
...(warnings.length > 0 ? { warnings: [...warnings, 'AI provider not connected (Phase 2 stub).'] } : { warnings: ['AI provider not connected (Phase 2 stub).'] }),
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
structuredContent: {
|
|
72
|
+
traceId: args.traceId,
|
|
73
|
+
summary: null,
|
|
74
|
+
likelyCauses: [],
|
|
75
|
+
nextSteps: [],
|
|
76
|
+
details,
|
|
77
|
+
related: {
|
|
78
|
+
...(similarCount24h !== undefined ? { similarCount24h } : {}),
|
|
79
|
+
...(correlatedTraces !== undefined ? { correlatedTraces } : {}),
|
|
80
|
+
},
|
|
81
|
+
meta: { model: null, aiAvailable: false },
|
|
82
|
+
_meta: meta,
|
|
83
|
+
},
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: 'text',
|
|
87
|
+
text: `[explain_error stub] traceId=${args.traceId}: details fetched, AI summary unavailable in Phase 2. The LLM should synthesize an explanation from the returned context.`,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
if (err instanceof ToolError)
|
|
94
|
+
return err.toToolResult();
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=explainError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainError.js","sourceRoot":"","sources":["../../src/tools/explainError.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElsClient } from '../elsClient.js';
|
|
3
|
+
import type { ToolResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: find_correlated_errors
|
|
6
|
+
* Mapping: GET /errors/:traceId/correlated → analytics.routes.ts:188
|
|
7
|
+
*
|
|
8
|
+
* Возвращает другие ошибки в ±windowMinutes от данной — для поиска
|
|
9
|
+
* каскадных сбоев. ELS endpoint принимает: windowMinutes, limit, +
|
|
10
|
+
* фасет-фильтры из QueryErrorsSchema (levels, serviceName, ...).
|
|
11
|
+
*/
|
|
12
|
+
export declare const findCorrelatedErrorsInputShape: {
|
|
13
|
+
traceId: z.ZodString;
|
|
14
|
+
windowMinutes: z.ZodDefault<z.ZodNumber>;
|
|
15
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
|
|
19
|
+
};
|
|
20
|
+
export declare const findCorrelatedErrorsToolDef: {
|
|
21
|
+
name: string;
|
|
22
|
+
title: string;
|
|
23
|
+
description: string;
|
|
24
|
+
inputShape: {
|
|
25
|
+
traceId: z.ZodString;
|
|
26
|
+
windowMinutes: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
29
|
+
serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
30
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
type Args = {
|
|
34
|
+
traceId: string;
|
|
35
|
+
windowMinutes: number;
|
|
36
|
+
limit: number;
|
|
37
|
+
level?: string[];
|
|
38
|
+
serviceName?: string[];
|
|
39
|
+
response_format: 'compact' | 'full' | 'summary';
|
|
40
|
+
};
|
|
41
|
+
export declare function handleFindCorrelatedErrors(args: Args, client: ElsClient): Promise<ToolResult>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=findCorrelatedErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findCorrelatedErrors.d.ts","sourceRoot":"","sources":["../../src/tools/findCorrelatedErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AAEH,eAAO,MAAM,8BAA8B;;;;;;;CAQ1C,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;CAMvC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,UAAU,CAAC,CAiCrB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolError } from '../lib/errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tool: find_correlated_errors
|
|
5
|
+
* Mapping: GET /errors/:traceId/correlated → analytics.routes.ts:188
|
|
6
|
+
*
|
|
7
|
+
* Возвращает другие ошибки в ±windowMinutes от данной — для поиска
|
|
8
|
+
* каскадных сбоев. ELS endpoint принимает: windowMinutes, limit, +
|
|
9
|
+
* фасет-фильтры из QueryErrorsSchema (levels, serviceName, ...).
|
|
10
|
+
*/
|
|
11
|
+
export const findCorrelatedErrorsInputShape = {
|
|
12
|
+
traceId: z.string().min(1).max(128),
|
|
13
|
+
windowMinutes: z.number().int().min(1).max(1440).default(15),
|
|
14
|
+
limit: z.number().int().min(1).max(100).default(20),
|
|
15
|
+
level: z.array(z.string().max(16)).optional(),
|
|
16
|
+
serviceName: z.array(z.string().max(255)).optional(),
|
|
17
|
+
// eslint-disable-next-line camelcase
|
|
18
|
+
response_format: z.enum(['compact', 'full', 'summary']).default('compact'),
|
|
19
|
+
};
|
|
20
|
+
export const findCorrelatedErrorsToolDef = {
|
|
21
|
+
name: 'find_correlated_errors',
|
|
22
|
+
title: 'Find errors that co-occur in time around a traceId',
|
|
23
|
+
description: 'Given a traceId, returns other errors within ±windowMinutes (default 15) in the same app. Useful for finding cascading failures.',
|
|
24
|
+
inputShape: findCorrelatedErrorsInputShape,
|
|
25
|
+
};
|
|
26
|
+
export async function handleFindCorrelatedErrors(args, client) {
|
|
27
|
+
try {
|
|
28
|
+
const params = {
|
|
29
|
+
windowMinutes: args.windowMinutes,
|
|
30
|
+
limit: args.limit,
|
|
31
|
+
levels: args.level?.join(','),
|
|
32
|
+
serviceName: args.serviceName?.join(','),
|
|
33
|
+
};
|
|
34
|
+
const { data, elsRequestId } = await client.findCorrelatedErrors(args.traceId, params);
|
|
35
|
+
const meta = {
|
|
36
|
+
elsRequestId,
|
|
37
|
+
cached: false,
|
|
38
|
+
ttlSec: 60,
|
|
39
|
+
redactionApplied: false,
|
|
40
|
+
};
|
|
41
|
+
const result = (data ?? {});
|
|
42
|
+
const correlated = Array.isArray(result.correlated) ? result.correlated : [];
|
|
43
|
+
return {
|
|
44
|
+
structuredContent: { ...result, _meta: meta },
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: `Found ${correlated.length} correlated errors within ±${args.windowMinutes}min of ${args.traceId}.`,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (err instanceof ToolError)
|
|
55
|
+
return err.toToolResult();
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=findCorrelatedErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findCorrelatedErrors.js","sourceRoot":"","sources":["../../src/tools/findCorrelatedErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,qCAAqC;IACrC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,oDAAoD;IAC3D,WAAW,EACT,kIAAkI;IACpI,UAAU,EAAE,8BAA8B;CAC3C,CAAC;AAWF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAU,EACV,MAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAgD;YAC1D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC;SACzC,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEvF,MAAM,IAAI,GAAiB;YACzB,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7E,OAAO;YACL,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;YAC7C,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,UAAU,CAAC,MAAM,8BAA8B,IAAI,CAAC,aAAa,UAAU,IAAI,CAAC,OAAO,GAAG;iBAC1G;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,SAAS;YAAE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;QACxD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElsClient } from '../elsClient.js';
|
|
3
|
+
import type { ToolResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: find_similar_errors
|
|
6
|
+
* Mapping: GET /errors/:traceId/similar → analytics.routes.ts:159
|
|
7
|
+
*
|
|
8
|
+
* Возвращает агрегаты (totalOccurrences, lastHour/24h/7d, topUrls, topIPs,
|
|
9
|
+
* sourceSplit) для ошибок с похожим message/fingerprint.
|
|
10
|
+
*
|
|
11
|
+
* ELS endpoint принимает query: `levels` (csv), `serviceName`, `appVersion`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const findSimilarErrorsInputShape: {
|
|
14
|
+
traceId: z.ZodString;
|
|
15
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
16
|
+
serviceName: z.ZodOptional<z.ZodString>;
|
|
17
|
+
appVersion: z.ZodOptional<z.ZodString>;
|
|
18
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
|
|
20
|
+
};
|
|
21
|
+
export declare const findSimilarErrorsToolDef: {
|
|
22
|
+
name: string;
|
|
23
|
+
title: string;
|
|
24
|
+
description: string;
|
|
25
|
+
inputShape: {
|
|
26
|
+
traceId: z.ZodString;
|
|
27
|
+
levels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
28
|
+
serviceName: z.ZodOptional<z.ZodString>;
|
|
29
|
+
appVersion: z.ZodOptional<z.ZodString>;
|
|
30
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
31
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
type Args = {
|
|
35
|
+
traceId: string;
|
|
36
|
+
levels?: string[];
|
|
37
|
+
serviceName?: string;
|
|
38
|
+
appVersion?: string;
|
|
39
|
+
limit: number;
|
|
40
|
+
response_format: 'compact' | 'full' | 'summary';
|
|
41
|
+
};
|
|
42
|
+
export declare function handleFindSimilarErrors(args: Args, client: ElsClient): Promise<ToolResult>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=findSimilarErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findSimilarErrors.d.ts","sourceRoot":"","sources":["../../src/tools/findSimilarErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;GAQG;AAEH,eAAO,MAAM,2BAA2B;;;;;;;CAQvC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;CAMpC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAgChG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolError } from '../lib/errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tool: find_similar_errors
|
|
5
|
+
* Mapping: GET /errors/:traceId/similar → analytics.routes.ts:159
|
|
6
|
+
*
|
|
7
|
+
* Возвращает агрегаты (totalOccurrences, lastHour/24h/7d, topUrls, topIPs,
|
|
8
|
+
* sourceSplit) для ошибок с похожим message/fingerprint.
|
|
9
|
+
*
|
|
10
|
+
* ELS endpoint принимает query: `levels` (csv), `serviceName`, `appVersion`.
|
|
11
|
+
*/
|
|
12
|
+
export const findSimilarErrorsInputShape = {
|
|
13
|
+
traceId: z.string().min(1).max(128),
|
|
14
|
+
levels: z.array(z.string().max(16)).optional(),
|
|
15
|
+
serviceName: z.string().max(255).optional(),
|
|
16
|
+
appVersion: z.string().max(64).optional(),
|
|
17
|
+
limit: z.number().int().min(1).max(200).default(20),
|
|
18
|
+
// eslint-disable-next-line camelcase
|
|
19
|
+
response_format: z.enum(['compact', 'full', 'summary']).default('compact'),
|
|
20
|
+
};
|
|
21
|
+
export const findSimilarErrorsToolDef = {
|
|
22
|
+
name: 'find_similar_errors',
|
|
23
|
+
title: 'Find errors similar to a given traceId',
|
|
24
|
+
description: 'Given a traceId, returns aggregated stats about similar errors (by message/fingerprint): totalOccurrences, lastHour/24h/7d, firstSeen, lastSeen, topUrls, topIPs, sourceSplit.',
|
|
25
|
+
inputShape: findSimilarErrorsInputShape,
|
|
26
|
+
};
|
|
27
|
+
export async function handleFindSimilarErrors(args, client) {
|
|
28
|
+
try {
|
|
29
|
+
const params = {
|
|
30
|
+
levels: args.levels?.join(','),
|
|
31
|
+
serviceName: args.serviceName,
|
|
32
|
+
appVersion: args.appVersion,
|
|
33
|
+
};
|
|
34
|
+
const { data, elsRequestId } = await client.findSimilarErrors(args.traceId, params);
|
|
35
|
+
const meta = {
|
|
36
|
+
elsRequestId,
|
|
37
|
+
cached: false,
|
|
38
|
+
ttlSec: 60,
|
|
39
|
+
redactionApplied: false,
|
|
40
|
+
};
|
|
41
|
+
const result = (data ?? {});
|
|
42
|
+
const totalOccurrences = Number(result.totalOccurrences ?? 0);
|
|
43
|
+
return {
|
|
44
|
+
structuredContent: { ...result, _meta: meta },
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: `Found ${totalOccurrences} similar errors (lastHour=${result.lastHour ?? 0}, last24h=${result.last24h ?? 0}, last7d=${result.last7d ?? 0}).`,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (err instanceof ToolError)
|
|
55
|
+
return err.toToolResult();
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=findSimilarErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findSimilarErrors.js","sourceRoot":"","sources":["../../src/tools/findSimilarErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,qCAAqC;IACrC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,wCAAwC;IAC/C,WAAW,EACT,gLAAgL;IAClL,UAAU,EAAE,2BAA2B;CACxC,CAAC;AAWF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAU,EAAE,MAAiB;IACzE,IAAI,CAAC;QACH,MAAM,MAAM,GAAuC;YACjD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;YAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpF,MAAM,IAAI,GAAiB;YACzB,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAE9D,OAAO;YACL,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;YAC7C,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,gBAAgB,6BAA6B,MAAM,CAAC,QAAQ,IAAI,CAAC,aAAa,MAAM,CAAC,OAAO,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI;iBACnJ;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,SAAS;YAAE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;QACxD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElsClient } from '../elsClient.js';
|
|
3
|
+
import type { ToolResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: get_log_details
|
|
6
|
+
* Mapping: GET /errors/:traceId → analytics.routes.ts:213
|
|
7
|
+
*
|
|
8
|
+
* Default response_format = "full" (debug-обычное ожидание).
|
|
9
|
+
* 404 от ELS → ToolError('NOT_FOUND').
|
|
10
|
+
*/
|
|
11
|
+
export declare const getLogDetailsInputShape: {
|
|
12
|
+
traceId: z.ZodString;
|
|
13
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full"]>>;
|
|
14
|
+
};
|
|
15
|
+
export declare const getLogDetailsToolDef: {
|
|
16
|
+
name: string;
|
|
17
|
+
title: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputShape: {
|
|
20
|
+
traceId: z.ZodString;
|
|
21
|
+
response_format: z.ZodDefault<z.ZodEnum<["compact", "full"]>>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
type Args = {
|
|
25
|
+
traceId: string;
|
|
26
|
+
response_format: 'compact' | 'full';
|
|
27
|
+
};
|
|
28
|
+
export declare function handleGetLogDetails(args: Args, client: ElsClient): Promise<ToolResult>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=getLogDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogDetails.d.ts","sourceRoot":"","sources":["../../src/tools/getLogDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;GAMG;AAEH,eAAO,MAAM,uBAAuB;;;CAInC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;CAMhC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC;CACrC,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA0B5F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolError } from '../lib/errors.js';
|
|
3
|
+
import { applyResponseFormatSingle } from '../lib/responseFormat.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: get_log_details
|
|
6
|
+
* Mapping: GET /errors/:traceId → analytics.routes.ts:213
|
|
7
|
+
*
|
|
8
|
+
* Default response_format = "full" (debug-обычное ожидание).
|
|
9
|
+
* 404 от ELS → ToolError('NOT_FOUND').
|
|
10
|
+
*/
|
|
11
|
+
export const getLogDetailsInputShape = {
|
|
12
|
+
traceId: z.string().min(1).max(128),
|
|
13
|
+
// eslint-disable-next-line camelcase
|
|
14
|
+
response_format: z.enum(['compact', 'full']).default('full'),
|
|
15
|
+
};
|
|
16
|
+
export const getLogDetailsToolDef = {
|
|
17
|
+
name: 'get_log_details',
|
|
18
|
+
title: 'Get full error log details by traceId',
|
|
19
|
+
description: 'Fetch full details of one error log: stack trace, headers, context, timing. Default response_format=full (includes stack).',
|
|
20
|
+
inputShape: getLogDetailsInputShape,
|
|
21
|
+
};
|
|
22
|
+
export async function handleGetLogDetails(args, client) {
|
|
23
|
+
try {
|
|
24
|
+
const { data, elsRequestId } = await client.getLogDetails(args.traceId);
|
|
25
|
+
const { log, truncated } = applyResponseFormatSingle(data, args.response_format);
|
|
26
|
+
const meta = {
|
|
27
|
+
elsRequestId,
|
|
28
|
+
cached: false,
|
|
29
|
+
ttlSec: 3600,
|
|
30
|
+
redactionApplied: false,
|
|
31
|
+
truncated,
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
structuredContent: { log, _meta: meta },
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: 'text',
|
|
38
|
+
text: `Error log ${data.traceId} (level=${data.level}, service=${data.serviceName || 'unknown'}): ${String(data.message ?? '').slice(0, 200)}`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (err instanceof ToolError)
|
|
45
|
+
return err.toToolResult();
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=getLogDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogDetails.js","sourceRoot":"","sources":["../../src/tools/getLogDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGrE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,qCAAqC;IACrC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,uCAAuC;IAC9C,WAAW,EACT,4HAA4H;IAC9H,UAAU,EAAE,uBAAuB;CACpC,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAU,EAAE,MAAiB;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEjF,MAAM,IAAI,GAAiB;YACzB,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI;YACZ,gBAAgB,EAAE,KAAK;YACvB,SAAS;SACV,CAAC;QAEF,OAAO;YACL,iBAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;YACvC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,aAAa,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,WAAW,IAAI,SAAS,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;iBAC/I;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,SAAS;YAAE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;QACxD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElsClient } from '../elsClient.js';
|
|
3
|
+
import type { ToolResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tool: grouped_errors
|
|
6
|
+
* Mapping: GET /analytics/grouped-errors → analytics.routes.ts:329
|
|
7
|
+
* Upstream Zod: GroupedErrorsSchema (from, to, take, +фасет-фильтры).
|
|
8
|
+
*
|
|
9
|
+
* Список уникальных fingerprint'ов, отсортированных по count (default), с
|
|
10
|
+
* per-group stats: count, firstSeen, lastSeen, affectedUsers, exampleTraceId.
|
|
11
|
+
*
|
|
12
|
+
* Phase 2 не пробрасывает sortBy в upstream (ELS-endpoint его не принимает),
|
|
13
|
+
* но возвращает выбранное значение в structured-content для подсказки LLM.
|
|
14
|
+
*/
|
|
15
|
+
export declare const groupedErrorsInputShape: {
|
|
16
|
+
from: z.ZodOptional<z.ZodString>;
|
|
17
|
+
to: z.ZodOptional<z.ZodString>;
|
|
18
|
+
level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
19
|
+
serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
20
|
+
take: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
sortBy: z.ZodDefault<z.ZodEnum<["count", "lastSeen", "affectedUsers"]>>;
|
|
22
|
+
};
|
|
23
|
+
export declare const groupedErrorsToolDef: {
|
|
24
|
+
name: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
inputShape: {
|
|
28
|
+
from: z.ZodOptional<z.ZodString>;
|
|
29
|
+
to: z.ZodOptional<z.ZodString>;
|
|
30
|
+
level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
31
|
+
serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
32
|
+
take: z.ZodDefault<z.ZodNumber>;
|
|
33
|
+
sortBy: z.ZodDefault<z.ZodEnum<["count", "lastSeen", "affectedUsers"]>>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
type Args = {
|
|
37
|
+
from?: string;
|
|
38
|
+
to?: string;
|
|
39
|
+
level?: string[];
|
|
40
|
+
serviceName?: string[];
|
|
41
|
+
take: number;
|
|
42
|
+
sortBy: 'count' | 'lastSeen' | 'affectedUsers';
|
|
43
|
+
};
|
|
44
|
+
export declare function handleGroupedErrors(args: Args, client: ElsClient): Promise<ToolResult>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=groupedErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupedErrors.d.ts","sourceRoot":"","sources":["../../src/tools/groupedErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,uBAAuB;;;;;;;CAOnC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;CAMhC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC;CAChD,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA2C5F"}
|