@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.
Files changed (266) hide show
  1. package/README.md +482 -0
  2. package/dist/audit/prisma.d.ts +67 -0
  3. package/dist/audit/prisma.d.ts.map +1 -0
  4. package/dist/audit/prisma.js +65 -0
  5. package/dist/audit/prisma.js.map +1 -0
  6. package/dist/audit/service.d.ts +72 -0
  7. package/dist/audit/service.d.ts.map +1 -0
  8. package/dist/audit/service.js +137 -0
  9. package/dist/audit/service.js.map +1 -0
  10. package/dist/billing/limits.d.ts +34 -0
  11. package/dist/billing/limits.d.ts.map +1 -0
  12. package/dist/billing/limits.js +51 -0
  13. package/dist/billing/limits.js.map +1 -0
  14. package/dist/billing/tracker.d.ts +39 -0
  15. package/dist/billing/tracker.d.ts.map +1 -0
  16. package/dist/billing/tracker.js +92 -0
  17. package/dist/billing/tracker.js.map +1 -0
  18. package/dist/cache/cachedElsClient.d.ts +71 -0
  19. package/dist/cache/cachedElsClient.d.ts.map +1 -0
  20. package/dist/cache/cachedElsClient.js +167 -0
  21. package/dist/cache/cachedElsClient.js.map +1 -0
  22. package/dist/cache/index.d.ts +10 -0
  23. package/dist/cache/index.d.ts.map +1 -0
  24. package/dist/cache/index.js +6 -0
  25. package/dist/cache/index.js.map +1 -0
  26. package/dist/cache/policies.d.ts +60 -0
  27. package/dist/cache/policies.d.ts.map +1 -0
  28. package/dist/cache/policies.js +90 -0
  29. package/dist/cache/policies.js.map +1 -0
  30. package/dist/cache/redis.d.ts +52 -0
  31. package/dist/cache/redis.d.ts.map +1 -0
  32. package/dist/cache/redis.js +134 -0
  33. package/dist/cache/redis.js.map +1 -0
  34. package/dist/cache/types.d.ts +32 -0
  35. package/dist/cache/types.d.ts.map +1 -0
  36. package/dist/cache/types.js +32 -0
  37. package/dist/cache/types.js.map +1 -0
  38. package/dist/cache/wrapper.d.ts +38 -0
  39. package/dist/cache/wrapper.d.ts.map +1 -0
  40. package/dist/cache/wrapper.js +109 -0
  41. package/dist/cache/wrapper.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +86 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/config.d.ts +105 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +211 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/elsClient.d.ts +137 -0
  51. package/dist/elsClient.d.ts.map +1 -0
  52. package/dist/elsClient.js +285 -0
  53. package/dist/elsClient.js.map +1 -0
  54. package/dist/http/app.d.ts +40 -0
  55. package/dist/http/app.d.ts.map +1 -0
  56. package/dist/http/app.js +135 -0
  57. package/dist/http/app.js.map +1 -0
  58. package/dist/http/jwks.d.ts +8 -0
  59. package/dist/http/jwks.d.ts.map +1 -0
  60. package/dist/http/jwks.js +34 -0
  61. package/dist/http/jwks.js.map +1 -0
  62. package/dist/http/middleware/auth.d.ts +11 -0
  63. package/dist/http/middleware/auth.d.ts.map +1 -0
  64. package/dist/http/middleware/auth.js +225 -0
  65. package/dist/http/middleware/auth.js.map +1 -0
  66. package/dist/http/middleware/dcrRateLimit.d.ts +29 -0
  67. package/dist/http/middleware/dcrRateLimit.d.ts.map +1 -0
  68. package/dist/http/middleware/dcrRateLimit.js +59 -0
  69. package/dist/http/middleware/dcrRateLimit.js.map +1 -0
  70. package/dist/http/middleware/errorHandler.d.ts +12 -0
  71. package/dist/http/middleware/errorHandler.d.ts.map +1 -0
  72. package/dist/http/middleware/errorHandler.js +26 -0
  73. package/dist/http/middleware/errorHandler.js.map +1 -0
  74. package/dist/http/middleware/originGuard.d.ts +28 -0
  75. package/dist/http/middleware/originGuard.d.ts.map +1 -0
  76. package/dist/http/middleware/originGuard.js +55 -0
  77. package/dist/http/middleware/originGuard.js.map +1 -0
  78. package/dist/http/middleware/requestId.d.ts +19 -0
  79. package/dist/http/middleware/requestId.d.ts.map +1 -0
  80. package/dist/http/middleware/requestId.js +23 -0
  81. package/dist/http/middleware/requestId.js.map +1 -0
  82. package/dist/http/routes/health.d.ts +24 -0
  83. package/dist/http/routes/health.d.ts.map +1 -0
  84. package/dist/http/routes/health.js +73 -0
  85. package/dist/http/routes/health.js.map +1 -0
  86. package/dist/http/routes/metrics.d.ts +18 -0
  87. package/dist/http/routes/metrics.d.ts.map +1 -0
  88. package/dist/http/routes/metrics.js +42 -0
  89. package/dist/http/routes/metrics.js.map +1 -0
  90. package/dist/http/routes/wellKnown.d.ts +15 -0
  91. package/dist/http/routes/wellKnown.d.ts.map +1 -0
  92. package/dist/http/routes/wellKnown.js +43 -0
  93. package/dist/http/routes/wellKnown.js.map +1 -0
  94. package/dist/http/types.d.ts +40 -0
  95. package/dist/http/types.d.ts.map +1 -0
  96. package/dist/http/types.js +9 -0
  97. package/dist/http/types.js.map +1 -0
  98. package/dist/instrumentation.d.ts +22 -0
  99. package/dist/instrumentation.d.ts.map +1 -0
  100. package/dist/instrumentation.js +38 -0
  101. package/dist/instrumentation.js.map +1 -0
  102. package/dist/lib/cursor.d.ts +22 -0
  103. package/dist/lib/cursor.d.ts.map +1 -0
  104. package/dist/lib/cursor.js +95 -0
  105. package/dist/lib/cursor.js.map +1 -0
  106. package/dist/lib/errors.d.ts +49 -0
  107. package/dist/lib/errors.d.ts.map +1 -0
  108. package/dist/lib/errors.js +83 -0
  109. package/dist/lib/errors.js.map +1 -0
  110. package/dist/lib/responseFormat.d.ts +14 -0
  111. package/dist/lib/responseFormat.d.ts.map +1 -0
  112. package/dist/lib/responseFormat.js +74 -0
  113. package/dist/lib/responseFormat.js.map +1 -0
  114. package/dist/middleware/withMiddleware.d.ts +53 -0
  115. package/dist/middleware/withMiddleware.d.ts.map +1 -0
  116. package/dist/middleware/withMiddleware.js +190 -0
  117. package/dist/middleware/withMiddleware.js.map +1 -0
  118. package/dist/observability/health.d.ts +51 -0
  119. package/dist/observability/health.d.ts.map +1 -0
  120. package/dist/observability/health.js +77 -0
  121. package/dist/observability/health.js.map +1 -0
  122. package/dist/observability/index.d.ts +8 -0
  123. package/dist/observability/index.d.ts.map +1 -0
  124. package/dist/observability/index.js +5 -0
  125. package/dist/observability/index.js.map +1 -0
  126. package/dist/observability/logger.d.ts +45 -0
  127. package/dist/observability/logger.d.ts.map +1 -0
  128. package/dist/observability/logger.js +75 -0
  129. package/dist/observability/logger.js.map +1 -0
  130. package/dist/observability/metrics.d.ts +49 -0
  131. package/dist/observability/metrics.d.ts.map +1 -0
  132. package/dist/observability/metrics.js +184 -0
  133. package/dist/observability/metrics.js.map +1 -0
  134. package/dist/observability/tracing.d.ts +28 -0
  135. package/dist/observability/tracing.d.ts.map +1 -0
  136. package/dist/observability/tracing.js +56 -0
  137. package/dist/observability/tracing.js.map +1 -0
  138. package/dist/prompts/index.d.ts +20 -0
  139. package/dist/prompts/index.d.ts.map +1 -0
  140. package/dist/prompts/index.js +202 -0
  141. package/dist/prompts/index.js.map +1 -0
  142. package/dist/redaction/argsRedactor.d.ts +22 -0
  143. package/dist/redaction/argsRedactor.d.ts.map +1 -0
  144. package/dist/redaction/argsRedactor.js +97 -0
  145. package/dist/redaction/argsRedactor.js.map +1 -0
  146. package/dist/redaction/fields.d.ts +64 -0
  147. package/dist/redaction/fields.d.ts.map +1 -0
  148. package/dist/redaction/fields.js +155 -0
  149. package/dist/redaction/fields.js.map +1 -0
  150. package/dist/redaction/index.d.ts +52 -0
  151. package/dist/redaction/index.d.ts.map +1 -0
  152. package/dist/redaction/index.js +160 -0
  153. package/dist/redaction/index.js.map +1 -0
  154. package/dist/redaction/promptInjection.d.ts +32 -0
  155. package/dist/redaction/promptInjection.d.ts.map +1 -0
  156. package/dist/redaction/promptInjection.js +68 -0
  157. package/dist/redaction/promptInjection.js.map +1 -0
  158. package/dist/redaction/url.d.ts +8 -0
  159. package/dist/redaction/url.d.ts.map +1 -0
  160. package/dist/redaction/url.js +26 -0
  161. package/dist/redaction/url.js.map +1 -0
  162. package/dist/redaction/userAgent.d.ts +9 -0
  163. package/dist/redaction/userAgent.d.ts.map +1 -0
  164. package/dist/redaction/userAgent.js +39 -0
  165. package/dist/redaction/userAgent.js.map +1 -0
  166. package/dist/resources/index.d.ts +24 -0
  167. package/dist/resources/index.d.ts.map +1 -0
  168. package/dist/resources/index.js +150 -0
  169. package/dist/resources/index.js.map +1 -0
  170. package/dist/server.d.ts +37 -0
  171. package/dist/server.d.ts.map +1 -0
  172. package/dist/server.js +35 -0
  173. package/dist/server.js.map +1 -0
  174. package/dist/tools/baselineCompare.d.ts +36 -0
  175. package/dist/tools/baselineCompare.d.ts.map +1 -0
  176. package/dist/tools/baselineCompare.js +69 -0
  177. package/dist/tools/baselineCompare.js.map +1 -0
  178. package/dist/tools/errorHeatmap.d.ts +40 -0
  179. package/dist/tools/errorHeatmap.d.ts.map +1 -0
  180. package/dist/tools/errorHeatmap.js +69 -0
  181. package/dist/tools/errorHeatmap.js.map +1 -0
  182. package/dist/tools/errorHistogram.d.ts +39 -0
  183. package/dist/tools/errorHistogram.d.ts.map +1 -0
  184. package/dist/tools/errorHistogram.js +61 -0
  185. package/dist/tools/errorHistogram.js.map +1 -0
  186. package/dist/tools/errorStatsBreakdown.d.ts +43 -0
  187. package/dist/tools/errorStatsBreakdown.d.ts.map +1 -0
  188. package/dist/tools/errorStatsBreakdown.js +77 -0
  189. package/dist/tools/errorStatsBreakdown.js.map +1 -0
  190. package/dist/tools/errorsInSession.d.ts +44 -0
  191. package/dist/tools/errorsInSession.d.ts.map +1 -0
  192. package/dist/tools/errorsInSession.js +91 -0
  193. package/dist/tools/errorsInSession.js.map +1 -0
  194. package/dist/tools/explainError.d.ts +35 -0
  195. package/dist/tools/explainError.d.ts.map +1 -0
  196. package/dist/tools/explainError.js +98 -0
  197. package/dist/tools/explainError.js.map +1 -0
  198. package/dist/tools/findCorrelatedErrors.d.ts +43 -0
  199. package/dist/tools/findCorrelatedErrors.d.ts.map +1 -0
  200. package/dist/tools/findCorrelatedErrors.js +59 -0
  201. package/dist/tools/findCorrelatedErrors.js.map +1 -0
  202. package/dist/tools/findSimilarErrors.d.ts +44 -0
  203. package/dist/tools/findSimilarErrors.d.ts.map +1 -0
  204. package/dist/tools/findSimilarErrors.js +59 -0
  205. package/dist/tools/findSimilarErrors.js.map +1 -0
  206. package/dist/tools/getLogDetails.d.ts +30 -0
  207. package/dist/tools/getLogDetails.d.ts.map +1 -0
  208. package/dist/tools/getLogDetails.js +49 -0
  209. package/dist/tools/getLogDetails.js.map +1 -0
  210. package/dist/tools/groupedErrors.d.ts +46 -0
  211. package/dist/tools/groupedErrors.d.ts.map +1 -0
  212. package/dist/tools/groupedErrors.js +71 -0
  213. package/dist/tools/groupedErrors.js.map +1 -0
  214. package/dist/tools/impactAnalysis.d.ts +42 -0
  215. package/dist/tools/impactAnalysis.d.ts.map +1 -0
  216. package/dist/tools/impactAnalysis.js +61 -0
  217. package/dist/tools/impactAnalysis.js.map +1 -0
  218. package/dist/tools/index.d.ts +41 -0
  219. package/dist/tools/index.d.ts.map +1 -0
  220. package/dist/tools/index.js +83 -0
  221. package/dist/tools/index.js.map +1 -0
  222. package/dist/tools/listApps.d.ts +27 -0
  223. package/dist/tools/listApps.d.ts.map +1 -0
  224. package/dist/tools/listApps.js +78 -0
  225. package/dist/tools/listApps.js.map +1 -0
  226. package/dist/tools/queryLogsJql.d.ts +44 -0
  227. package/dist/tools/queryLogsJql.d.ts.map +1 -0
  228. package/dist/tools/queryLogsJql.js +107 -0
  229. package/dist/tools/queryLogsJql.js.map +1 -0
  230. package/dist/tools/searchLogs.d.ts +60 -0
  231. package/dist/tools/searchLogs.d.ts.map +1 -0
  232. package/dist/tools/searchLogs.js +127 -0
  233. package/dist/tools/searchLogs.js.map +1 -0
  234. package/dist/tools/topErrorMessages.d.ts +42 -0
  235. package/dist/tools/topErrorMessages.d.ts.map +1 -0
  236. package/dist/tools/topErrorMessages.js +63 -0
  237. package/dist/tools/topErrorMessages.js.map +1 -0
  238. package/dist/tools/trafficStats.d.ts +39 -0
  239. package/dist/tools/trafficStats.d.ts.map +1 -0
  240. package/dist/tools/trafficStats.js +57 -0
  241. package/dist/tools/trafficStats.js.map +1 -0
  242. package/dist/tools/triageRecentCritical.d.ts +26 -0
  243. package/dist/tools/triageRecentCritical.d.ts.map +1 -0
  244. package/dist/tools/triageRecentCritical.js +81 -0
  245. package/dist/tools/triageRecentCritical.js.map +1 -0
  246. package/dist/tools/versionRegression.d.ts +29 -0
  247. package/dist/tools/versionRegression.d.ts.map +1 -0
  248. package/dist/tools/versionRegression.js +80 -0
  249. package/dist/tools/versionRegression.js.map +1 -0
  250. package/dist/transports/http-server.d.ts +25 -0
  251. package/dist/transports/http-server.d.ts.map +1 -0
  252. package/dist/transports/http-server.js +84 -0
  253. package/dist/transports/http-server.js.map +1 -0
  254. package/dist/transports/http.d.ts +71 -0
  255. package/dist/transports/http.d.ts.map +1 -0
  256. package/dist/transports/http.js +315 -0
  257. package/dist/transports/http.js.map +1 -0
  258. package/dist/transports/stdio.d.ts +13 -0
  259. package/dist/transports/stdio.d.ts.map +1 -0
  260. package/dist/transports/stdio.js +16 -0
  261. package/dist/transports/stdio.js.map +1 -0
  262. package/dist/types.d.ts +150 -0
  263. package/dist/types.d.ts.map +1 -0
  264. package/dist/types.js +8 -0
  265. package/dist/types.js.map +1 -0
  266. package/package.json +95 -0
