@sweny-ai/providers 1.1.5 → 1.3.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 (54) hide show
  1. package/dist/catalog.d.ts.map +1 -1
  2. package/dist/catalog.js +249 -0
  3. package/dist/catalog.js.map +1 -1
  4. package/dist/factories.d.ts +3 -1
  5. package/dist/factories.d.ts.map +1 -1
  6. package/dist/factories.js +35 -2
  7. package/dist/factories.js.map +1 -1
  8. package/dist/incident/opsgenie.d.ts +1 -1
  9. package/dist/observability/axiom.d.ts +12 -0
  10. package/dist/observability/axiom.d.ts.map +1 -0
  11. package/dist/observability/axiom.js +179 -0
  12. package/dist/observability/axiom.js.map +1 -0
  13. package/dist/observability/betterstack.d.ts +15 -0
  14. package/dist/observability/betterstack.d.ts.map +1 -0
  15. package/dist/observability/betterstack.js +168 -0
  16. package/dist/observability/betterstack.js.map +1 -0
  17. package/dist/observability/fly.d.ts +15 -0
  18. package/dist/observability/fly.d.ts.map +1 -0
  19. package/dist/observability/fly.js +192 -0
  20. package/dist/observability/fly.js.map +1 -0
  21. package/dist/observability/heroku.d.ts +11 -0
  22. package/dist/observability/heroku.d.ts.map +1 -0
  23. package/dist/observability/heroku.js +171 -0
  24. package/dist/observability/heroku.js.map +1 -0
  25. package/dist/observability/honeycomb.d.ts +11 -0
  26. package/dist/observability/honeycomb.d.ts.map +1 -0
  27. package/dist/observability/honeycomb.js +184 -0
  28. package/dist/observability/honeycomb.js.map +1 -0
  29. package/dist/observability/index.d.ts +10 -0
  30. package/dist/observability/index.d.ts.map +1 -1
  31. package/dist/observability/index.js +10 -0
  32. package/dist/observability/index.js.map +1 -1
  33. package/dist/observability/netlify.d.ts +15 -0
  34. package/dist/observability/netlify.d.ts.map +1 -0
  35. package/dist/observability/netlify.js +159 -0
  36. package/dist/observability/netlify.js.map +1 -0
  37. package/dist/observability/newrelic.d.ts +1 -1
  38. package/dist/observability/opsgenie.d.ts +14 -0
  39. package/dist/observability/opsgenie.d.ts.map +1 -0
  40. package/dist/observability/opsgenie.js +144 -0
  41. package/dist/observability/opsgenie.js.map +1 -0
  42. package/dist/observability/render.d.ts +15 -0
  43. package/dist/observability/render.d.ts.map +1 -0
  44. package/dist/observability/render.js +133 -0
  45. package/dist/observability/render.js.map +1 -0
  46. package/dist/observability/supabase.d.ts +15 -0
  47. package/dist/observability/supabase.d.ts.map +1 -0
  48. package/dist/observability/supabase.js +192 -0
  49. package/dist/observability/supabase.js.map +1 -0
  50. package/dist/observability/vercel.d.ts +16 -0
  51. package/dist/observability/vercel.d.ts.map +1 -0
  52. package/dist/observability/vercel.js +163 -0
  53. package/dist/observability/vercel.js.map +1 -0
  54. package/package.json +1 -1
