@us-all/datadog-mcp 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 +275 -0
- package/dist/client.d.ts +21 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +37 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/account.d.ts +48 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/account.js +64 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/apm.d.ts +36 -0
- package/dist/tools/apm.d.ts.map +1 -0
- package/dist/tools/apm.js +40 -0
- package/dist/tools/apm.js.map +1 -0
- package/dist/tools/dashboards.d.ts +82 -0
- package/dist/tools/dashboards.d.ts.map +1 -0
- package/dist/tools/dashboards.js +124 -0
- package/dist/tools/dashboards.js.map +1 -0
- package/dist/tools/downtimes.d.ts +51 -0
- package/dist/tools/downtimes.d.ts.map +1 -0
- package/dist/tools/downtimes.js +96 -0
- package/dist/tools/downtimes.js.map +1 -0
- package/dist/tools/events.d.ts +52 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +70 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/hosts.d.ts +38 -0
- package/dist/tools/hosts.d.ts.map +1 -0
- package/dist/tools/hosts.js +55 -0
- package/dist/tools/hosts.js.map +1 -0
- package/dist/tools/incidents.d.ts +23 -0
- package/dist/tools/incidents.d.ts.map +1 -0
- package/dist/tools/incidents.js +29 -0
- package/dist/tools/incidents.js.map +1 -0
- package/dist/tools/logs.d.ts +67 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js +98 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/metrics.d.ts +61 -0
- package/dist/tools/metrics.d.ts.map +1 -0
- package/dist/tools/metrics.js +94 -0
- package/dist/tools/metrics.js.map +1 -0
- package/dist/tools/monitors.d.ts +92 -0
- package/dist/tools/monitors.d.ts.map +1 -0
- package/dist/tools/monitors.js +157 -0
- package/dist/tools/monitors.js.map +1 -0
- package/dist/tools/notebooks.d.ts +41 -0
- package/dist/tools/notebooks.d.ts.map +1 -0
- package/dist/tools/notebooks.js +60 -0
- package/dist/tools/notebooks.js.map +1 -0
- package/dist/tools/oncall.d.ts +18 -0
- package/dist/tools/oncall.d.ts.map +1 -0
- package/dist/tools/oncall.js +31 -0
- package/dist/tools/oncall.js.map +1 -0
- package/dist/tools/rum.d.ts +50 -0
- package/dist/tools/rum.d.ts.map +1 -0
- package/dist/tools/rum.js +65 -0
- package/dist/tools/rum.js.map +1 -0
- package/dist/tools/security.d.ts +25 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +37 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/tools/slos.d.ts +59 -0
- package/dist/tools/slos.d.ts.map +1 -0
- package/dist/tools/slos.js +82 -0
- package/dist/tools/slos.js.map +1 -0
- package/dist/tools/synthetics.d.ts +115 -0
- package/dist/tools/synthetics.d.ts.map +1 -0
- package/dist/tools/synthetics.js +185 -0
- package/dist/tools/synthetics.js.map +1 -0
- package/dist/tools/utils.d.ts +18 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +97 -0
- package/dist/tools/utils.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export declare const listHostsSchema: z.ZodObject<{
|
|
3
|
+
filter: z.ZodOptional<z.ZodString>;
|
|
4
|
+
sortField: z.ZodOptional<z.ZodString>;
|
|
5
|
+
sortDir: z.ZodOptional<z.ZodString>;
|
|
6
|
+
count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
start: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
from: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
includeMutedHostsData: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
includeHostsMetadata: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
export declare function listHosts(params: z.infer<typeof listHostsSchema>): Promise<{
|
|
13
|
+
totalMatching: number | undefined;
|
|
14
|
+
totalReturned: number | undefined;
|
|
15
|
+
hosts: {
|
|
16
|
+
id: number | undefined;
|
|
17
|
+
name: string | undefined;
|
|
18
|
+
aliases: string[] | undefined;
|
|
19
|
+
apps: string[] | undefined;
|
|
20
|
+
isMuted: boolean | undefined;
|
|
21
|
+
lastReportedTime: number | undefined;
|
|
22
|
+
up: boolean | undefined;
|
|
23
|
+
meta: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").HostMeta | undefined;
|
|
24
|
+
metrics: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").HostMetrics | undefined;
|
|
25
|
+
sources: string[] | undefined;
|
|
26
|
+
tagsBySource: {
|
|
27
|
+
[key: string]: string[];
|
|
28
|
+
} | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
}>;
|
|
31
|
+
export declare const getHostTotalsSchema: z.ZodObject<{
|
|
32
|
+
from: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export declare function getHostTotals(params: z.infer<typeof getHostTotalsSchema>): Promise<{
|
|
35
|
+
totalActive: number | undefined;
|
|
36
|
+
totalUp: number | undefined;
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=hosts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/tools/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,eAAO,MAAM,eAAe;;;;;;;;;iBAS1B,CAAC;AAEH,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;;;;;;;;;;;;;;;GA8BtE;AAED,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAEH,wBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;GAS9E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { hostsApi } from "../client.js";
|
|
3
|
+
export const listHostsSchema = z.object({
|
|
4
|
+
filter: z.string().optional().describe("Filter string for search results. Example: web-server or env:prod"),
|
|
5
|
+
sortField: z.string().optional().describe("Field to sort by. Example: apps, cpu, iowait, load"),
|
|
6
|
+
sortDir: z.string().optional().describe("Sort direction: asc or desc"),
|
|
7
|
+
count: z.number().optional().default(100).describe("Number of hosts to return (max 1000)"),
|
|
8
|
+
start: z.number().optional().default(0).describe("Pagination offset"),
|
|
9
|
+
from: z.number().optional().describe("Unix epoch seconds — hosts active since this time. Example: 1740000000"),
|
|
10
|
+
includeMutedHostsData: z.boolean().optional().describe("Include mute status info"),
|
|
11
|
+
includeHostsMetadata: z.boolean().optional().describe("Include agent_version, machine, platform, processor"),
|
|
12
|
+
});
|
|
13
|
+
export async function listHosts(params) {
|
|
14
|
+
const response = await hostsApi.listHosts({
|
|
15
|
+
filter: params.filter,
|
|
16
|
+
sortField: params.sortField,
|
|
17
|
+
sortDir: params.sortDir,
|
|
18
|
+
count: params.count,
|
|
19
|
+
start: params.start,
|
|
20
|
+
from: params.from,
|
|
21
|
+
includeMutedHostsData: params.includeMutedHostsData,
|
|
22
|
+
includeHostsMetadata: params.includeHostsMetadata,
|
|
23
|
+
});
|
|
24
|
+
const hosts = response.hostList ?? [];
|
|
25
|
+
return {
|
|
26
|
+
totalMatching: response.totalMatching,
|
|
27
|
+
totalReturned: response.totalReturned,
|
|
28
|
+
hosts: hosts.map((h) => ({
|
|
29
|
+
id: h.id,
|
|
30
|
+
name: h.name,
|
|
31
|
+
aliases: h.aliases,
|
|
32
|
+
apps: h.apps,
|
|
33
|
+
isMuted: h.isMuted,
|
|
34
|
+
lastReportedTime: h.lastReportedTime,
|
|
35
|
+
up: h.up,
|
|
36
|
+
meta: h.meta,
|
|
37
|
+
metrics: h.metrics,
|
|
38
|
+
sources: h.sources,
|
|
39
|
+
tagsBySource: h.tagsBySource,
|
|
40
|
+
})),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export const getHostTotalsSchema = z.object({
|
|
44
|
+
from: z.number().optional().describe("Unix epoch seconds — get totals from this time. Example: 1740000000"),
|
|
45
|
+
});
|
|
46
|
+
export async function getHostTotals(params) {
|
|
47
|
+
const response = await hostsApi.getHostTotals({
|
|
48
|
+
from: params.from,
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
totalActive: response.totalActive,
|
|
52
|
+
totalUp: response.totalUp,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=hosts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/tools/hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export declare const getIncidentsSchema: z.ZodObject<{
|
|
3
|
+
pageSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
4
|
+
pageOffset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare function getIncidents(params: z.infer<typeof getIncidentsSchema>): Promise<{
|
|
7
|
+
count: number;
|
|
8
|
+
incidents: {
|
|
9
|
+
id: string;
|
|
10
|
+
title: string | undefined;
|
|
11
|
+
status: string | undefined;
|
|
12
|
+
severity: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v2/index.js").IncidentSeverity | undefined;
|
|
13
|
+
created: string | undefined;
|
|
14
|
+
modified: string | undefined;
|
|
15
|
+
resolved: string | undefined;
|
|
16
|
+
customerImpactScope: string | undefined;
|
|
17
|
+
customerImpacted: boolean | undefined;
|
|
18
|
+
fields: {
|
|
19
|
+
[key: string]: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v2/index.js").IncidentFieldAttributes;
|
|
20
|
+
} | undefined;
|
|
21
|
+
}[];
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=incidents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.d.ts","sourceRoot":"","sources":["../../src/tools/incidents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,wBAAsB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;GAsB5E"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { incidentsApi } from "../client.js";
|
|
3
|
+
export const getIncidentsSchema = z.object({
|
|
4
|
+
pageSize: z.number().optional().default(25).describe("Number of results per page (default 25, max 100)"),
|
|
5
|
+
pageOffset: z.number().optional().default(0).describe("Pagination offset"),
|
|
6
|
+
});
|
|
7
|
+
export async function getIncidents(params) {
|
|
8
|
+
const response = await incidentsApi.listIncidents({
|
|
9
|
+
pageSize: params.pageSize,
|
|
10
|
+
pageOffset: params.pageOffset,
|
|
11
|
+
});
|
|
12
|
+
const incidents = response.data ?? [];
|
|
13
|
+
return {
|
|
14
|
+
count: incidents.length,
|
|
15
|
+
incidents: incidents.map((inc) => ({
|
|
16
|
+
id: inc.id,
|
|
17
|
+
title: inc.attributes?.title,
|
|
18
|
+
status: inc.attributes?.state,
|
|
19
|
+
severity: inc.attributes?.severity,
|
|
20
|
+
created: inc.attributes?.created?.toISOString(),
|
|
21
|
+
modified: inc.attributes?.modified?.toISOString(),
|
|
22
|
+
resolved: inc.attributes?.resolved?.toISOString(),
|
|
23
|
+
customerImpactScope: inc.attributes?.customerImpactScope,
|
|
24
|
+
customerImpacted: inc.attributes?.customerImpacted,
|
|
25
|
+
fields: inc.attributes?.fields,
|
|
26
|
+
})),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=incidents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.js","sourceRoot":"","sources":["../../src/tools/incidents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACxG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC3E,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA0C;IAC3E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK;YAC5B,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK;YAC7B,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ;YAClC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;YAC/C,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;YACjD,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;YACjD,mBAAmB,EAAE,GAAG,CAAC,UAAU,EAAE,mBAAmB;YACxD,gBAAgB,EAAE,GAAG,CAAC,UAAU,EAAE,gBAAgB;YAClD,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM;SAC/B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { v2 } from "@datadog/datadog-api-client";
|
|
3
|
+
export declare const searchLogsSchema: z.ZodObject<{
|
|
4
|
+
query: z.ZodString;
|
|
5
|
+
from: z.ZodString;
|
|
6
|
+
to: z.ZodString;
|
|
7
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
sort: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
9
|
+
timestamp: "timestamp";
|
|
10
|
+
"-timestamp": "-timestamp";
|
|
11
|
+
}>>>;
|
|
12
|
+
indexes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export declare function searchLogs(params: z.infer<typeof searchLogsSchema>): Promise<{
|
|
15
|
+
count: number;
|
|
16
|
+
logs: {
|
|
17
|
+
id: string | undefined;
|
|
18
|
+
timestamp: string | undefined;
|
|
19
|
+
status: string | undefined;
|
|
20
|
+
service: string | undefined;
|
|
21
|
+
message: string | undefined;
|
|
22
|
+
host: string | undefined;
|
|
23
|
+
tags: string[] | undefined;
|
|
24
|
+
attributes: {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
} | undefined;
|
|
27
|
+
}[];
|
|
28
|
+
}>;
|
|
29
|
+
export declare const aggregateLogsSchema: z.ZodObject<{
|
|
30
|
+
query: z.ZodString;
|
|
31
|
+
from: z.ZodString;
|
|
32
|
+
to: z.ZodString;
|
|
33
|
+
aggregation: z.ZodEnum<{
|
|
34
|
+
count: "count";
|
|
35
|
+
cardinality: "cardinality";
|
|
36
|
+
avg: "avg";
|
|
37
|
+
sum: "sum";
|
|
38
|
+
min: "min";
|
|
39
|
+
max: "max";
|
|
40
|
+
pc75: "pc75";
|
|
41
|
+
pc90: "pc90";
|
|
42
|
+
pc95: "pc95";
|
|
43
|
+
pc98: "pc98";
|
|
44
|
+
pc99: "pc99";
|
|
45
|
+
}>;
|
|
46
|
+
metric: z.ZodOptional<z.ZodString>;
|
|
47
|
+
groupBy: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export declare function aggregateLogs(params: z.infer<typeof aggregateLogsSchema>): Promise<{
|
|
50
|
+
buckets: v2.LogsAggregateBucket[];
|
|
51
|
+
meta: v2.LogsResponseMetadata | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export declare const sendLogsSchema: z.ZodObject<{
|
|
54
|
+
logs: z.ZodArray<z.ZodObject<{
|
|
55
|
+
message: z.ZodString;
|
|
56
|
+
service: z.ZodOptional<z.ZodString>;
|
|
57
|
+
hostname: z.ZodOptional<z.ZodString>;
|
|
58
|
+
ddsource: z.ZodOptional<z.ZodString>;
|
|
59
|
+
ddtags: z.ZodOptional<z.ZodString>;
|
|
60
|
+
status: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
export declare function sendLogs(params: z.infer<typeof sendLogsSchema>): Promise<{
|
|
64
|
+
success: boolean;
|
|
65
|
+
count: number;
|
|
66
|
+
}>;
|
|
67
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAIjD,eAAO,MAAM,gBAAgB;;;;;;;;;;iBAO3B,CAAC;AAEH,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;;;;;;;;;;;;GAwBxE;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;iBAO9B,CAAC;AAEH,wBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;GA+B9E;AAED,eAAO,MAAM,cAAc;;;;;;;;;iBASzB,CAAC;AAEH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC;;;GAiBpE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { v2 } from "@datadog/datadog-api-client";
|
|
3
|
+
import { logsApi, logsV1Api } from "../client.js";
|
|
4
|
+
import { assertWriteAllowed } from "./utils.js";
|
|
5
|
+
export const searchLogsSchema = z.object({
|
|
6
|
+
query: z.string().describe("Datadog log query. Example: service:us-app-prod status:error @http.status_code:[500 TO 599]"),
|
|
7
|
+
from: z.string().describe("Start time (ISO 8601). Example: 2026-02-26T00:00:00Z"),
|
|
8
|
+
to: z.string().describe("End time (ISO 8601). Example: 2026-02-26T23:59:59Z"),
|
|
9
|
+
limit: z.number().optional().default(50).describe("Max results (default 50, max 1000)"),
|
|
10
|
+
sort: z.enum(["timestamp", "-timestamp"]).optional().default("-timestamp").describe("Sort order: -timestamp (newest first) or timestamp (oldest first)"),
|
|
11
|
+
indexes: z.array(z.string()).optional().describe("Log indexes to search. Example: [\"main\"]"),
|
|
12
|
+
});
|
|
13
|
+
export async function searchLogs(params) {
|
|
14
|
+
const response = await logsApi.listLogsGet({
|
|
15
|
+
filterQuery: params.query,
|
|
16
|
+
filterFrom: new Date(params.from),
|
|
17
|
+
filterTo: new Date(params.to),
|
|
18
|
+
filterIndexes: params.indexes,
|
|
19
|
+
pageLimit: params.limit,
|
|
20
|
+
sort: params.sort === "timestamp" ? "timestamp" : "-timestamp",
|
|
21
|
+
});
|
|
22
|
+
const logs = response.data ?? [];
|
|
23
|
+
return {
|
|
24
|
+
count: logs.length,
|
|
25
|
+
logs: logs.map((log) => ({
|
|
26
|
+
id: log.id,
|
|
27
|
+
timestamp: log.attributes?.timestamp?.toISOString(),
|
|
28
|
+
status: log.attributes?.status,
|
|
29
|
+
service: log.attributes?.service,
|
|
30
|
+
message: log.attributes?.message,
|
|
31
|
+
host: log.attributes?.host,
|
|
32
|
+
tags: log.attributes?.tags,
|
|
33
|
+
attributes: log.attributes?.attributes,
|
|
34
|
+
})),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export const aggregateLogsSchema = z.object({
|
|
38
|
+
query: z.string().describe("Log filter query. Example: service:api-server status:error"),
|
|
39
|
+
from: z.string().describe("Start time (ISO 8601). Example: 2026-02-26T00:00:00Z"),
|
|
40
|
+
to: z.string().describe("End time (ISO 8601). Example: 2026-02-26T23:59:59Z"),
|
|
41
|
+
aggregation: z.enum(["count", "cardinality", "avg", "sum", "min", "max", "pc75", "pc90", "pc95", "pc98", "pc99"]).describe("Aggregation function. Example: count"),
|
|
42
|
+
metric: z.string().optional().describe("Metric field for non-count aggregations. Example: @duration or @http.response_time"),
|
|
43
|
+
groupBy: z.string().optional().describe("Field to group by. Example: service or status or @http.status_code"),
|
|
44
|
+
});
|
|
45
|
+
export async function aggregateLogs(params) {
|
|
46
|
+
const compute = new v2.LogsCompute();
|
|
47
|
+
compute.aggregation = params.aggregation;
|
|
48
|
+
compute.type = "total";
|
|
49
|
+
if (params.metric) {
|
|
50
|
+
compute.metric = params.metric;
|
|
51
|
+
}
|
|
52
|
+
const filter = new v2.LogsQueryFilter();
|
|
53
|
+
filter.query = params.query;
|
|
54
|
+
filter.from = params.from;
|
|
55
|
+
filter.to = params.to;
|
|
56
|
+
const body = new v2.LogsAggregateRequest();
|
|
57
|
+
body.compute = [compute];
|
|
58
|
+
body.filter = filter;
|
|
59
|
+
if (params.groupBy) {
|
|
60
|
+
const groupBy = new v2.LogsGroupBy();
|
|
61
|
+
groupBy.facet = params.groupBy;
|
|
62
|
+
groupBy.limit = 10;
|
|
63
|
+
body.groupBy = [groupBy];
|
|
64
|
+
}
|
|
65
|
+
const response = await logsApi.aggregateLogs({ body });
|
|
66
|
+
return {
|
|
67
|
+
buckets: response.data?.buckets ?? [],
|
|
68
|
+
meta: response.meta,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export const sendLogsSchema = z.object({
|
|
72
|
+
logs: z.array(z.object({
|
|
73
|
+
message: z.string().describe("Log message content"),
|
|
74
|
+
service: z.string().optional().describe("Service name. Example: my-api"),
|
|
75
|
+
hostname: z.string().optional().describe("Originating host. Example: ip-10-0-1-42"),
|
|
76
|
+
ddsource: z.string().optional().describe("Source integration name. Example: nodejs"),
|
|
77
|
+
ddtags: z.string().optional().describe("Tags (comma-separated). Example: env:prod,version:1.2.3"),
|
|
78
|
+
status: z.string().optional().describe("Log status. Example: info, warn, error"),
|
|
79
|
+
})).describe("Array of log entries to send"),
|
|
80
|
+
});
|
|
81
|
+
export async function sendLogs(params) {
|
|
82
|
+
assertWriteAllowed();
|
|
83
|
+
const response = await logsV1Api.submitLog({
|
|
84
|
+
body: params.logs.map((log) => ({
|
|
85
|
+
message: log.message,
|
|
86
|
+
service: log.service,
|
|
87
|
+
hostname: log.hostname,
|
|
88
|
+
ddsource: log.ddsource,
|
|
89
|
+
ddtags: log.ddtags,
|
|
90
|
+
...(log.status ? { status: log.status } : {}),
|
|
91
|
+
})),
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
count: params.logs.length,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/tools/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export declare const queryMetricsSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
from: z.ZodNumber;
|
|
5
|
+
to: z.ZodNumber;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export declare function queryMetrics(params: z.infer<typeof queryMetricsSchema>): Promise<{
|
|
8
|
+
query: string | undefined;
|
|
9
|
+
from: string | undefined;
|
|
10
|
+
to: string | undefined;
|
|
11
|
+
seriesCount: number;
|
|
12
|
+
series: {
|
|
13
|
+
metric: string | undefined;
|
|
14
|
+
displayName: string | undefined;
|
|
15
|
+
unit: [import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MetricsQueryUnit, import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MetricsQueryUnit] | undefined;
|
|
16
|
+
scope: string | undefined;
|
|
17
|
+
expression: string | undefined;
|
|
18
|
+
pointCount: number;
|
|
19
|
+
points: {
|
|
20
|
+
timestamp: string;
|
|
21
|
+
value: number;
|
|
22
|
+
}[] | undefined;
|
|
23
|
+
}[];
|
|
24
|
+
}>;
|
|
25
|
+
export declare const getMetricsSchema: z.ZodObject<{
|
|
26
|
+
q: z.ZodString;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
export declare function getMetrics(params: z.infer<typeof getMetricsSchema>): Promise<{
|
|
29
|
+
metrics: string[];
|
|
30
|
+
}>;
|
|
31
|
+
export declare const getMetricMetadataSchema: z.ZodObject<{
|
|
32
|
+
metricName: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export declare function getMetricMetadata(params: z.infer<typeof getMetricMetadataSchema>): Promise<{
|
|
35
|
+
name: string;
|
|
36
|
+
description: string | undefined;
|
|
37
|
+
type: string | undefined;
|
|
38
|
+
unit: string | undefined;
|
|
39
|
+
perUnit: string | undefined;
|
|
40
|
+
shortName: string | undefined;
|
|
41
|
+
integration: string | undefined;
|
|
42
|
+
statsdInterval: number | undefined;
|
|
43
|
+
}>;
|
|
44
|
+
export declare const listActiveMetricsSchema: z.ZodObject<{
|
|
45
|
+
from: z.ZodNumber;
|
|
46
|
+
host: z.ZodOptional<z.ZodString>;
|
|
47
|
+
tagFilter: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export declare function listActiveMetrics(params: z.infer<typeof listActiveMetricsSchema>): Promise<{
|
|
50
|
+
metrics: string[];
|
|
51
|
+
from: string | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export declare const listMetricTagsSchema: z.ZodObject<{
|
|
54
|
+
metricName: z.ZodString;
|
|
55
|
+
windowSeconds: z.ZodOptional<z.ZodNumber>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export declare function listMetricTags(params: z.infer<typeof listMetricTagsSchema>): Promise<{
|
|
58
|
+
metric: string;
|
|
59
|
+
tags: string[];
|
|
60
|
+
}>;
|
|
61
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/tools/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAC;AAEH,wBAAsB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;;GA4B5E;AAED,eAAO,MAAM,gBAAgB;;iBAE3B,CAAC;AAEH,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;GAQxE;AAED,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC;;;;;;;;;GAetF;AAED,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC;;;GAWtF;AAED,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,wBAAsB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;;;GAUhF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { metricsApi, metricsV2Api } from "../client.js";
|
|
3
|
+
export const queryMetricsSchema = z.object({
|
|
4
|
+
query: z.string().describe("Datadog metric query string. Example: avg:system.cpu.user{host:myhost} by {env}"),
|
|
5
|
+
from: z.number().describe("Start time as Unix epoch seconds. Example: 1740000000"),
|
|
6
|
+
to: z.number().describe("End time as Unix epoch seconds. Example: 1740003600"),
|
|
7
|
+
});
|
|
8
|
+
export async function queryMetrics(params) {
|
|
9
|
+
const response = await metricsApi.queryMetrics({
|
|
10
|
+
from: params.from,
|
|
11
|
+
to: params.to,
|
|
12
|
+
query: params.query,
|
|
13
|
+
});
|
|
14
|
+
const series = response.series ?? [];
|
|
15
|
+
const results = series.map((s) => ({
|
|
16
|
+
metric: s.metric,
|
|
17
|
+
displayName: s.displayName,
|
|
18
|
+
unit: s.unit,
|
|
19
|
+
scope: s.scope,
|
|
20
|
+
expression: s.expression,
|
|
21
|
+
pointCount: s.pointlist?.length ?? 0,
|
|
22
|
+
points: s.pointlist?.map(([ts, val]) => ({
|
|
23
|
+
timestamp: new Date((ts ?? 0) * 1000).toISOString(),
|
|
24
|
+
value: val,
|
|
25
|
+
})),
|
|
26
|
+
}));
|
|
27
|
+
return {
|
|
28
|
+
query: response.query,
|
|
29
|
+
from: response.fromDate ? new Date(response.fromDate).toISOString() : undefined,
|
|
30
|
+
to: response.toDate ? new Date(response.toDate).toISOString() : undefined,
|
|
31
|
+
seriesCount: series.length,
|
|
32
|
+
series: results,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export const getMetricsSchema = z.object({
|
|
36
|
+
q: z.string().describe("Search query to filter metrics by name. Example: system.cpu"),
|
|
37
|
+
});
|
|
38
|
+
export async function getMetrics(params) {
|
|
39
|
+
const response = await metricsApi.listMetrics({
|
|
40
|
+
q: params.q,
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
metrics: response.results?.metrics ?? [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export const getMetricMetadataSchema = z.object({
|
|
47
|
+
metricName: z.string().describe("Full metric name. Example: system.cpu.user"),
|
|
48
|
+
});
|
|
49
|
+
export async function getMetricMetadata(params) {
|
|
50
|
+
const response = await metricsApi.getMetricMetadata({
|
|
51
|
+
metricName: params.metricName,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
name: params.metricName,
|
|
55
|
+
description: response.description,
|
|
56
|
+
type: response.type,
|
|
57
|
+
unit: response.unit,
|
|
58
|
+
perUnit: response.perUnit,
|
|
59
|
+
shortName: response.shortName,
|
|
60
|
+
integration: response.integration,
|
|
61
|
+
statsdInterval: response.statsdInterval,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export const listActiveMetricsSchema = z.object({
|
|
65
|
+
from: z.number().describe("Unix epoch seconds — metrics active since this time. Example: 1740000000"),
|
|
66
|
+
host: z.string().optional().describe("Filter by hostname. Example: i-0123456789abcdef0"),
|
|
67
|
+
tagFilter: z.string().optional().describe("Filter by tag. Example: env:prod"),
|
|
68
|
+
});
|
|
69
|
+
export async function listActiveMetrics(params) {
|
|
70
|
+
const response = await metricsApi.listActiveMetrics({
|
|
71
|
+
from: params.from,
|
|
72
|
+
host: params.host,
|
|
73
|
+
tagFilter: params.tagFilter,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
metrics: response.metrics ?? [],
|
|
77
|
+
from: response.from,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export const listMetricTagsSchema = z.object({
|
|
81
|
+
metricName: z.string().describe("Full metric name. Example: system.cpu.user"),
|
|
82
|
+
windowSeconds: z.number().optional().describe("Look-back window in seconds (default: 14400 = 4h, min: 14400). Example: 86400"),
|
|
83
|
+
});
|
|
84
|
+
export async function listMetricTags(params) {
|
|
85
|
+
const response = await metricsV2Api.listTagsByMetricName({
|
|
86
|
+
metricName: params.metricName,
|
|
87
|
+
windowSeconds: params.windowSeconds,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
metric: params.metricName,
|
|
91
|
+
tags: response.data?.attributes?.tags ?? [],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/tools/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export declare const getMonitorsSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodOptional<z.ZodString>;
|
|
4
|
+
tags: z.ZodOptional<z.ZodString>;
|
|
5
|
+
monitorTags: z.ZodOptional<z.ZodString>;
|
|
6
|
+
groupStates: z.ZodOptional<z.ZodString>;
|
|
7
|
+
pageSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export declare function getMonitors(params: z.infer<typeof getMonitorsSchema>): Promise<{
|
|
11
|
+
id: number | undefined;
|
|
12
|
+
name: string | undefined;
|
|
13
|
+
type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorType;
|
|
14
|
+
query: string;
|
|
15
|
+
message: string | undefined;
|
|
16
|
+
overallState: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOverallStates | undefined;
|
|
17
|
+
tags: string[] | undefined;
|
|
18
|
+
created: string | undefined;
|
|
19
|
+
modified: string | undefined;
|
|
20
|
+
creator: string | undefined;
|
|
21
|
+
}[]>;
|
|
22
|
+
export declare const getMonitorSchema: z.ZodObject<{
|
|
23
|
+
monitorId: z.ZodNumber;
|
|
24
|
+
groupStates: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export declare function getMonitor(params: z.infer<typeof getMonitorSchema>): Promise<{
|
|
27
|
+
id: number | undefined;
|
|
28
|
+
name: string | undefined;
|
|
29
|
+
type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorType;
|
|
30
|
+
query: string;
|
|
31
|
+
message: string | undefined;
|
|
32
|
+
overallState: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOverallStates | undefined;
|
|
33
|
+
tags: string[] | undefined;
|
|
34
|
+
options: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOptions | undefined;
|
|
35
|
+
created: string | undefined;
|
|
36
|
+
modified: string | undefined;
|
|
37
|
+
creator: string | undefined;
|
|
38
|
+
state: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorState | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const createMonitorSchema: z.ZodObject<{
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
type: z.ZodString;
|
|
43
|
+
query: z.ZodString;
|
|
44
|
+
message: z.ZodOptional<z.ZodString>;
|
|
45
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
46
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export declare function createMonitor(params: z.infer<typeof createMonitorSchema>): Promise<{
|
|
50
|
+
id: number | undefined;
|
|
51
|
+
name: string | undefined;
|
|
52
|
+
type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorType;
|
|
53
|
+
query: string;
|
|
54
|
+
overallState: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOverallStates | undefined;
|
|
55
|
+
created: string | undefined;
|
|
56
|
+
}>;
|
|
57
|
+
export declare const updateMonitorSchema: z.ZodObject<{
|
|
58
|
+
monitorId: z.ZodNumber;
|
|
59
|
+
name: z.ZodOptional<z.ZodString>;
|
|
60
|
+
query: z.ZodOptional<z.ZodString>;
|
|
61
|
+
message: z.ZodOptional<z.ZodString>;
|
|
62
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
63
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export declare function updateMonitor(params: z.infer<typeof updateMonitorSchema>): Promise<{
|
|
67
|
+
id: number | undefined;
|
|
68
|
+
name: string | undefined;
|
|
69
|
+
type: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorType;
|
|
70
|
+
query: string;
|
|
71
|
+
overallState: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOverallStates | undefined;
|
|
72
|
+
modified: string | undefined;
|
|
73
|
+
}>;
|
|
74
|
+
export declare const deleteMonitorSchema: z.ZodObject<{
|
|
75
|
+
monitorId: z.ZodNumber;
|
|
76
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export declare function deleteMonitor(params: z.infer<typeof deleteMonitorSchema>): Promise<{
|
|
79
|
+
deletedMonitorId: number | undefined;
|
|
80
|
+
}>;
|
|
81
|
+
export declare const muteMonitorSchema: z.ZodObject<{
|
|
82
|
+
monitorId: z.ZodNumber;
|
|
83
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
84
|
+
end: z.ZodOptional<z.ZodNumber>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
export declare function muteMonitor(params: z.infer<typeof muteMonitorSchema>): Promise<{
|
|
87
|
+
id: number | undefined;
|
|
88
|
+
name: string | undefined;
|
|
89
|
+
overallState: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOverallStates | undefined;
|
|
90
|
+
options: import("@datadog/datadog-api-client/dist/packages/datadog-api-client-v1/index.js").MonitorOptions | undefined;
|
|
91
|
+
}>;
|
|
92
|
+
//# sourceMappingURL=monitors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitors.d.ts","sourceRoot":"","sources":["../../src/tools/monitors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,eAAO,MAAM,iBAAiB;;;;;;;iBAO5B,CAAC;AAEH,wBAAsB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC;;;;;;;;;;;KAsB1E;AAED,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAC;AAEH,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;;;;;;;;;;;GAoBxE;AAED,eAAO,MAAM,mBAAmB;;;;;;;;iBAQ9B,CAAC;AAEH,wBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;;;;;GAsB9E;AAED,eAAO,MAAM,mBAAmB;;;;;;;;iBAQ9B,CAAC;AAEH,wBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;;;;;GAuB9E;AAED,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAEH,wBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;GAU9E;AAED,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH,wBAAsB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC;;;;;GAiB1E"}
|