package/dist/server.js ADDED
@@ -0,0 +1,35 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import pino from 'pino';
3
+ import { ElsClient } from './elsClient.js';
4
+ import { registerTools } from './tools/index.js';
5
+ import { registerResources } from './resources/index.js';
6
+ import { registerPrompts } from './prompts/index.js';
7
+ export function createMcpServer(opts) {
8
+ const log = opts.log ??
9
+ pino({ level: opts.config.logLevel, name: 'els-mcp' }, pino.destination({ dest: 2, sync: false }));
10
+ const client = opts.client ??
11
+ new ElsClient({
12
+ baseUrl: opts.config.elsBaseUrl,
13
+ apiKey: opts.config.elsApiKey,
14
+ timeoutMs: opts.config.upstreamTimeoutMs,
15
+ log,
16
+ });
17
+ const server = new McpServer({ name: 'els-mcp', version: '0.1.0-alpha.0' }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
18
+ const registeredTools = registerTools(server, {
19
+ client,
20
+ disabled: opts.config.disabledTools,
21
+ log,
22
+ ...(opts.contextProvider ? { contextProvider: opts.contextProvider } : {}),
23
+ ...(opts.middleware ? { middleware: opts.middleware } : {}),
24
+ });
25
+ const registeredResources = registerResources(server, { client, log });
26
+ const registeredPrompts = registerPrompts(server, { log });
27
+ log.info({
28
+ tools: registeredTools,
29
+ resources: registeredResources,
30
+ prompts: registeredPrompts,
31
+ baseUrl: opts.config.elsBaseUrl,
32
+ }, 'MCP server initialized');
33
+ return { server, client, log, registeredTools, registeredResources, registeredPrompts };
34
+ }
35
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,IAAqB,MAAM,MAAM,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoCrD,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,MAAM,GAAG,GACP,IAAI,CAAC,GAAG;QACR,IAAI,CACF,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAChD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3C,CAAC;IAEJ,MAAM,MAAM,GACV,IAAI,CAAC,MAAM;QACX,IAAI,SAAS,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC7B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;YACxC,GAAG;SACJ,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,EAC7C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC5D,CAAC;IAEF,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,EAAE;QAC5C,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;QACnC,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAE3D,GAAG,CAAC,IAAI,CACN;QACE,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,mBAAmB;QAC9B,OAAO,EAAE,iBAAiB;QAC1B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;KAChC,EACD,wBAAwB,CACzB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import type { ElsClient } from '../elsClient.js';
3
+ import type { ToolResult } from '../types.js';
4
+ /**
5
+ * Tool: baseline_compare
6
+ * Mapping: GET /analytics/baseline → analytics.routes.ts:358
7
+ * Upstream Zod: BaselineSchema (windowDays ≥ 7, +фасет-фильтры).
8
+ *
9
+ * Возвращает baseline-метрики (p50/p95/mean), currentTotal и список аномалий
10
+ * (точки выше baseline.p95). Upstream defaults windowDays=30, мы используем
11
+ * default=7 как в spec, но допускаем 1..90 (upstream примет min=7, поэтому
12
+ * клампим на стороне tool).
13
+ */
14
+ export declare const baselineCompareInputShape: {
15
+ windowDays: z.ZodDefault<z.ZodNumber>;
16
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ serviceName: z.ZodOptional<z.ZodString>;
18
+ };
19
+ export declare const baselineCompareToolDef: {
20
+ name: string;
21
+ title: string;
22
+ description: string;
23
+ inputShape: {
24
+ windowDays: z.ZodDefault<z.ZodNumber>;
25
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
26
+ serviceName: z.ZodOptional<z.ZodString>;
27
+ };
28
+ };
29
+ type Args = {
30
+ windowDays: number;
31
+ level?: string[];
32
+ serviceName?: string;
33
+ };
34
+ export declare function handleBaselineCompare(args: Args, client: ElsClient): Promise<ToolResult>;
35
+ export {};
36
+ //# sourceMappingURL=baselineCompare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baselineCompare.d.ts","sourceRoot":"","sources":["../../src/tools/baselineCompare.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;;;;;;;;;GASG;AAEH,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;CAMlC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA8C9F"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { ToolError } from '../lib/errors.js';
3
+ /**
4
+ * Tool: baseline_compare
5
+ * Mapping: GET /analytics/baseline → analytics.routes.ts:358
6
+ * Upstream Zod: BaselineSchema (windowDays ≥ 7, +фасет-фильтры).
7
+ *
8
+ * Возвращает baseline-метрики (p50/p95/mean), currentTotal и список аномалий
9
+ * (точки выше baseline.p95). Upstream defaults windowDays=30, мы используем
10
+ * default=7 как в spec, но допускаем 1..90 (upstream примет min=7, поэтому
11
+ * клампим на стороне tool).
12
+ */
13
+ export const baselineCompareInputShape = {
14
+ windowDays: z.number().int().min(1).max(90).default(7),
15
+ level: z.array(z.string().max(16)).optional(),
16
+ serviceName: z.string().max(255).optional(),
17
+ };
18
+ export const baselineCompareToolDef = {
19
+ name: 'baseline_compare',
20
+ title: 'Compare current period vs historical baseline',
21
+ description: 'Show how current error rate compares to historical baseline (rolling N days). Returns p50/p95 thresholds and "above baseline" anomalies.',
22
+ inputShape: baselineCompareInputShape,
23
+ };
24
+ export async function handleBaselineCompare(args, client) {
25
+ try {
26
+ // Upstream BaselineSchema enforces windowDays >= 7; клампим прозрачно
27
+ // и отмечаем в warnings.
28
+ const effectiveWindow = Math.max(7, args.windowDays);
29
+ const warnings = [];
30
+ if (effectiveWindow !== args.windowDays) {
31
+ warnings.push(`windowDays=${args.windowDays} clamped to ${effectiveWindow} (upstream min=7).`);
32
+ }
33
+ const params = {
34
+ windowDays: effectiveWindow,
35
+ levels: args.level?.join(','),
36
+ serviceName: args.serviceName,
37
+ };
38
+ const { data, elsRequestId } = await client.baseline(params);
39
+ const body = (data ?? {});
40
+ const meta = {
41
+ elsRequestId,
42
+ cached: false,
43
+ ttlSec: 300,
44
+ redactionApplied: false,
45
+ ...(warnings.length > 0 ? { warnings } : {}),
46
+ };
47
+ return {
48
+ structuredContent: {
49
+ windowDays: effectiveWindow,
50
+ currentTotal: Number(body.currentTotal ?? body.total ?? 0),
51
+ baseline: body.baseline ?? {},
52
+ anomalies: Array.isArray(body.anomalies) ? body.anomalies : [],
53
+ _meta: meta,
54
+ },
55
+ content: [
56
+ {
57
+ type: 'text',
58
+ text: `Baseline window=${effectiveWindow}d, currentTotal=${Number(body.currentTotal ?? body.total ?? 0)}, anomalies=${Array.isArray(body.anomalies) ? body.anomalies.length : 0}.`,
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ catch (err) {
64
+ if (err instanceof ToolError)
65
+ return err.toToolResult();
66
+ throw err;
67
+ }
68
+ }
69
+ //# sourceMappingURL=baselineCompare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baselineCompare.js","sourceRoot":"","sources":["../../src/tools/baselineCompare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import type { ElsClient } from '../elsClient.js';
3
+ import type { ToolResult } from '../types.js';
4
+ /**
5
+ * Tool: error_heatmap
6
+ * Mapping: GET /analytics/heatmap → analytics.routes.ts:285
7
+ * Upstream Zod: HeatmapSchema (from + to required, + фасет-фильтры).
8
+ *
9
+ * Возвращает 7×24 матрицу счётчиков (dayOfWeek × hour). Параметр `timezone`
10
+ * в input — для будущей версии (upstream сейчас работает только в UTC).
11
+ */
12
+ export declare const errorHeatmapInputShape: {
13
+ from: z.ZodString;
14
+ to: z.ZodString;
15
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ timezone: z.ZodDefault<z.ZodString>;
18
+ };
19
+ export declare const errorHeatmapToolDef: {
20
+ name: string;
21
+ title: string;
22
+ description: string;
23
+ inputShape: {
24
+ from: z.ZodString;
25
+ to: z.ZodString;
26
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
28
+ timezone: z.ZodDefault<z.ZodString>;
29
+ };
30
+ };
31
+ type Args = {
32
+ from: string;
33
+ to: string;
34
+ level?: string[];
35
+ serviceName?: string[];
36
+ timezone: string;
37
+ };
38
+ export declare function handleErrorHeatmap(args: Args, client: ElsClient): Promise<ToolResult>;
39
+ export {};
40
+ //# sourceMappingURL=errorHeatmap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHeatmap.d.ts","sourceRoot":"","sources":["../../src/tools/errorHeatmap.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,sBAAsB;;;;;;CAUlC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;CAM/B,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAyC3F"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { ToolError } from '../lib/errors.js';
3
+ /**
4
+ * Tool: error_heatmap
5
+ * Mapping: GET /analytics/heatmap → analytics.routes.ts:285
6
+ * Upstream Zod: HeatmapSchema (from + to required, + фасет-фильтры).
7
+ *
8
+ * Возвращает 7×24 матрицу счётчиков (dayOfWeek × hour). Параметр `timezone`
9
+ * в input — для будущей версии (upstream сейчас работает только в UTC).
10
+ */
11
+ export const errorHeatmapInputShape = {
12
+ from: z.string().min(1).describe('ISO timestamp lower bound (required).'),
13
+ to: z.string().min(1).describe('ISO timestamp upper bound (required).'),
14
+ level: z.array(z.string().max(16)).optional(),
15
+ serviceName: z.array(z.string().max(255)).optional(),
16
+ timezone: z
17
+ .string()
18
+ .max(64)
19
+ .default('UTC')
20
+ .describe('IANA tz. Phase 2: upstream computes in UTC only — non-UTC values are ignored with a warning.'),
21
+ };
22
+ export const errorHeatmapToolDef = {
23
+ name: 'error_heatmap',
24
+ title: 'Day-of-week x hour-of-day error heatmap',
25
+ description: '7x24 matrix of error counts (day-of-week x hour-of-day in UTC) for a period. Use for "when do errors usually happen?".',
26
+ inputShape: errorHeatmapInputShape,
27
+ };
28
+ export async function handleErrorHeatmap(args, client) {
29
+ try {
30
+ const params = {
31
+ from: args.from,
32
+ to: args.to,
33
+ levels: args.level?.join(','),
34
+ serviceName: args.serviceName?.join(','),
35
+ };
36
+ const { data, elsRequestId } = await client.heatmap(params);
37
+ const warnings = [];
38
+ if (args.timezone !== 'UTC') {
39
+ warnings.push(`timezone='${args.timezone}' requested, but upstream computes in UTC only.`);
40
+ }
41
+ const meta = {
42
+ elsRequestId,
43
+ cached: false,
44
+ ttlSec: 300,
45
+ redactionApplied: false,
46
+ ...(warnings.length > 0 ? { warnings } : {}),
47
+ };
48
+ return {
49
+ structuredContent: {
50
+ data: data.data ?? [],
51
+ from: data.from,
52
+ to: data.to,
53
+ _meta: meta,
54
+ },
55
+ content: [
56
+ {
57
+ type: 'text',
58
+ text: `Heatmap (${(data.data ?? []).length} buckets) from ${data.from} to ${data.to}.`,
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ catch (err) {
64
+ if (err instanceof ToolError)
65
+ return err.toToolResult();
66
+ throw err;
67
+ }
68
+ }
69
+ //# sourceMappingURL=errorHeatmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHeatmap.js","sourceRoot":"","sources":["../../src/tools/errorHeatmap.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,sBAAsB,GAAG;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACvE,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,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,CAAC;SACP,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,8FAA8F,CAAC;CAC5G,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,yCAAyC;IAChD,WAAW,EACT,wHAAwH;IAC1H,UAAU,EAAE,sBAAsB;CACnC,CAAC;AAUF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,MAAiB;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAuC;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,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,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,iDAAiD,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,IAAI,GAAiB;YACzB,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,GAAG;YACX,gBAAgB,EAAE,KAAK;YACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC;QAEF,OAAO;YACL,iBAAiB,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI;aACZ;YACD,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,kBAAkB,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,GAAG;iBACvF;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,39 @@
1
+ import { z } from 'zod';
2
+ import type { ElsClient } from '../elsClient.js';
3
+ import type { ToolResult } from '../types.js';
4
+ /**
5
+ * Tool: error_histogram
6
+ * Mapping: GET /analytics/histogram → analytics.routes.ts:241
7
+ * Upstream Zod: HistogramSchema (from + to required, + фасет-фильтры).
8
+ *
9
+ * Bucket size auto-selected by range (5m / 30m / 1h / 1d).
10
+ */
11
+ export declare const errorHistogramInputShape: {
12
+ from: z.ZodString;
13
+ to: z.ZodString;
14
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
15
+ serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ appVersion: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ };
18
+ export declare const errorHistogramToolDef: {
19
+ name: string;
20
+ title: string;
21
+ description: string;
22
+ inputShape: {
23
+ from: z.ZodString;
24
+ to: z.ZodString;
25
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
26
+ serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ appVersion: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
28
+ };
29
+ };
30
+ type Args = {
31
+ from: string;
32
+ to: string;
33
+ level?: string[];
34
+ serviceName?: string[];
35
+ appVersion?: string[];
36
+ };
37
+ export declare function handleErrorHistogram(args: Args, client: ElsClient): Promise<ToolResult>;
38
+ export {};
39
+ //# sourceMappingURL=errorHistogram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHistogram.d.ts","sourceRoot":"","sources":["../../src/tools/errorHistogram.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;;;;;;GAMG;AAEH,eAAO,MAAM,wBAAwB;;;;;;CAMpC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAMjC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAqC7F"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { ToolError } from '../lib/errors.js';
3
+ /**
4
+ * Tool: error_histogram
5
+ * Mapping: GET /analytics/histogram → analytics.routes.ts:241
6
+ * Upstream Zod: HistogramSchema (from + to required, + фасет-фильтры).
7
+ *
8
+ * Bucket size auto-selected by range (5m / 30m / 1h / 1d).
9
+ */
10
+ export const errorHistogramInputShape = {
11
+ from: z.string().min(1).describe('ISO timestamp lower bound (required).'),
12
+ to: z.string().min(1).describe('ISO timestamp upper bound (required).'),
13
+ level: z.array(z.string().max(16)).optional(),
14
+ serviceName: z.array(z.string().max(255)).optional(),
15
+ appVersion: z.array(z.string().max(64)).optional(),
16
+ };
17
+ export const errorHistogramToolDef = {
18
+ name: 'error_histogram',
19
+ title: 'Error count histogram over time',
20
+ description: 'Time-series histogram of error counts. Bucket size auto-selected by range. Use for "how did errors trend over time?".',
21
+ inputShape: errorHistogramInputShape,
22
+ };
23
+ export async function handleErrorHistogram(args, client) {
24
+ try {
25
+ const params = {
26
+ from: args.from,
27
+ to: args.to,
28
+ levels: args.level?.join(','),
29
+ serviceName: args.serviceName?.join(','),
30
+ appVersion: args.appVersion?.join(','),
31
+ };
32
+ const { data, elsRequestId } = await client.errorHistogram(params);
33
+ const meta = {
34
+ elsRequestId,
35
+ cached: false,
36
+ ttlSec: 30,
37
+ redactionApplied: false,
38
+ };
39
+ return {
40
+ structuredContent: {
41
+ interval: data.interval,
42
+ from: data.from,
43
+ to: data.to,
44
+ data: data.data,
45
+ _meta: meta,
46
+ },
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: `Histogram with ${data.data?.length ?? 0} buckets (interval=${data.interval}, from=${data.from}, to=${data.to}).`,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ catch (err) {
56
+ if (err instanceof ToolError)
57
+ return err.toToolResult();
58
+ throw err;
59
+ }
60
+ }
61
+ //# sourceMappingURL=errorHistogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHistogram.js","sourceRoot":"","sources":["../../src/tools/errorHistogram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACvE,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,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,iCAAiC;IACxC,WAAW,EACT,uHAAuH;IACzH,UAAU,EAAE,wBAAwB;CACrC,CAAC;AAUF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAU,EAAE,MAAiB;IACtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAuC;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC;YACxC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;SACvC,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAiB;YACzB,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,KAAK;SACxB,CAAC;QAEF,OAAO;YACL,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI;aACZ;YACD,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kBAAkB,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,sBAAsB,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,IAAI;iBACxH;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,43 @@
1
+ import { z } from 'zod';
2
+ import type { ElsClient } from '../elsClient.js';
3
+ import type { ToolResult } from '../types.js';
4
+ /**
5
+ * Tool: error_stats_breakdown
6
+ * Mapping: GET /analytics/stats → analytics.routes.ts:316
7
+ * Upstream Zod: StatsSchema (from, to, +фасет-фильтры).
8
+ *
9
+ * Возвращает агрегаты: total, uniqueFingerprints, distinct counts, byLevel.
10
+ * Сравнение с предыдущим периодом (`compareTo`) — отдельный pass на стороне MCP
11
+ * (Phase 2: один upstream-call, comparison не считается до Phase 3 — спец требует
12
+ * `compareTo` в input, но ELS-endpoint его не поддерживает, поэтому возвращаем
13
+ * comparison=null и пишем warning).
14
+ */
15
+ export declare const errorStatsBreakdownInputShape: {
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
+ compareTo: z.ZodDefault<z.ZodEnum<["previous-period", "previous-week", "none"]>>;
21
+ };
22
+ export declare const errorStatsBreakdownToolDef: {
23
+ name: string;
24
+ title: string;
25
+ description: string;
26
+ inputShape: {
27
+ from: z.ZodOptional<z.ZodString>;
28
+ to: z.ZodOptional<z.ZodString>;
29
+ level: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
30
+ serviceName: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ compareTo: z.ZodDefault<z.ZodEnum<["previous-period", "previous-week", "none"]>>;
32
+ };
33
+ };
34
+ type Args = {
35
+ from?: string;
36
+ to?: string;
37
+ level?: string[];
38
+ serviceName?: string[];
39
+ compareTo: 'previous-period' | 'previous-week' | 'none';
40
+ };
41
+ export declare function handleErrorStatsBreakdown(args: Args, client: ElsClient): Promise<ToolResult>;
42
+ export {};
43
+ //# sourceMappingURL=errorStatsBreakdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorStatsBreakdown.d.ts","sourceRoot":"","sources":["../../src/tools/errorStatsBreakdown.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,6BAA6B;;;;;;CAWzC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;CAMtC,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,SAAS,EAAE,iBAAiB,GAAG,eAAe,GAAG,MAAM,CAAC;CACzD,CAAC;AAEF,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDlG"}
@@ -0,0 +1,77 @@
1
+ import { z } from 'zod';
2
+ import { ToolError } from '../lib/errors.js';
3
+ /**
4
+ * Tool: error_stats_breakdown
5
+ * Mapping: GET /analytics/stats → analytics.routes.ts:316
6
+ * Upstream Zod: StatsSchema (from, to, +фасет-фильтры).
7
+ *
8
+ * Возвращает агрегаты: total, uniqueFingerprints, distinct counts, byLevel.
9
+ * Сравнение с предыдущим периодом (`compareTo`) — отдельный pass на стороне MCP
10
+ * (Phase 2: один upstream-call, comparison не считается до Phase 3 — спец требует
11
+ * `compareTo` в input, но ELS-endpoint его не поддерживает, поэтому возвращаем
12
+ * comparison=null и пишем warning).
13
+ */
14
+ export const errorStatsBreakdownInputShape = {
15
+ from: z.string().optional(),
16
+ to: z.string().optional(),
17
+ level: z.array(z.string().max(16)).optional(),
18
+ serviceName: z.array(z.string().max(255)).optional(),
19
+ compareTo: z
20
+ .enum(['previous-period', 'previous-week', 'none'])
21
+ .default('none')
22
+ .describe('Compare current period to baseline. Phase 2: upstream does not compute comparison; field returns null + warning.'),
23
+ };
24
+ export const errorStatsBreakdownToolDef = {
25
+ name: 'error_stats_breakdown',
26
+ title: 'Aggregated stats with breakdowns',
27
+ description: 'High-level stats: total errors, unique fingerprints, distinct services/URLs/users, severity distribution. Use for "weekly summary" / "did things get worse?".',
28
+ inputShape: errorStatsBreakdownInputShape,
29
+ };
30
+ export async function handleErrorStatsBreakdown(args, client) {
31
+ try {
32
+ const params = {
33
+ from: args.from,
34
+ to: args.to,
35
+ levels: args.level?.join(','),
36
+ serviceName: args.serviceName?.join(','),
37
+ };
38
+ const { data, elsRequestId } = await client.errorStats(params);
39
+ const stats = (data ?? {});
40
+ const warnings = [];
41
+ let comparison = null;
42
+ if (args.compareTo !== 'none') {
43
+ warnings.push(`compareTo='${args.compareTo}' requested, but upstream /analytics/stats does not compute comparison in Phase 2. Returning null.`);
44
+ }
45
+ const meta = {
46
+ elsRequestId,
47
+ cached: false,
48
+ ttlSec: 60,
49
+ redactionApplied: false,
50
+ ...(warnings.length > 0 ? { warnings, degraded: true } : {}),
51
+ };
52
+ return {
53
+ structuredContent: {
54
+ total: Number(stats.total ?? 0),
55
+ uniqueFingerprints: Number(stats.uniqueFingerprints ?? 0),
56
+ distinctServices: Number(stats.distinctServices ?? 0),
57
+ distinctUrls: Number(stats.distinctUrls ?? 0),
58
+ distinctUsersAffected: Number(stats.distinctUsersAffected ?? 0),
59
+ byLevel: stats.byLevel ?? {},
60
+ comparison,
61
+ _meta: meta,
62
+ },
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: `Stats: total=${Number(stats.total ?? 0)}, uniqueFingerprints=${Number(stats.uniqueFingerprints ?? 0)}.`,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ catch (err) {
72
+ if (err instanceof ToolError)
73
+ return err.toToolResult();
74
+ throw err;
75
+ }
76
+ }
77
+ //# sourceMappingURL=errorStatsBreakdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorStatsBreakdown.js","sourceRoot":"","sources":["../../src/tools/errorStatsBreakdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ import type { ElsClient } from '../elsClient.js';
3
+ import type { ResponseFormat, ToolResult } from '../types.js';
4
+ /**
5
+ * Tool: errors_in_session (composite)
6
+ *
7
+ * Wrapper над search_logs с фиксированным sessionId, sortBy=receivedAt asc.
8
+ * Используется когда саппорту дали session-ID — нужно посмотреть всю
9
+ * хронологию ошибок этого пользователя.
10
+ *
11
+ * Cursor — passthrough из search_logs (offset-based wrapper в Phase 1).
12
+ */
13
+ export declare const errorsInSessionInputShape: {
14
+ sessionId: z.ZodString;
15
+ from: z.ZodOptional<z.ZodString>;
16
+ to: z.ZodOptional<z.ZodString>;
17
+ limit: z.ZodDefault<z.ZodNumber>;
18
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
20
+ };
21
+ export declare const errorsInSessionToolDef: {
22
+ name: string;
23
+ title: string;
24
+ description: string;
25
+ inputShape: {
26
+ sessionId: z.ZodString;
27
+ from: z.ZodOptional<z.ZodString>;
28
+ to: z.ZodOptional<z.ZodString>;
29
+ limit: z.ZodDefault<z.ZodNumber>;
30
+ cursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ response_format: z.ZodDefault<z.ZodEnum<["compact", "full", "summary"]>>;
32
+ };
33
+ };
34
+ type Args = {
35
+ sessionId: string;
36
+ from?: string;
37
+ to?: string;
38
+ limit: number;
39
+ cursor?: string | null;
40
+ response_format: ResponseFormat;
41
+ };
42
+ export declare function handleErrorsInSession(args: Args, client: ElsClient): Promise<ToolResult>;
43
+ export {};
44
+ //# sourceMappingURL=errorsInSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorsInSession.d.ts","sourceRoot":"","sources":["../../src/tools/errorsInSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,OAAO,KAAK,EAAE,cAAc,EAAuC,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnG;;;;;;;;GAQG;AAEH,eAAO,MAAM,yBAAyB;;;;;;;CAQrC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;CAMlC,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,cAAc,CAAC;CACjC,CAAC;AAUF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAkE9F"}