@@ -0,0 +1,184 @@
1
+ import { z } from "zod";
2
+ import { consoleLogger } from "../logger.js";
3
+ import { ProviderApiError } from "../errors.js";
4
+ export const honeycombConfigSchema = z.object({
5
+ apiKey: z.string().min(1, "Honeycomb API key is required"),
6
+ dataset: z.string().min(1, "Honeycomb dataset name is required"),
7
+ logger: z.custom().optional(),
8
+ });
9
+ export function honeycomb(config) {
10
+ const parsed = honeycombConfigSchema.parse(config);
11
+ return new HoneycombProvider(parsed);
12
+ }
13
+ const BASE_URL = "https://api.honeycomb.io";
14
+ class HoneycombProvider {
15
+ apiKey;
16
+ dataset;
17
+ log;
18
+ constructor(config) {
19
+ this.apiKey = config.apiKey;
20
+ this.dataset = config.dataset;
21
+ this.log = config.logger ?? consoleLogger;
22
+ }
23
+ get headers() {
24
+ return {
25
+ "X-Honeycomb-Team": this.apiKey,
26
+ "Content-Type": "application/json",
27
+ };
28
+ }
29
+ async post(path, body) {
30
+ const response = await fetch(`${BASE_URL}${path}`, {
31
+ method: "POST",
32
+ headers: this.headers,
33
+ body: JSON.stringify(body),
34
+ });
35
+ if (!response.ok) {
36
+ const text = await response.text().catch(() => "");
37
+ throw new ProviderApiError("Honeycomb", response.status, response.statusText, text);
38
+ }
39
+ return (await response.json());
40
+ }
41
+ async get(path) {
42
+ const response = await fetch(`${BASE_URL}${path}`, {
43
+ method: "GET",
44
+ headers: this.headers,
45
+ });
46
+ if (!response.ok) {
47
+ const text = await response.text().catch(() => "");
48
+ throw new ProviderApiError("Honeycomb", response.status, response.statusText, text);
49
+ }
50
+ return (await response.json());
51
+ }
52
+ async verifyAccess() {
53
+ this.log.info("Verifying Honeycomb access");
54
+ await this.get("/1/auth");
55
+ this.log.info("Honeycomb API access verified");
56
+ }
57
+ timeRangeToSeconds(timeRange) {
58
+ const match = /^(\d+)([hdm])$/.exec(timeRange);
59
+ if (!match)
60
+ return 86400;
61
+ const value = parseInt(match[1], 10);
62
+ const unit = match[2];
63
+ if (unit === "m")
64
+ return value * 60;
65
+ if (unit === "h")
66
+ return value * 3600;
67
+ return value * 86400;
68
+ }
69
+ async runQuery(queryBody) {
70
+ const { id } = await this.post(`/1/queries/${this.dataset}`, queryBody);
71
+ // Poll until complete (up to 10 attempts, 1s apart)
72
+ for (let i = 0; i < 10; i++) {
73
+ const result = await this.get(`/1/query_results/${this.dataset}/${id}`);
74
+ if (result.complete) {
75
+ return result.data?.results ?? [];
76
+ }
77
+ await new Promise((r) => setTimeout(r, 1000));
78
+ }
79
+ return [];
80
+ }
81
+ rowToLogEntry(row) {
82
+ const d = row.data;
83
+ const level = String(d.level ?? d.severity ?? d.SeverityText ?? "info").toLowerCase();
84
+ const message = String(d.message ?? d.name ?? d.body ?? "");
85
+ const service = String(d["service.name"] ?? d.service ?? d["app.name"] ?? "unknown");
86
+ const timestamp = String(d.timestamp ?? d.time ?? new Date().toISOString());
87
+ const RESERVED = new Set([
88
+ "timestamp",
89
+ "time",
90
+ "level",
91
+ "severity",
92
+ "SeverityText",
93
+ "message",
94
+ "name",
95
+ "body",
96
+ "service.name",
97
+ "service",
98
+ "app.name",
99
+ ]);
100
+ const attributes = Object.fromEntries(Object.entries(d)
101
+ .filter(([k]) => !RESERVED.has(k))
102
+ .map(([k, v]) => [k, String(v)]));
103
+ return { timestamp, service, level, message, attributes };
104
+ }
105
+ async queryLogs(opts) {
106
+ this.log.info(`Querying Honeycomb dataset: ${this.dataset} (range: ${opts.timeRange})`);
107
+ const queryBody = {
108
+ time_range: this.timeRangeToSeconds(opts.timeRange),
109
+ limit: 200,
110
+ };
111
+ const filters = [];
112
+ if (opts.severity !== "*") {
113
+ filters.push({ column: "level", op: "=", value: opts.severity });
114
+ }
115
+ if (opts.serviceFilter !== "*") {
116
+ filters.push({ column: "service.name", op: "=", value: opts.serviceFilter });
117
+ }
118
+ if (filters.length > 0) {
119
+ queryBody.filters = filters;
120
+ }
121
+ const rows = await this.runQuery(queryBody);
122
+ const entries = rows.map((r) => this.rowToLogEntry(r));
123
+ this.log.info(`Found ${entries.length} log entries`);
124
+ return entries;
125
+ }
126
+ async aggregate(opts) {
127
+ this.log.info(`Aggregating Honeycomb error counts in dataset: ${this.dataset}`);
128
+ const filters = [{ column: "level", op: "=", value: "error" }];
129
+ if (opts.serviceFilter !== "*") {
130
+ filters.push({ column: "service.name", op: "=", value: opts.serviceFilter });
131
+ }
132
+ const queryBody = {
133
+ time_range: this.timeRangeToSeconds(opts.timeRange),
134
+ calculations: [{ op: "COUNT" }],
135
+ breakdowns: ["service.name"],
136
+ filters,
137
+ };
138
+ const rows = await this.runQuery(queryBody);
139
+ const results = rows
140
+ .map((r) => ({
141
+ service: String(r.data["service.name"] ?? "unknown"),
142
+ count: Number(r.data.COUNT ?? r.data.count ?? 0),
143
+ }))
144
+ .filter((r) => r.count > 0);
145
+ this.log.info(`Aggregated ${results.length} service groups`);
146
+ return results;
147
+ }
148
+ getAgentEnv() {
149
+ return {
150
+ HONEYCOMB_API_KEY: this.apiKey,
151
+ HONEYCOMB_DATASET: this.dataset,
152
+ };
153
+ }
154
+ getPromptInstructions() {
155
+ return `### Honeycomb Query API
156
+ - \`HONEYCOMB_API_KEY\` - Honeycomb API key (use as \`X-Honeycomb-Team: $HONEYCOMB_API_KEY\` header)
157
+ - \`HONEYCOMB_DATASET\` - Honeycomb dataset name (\`${this.dataset}\`)
158
+
159
+ **DO NOT make up data** - only use real data from APIs. If no data, report that honestly.
160
+
161
+ You have DIRECT ACCESS to the Honeycomb Query API via curl commands.
162
+
163
+ #### Example: Count errors by service in the last hour
164
+ \`\`\`bash
165
+ query_id=$(curl -s -X POST "https://api.honeycomb.io/1/queries/$HONEYCOMB_DATASET" \\
166
+ -H "X-Honeycomb-Team: $HONEYCOMB_API_KEY" \\
167
+ -H "Content-Type: application/json" \\
168
+ -d '{"time_range":3600,"calculations":[{"op":"COUNT"}],"breakdowns":["service.name"],"filters":[{"column":"level","op":"=","value":"error"}]}' | jq -r '.id')
169
+ curl -s "https://api.honeycomb.io/1/query_results/$HONEYCOMB_DATASET/$query_id" \\
170
+ -H "X-Honeycomb-Team: $HONEYCOMB_API_KEY"
171
+ \`\`\`
172
+
173
+ #### Example: Fetch recent raw events
174
+ \`\`\`bash
175
+ query_id=$(curl -s -X POST "https://api.honeycomb.io/1/queries/$HONEYCOMB_DATASET" \\
176
+ -H "X-Honeycomb-Team: $HONEYCOMB_API_KEY" \\
177
+ -H "Content-Type: application/json" \\
178
+ -d '{"time_range":3600,"limit":100}' | jq -r '.id')
179
+ curl -s "https://api.honeycomb.io/1/query_results/$HONEYCOMB_DATASET/$query_id" \\
180
+ -H "X-Honeycomb-Team: $HONEYCOMB_API_KEY"
181
+ \`\`\``;
182
+ }
183
+ }
184
+ //# sourceMappingURL=honeycomb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"honeycomb.js","sourceRoot":"","sources":["../../src/observability/honeycomb.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,14 @@ export { loki, lokiConfigSchema, type LokiConfig } from "./loki.js";
9
9
  export { file, fileConfigSchema, type FileConfig } from "./file.js";
