@uptimebolt/mcp-server 1.0.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/LICENSE +21 -0
- package/README.md +186 -0
- package/dist/api-client.d.ts +11 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +80 -0
- package/dist/api-client.js.map +1 -0
- package/dist/formatters.d.ts +17 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/formatters.js +300 -0
- package/dist/formatters.js.map +1 -0
- package/dist/http-server.d.ts +3 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +148 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +77 -0
- package/dist/logger.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/get-deployments.d.ts +20 -0
- package/dist/tools/get-deployments.d.ts.map +1 -0
- package/dist/tools/get-deployments.js +27 -0
- package/dist/tools/get-deployments.js.map +1 -0
- package/dist/tools/get-executive-summary.d.ts +19 -0
- package/dist/tools/get-executive-summary.d.ts.map +1 -0
- package/dist/tools/get-executive-summary.js +19 -0
- package/dist/tools/get-executive-summary.js.map +1 -0
- package/dist/tools/get-incidents.d.ts +22 -0
- package/dist/tools/get-incidents.d.ts.map +1 -0
- package/dist/tools/get-incidents.js +56 -0
- package/dist/tools/get-incidents.js.map +1 -0
- package/dist/tools/get-monitor-health.d.ts +20 -0
- package/dist/tools/get-monitor-health.d.ts.map +1 -0
- package/dist/tools/get-monitor-health.js +48 -0
- package/dist/tools/get-monitor-health.js.map +1 -0
- package/dist/tools/get-monitor-metrics.d.ts +19 -0
- package/dist/tools/get-monitor-metrics.d.ts.map +1 -0
- package/dist/tools/get-monitor-metrics.js +42 -0
- package/dist/tools/get-monitor-metrics.js.map +1 -0
- package/dist/tools/get-monitors.d.ts +19 -0
- package/dist/tools/get-monitors.d.ts.map +1 -0
- package/dist/tools/get-monitors.js +44 -0
- package/dist/tools/get-monitors.js.map +1 -0
- package/dist/tools/get-predictions.d.ts +20 -0
- package/dist/tools/get-predictions.d.ts.map +1 -0
- package/dist/tools/get-predictions.js +36 -0
- package/dist/tools/get-predictions.js.map +1 -0
- package/dist/tools/get-service-status.d.ts +19 -0
- package/dist/tools/get-service-status.d.ts.map +1 -0
- package/dist/tools/get-service-status.js +47 -0
- package/dist/tools/get-service-status.js.map +1 -0
- package/dist/tools/is-safe-to-deploy.d.ts +19 -0
- package/dist/tools/is-safe-to-deploy.d.ts.map +1 -0
- package/dist/tools/is-safe-to-deploy.js +148 -0
- package/dist/tools/is-safe-to-deploy.js.map +1 -0
- package/dist/tools/run-root-cause-analysis.d.ts +21 -0
- package/dist/tools/run-root-cause-analysis.d.ts.map +1 -0
- package/dist/tools/run-root-cause-analysis.js +40 -0
- package/dist/tools/run-root-cause-analysis.js.map +1 -0
- package/dist/tools.d.ts +288 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +146 -0
- package/dist/tools.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleGetMonitorHealth = handleGetMonitorHealth;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleGetMonitorHealth(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
let monitorId = args.monitor_id;
|
|
9
|
+
if (!monitorId && args.monitor_name) {
|
|
10
|
+
const monitorsResponse = await api_client_1.apiClient.get("/monitors", undefined, undefined, context?.authToken);
|
|
11
|
+
const monitors = Array.isArray(monitorsResponse) ? monitorsResponse : (monitorsResponse?.monitors || []);
|
|
12
|
+
const query = args.monitor_name.toLowerCase();
|
|
13
|
+
const exact = monitors.find((m) => m.name.toLowerCase() === query);
|
|
14
|
+
if (exact) {
|
|
15
|
+
monitorId = exact.id;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const matches = monitors.filter((m) => m.name.toLowerCase().includes(query));
|
|
19
|
+
if (matches.length === 1) {
|
|
20
|
+
monitorId = matches[0].id;
|
|
21
|
+
}
|
|
22
|
+
else if (matches.length > 1) {
|
|
23
|
+
const names = matches.map((m) => ` - ${m.name} (id: ${m.id}, type: ${m.type})`).join("\n");
|
|
24
|
+
return { content: [{ type: "text", text: `Multiple monitors match "${args.monitor_name}":\n${names}\n\nPlease use monitor_id or a more specific name.` }] };
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return { content: [{ type: "text", text: `No monitor found matching "${args.monitor_name}".` }] };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!monitorId) {
|
|
32
|
+
return { content: [{ type: "text", text: "Please provide either monitor_id or monitor_name." }] };
|
|
33
|
+
}
|
|
34
|
+
const [monitor, predictions] = await Promise.all([
|
|
35
|
+
api_client_1.apiClient.get(`/monitors/${monitorId}`, undefined, undefined, context?.authToken),
|
|
36
|
+
api_client_1.apiClient.get(`/monitors/${monitorId}/predictions`, undefined, undefined, context?.authToken).catch(() => []),
|
|
37
|
+
]);
|
|
38
|
+
const activePredictions = Array.isArray(predictions)
|
|
39
|
+
? predictions.filter((p) => p.status === "active")
|
|
40
|
+
: [];
|
|
41
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatMonitorHealth)(monitor, activePredictions) }] };
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
45
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=get-monitor-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monitor-health.js","sourceRoot":"","sources":["../../src/tools/get-monitor-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function handleGetMonitorMetrics(args: {
|
|
2
|
+
monitor_id?: string;
|
|
3
|
+
monitor_name?: string;
|
|
4
|
+
}, context?: {
|
|
5
|
+
authToken?: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
content: {
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}[];
|
|
11
|
+
isError?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
isError: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=get-monitor-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monitor-metrics.d.ts","sourceRoot":"","sources":["../../src/tools/get-monitor-metrics.ts"],"names":[],"mappings":"AAIA,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAqCjC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleGetMonitorMetrics = handleGetMonitorMetrics;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleGetMonitorMetrics(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
let monitorId = args.monitor_id;
|
|
9
|
+
if (!monitorId && args.monitor_name) {
|
|
10
|
+
const monitorsResponse = await api_client_1.apiClient.get("/monitors", undefined, undefined, context?.authToken);
|
|
11
|
+
const monitors = Array.isArray(monitorsResponse) ? monitorsResponse : (monitorsResponse?.monitors || []);
|
|
12
|
+
const query = args.monitor_name.toLowerCase();
|
|
13
|
+
const exact = monitors.find((m) => m.name.toLowerCase() === query);
|
|
14
|
+
if (exact) {
|
|
15
|
+
monitorId = exact.id;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const matches = monitors.filter((m) => m.name.toLowerCase().includes(query));
|
|
19
|
+
if (matches.length === 1) {
|
|
20
|
+
monitorId = matches[0].id;
|
|
21
|
+
}
|
|
22
|
+
else if (matches.length > 1) {
|
|
23
|
+
const names = matches.map((m) => ` - ${m.name} (id: ${m.id})`).join("\n");
|
|
24
|
+
return { content: [{ type: "text", text: `Multiple monitors match "${args.monitor_name}":\n${names}\n\nPlease use monitor_id or a more specific name.` }] };
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return { content: [{ type: "text", text: `No monitor found matching "${args.monitor_name}".` }] };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!monitorId) {
|
|
32
|
+
return { content: [{ type: "text", text: "Please provide either monitor_id or monitor_name." }] };
|
|
33
|
+
}
|
|
34
|
+
const summary = await api_client_1.apiClient.get(`/metric-query/monitor-summary/${monitorId}`, undefined, undefined, context?.authToken);
|
|
35
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatMonitorMetrics)(summary) }] };
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
39
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=get-monitor-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monitor-metrics.js","sourceRoot":"","sources":["../../src/tools/get-monitor-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function handleGetMonitors(args: {
|
|
2
|
+
status?: string;
|
|
3
|
+
type?: string;
|
|
4
|
+
}, context?: {
|
|
5
|
+
authToken?: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
content: {
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}[];
|
|
11
|
+
isError?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
isError: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=get-monitors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monitors.d.ts","sourceRoot":"","sources":["../../src/tools/get-monitors.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAyCjC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleGetMonitors = handleGetMonitors;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleGetMonitors(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
const params = {
|
|
9
|
+
limit: 100,
|
|
10
|
+
};
|
|
11
|
+
if (args.type)
|
|
12
|
+
params.type = args.type;
|
|
13
|
+
// The API's `status` param filters by administrative status (active/paused/maintenance),
|
|
14
|
+
// NOT operational status (up/down/degraded).
|
|
15
|
+
// Default: fetch ALL monitors so Claude always has the full picture (paused monitors shown with [PAUSED] tag).
|
|
16
|
+
if (args.status === "paused") {
|
|
17
|
+
params.status = "paused";
|
|
18
|
+
}
|
|
19
|
+
else if (args.status === "maintenance") {
|
|
20
|
+
params.status = "maintenance";
|
|
21
|
+
}
|
|
22
|
+
else if (args.status === "active") {
|
|
23
|
+
params.status = "active";
|
|
24
|
+
}
|
|
25
|
+
// For "all", "up", "down", "degraded", or no status: don't filter by admin status (fetch everything)
|
|
26
|
+
const response = await api_client_1.apiClient.get("/monitors", params, undefined, context?.authToken);
|
|
27
|
+
const monitors = Array.isArray(response) ? response : (response?.monitors || []);
|
|
28
|
+
// Client-side filter by operationalStatus (up/down/degraded) when requested
|
|
29
|
+
let filtered = monitors;
|
|
30
|
+
if (args.status && ["up", "down", "degraded"].includes(args.status)) {
|
|
31
|
+
filtered = monitors.filter((m) => (m.operationalStatus || m.status || "").toLowerCase() === args.status.toLowerCase());
|
|
32
|
+
}
|
|
33
|
+
if (filtered.length === 0) {
|
|
34
|
+
const qualifier = args.status && args.status !== "all" ? ` with status "${args.status}"` : "";
|
|
35
|
+
return { content: [{ type: "text", text: `No monitors found${qualifier}.` }] };
|
|
36
|
+
}
|
|
37
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatMonitors)(filtered) }] };
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
41
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=get-monitors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monitors.js","sourceRoot":"","sources":["../../src/tools/get-monitors.ts"],"names":[],"mappings":";;AAIA,8CA2CC;AA/CD,8CAAoD;AACpD,8CAA+C;AAGxC,KAAK,UAAU,iBAAiB,CACrC,IAAwC,EACxC,OAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,GAA0D;YACpE,KAAK,EAAE,GAAG;SACX,CAAC;QACF,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvC,yFAAyF;QACzF,6CAA6C;QAC7C,+GAA+G;QAC/G,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;QAChC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,CAAC;QACD,qGAAqG;QAErG,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAM,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QAEjF,4EAA4E;QAC5E,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CACpC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAO,CAAC,WAAW,EAAE,CACrF,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAA,2BAAc,EAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function handleGetPredictions(args: {
|
|
2
|
+
service_id?: string;
|
|
3
|
+
monitor_id?: string;
|
|
4
|
+
min_confidence?: number;
|
|
5
|
+
}, context?: {
|
|
6
|
+
authToken?: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: "text";
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=get-predictions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-predictions.d.ts","sourceRoot":"","sources":["../../src/tools/get-predictions.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAgCvJ"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleGetPredictions = handleGetPredictions;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleGetPredictions(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
let predictions;
|
|
9
|
+
if (args.monitor_id) {
|
|
10
|
+
predictions = await api_client_1.apiClient.get(`/monitors/${args.monitor_id}/predictions`, undefined, undefined, context?.authToken);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
predictions = await api_client_1.apiClient.get("/predictive/alerts", undefined, undefined, context?.authToken);
|
|
14
|
+
}
|
|
15
|
+
if (!Array.isArray(predictions))
|
|
16
|
+
predictions = [];
|
|
17
|
+
// Filter by confidence
|
|
18
|
+
const minConf = args.min_confidence ?? 60;
|
|
19
|
+
predictions = predictions.filter((p) => {
|
|
20
|
+
const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
|
|
21
|
+
return conf >= minConf;
|
|
22
|
+
});
|
|
23
|
+
// Filter by service if needed
|
|
24
|
+
if (args.service_id) {
|
|
25
|
+
predictions = predictions.filter((p) => p.serviceId === args.service_id);
|
|
26
|
+
}
|
|
27
|
+
// Only active
|
|
28
|
+
predictions = predictions.filter((p) => p.status === "active" || !p.status);
|
|
29
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatPredictions)(predictions) }] };
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
33
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=get-predictions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-predictions.js","sourceRoot":"","sources":["../../src/tools/get-predictions.ts"],"names":[],"mappings":";;AAIA,oDAgCC;AApCD,8CAAoD;AACpD,8CAAkD;AAG3C,KAAK,UAAU,oBAAoB,CAAC,IAA2E,EAAE,OAAgC;IACtJ,IAAI,CAAC;QACH,IAAI,WAAkB,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,UAAU,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1H,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,WAAW,GAAG,EAAE,CAAC;QAElD,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QAC1C,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,OAAO,IAAI,IAAI,OAAO,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAChF,CAAC;QAED,cAAc;QACd,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEjF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAA,8BAAiB,EAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function handleGetServiceStatus(args: {
|
|
2
|
+
service_id?: string;
|
|
3
|
+
service_name?: string;
|
|
4
|
+
}, context?: {
|
|
5
|
+
authToken?: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
content: {
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}[];
|
|
11
|
+
isError?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
isError: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=get-service-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-service-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-service-status.ts"],"names":[],"mappings":"AAIA,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAwClI"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleGetServiceStatus = handleGetServiceStatus;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleGetServiceStatus(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
if (args.service_id) {
|
|
9
|
+
const [service, health] = await Promise.all([
|
|
10
|
+
api_client_1.apiClient.get(`/services/${args.service_id}`, undefined, undefined, context?.authToken),
|
|
11
|
+
api_client_1.apiClient.get(`/services/${args.service_id}/health`, undefined, undefined, context?.authToken).catch(() => null),
|
|
12
|
+
]);
|
|
13
|
+
if (health?.healthScore != null)
|
|
14
|
+
service.healthScore = health.healthScore;
|
|
15
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(service) }] };
|
|
16
|
+
}
|
|
17
|
+
const services = await api_client_1.apiClient.get("/services", undefined, undefined, context?.authToken);
|
|
18
|
+
if (args.service_name) {
|
|
19
|
+
const query = args.service_name.toLowerCase();
|
|
20
|
+
const exact = services.find((s) => s.name.toLowerCase() === query);
|
|
21
|
+
if (exact) {
|
|
22
|
+
const health = await api_client_1.apiClient.get(`/services/${exact.id}/health`, undefined, undefined, context?.authToken).catch(() => null);
|
|
23
|
+
if (health?.healthScore != null)
|
|
24
|
+
exact.healthScore = health.healthScore;
|
|
25
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(exact) }] };
|
|
26
|
+
}
|
|
27
|
+
const matches = services.filter((s) => s.name.toLowerCase().includes(query));
|
|
28
|
+
if (matches.length === 1) {
|
|
29
|
+
const health = await api_client_1.apiClient.get(`/services/${matches[0].id}/health`, undefined, undefined, context?.authToken).catch(() => null);
|
|
30
|
+
if (health?.healthScore != null)
|
|
31
|
+
matches[0].healthScore = health.healthScore;
|
|
32
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(matches[0]) }] };
|
|
33
|
+
}
|
|
34
|
+
if (matches.length > 1) {
|
|
35
|
+
const names = matches.map((s) => ` - ${s.name} (id: ${s.id})`).join("\n");
|
|
36
|
+
return { content: [{ type: "text", text: `Multiple services match "${args.service_name}":\n${names}\n\nPlease use service_id or a more specific name.` }] };
|
|
37
|
+
}
|
|
38
|
+
return { content: [{ type: "text", text: `No service found matching "${args.service_name}".` }] };
|
|
39
|
+
}
|
|
40
|
+
return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(services) }] };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
44
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=get-service-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-service-status.js","sourceRoot":"","sources":["../../src/tools/get-service-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function handleIsSafeToDeploy(args: {
|
|
2
|
+
service_id?: string;
|
|
3
|
+
service_name?: string;
|
|
4
|
+
}, context?: {
|
|
5
|
+
authToken?: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
content: {
|
|
8
|
+
type: "text";
|
|
9
|
+
text: string;
|
|
10
|
+
}[];
|
|
11
|
+
isError?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
isError: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=is-safe-to-deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-safe-to-deploy.d.ts","sourceRoot":"","sources":["../../src/tools/is-safe-to-deploy.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAyJhI"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleIsSafeToDeploy = handleIsSafeToDeploy;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleIsSafeToDeploy(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
// Resolve service
|
|
9
|
+
let serviceId = args.service_id;
|
|
10
|
+
let serviceName = "your infrastructure";
|
|
11
|
+
if (!serviceId && args.service_name) {
|
|
12
|
+
const services = await api_client_1.apiClient.get("/services", undefined, undefined, context?.authToken);
|
|
13
|
+
const query = args.service_name.toLowerCase();
|
|
14
|
+
const match = services.find((s) => s.name.toLowerCase() === query) ||
|
|
15
|
+
(() => {
|
|
16
|
+
const partial = services.filter((s) => s.name.toLowerCase().includes(query));
|
|
17
|
+
return partial.length === 1 ? partial[0] : null;
|
|
18
|
+
})();
|
|
19
|
+
if (!match) {
|
|
20
|
+
return { content: [{ type: "text", text: `No service found matching "${args.service_name}".` }] };
|
|
21
|
+
}
|
|
22
|
+
serviceId = match.id;
|
|
23
|
+
serviceName = match.name;
|
|
24
|
+
}
|
|
25
|
+
// Gather data in parallel
|
|
26
|
+
const [healthData, predictions, incidents] = await Promise.all([
|
|
27
|
+
serviceId
|
|
28
|
+
? api_client_1.apiClient.get(`/services/${serviceId}/health`, undefined, undefined, context?.authToken).catch(() => ({ healthScore: null }))
|
|
29
|
+
: Promise.resolve({ healthScore: null }),
|
|
30
|
+
api_client_1.apiClient.get("/predictive/alerts", undefined, undefined, context?.authToken).catch(() => []),
|
|
31
|
+
api_client_1.apiClient.get("/incidents", { limit: 10 }, undefined, context?.authToken).catch(() => []),
|
|
32
|
+
]);
|
|
33
|
+
const healthScore = healthData?.healthScore;
|
|
34
|
+
const activePredictions = Array.isArray(predictions)
|
|
35
|
+
? predictions.filter((p) => p.status === "active")
|
|
36
|
+
: [];
|
|
37
|
+
const activeIncidents = Array.isArray(incidents)
|
|
38
|
+
? incidents.filter((inc) => inc.status !== "resolved" && inc.status !== "false-positive")
|
|
39
|
+
: [];
|
|
40
|
+
// Filter by service if specified
|
|
41
|
+
const relevantPredictions = serviceId
|
|
42
|
+
? activePredictions.filter((p) => p.serviceId === serviceId)
|
|
43
|
+
: activePredictions;
|
|
44
|
+
const relevantIncidents = serviceId
|
|
45
|
+
? activeIncidents.filter((inc) => inc.monitor?.serviceId === serviceId || inc.serviceId === serviceId)
|
|
46
|
+
: activeIncidents;
|
|
47
|
+
// Decision logic
|
|
48
|
+
const activeIssues = [];
|
|
49
|
+
let riskLevel = "low";
|
|
50
|
+
let safe = true;
|
|
51
|
+
// Check critical incidents
|
|
52
|
+
const criticalIncidents = relevantIncidents.filter((inc) => inc.severity === "critical" || inc.priority === "critical");
|
|
53
|
+
if (criticalIncidents.length > 0) {
|
|
54
|
+
riskLevel = "high";
|
|
55
|
+
safe = false;
|
|
56
|
+
criticalIncidents.forEach((inc) => {
|
|
57
|
+
activeIssues.push({
|
|
58
|
+
type: "incident",
|
|
59
|
+
message: `Critical incident: ${inc.title || "Unknown"} (${inc.status})`,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// Check non-critical incidents
|
|
64
|
+
const otherIncidents = relevantIncidents.filter((inc) => inc.severity !== "critical" && inc.priority !== "critical");
|
|
65
|
+
if (otherIncidents.length > 0) {
|
|
66
|
+
if (riskLevel !== "high")
|
|
67
|
+
riskLevel = "medium";
|
|
68
|
+
otherIncidents.forEach((inc) => {
|
|
69
|
+
activeIssues.push({
|
|
70
|
+
type: "incident",
|
|
71
|
+
message: `Active incident: ${inc.title || "Unknown"} (${inc.severity})`,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Check high-confidence predictions
|
|
76
|
+
const highConfPredictions = relevantPredictions.filter((p) => {
|
|
77
|
+
const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
|
|
78
|
+
return conf >= 80;
|
|
79
|
+
});
|
|
80
|
+
if (highConfPredictions.length > 0) {
|
|
81
|
+
riskLevel = "high";
|
|
82
|
+
safe = false;
|
|
83
|
+
highConfPredictions.forEach((p) => {
|
|
84
|
+
const conf = Math.round(p.confidence > 1 ? p.confidence : p.confidence * 100);
|
|
85
|
+
activeIssues.push({
|
|
86
|
+
type: "prediction",
|
|
87
|
+
message: `${p.predictionType}: ${p.monitor?.name || p.monitorId || "unknown"}`,
|
|
88
|
+
confidence: conf,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Check medium-confidence predictions
|
|
93
|
+
const mediumConfPredictions = relevantPredictions.filter((p) => {
|
|
94
|
+
const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
|
|
95
|
+
return conf >= 60 && conf < 80;
|
|
96
|
+
});
|
|
97
|
+
if (mediumConfPredictions.length > 0) {
|
|
98
|
+
if (riskLevel === "low")
|
|
99
|
+
riskLevel = "medium";
|
|
100
|
+
mediumConfPredictions.forEach((p) => {
|
|
101
|
+
const conf = Math.round(p.confidence > 1 ? p.confidence : p.confidence * 100);
|
|
102
|
+
activeIssues.push({
|
|
103
|
+
type: "prediction",
|
|
104
|
+
message: `${p.predictionType}: ${p.monitor?.name || p.monitorId || "unknown"}`,
|
|
105
|
+
confidence: conf,
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// Check health score
|
|
110
|
+
if (healthScore != null) {
|
|
111
|
+
if (healthScore < 70) {
|
|
112
|
+
riskLevel = "high";
|
|
113
|
+
safe = false;
|
|
114
|
+
activeIssues.push({ type: "health", message: `Service health score is ${healthScore.toFixed(1)}% (below 70% threshold)` });
|
|
115
|
+
}
|
|
116
|
+
else if (healthScore < 85) {
|
|
117
|
+
if (riskLevel === "low")
|
|
118
|
+
riskLevel = "medium";
|
|
119
|
+
activeIssues.push({ type: "health", message: `Service health score is ${healthScore.toFixed(1)}% (below 85%)` });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (riskLevel === "medium" && safe)
|
|
123
|
+
safe = true; // medium is cautionary, not blocking
|
|
124
|
+
// Build reason
|
|
125
|
+
let reason;
|
|
126
|
+
let recommendation;
|
|
127
|
+
if (safe && riskLevel === "low") {
|
|
128
|
+
reason = `${serviceName} is stable with no active issues. Safe to deploy.`;
|
|
129
|
+
recommendation = "proceed";
|
|
130
|
+
}
|
|
131
|
+
else if (riskLevel === "medium") {
|
|
132
|
+
reason = `${serviceName} has minor issues. Deploy with caution and monitor closely.`;
|
|
133
|
+
recommendation = "proceed_with_caution";
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
reason = `${serviceName} has critical issues. Deploying now could worsen the situation.`;
|
|
137
|
+
recommendation = "wait_and_monitor";
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
content: [{ type: "text", text: (0, formatters_1.formatSafetyCheck)({ safe, riskLevel, reason, activeIssues, recommendation }) }],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
145
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=is-safe-to-deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-safe-to-deploy.js","sourceRoot":"","sources":["../../src/tools/is-safe-to-deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function handleRunRootCauseAnalysis(args: {
|
|
2
|
+
incident_id?: string;
|
|
3
|
+
service_id?: string;
|
|
4
|
+
language?: string;
|
|
5
|
+
tier?: string;
|
|
6
|
+
}, context?: {
|
|
7
|
+
authToken?: string;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
content: {
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}[];
|
|
13
|
+
isError?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
isError: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=run-root-cause-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-root-cause-analysis.d.ts","sourceRoot":"","sources":["../../src/tools/run-root-cause-analysis.ts"],"names":[],"mappings":"AAIA,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAiClC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleRunRootCauseAnalysis = handleRunRootCauseAnalysis;
|
|
4
|
+
const api_client_1 = require("../api-client");
|
|
5
|
+
const formatters_1 = require("../formatters");
|
|
6
|
+
async function handleRunRootCauseAnalysis(args, context) {
|
|
7
|
+
try {
|
|
8
|
+
if (!args.incident_id && !args.service_id) {
|
|
9
|
+
return { content: [{ type: "text", text: "Please provide either incident_id or service_id." }] };
|
|
10
|
+
}
|
|
11
|
+
// Check if RCA already exists for this incident
|
|
12
|
+
if (args.incident_id) {
|
|
13
|
+
try {
|
|
14
|
+
const existing = await api_client_1.apiClient.get(`/rca/incident/${args.incident_id}`, undefined, undefined, context?.authToken);
|
|
15
|
+
if (existing && (Array.isArray(existing) ? existing.length > 0 : existing.id)) {
|
|
16
|
+
const rca = Array.isArray(existing) ? existing[0] : existing;
|
|
17
|
+
return { content: [{ type: "text", text: "[CACHED] Existing RCA found:\n\n" + (0, formatters_1.formatRca)(rca) }] };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// No existing RCA, proceed to generate
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const body = {
|
|
25
|
+
language: args.language || "es",
|
|
26
|
+
tier: args.tier || "standard",
|
|
27
|
+
};
|
|
28
|
+
if (args.incident_id)
|
|
29
|
+
body.incidentId = args.incident_id;
|
|
30
|
+
if (args.service_id)
|
|
31
|
+
body.serviceId = args.service_id;
|
|
32
|
+
const rca = await api_client_1.apiClient.post("/rca/analyze", body, 300000, context?.authToken);
|
|
33
|
+
return { content: [{ type: "text", text: "[NEW] RCA generated:\n\n" + (0, formatters_1.formatRca)(rca) }] };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const message = err instanceof api_client_1.ApiError ? err.message : err.message;
|
|
37
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=run-root-cause-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-root-cause-analysis.js","sourceRoot":"","sources":["../../src/tools/run-root-cause-analysis.ts"],"names":[],"mappings":";;AAIA,gEAsCC;AA1CD,8CAAoD;AACpD,8CAA0C;AAGnC,KAAK,UAAU,0BAA0B,CAAC,IAKhD,EAAE,OAAgC;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kDAAkD,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpH,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kCAAkC,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7G,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAQ;YAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU;SAC9B,CAAC;QACF,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEtD,MAAM,GAAG,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAEnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
|