10
10
  export { prometheus, prometheusConfigSchema, type PrometheusConfig } from "./prometheus.js";
11
11
  export { pagerduty, pagerdutyConfigSchema, type PagerDutyConfig } from "./pagerduty.js";
12
+ export { vercel, vercelConfigSchema, type VercelConfig } from "./vercel.js";
13
+ export { supabase, supabaseConfigSchema, type SupabaseConfig } from "./supabase.js";
14
+ export { netlify, netlifyConfigSchema, type NetlifyConfig } from "./netlify.js";
15
+ export { fly, flyConfigSchema, type FlyConfig } from "./fly.js";
16
+ export { render, renderConfigSchema, type RenderConfig } from "./render.js";
17
+ export { heroku, herokuConfigSchema, type HerokuConfig } from "./heroku.js";
18
+ export { opsgenie, opsgenieConfigSchema, type OpsGenieConfig } from "./opsgenie.js";
19
+ export { honeycomb, honeycombConfigSchema, type HoneycombConfig } from "./honeycomb.js";
20
+ export { axiom, axiomConfigSchema, type AxiomConfig } from "./axiom.js";
21
+ export { betterstack, betterstackConfigSchema, type BetterStackConfig } from "./betterstack.js";
12
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -8,4 +8,14 @@ export { loki, lokiConfigSchema } from "./loki.js";
8
8
  export { file, fileConfigSchema } from "./file.js";
9
9
  export { prometheus, prometheusConfigSchema } from "./prometheus.js";
10
10
  export { pagerduty, pagerdutyConfigSchema } from "./pagerduty.js";
11
+ export { vercel, vercelConfigSchema } from "./vercel.js";
12
+ export { supabase, supabaseConfigSchema } from "./supabase.js";
13
+ export { netlify, netlifyConfigSchema } from "./netlify.js";
14
+ export { fly, flyConfigSchema } from "./fly.js";
15
+ export { render, renderConfigSchema } from "./render.js";
16
+ export { heroku, herokuConfigSchema } from "./heroku.js";
17
+ export { opsgenie, opsgenieConfigSchema } from "./opsgenie.js";
18
+ export { honeycomb, honeycombConfigSchema } from "./honeycomb.js";
19
+ export { axiom, axiomConfigSchema } from "./axiom.js";
20
+ export { betterstack, betterstackConfigSchema } from "./betterstack.js";
11
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,GAAG,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAA0B,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ import type { ProviderConfigSchema } from "../config-schema.js";
5
+ export declare const netlifyConfigSchema: z.ZodObject<{
6
+ token: z.ZodString;
7
+ siteId: z.ZodString;
8
+ logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
9
+ }, z.core.$strip>;
10
+ export type NetlifyConfig = z.infer<typeof netlifyConfigSchema>;
11
+ export declare const netlifyProviderConfigSchema: ProviderConfigSchema;
12
+ export declare function netlify(config: NetlifyConfig): ObservabilityProvider & {
13
+ configSchema: ProviderConfigSchema;
14
+ };
15
+ //# sourceMappingURL=netlify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"netlify.d.ts","sourceRoot":"","sources":["../../src/observability/netlify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AACpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,2BAA2B,EAAE,oBAOzC,CAAC;AAEF,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,GAAG;IAAE,YAAY,EAAE,oBAAoB,CAAA;CAAE,CAI7G"}
@@ -0,0 +1,159 @@
1
+ import { z } from "zod";
2
+ import { consoleLogger } from "../logger.js";
3
+ import { ProviderApiError } from "../errors.js";
4
+ export const netlifyConfigSchema = z.object({
5
+ token: z.string().min(1, "Netlify token is required"),
6
+ siteId: z.string().min(1, "Netlify site ID is required"),
7
+ logger: z.custom().optional(),
8
+ });
9
+ export const netlifyProviderConfigSchema = {
10
+ role: "observability",
11
+ name: "Netlify",
12
+ fields: [
13
+ { key: "token", envVar: "NETLIFY_TOKEN", description: "Netlify personal access token" },
14
+ { key: "siteId", envVar: "NETLIFY_SITE_ID", description: "Netlify site ID" },
15
+ ],
16
+ };
17
+ export function netlify(config) {
18
+ const parsed = netlifyConfigSchema.parse(config);
19
+ const provider = new NetlifyProvider(parsed);
20
+ return Object.assign(provider, { configSchema: netlifyProviderConfigSchema });
21
+ }
22
+ function timeRangeToMs(range) {
23
+ const match = /^(\d+)(h|d|w)$/.exec(range);
24
+ if (!match)
25
+ return Date.now() - 3_600_000;
26
+ const [, n, unit] = match;
27
+ const ms = { h: 3_600_000, d: 86_400_000, w: 604_800_000 }[unit];
28
+ return Date.now() - parseInt(n, 10) * ms;
29
+ }
30
+ function inferLevel(message) {
31
+ const lower = message.toLowerCase();
32
+ if (/\b(fatal|error|exception|panic|failed)\b/.test(lower))
33
+ return "error";
34
+ if (/\b(warn|warning)\b/.test(lower))
35
+ return "warning";
36
+ return "info";
37
+ }
38
+ class NetlifyProvider {
39
+ token;
40
+ siteId;
41
+ log;
42
+ constructor(config) {
43
+ this.token = config.token;
44
+ this.siteId = config.siteId;
45
+ this.log = config.logger ?? consoleLogger;
46
+ }
47
+ async get(path) {
48
+ const url = `https://api.netlify.com${path}`;
49
+ const response = await fetch(url, {
50
+ headers: { Authorization: `Bearer ${this.token}`, Accept: "application/json" },
51
+ });
52
+ if (!response.ok) {
53
+ const body = await response.text().catch(() => "");
54
+ throw new ProviderApiError("Netlify", response.status, response.statusText, body);
55
+ }
56
+ return (await response.json());
57
+ }
58
+ async verifyAccess() {
59
+ this.log.info("Verifying Netlify access");
60
+ await this.get("/api/v1/user");
61
+ this.log.info("Netlify API access verified");
62
+ }
63
+ async listDeploys(sinceMs) {
64
+ const deploys = await this.get(`/api/v1/sites/${encodeURIComponent(this.siteId)}/deploys?page=1&per_page=10`);
65
+ const sinceIso = new Date(sinceMs).toISOString();
66
+ return deploys.filter((d) => d.created_at > sinceIso);
67
+ }
68
+ async getDeployLog(deployId) {
69
+ const result = await this.get(`/api/v1/deploys/${encodeURIComponent(deployId)}/log`);
70
+ return result.log ?? "";
71
+ }
72
+ async queryLogs(opts) {
73
+ this.log.info(`Querying Netlify logs (severity: ${opts.severity}, range: ${opts.timeRange})`);
74
+ const deploys = await this.listDeploys(timeRangeToMs(opts.timeRange));
75
+ const entries = [];
76
+ for (const deploy of deploys) {
77
+ if (opts.serviceFilter !== "*" && !(deploy.context ?? "").includes(opts.serviceFilter)) {
78
+ continue;
79
+ }
80
+ const logText = await this.getDeployLog(deploy.id);
81
+ const lines = logText.split("\n").filter(Boolean);
82
+ for (const line of lines) {
83
+ const level = inferLevel(line);
84
+ if (opts.severity === "error" && level !== "error")
85
+ continue;
86
+ if (opts.severity === "warning" && level !== "warning")
87
+ continue;
88
+ entries.push({
89
+ timestamp: deploy.created_at,
90
+ service: deploy.context ?? "production",
91
+ level,
92
+ message: line.trim(),
93
+ attributes: { deployId: deploy.id, state: deploy.state },
94
+ });
95
+ }
96
+ }
97
+ entries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
98
+ const result = entries.slice(0, 200);
99
+ this.log.info(`Found ${result.length} Netlify log entries`);
100
+ return result;
101
+ }
102
+ async aggregate(opts) {
103
+ this.log.info(`Aggregating Netlify errors (range: ${opts.timeRange})`);
104
+ const deploys = await this.listDeploys(timeRangeToMs(opts.timeRange));
105
+ const counts = new Map();
106
+ for (const deploy of deploys) {
107
+ if (opts.serviceFilter !== "*" && !(deploy.context ?? "").includes(opts.serviceFilter)) {
108
+ continue;
109
+ }
110
+ const logText = await this.getDeployLog(deploy.id);
111
+ const lines = logText.split("\n").filter(Boolean);
112
+ const errorCount = lines.filter((l) => inferLevel(l) === "error").length;
113
+ if (errorCount > 0) {
114
+ const service = deploy.context ?? "production";
115
+ counts.set(service, (counts.get(service) ?? 0) + errorCount);
116
+ }
117
+ }
118
+ const results = Array.from(counts.entries())
119
+ .map(([service, count]) => ({ service, count }))
120
+ .sort((a, b) => b.count - a.count);
121
+ this.log.info(`Aggregated ${results.length} service groups`);
122
+ return results;
123
+ }
124
+ getAgentEnv() {
125
+ return { NETLIFY_TOKEN: this.token, NETLIFY_SITE_ID: this.siteId };
126
+ }
127
+ getPromptInstructions() {
128
+ return `### Netlify Logs API
129
+ - \`NETLIFY_TOKEN\` - Personal access token (use in Authorization: Bearer header)
130
+ - \`NETLIFY_SITE_ID\` - Site ID (${this.siteId})
131
+
132
+ **DO NOT make up data** - only use real data from APIs. If no data, report that honestly.
133
+
134
+ You have DIRECT ACCESS to Netlify's API to query build and deploy logs.
135
+
136
+ #### Example: Verify access (get current user)
137
+ \`\`\`bash
138
+ curl -s "https://api.netlify.com/api/v1/user" \\
139
+ -H "Authorization: Bearer \${NETLIFY_TOKEN}"
140
+ \`\`\`
141
+
142
+ #### Example: List recent deploys for a site
143
+ \`\`\`bash
144
+ curl -s "https://api.netlify.com/api/v1/sites/\${NETLIFY_SITE_ID}/deploys?page=1&per_page=5" \\
145
+ -H "Authorization: Bearer \${NETLIFY_TOKEN}"
146
+ \`\`\`
147
+
148
+ #### Example: Get build log for a specific deploy
149
+ \`\`\`bash
150
+ # Replace DEPLOY_ID with an id from the deploys list above
151
+ curl -s "https://api.netlify.com/api/v1/deploys/DEPLOY_ID/log" \\
152
+ -H "Authorization: Bearer \${NETLIFY_TOKEN}"
153
+ \`\`\`
154
+
155
+ Build log severity: lines containing 'error', 'failed', 'ERR' = error; 'warn', 'WARNING' = warning; otherwise info.
156
+ Service grouping: use \`context\` field from deploy (e.g. "production", "staging", "deploy-preview").`;
157
+ }
158
+ }
159
+ //# sourceMappingURL=netlify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"netlify.js","sourceRoot":"","sources":["../../src/observability/netlify.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ export declare const newrelicConfigSchema: z.ZodObject<{
6
6
  apiKey: z.ZodString;
7
7
  accountId: z.ZodString;
8
8
  region: z.ZodDefault<z.ZodEnum<{
9
- us: "us";
10
9
  eu: "eu";
10
+ us: "us";
11
11
  }>>;
12
12
  logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
13
13
  }, z.core.$strip>;
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ export declare const opsgenieConfigSchema: z.ZodObject<{
5
+ apiKey: z.ZodString;
6
+ region: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
7
+ eu: "eu";
8
+ us: "us";
9
+ }>>>;
10
+ logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
11
+ }, z.core.$strip>;
12
+ export type OpsGenieConfig = z.infer<typeof opsgenieConfigSchema>;
13
+ export declare function opsgenie(config: OpsGenieConfig): ObservabilityProvider;
14
+ //# sourceMappingURL=opsgenie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opsgenie.d.ts","sourceRoot":"","sources":["../../src/observability/opsgenie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,oBAAoB;;;;;;;iBAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAGtE"}
@@ -0,0 +1,144 @@
1
+ import { z } from "zod";
2
+ import { consoleLogger } from "../logger.js";
3
+ import { ProviderApiError } from "../errors.js";
4
+ export const opsgenieConfigSchema = z.object({
5
+ apiKey: z.string().min(1, "OpsGenie API key is required"),
6
+ region: z.enum(["us", "eu"]).optional().default("us"),
7
+ logger: z.custom().optional(),
8
+ });
9
+ export function opsgenie(config) {
10
+ const parsed = opsgenieConfigSchema.parse(config);
11
+ return new OpsGenieProvider(parsed);
12
+ }
13
+ const BASE_URLS = {
14
+ us: "https://api.opsgenie.com",
15
+ eu: "https://api.eu.opsgenie.com",
16
+ };
17
+ function priorityToLevel(priority) {
18
+ if (priority === "P1")
19
+ return "fatal";
20
+ if (priority === "P2")
21
+ return "error";
22
+ if (priority === "P3" || priority === "P4")
23
+ return "warning";
24
+ return "info";
25
+ }
26
+ function timeRangeToIso(timeRange) {
27
+ const now = Date.now();
28
+ const match = /^(\d+)([hdm])$/.exec(timeRange);
29
+ if (!match)
30
+ return new Date(now - 24 * 60 * 60 * 1000).toISOString();
31
+ const value = parseInt(match[1], 10);
32
+ const unit = match[2];
33
+ const ms = unit === "m" ? value * 60 * 1000 : unit === "h" ? value * 60 * 60 * 1000 : value * 24 * 60 * 60 * 1000;
34
+ return new Date(now - ms).toISOString();
35
+ }
36
+ class OpsGenieProvider {
37
+ apiKey;
38
+ baseUrl;
39
+ log;
40
+ constructor(config) {
41
+ this.apiKey = config.apiKey;
42
+ this.baseUrl = BASE_URLS[config.region ?? "us"];
43
+ this.log = config.logger ?? consoleLogger;
44
+ }
45
+ get headers() {
46
+ return {
47
+ Authorization: `GenieKey ${this.apiKey}`,
48
+ "Content-Type": "application/json",
49
+ };
50
+ }
51
+ async get(path) {
52
+ const response = await fetch(`${this.baseUrl}${path}`, {
53
+ method: "GET",
54
+ headers: this.headers,
55
+ });
56
+ if (!response.ok) {
57
+ const body = await response.text().catch(() => "");
58
+ throw new ProviderApiError("OpsGenie", response.status, response.statusText, body);
59
+ }
60
+ return (await response.json());
61
+ }
62
+ async verifyAccess() {
63
+ this.log.info("Verifying OpsGenie access");
64
+ await this.get("/v2/users?limit=1");
65
+ this.log.info("OpsGenie API access verified");
66
+ }
67
+ alertToLogEntry(alert) {
68
+ const service = alert.teams?.[0]?.name ?? alert.source ?? "unknown";
69
+ return {
70
+ timestamp: alert.createdAt,
71
+ service,
72
+ level: priorityToLevel(alert.priority),
73
+ message: alert.message,
74
+ attributes: {
75
+ id: alert.id,
76
+ status: alert.status,
77
+ priority: alert.priority,
78
+ alias: alert.alias,
79
+ tags: alert.tags,
80
+ },
81
+ };
82
+ }
83
+ async queryLogs(opts) {
84
+ this.log.info(`Querying OpsGenie alerts (range: ${opts.timeRange}, severity: ${opts.severity})`);
85
+ const since = timeRangeToIso(opts.timeRange);
86
+ const queryParts = [`createdAt > ${since}`];
87
+ if (opts.serviceFilter && opts.serviceFilter !== "*") {
88
+ queryParts.push(`teams: "${opts.serviceFilter}"`);
89
+ }
90
+ const params = new URLSearchParams({
91
+ limit: "100",
92
+ order: "desc",
93
+ query: queryParts.join(" AND "),
94
+ });
95
+ const result = await this.get(`/v2/alerts?${params.toString()}`);
96
+ let entries = (result.data ?? []).map((a) => this.alertToLogEntry(a));
97
+ if (opts.severity !== "*") {
98
+ entries = entries.filter((e) => e.level === opts.severity.toLowerCase());
99
+ }
100
+ this.log.info(`Found ${entries.length} alerts`);
101
+ return entries;
102
+ }
103
+ async aggregate(opts) {
104
+ this.log.info(`Aggregating OpsGenie alerts for ${opts.serviceFilter}`);
105
+ const all = await this.queryLogs({ ...opts, severity: "*" });
106
+ const errorAlerts = all.filter((a) => a.level === "error" || a.level === "fatal");
107
+ const counts = new Map();
108
+ for (const alert of errorAlerts) {
109
+ counts.set(alert.service, (counts.get(alert.service) ?? 0) + 1);
110
+ }
111
+ const results = Array.from(counts.entries()).map(([service, count]) => ({
112
+ service,
113
+ count,
114
+ }));
115
+ this.log.info(`Aggregated ${results.length} team/source groups`);
116
+ return results;
117
+ }
118
+ getAgentEnv() {
119
+ return {
120
+ OPSGENIE_API_KEY: this.apiKey,
121
+ };
122
+ }
123
+ getPromptInstructions() {
124
+ return `### OpsGenie Alerts API
125
+ - \`OPSGENIE_API_KEY\` - OpsGenie API key (use as \`Authorization: GenieKey $OPSGENIE_API_KEY\`)
126
+
127
+ **DO NOT make up data** - only use real data from APIs. If no data, report that honestly.
128
+
129
+ You have DIRECT ACCESS to the OpsGenie REST API via curl commands.
130
+
131
+ #### Example: List recent open alerts
132
+ \`\`\`bash
133
+ curl -s "${this.baseUrl}/v2/alerts?status=open&limit=100&order=desc" \\
134
+ -H "Authorization: GenieKey $OPSGENIE_API_KEY"
135
+ \`\`\`
136
+
137
+ #### Example: Filter alerts by team
138
+ \`\`\`bash
139
+ curl -s "${this.baseUrl}/v2/alerts?query=teams:%22my-team%22&limit=100" \\
140
+ -H "Authorization: GenieKey $OPSGENIE_API_KEY"
141
+ \`\`\``;
142
+ }
143
+ }
144
+ //# sourceMappingURL=opsgenie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opsgenie.js","sourceRoot":"","sources":["../../src/observability/opsgenie.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ import type { ProviderConfigSchema } from "../config-schema.js";
5
+ export declare const renderConfigSchema: z.ZodObject<{
6
+ apiKey: z.ZodString;
7
+ serviceId: z.ZodString;
8
+ logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
9
+ }, z.core.$strip>;
10
+ export type RenderConfig = z.infer<typeof renderConfigSchema>;
11
+ export declare const renderProviderConfigSchema: ProviderConfigSchema;
12
+ export declare function render(config: RenderConfig): ObservabilityProvider & {
13
+ configSchema: ProviderConfigSchema;
14
+ };
15
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/observability/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AACpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,0BAA0B,EAAE,oBAOxC,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG;IAAE,YAAY,EAAE,oBAAoB,CAAA;CAAE,CAI3G"}