@adonis-agora/telescope 0.26.2 → 0.27.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/CHANGELOG.md +13 -0
- package/dist/providers/telescope_provider.d.ts +10 -0
- package/dist/providers/telescope_provider.d.ts.map +1 -1
- package/dist/providers/telescope_provider.js +37 -1
- package/dist/providers/telescope_provider.js.map +1 -1
- package/dist/providers/telescope_ui_provider.d.ts.map +1 -1
- package/dist/providers/telescope_ui_provider.js +29 -0
- package/dist/providers/telescope_ui_provider.js.map +1 -1
- package/dist/src/ai/index.d.ts +1 -1
- package/dist/src/ai/index.js +1 -1
- package/dist/src/ai_metrics/agent_events.d.ts +106 -0
- package/dist/src/ai_metrics/agent_events.d.ts.map +1 -0
- package/dist/src/ai_metrics/agent_events.js +170 -0
- package/dist/src/ai_metrics/agent_events.js.map +1 -0
- package/dist/src/ai_metrics/agent_metrics.d.ts +103 -0
- package/dist/src/ai_metrics/agent_metrics.d.ts.map +1 -0
- package/dist/src/ai_metrics/agent_metrics.js +255 -0
- package/dist/src/ai_metrics/agent_metrics.js.map +1 -0
- package/dist/src/ai_metrics/ai_usage.d.ts +123 -0
- package/dist/src/ai_metrics/ai_usage.d.ts.map +1 -0
- package/dist/src/ai_metrics/ai_usage.js +207 -0
- package/dist/src/ai_metrics/ai_usage.js.map +1 -0
- package/dist/src/ai_metrics/index.d.ts +11 -0
- package/dist/src/ai_metrics/index.d.ts.map +1 -0
- package/dist/src/ai_metrics/index.js +11 -0
- package/dist/src/ai_metrics/index.js.map +1 -0
- package/dist/src/ai_metrics/otel_metrics_exporter.d.ts +60 -0
- package/dist/src/ai_metrics/otel_metrics_exporter.d.ts.map +1 -0
- package/dist/src/ai_metrics/otel_metrics_exporter.js +66 -0
- package/dist/src/ai_metrics/otel_metrics_exporter.js.map +1 -0
- package/dist/src/ai_metrics/subscribe.d.ts +17 -0
- package/dist/src/ai_metrics/subscribe.d.ts.map +1 -0
- package/dist/src/ai_metrics/subscribe.js +38 -0
- package/dist/src/ai_metrics/subscribe.js.map +1 -0
- package/dist/src/alerts/index.d.ts +1 -1
- package/dist/src/alerts/index.js +1 -1
- package/dist/src/define_config.d.ts +72 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +24 -4
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/index.d.ts +1 -1
- package/dist/src/mcp/index.js +1 -1
- package/dist/src/metrics/metrics_service.d.ts +22 -0
- package/dist/src/metrics/metrics_service.d.ts.map +1 -1
- package/dist/src/metrics/metrics_service.js +49 -0
- package/dist/src/metrics/metrics_service.js.map +1 -1
- package/dist/src/profiling/index.d.ts +1 -1
- package/dist/src/profiling/index.js +1 -1
- package/dist/src/registry.d.ts +9 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +6 -0
- package/dist/src/registry.js.map +1 -1
- package/dist/src/ui/api.d.ts +6 -0
- package/dist/src/ui/api.d.ts.map +1 -1
- package/dist/src/ui/api.js +23 -0
- package/dist/src/ui/api.js.map +1 -1
- package/dist/src/ui/index.d.ts +1 -1
- package/dist/src/ui/index.js +1 -1
- package/dist/src/watchers/index.d.ts +1 -1
- package/dist/src/watchers/index.js +1 -1
- package/grafana/agora-ai-dashboard.json +813 -0
- package/package.json +14 -2
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { agentEventOfEntry, readAgentEvent, } from './agent_events.js';
|
|
2
|
+
function emptyRow(key) {
|
|
3
|
+
return { key, costUsd: 0, calls: 0, unpricedCalls: 0, inputTokens: 0, outputTokens: 0 };
|
|
4
|
+
}
|
|
5
|
+
function addTo(map, key, u) {
|
|
6
|
+
let row = map.get(key);
|
|
7
|
+
if (row === undefined) {
|
|
8
|
+
row = emptyRow(key);
|
|
9
|
+
map.set(key, row);
|
|
10
|
+
}
|
|
11
|
+
row.costUsd += u.costUsd ?? 0;
|
|
12
|
+
row.calls += u.requests;
|
|
13
|
+
if (u.costUsd === undefined)
|
|
14
|
+
row.unpricedCalls += u.requests;
|
|
15
|
+
row.inputTokens += u.inputTokens;
|
|
16
|
+
row.outputTokens += u.outputTokens;
|
|
17
|
+
}
|
|
18
|
+
function ranked(map, top) {
|
|
19
|
+
return [...map.values()]
|
|
20
|
+
.sort((a, b) => b.costUsd - a.costUsd || b.calls - a.calls || a.key.localeCompare(b.key))
|
|
21
|
+
.slice(0, top)
|
|
22
|
+
.map((r) => ({ ...r, costUsd: round(r.costUsd) }));
|
|
23
|
+
}
|
|
24
|
+
function round(value) {
|
|
25
|
+
return Math.round(value * 1e8) / 1e8;
|
|
26
|
+
}
|
|
27
|
+
function toRunRow(entry, r) {
|
|
28
|
+
return {
|
|
29
|
+
entryId: entry.id,
|
|
30
|
+
traceId: entry.traceId,
|
|
31
|
+
at: new Date(entry.createdAt).toISOString(),
|
|
32
|
+
status: r.status,
|
|
33
|
+
agent: r.agent,
|
|
34
|
+
runId: r.runId ?? null,
|
|
35
|
+
threadId: r.threadId ?? null,
|
|
36
|
+
modelId: r.modelId ?? null,
|
|
37
|
+
durationMs: r.durationMs ?? null,
|
|
38
|
+
ttftMs: r.ttftMs ?? null,
|
|
39
|
+
queueMs: r.queueMs ?? null,
|
|
40
|
+
modelMs: r.modelMs ?? null,
|
|
41
|
+
toolsMs: r.toolsMs ?? null,
|
|
42
|
+
steps: r.steps ?? (r.stepTimings.length > 0 ? r.stepTimings.length : null),
|
|
43
|
+
modelCalls: r.modelCalls ?? null,
|
|
44
|
+
toolCalls: r.toolCalls ?? null,
|
|
45
|
+
inputTokens: r.inputTokens ?? null,
|
|
46
|
+
outputTokens: r.outputTokens ?? null,
|
|
47
|
+
costUsd: r.costUsd ?? null,
|
|
48
|
+
code: r.code ?? null,
|
|
49
|
+
stepTimings: r.stepTimings,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Summarize the agent entries of a window into the AI screen: spend (total, platform and estimated
|
|
54
|
+
* shares, by feature / model / actor, over time), runs (recent, slowest, most expensive, each with
|
|
55
|
+
* its step breakdown) and the unpriced calls, from the `diagnostic` entries the generic watcher
|
|
56
|
+
* records for `agora:agent:*` (see {@link agentEventOfEntry}). Entries outside the window are
|
|
57
|
+
* ignored. Pure.
|
|
58
|
+
*/
|
|
59
|
+
export function summarizeAiUsage(entries, options) {
|
|
60
|
+
const start = options.windowStart.getTime();
|
|
61
|
+
const end = options.windowEnd.getTime();
|
|
62
|
+
const bucketCount = Math.max(1, Math.min(500, Math.floor(options.buckets ?? 24)));
|
|
63
|
+
const top = Math.max(1, Math.floor(options.top ?? 10));
|
|
64
|
+
const runsLimit = Math.max(1, Math.floor(options.runsLimit ?? 50));
|
|
65
|
+
const bucketMs = Math.max(1, (end - start) / bucketCount);
|
|
66
|
+
const buckets = Array.from({ length: bucketCount }, (_, i) => ({
|
|
67
|
+
start: new Date(start + i * bucketMs).toISOString(),
|
|
68
|
+
costUsd: 0,
|
|
69
|
+
platformUsd: 0,
|
|
70
|
+
estimatedUsd: 0,
|
|
71
|
+
calls: 0,
|
|
72
|
+
}));
|
|
73
|
+
const spend = {
|
|
74
|
+
totalUsd: 0,
|
|
75
|
+
platformUsd: 0,
|
|
76
|
+
estimatedUsd: 0,
|
|
77
|
+
calls: 0,
|
|
78
|
+
unpricedCalls: 0,
|
|
79
|
+
inputTokens: 0,
|
|
80
|
+
outputTokens: 0,
|
|
81
|
+
cacheReadTokens: 0,
|
|
82
|
+
cacheWriteTokens: 0,
|
|
83
|
+
audioSeconds: 0,
|
|
84
|
+
byFeature: [],
|
|
85
|
+
byModel: [],
|
|
86
|
+
byActor: [],
|
|
87
|
+
buckets,
|
|
88
|
+
};
|
|
89
|
+
const byFeature = new Map();
|
|
90
|
+
const byModel = new Map();
|
|
91
|
+
const byActor = new Map();
|
|
92
|
+
const unpriced = new Map();
|
|
93
|
+
const runs = [];
|
|
94
|
+
const coverage = {
|
|
95
|
+
usageEvents: 0,
|
|
96
|
+
runEvents: 0,
|
|
97
|
+
agentEvents: 0,
|
|
98
|
+
legacyAgentLib: false,
|
|
99
|
+
runsWithoutTimings: 0,
|
|
100
|
+
};
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
const at = new Date(entry.createdAt).getTime();
|
|
103
|
+
if (at < start || at > end)
|
|
104
|
+
continue;
|
|
105
|
+
const event = agentEventOfEntry(entry);
|
|
106
|
+
if (event === null)
|
|
107
|
+
continue;
|
|
108
|
+
coverage.agentEvents += 1;
|
|
109
|
+
const observation = readAgentEvent(event.event, event.payload);
|
|
110
|
+
if (observation === null)
|
|
111
|
+
continue;
|
|
112
|
+
if (observation.kind === 'run') {
|
|
113
|
+
coverage.runEvents += 1;
|
|
114
|
+
if (observation.queueMs === undefined &&
|
|
115
|
+
observation.modelMs === undefined &&
|
|
116
|
+
observation.toolsMs === undefined) {
|
|
117
|
+
coverage.runsWithoutTimings += 1;
|
|
118
|
+
}
|
|
119
|
+
runs.push(toRunRow(entry, observation));
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const u = observation;
|
|
123
|
+
coverage.usageEvents += 1;
|
|
124
|
+
const cost = u.costUsd ?? 0;
|
|
125
|
+
spend.totalUsd += cost;
|
|
126
|
+
if (u.platform)
|
|
127
|
+
spend.platformUsd += cost;
|
|
128
|
+
if (u.costSource === 'estimate')
|
|
129
|
+
spend.estimatedUsd += cost;
|
|
130
|
+
spend.calls += u.requests;
|
|
131
|
+
spend.inputTokens += u.inputTokens;
|
|
132
|
+
spend.outputTokens += u.outputTokens;
|
|
133
|
+
spend.cacheReadTokens += u.cacheReadTokens;
|
|
134
|
+
spend.cacheWriteTokens += u.cacheWriteTokens;
|
|
135
|
+
spend.audioSeconds += u.audioSeconds;
|
|
136
|
+
addTo(byFeature, u.feature, u);
|
|
137
|
+
addTo(byModel, u.model, u);
|
|
138
|
+
addTo(byActor, u.actorRef, u);
|
|
139
|
+
const bucket = buckets[Math.min(bucketCount - 1, Math.floor((at - start) / bucketMs))];
|
|
140
|
+
if (bucket !== undefined) {
|
|
141
|
+
bucket.costUsd += cost;
|
|
142
|
+
if (u.platform)
|
|
143
|
+
bucket.platformUsd += cost;
|
|
144
|
+
if (u.costSource === 'estimate')
|
|
145
|
+
bucket.estimatedUsd += cost;
|
|
146
|
+
bucket.calls += u.requests;
|
|
147
|
+
}
|
|
148
|
+
if (u.costUsd === undefined) {
|
|
149
|
+
spend.unpricedCalls += u.requests;
|
|
150
|
+
const key = `${u.feature}\u0000${u.model}\u0000${u.provider}`;
|
|
151
|
+
let row = unpriced.get(key);
|
|
152
|
+
if (row === undefined) {
|
|
153
|
+
row = {
|
|
154
|
+
feature: u.feature,
|
|
155
|
+
model: u.model,
|
|
156
|
+
provider: u.provider,
|
|
157
|
+
calls: 0,
|
|
158
|
+
inputTokens: 0,
|
|
159
|
+
outputTokens: 0,
|
|
160
|
+
audioSeconds: 0,
|
|
161
|
+
characters: 0,
|
|
162
|
+
lastAt: new Date(at).toISOString(),
|
|
163
|
+
};
|
|
164
|
+
unpriced.set(key, row);
|
|
165
|
+
}
|
|
166
|
+
row.calls += u.requests;
|
|
167
|
+
row.inputTokens += u.inputTokens;
|
|
168
|
+
row.outputTokens += u.outputTokens;
|
|
169
|
+
row.audioSeconds += u.audioSeconds;
|
|
170
|
+
row.characters += u.characters;
|
|
171
|
+
if (new Date(at).toISOString() > row.lastAt)
|
|
172
|
+
row.lastAt = new Date(at).toISOString();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
coverage.legacyAgentLib = coverage.agentEvents > 0 && coverage.usageEvents === 0;
|
|
176
|
+
spend.totalUsd = round(spend.totalUsd);
|
|
177
|
+
spend.platformUsd = round(spend.platformUsd);
|
|
178
|
+
spend.estimatedUsd = round(spend.estimatedUsd);
|
|
179
|
+
spend.byFeature = ranked(byFeature, top);
|
|
180
|
+
spend.byModel = ranked(byModel, top);
|
|
181
|
+
spend.byActor = ranked(byActor, top);
|
|
182
|
+
for (const b of buckets) {
|
|
183
|
+
b.costUsd = round(b.costUsd);
|
|
184
|
+
b.platformUsd = round(b.platformUsd);
|
|
185
|
+
b.estimatedUsd = round(b.estimatedUsd);
|
|
186
|
+
}
|
|
187
|
+
runs.sort((a, b) => b.at.localeCompare(a.at));
|
|
188
|
+
const slowest = runs
|
|
189
|
+
.filter((r) => r.durationMs !== null)
|
|
190
|
+
.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0))
|
|
191
|
+
.slice(0, 5);
|
|
192
|
+
const mostExpensive = runs
|
|
193
|
+
.filter((r) => r.costUsd !== null && r.costUsd > 0)
|
|
194
|
+
.sort((a, b) => (b.costUsd ?? 0) - (a.costUsd ?? 0))
|
|
195
|
+
.slice(0, 5);
|
|
196
|
+
return {
|
|
197
|
+
windowStart: options.windowStart.toISOString(),
|
|
198
|
+
windowEnd: options.windowEnd.toISOString(),
|
|
199
|
+
spend,
|
|
200
|
+
runs: runs.slice(0, runsLimit),
|
|
201
|
+
slowest,
|
|
202
|
+
mostExpensive,
|
|
203
|
+
unpriced: [...unpriced.values()].sort((a, b) => b.calls - a.calls),
|
|
204
|
+
coverage,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=ai_usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai_usage.js","sourceRoot":"","sources":["../../../src/ai_metrics/ai_usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI usage and agent run observability: pure readers for the `agora:agent:*` events, the metric
|
|
3
|
+
* table both exporters (Prometheus scrape, OTLP) read, the in-process Prometheus registry, and the
|
|
4
|
+
* AI screen's summarizer. The OTLP exporter (`otel_metrics_exporter.ts`) is intentionally NOT
|
|
5
|
+
* re-exported: it is loaded lazily by the provider so importing this never pulls in OTel.
|
|
6
|
+
*/
|
|
7
|
+
export { AGENT_CHANNEL_PREFIX, AGENT_METRIC_EVENTS, type AgentMetricEvent, type AgentObservation, agentEventOfEntry, type CostSource, PLATFORM_ACTOR_REF, type RunObservation, type RunStatus, readAgentEvent, readRun, readUsage, type StepTiming, type ToolTiming, type UsageObservation, } from './agent_events.js';
|
|
8
|
+
export { AGENT_METRIC_BUCKETS_MS, AGENT_METRICS, type AgentMetricKey, AgentMetricsRegistry, type AgentMetricsRegistryOptions, agentMetricPoints, type MetricAttributes, type MetricPoint, } from './agent_metrics.js';
|
|
9
|
+
export { type AiCoverage, type AiRunRow, type AiSpend, type AiSpendBucket, type AiSpendRow, type AiUnpricedRow, type AiUsageSummary, type SummarizeAiUsageOptions, summarizeAiUsage, } from './ai_usage.js';
|
|
10
|
+
export { type AgentObservationListener, subscribeAgentObservations } from './subscribe.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai_metrics/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,KAAK,UAAU,EACf,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,cAAc,EACd,OAAO,EACP,SAAS,EACT,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,KAAK,cAAc,EACnB,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI usage and agent run observability: pure readers for the `agora:agent:*` events, the metric
|
|
3
|
+
* table both exporters (Prometheus scrape, OTLP) read, the in-process Prometheus registry, and the
|
|
4
|
+
* AI screen's summarizer. The OTLP exporter (`otel_metrics_exporter.ts`) is intentionally NOT
|
|
5
|
+
* re-exported: it is loaded lazily by the provider so importing this never pulls in OTel.
|
|
6
|
+
*/
|
|
7
|
+
export { AGENT_CHANNEL_PREFIX, AGENT_METRIC_EVENTS, agentEventOfEntry, PLATFORM_ACTOR_REF, readAgentEvent, readRun, readUsage, } from './agent_events.js';
|
|
8
|
+
export { AGENT_METRIC_BUCKETS_MS, AGENT_METRICS, AgentMetricsRegistry, agentMetricPoints, } from './agent_metrics.js';
|
|
9
|
+
export { summarizeAiUsage, } from './ai_usage.js';
|
|
10
|
+
export { subscribeAgentObservations } from './subscribe.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai_metrics/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EAGnB,iBAAiB,EAEjB,kBAAkB,EAGlB,cAAc,EACd,OAAO,EACP,SAAS,GAIV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,aAAa,EAEb,oBAAoB,EAEpB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EASL,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAiC,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Counter, Histogram } from '@opentelemetry/api';
|
|
2
|
+
import type { ResolvedOtelMetricsConfig } from '../define_config.js';
|
|
3
|
+
import type { AgentObservation } from './agent_events.js';
|
|
4
|
+
/**
|
|
5
|
+
* The OTLP METRICS signal: the AI-usage and agent-run instruments of {@link AGENT_METRICS}, pushed
|
|
6
|
+
* over OTLP/HTTP by a periodic reader.
|
|
7
|
+
*
|
|
8
|
+
* Loaded ONLY through the dynamic `import()` in `telescope_provider.ts`, and only when
|
|
9
|
+
* `otel.metrics.enabled` is `true`; the `@opentelemetry/*` metrics packages are imported lazily
|
|
10
|
+
* inside {@link loadOtelMetricsSdk}, so a host that never opts in never needs them installed.
|
|
11
|
+
*
|
|
12
|
+
* Like the traces/logs bridge it owns a PRIVATE `MeterProvider` and never calls
|
|
13
|
+
* `metrics.setGlobalMeterProvider`, so it cannot clash with a host's own OTel setup.
|
|
14
|
+
*
|
|
15
|
+
* Fed from the `agora:agent:*` diagnostics channels directly (see `subscribe.ts`), not from stored
|
|
16
|
+
* entries: sampling, retention and the overload guard never change a count.
|
|
17
|
+
*
|
|
18
|
+
* Instruments are created with an EMPTY unit on purpose (the unit is in the name): Prometheus'
|
|
19
|
+
* OTLP translation appends a unit suffix (`ms` → `_milliseconds`), which would make a metric read
|
|
20
|
+
* `agora_agent_run_duration_ms_milliseconds` through a Collector but `agora_agent_run_duration_ms`
|
|
21
|
+
* from the scrape endpoint. With no unit both paths expose the same series, so one Grafana
|
|
22
|
+
* dashboard serves both.
|
|
23
|
+
*/
|
|
24
|
+
/** The meter-provider surface this exporter uses. */
|
|
25
|
+
export interface MeterProviderLike {
|
|
26
|
+
getMeter(name: string): {
|
|
27
|
+
createCounter(name: string, options?: {
|
|
28
|
+
description?: string;
|
|
29
|
+
unit?: string;
|
|
30
|
+
}): Counter;
|
|
31
|
+
createHistogram(name: string, options?: {
|
|
32
|
+
description?: string;
|
|
33
|
+
unit?: string;
|
|
34
|
+
advice?: {
|
|
35
|
+
explicitBucketBoundaries?: number[];
|
|
36
|
+
};
|
|
37
|
+
}): Histogram;
|
|
38
|
+
};
|
|
39
|
+
forceFlush(): Promise<void>;
|
|
40
|
+
shutdown(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
/** Builds the provider from the resolved config. Injectable for tests. */
|
|
43
|
+
export type MeterProviderFactory = (config: ResolvedOtelMetricsConfig) => Promise<MeterProviderLike>;
|
|
44
|
+
/** Import the OTel metrics SDK and build a provider exporting to `config.url`. */
|
|
45
|
+
export declare const loadOtelMetricsSdk: MeterProviderFactory;
|
|
46
|
+
/** A running OTLP metrics export; stop it with {@link OtelMetricsExporter.shutdown}. */
|
|
47
|
+
export interface OtelMetricsExporter {
|
|
48
|
+
/** Record one observation (exposed for tests and for hosts that read the events themselves). */
|
|
49
|
+
observe(observation: AgentObservation): void;
|
|
50
|
+
/** Push whatever is pending now. */
|
|
51
|
+
flush(): Promise<void>;
|
|
52
|
+
/** Unsubscribe, flush the tail and shut the provider down. */
|
|
53
|
+
shutdown(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build the provider and its instruments, then subscribe to the agent channels. Rejects when the
|
|
57
|
+
* OTel packages cannot be loaded; the provider logs that and leaves metrics export off.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createOtelMetricsExporter(config: ResolvedOtelMetricsConfig, factory?: MeterProviderFactory): Promise<OtelMetricsExporter>;
|
|
60
|
+
//# sourceMappingURL=otel_metrics_exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel_metrics_exporter.d.ts","sourceRoot":"","sources":["../../../src/ai_metrics/otel_metrics_exporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAS1D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QACtB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;QACxF,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;YACR,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE;gBAAE,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC;SAClD,GACA,SAAS,CAAC;KACd,CAAC;IACF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG,CACjC,MAAM,EAAE,yBAAyB,KAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,EAAE,oBAoBhC,CAAC;AAEF,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,OAAO,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7C,oCAAoC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,oBAAyC,GACjD,OAAO,CAAC,mBAAmB,CAAC,CAwC9B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { AGENT_METRIC_BUCKETS_MS, AGENT_METRICS, agentMetricPoints, } from './agent_metrics.js';
|
|
2
|
+
import { subscribeAgentObservations } from './subscribe.js';
|
|
3
|
+
/** Import the OTel metrics SDK and build a provider exporting to `config.url`. */
|
|
4
|
+
export const loadOtelMetricsSdk = async (config) => {
|
|
5
|
+
const [sdk, exporterPkg, resources] = await Promise.all([
|
|
6
|
+
import('@opentelemetry/sdk-metrics'),
|
|
7
|
+
import('@opentelemetry/exporter-metrics-otlp-http'),
|
|
8
|
+
import('@opentelemetry/resources'),
|
|
9
|
+
]);
|
|
10
|
+
const exporter = new exporterPkg.OTLPMetricExporter({
|
|
11
|
+
url: config.url,
|
|
12
|
+
headers: config.headers,
|
|
13
|
+
timeoutMillis: config.timeoutMs,
|
|
14
|
+
});
|
|
15
|
+
const reader = new sdk.PeriodicExportingMetricReader({
|
|
16
|
+
exporter,
|
|
17
|
+
exportIntervalMillis: config.exportIntervalMs,
|
|
18
|
+
exportTimeoutMillis: Math.min(config.timeoutMs, config.exportIntervalMs),
|
|
19
|
+
});
|
|
20
|
+
return new sdk.MeterProvider({
|
|
21
|
+
resource: resources.resourceFromAttributes({ 'service.name': config.serviceName }),
|
|
22
|
+
readers: [reader],
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Build the provider and its instruments, then subscribe to the agent channels. Rejects when the
|
|
27
|
+
* OTel packages cannot be loaded; the provider logs that and leaves metrics export off.
|
|
28
|
+
*/
|
|
29
|
+
export async function createOtelMetricsExporter(config, factory = loadOtelMetricsSdk) {
|
|
30
|
+
const provider = await factory(config);
|
|
31
|
+
const meter = provider.getMeter('@adonis-agora/telescope');
|
|
32
|
+
const instruments = new Map();
|
|
33
|
+
for (const key of Object.keys(AGENT_METRICS)) {
|
|
34
|
+
const def = AGENT_METRICS[key];
|
|
35
|
+
instruments.set(key, def.type === 'counter'
|
|
36
|
+
? meter.createCounter(def.name, { description: def.help, unit: '' })
|
|
37
|
+
: meter.createHistogram(def.name, {
|
|
38
|
+
description: def.help,
|
|
39
|
+
unit: '',
|
|
40
|
+
advice: { explicitBucketBoundaries: [...AGENT_METRIC_BUCKETS_MS] },
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
const observe = (observation) => {
|
|
44
|
+
for (const point of agentMetricPoints(observation)) {
|
|
45
|
+
const instrument = instruments.get(point.metric);
|
|
46
|
+
if (instrument === undefined)
|
|
47
|
+
continue;
|
|
48
|
+
if (AGENT_METRICS[point.metric].type === 'counter') {
|
|
49
|
+
instrument.add(point.value, point.attributes);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
instrument.record(point.value, point.attributes);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const unsubscribe = subscribeAgentObservations(observe);
|
|
57
|
+
return {
|
|
58
|
+
observe,
|
|
59
|
+
flush: () => provider.forceFlush(),
|
|
60
|
+
async shutdown() {
|
|
61
|
+
unsubscribe();
|
|
62
|
+
await provider.shutdown().catch(() => undefined);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=otel_metrics_exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel_metrics_exporter.js","sourceRoot":"","sources":["../../../src/ai_metrics/otel_metrics_exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AgentObservation } from './agent_events.js';
|
|
2
|
+
/** A consumer of agent observations. A throw is swallowed — it never reaches the agent loop. */
|
|
3
|
+
export type AgentObservationListener = (observation: AgentObservation) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Subscribe to the agent's `usage.recorded` and terminal run channels DIRECTLY on
|
|
6
|
+
* `node:diagnostics_channel` and hand each event, parsed, to `listener`.
|
|
7
|
+
*
|
|
8
|
+
* Direct, and not through recorded Telescope entries, on purpose: entries are sampled, pruned and
|
|
9
|
+
* may not be recorded at all (the `diagnostics` watcher is off, or the event is excluded). A metric must count every event exactly
|
|
10
|
+
* once, so it reads the source. Subscribing is also what makes `emit()` publish at all
|
|
11
|
+
* (`channel.hasSubscribers`), so this works with the
|
|
12
|
+
* `diagnostics` watcher off.
|
|
13
|
+
*
|
|
14
|
+
* Returns the unsubscribe function.
|
|
15
|
+
*/
|
|
16
|
+
export declare function subscribeAgentObservations(listener: AgentObservationListener): () => void;
|
|
17
|
+
//# sourceMappingURL=subscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../../src/ai_metrics/subscribe.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAE3B,gGAAgG;AAChG,MAAM,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAmBzF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import diagnostics_channel from 'node:diagnostics_channel';
|
|
2
|
+
import { AGENT_CHANNEL_PREFIX, AGENT_METRIC_EVENTS, readAgentEvent, } from './agent_events.js';
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe to the agent's `usage.recorded` and terminal run channels DIRECTLY on
|
|
5
|
+
* `node:diagnostics_channel` and hand each event, parsed, to `listener`.
|
|
6
|
+
*
|
|
7
|
+
* Direct, and not through recorded Telescope entries, on purpose: entries are sampled, pruned and
|
|
8
|
+
* may not be recorded at all (the `diagnostics` watcher is off, or the event is excluded). A metric must count every event exactly
|
|
9
|
+
* once, so it reads the source. Subscribing is also what makes `emit()` publish at all
|
|
10
|
+
* (`channel.hasSubscribers`), so this works with the
|
|
11
|
+
* `diagnostics` watcher off.
|
|
12
|
+
*
|
|
13
|
+
* Returns the unsubscribe function.
|
|
14
|
+
*/
|
|
15
|
+
export function subscribeAgentObservations(listener) {
|
|
16
|
+
const handlers = [];
|
|
17
|
+
for (const event of AGENT_METRIC_EVENTS) {
|
|
18
|
+
const name = `${AGENT_CHANNEL_PREFIX}${event}`;
|
|
19
|
+
const handler = (message) => {
|
|
20
|
+
try {
|
|
21
|
+
const envelope = message;
|
|
22
|
+
const observation = readAgentEvent(event, envelope?.payload);
|
|
23
|
+
if (observation !== null)
|
|
24
|
+
listener(observation);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Observability must never break the agent run that published the event.
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
diagnostics_channel.subscribe(name, handler);
|
|
31
|
+
handlers.push([name, handler]);
|
|
32
|
+
}
|
|
33
|
+
return () => {
|
|
34
|
+
for (const [name, handler] of handlers)
|
|
35
|
+
diagnostics_channel.unsubscribe(name, handler);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=subscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../../src/ai_metrics/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EAEnB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAK3B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkC;IAC3E,MAAM,QAAQ,GAA2C,EAAE,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,oBAAoB,GAAG,KAAK,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAQ,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAwD,CAAC;gBAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7D,IAAI,WAAW,KAAK,IAAI;oBAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;YAC3E,CAAC;QACH,CAAC,CAAC;QACF,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ;YAAE,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export declare const VERSION = "0.
|
|
2
|
+
export declare const VERSION = "0.27.0";
|
|
3
3
|
export type { AlertChannel, ChannelFetch, ConsoleSink } from './alert_channel.js';
|
|
4
4
|
export { consoleChannel, customChannel, slackChannel, webhookChannel, } from './alert_channel.js';
|
|
5
5
|
export type { AlertDiagnosis, AlertGeoLocation, AlertMetric, AlertPayload, AlertRule, ExceptionAlertContext, GeoLookup, ResolvedAlerts, } from './alert_rule.js';
|
package/dist/src/alerts/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export const VERSION = '0.
|
|
2
|
+
export const VERSION = '0.27.0';
|
|
3
3
|
// — channels —
|
|
4
4
|
export { consoleChannel, customChannel, slackChannel, webhookChannel, } from './alert_channel.js';
|
|
5
5
|
// — alerter (exception source → tracker → channels) —
|
|
@@ -195,8 +195,56 @@ export interface TelescopeConfig {
|
|
|
195
195
|
* disabled, none of the `@opentelemetry/*` packages are ever imported: they stay
|
|
196
196
|
* genuinely optional peers. See {@link OtelConfig} and the `otel` docs page for
|
|
197
197
|
* the exact diagnostics-entry → span/log mapping.
|
|
198
|
+
*
|
|
199
|
+
* `otel.metrics` adds the OTLP METRICS signal (AI spend and agent run timings), switched on
|
|
200
|
+
* independently of the traces/logs above and able to target its own endpoint.
|
|
198
201
|
*/
|
|
199
202
|
otel?: OtelConfig;
|
|
203
|
+
/**
|
|
204
|
+
* Prometheus scrape endpoint for the AI-usage and agent-run metrics (`agora_ai_*`,
|
|
205
|
+
* `agora_agent_*`): `GET <telescope_ui path>/metrics` in the text exposition format, served by
|
|
206
|
+
* the `ui_provider` behind the same `authorize` / `dashboardAuth` guard as the JSON API. OFF by
|
|
207
|
+
* default. Lets Prometheus (and so Grafana) read the metrics without an OTel Collector.
|
|
208
|
+
*/
|
|
209
|
+
prometheus?: PrometheusConfig;
|
|
210
|
+
}
|
|
211
|
+
/** See {@link TelescopeConfig.prometheus}. */
|
|
212
|
+
export interface PrometheusConfig {
|
|
213
|
+
/** Serve `GET <telescope_ui path>/metrics`. Default `false`. */
|
|
214
|
+
enabled?: boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Max distinct label sets kept per metric. A new combination past the cap is dropped (existing
|
|
217
|
+
* series keep counting) and tallied in `agora_ai_metrics_dropped_series_total`. Default `2000`.
|
|
218
|
+
*/
|
|
219
|
+
maxSeriesPerMetric?: number;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* The OTLP metrics signal (see {@link OtelConfig.metrics}): the AI-usage and agent-run
|
|
223
|
+
* instruments listed in the `otel` docs page, pushed from a PRIVATE `MeterProvider` that never
|
|
224
|
+
* registers itself globally. Needs `@opentelemetry/sdk-metrics` and
|
|
225
|
+
* `@opentelemetry/exporter-metrics-otlp-http` (optional peers, imported only when this is on).
|
|
226
|
+
*/
|
|
227
|
+
export interface OtelMetricsConfig {
|
|
228
|
+
/**
|
|
229
|
+
* Push metrics. Default `false`. Independent of {@link OtelConfig.enabled}, which governs
|
|
230
|
+
* traces and logs only: metrics can be on while traces/logs are off, and vice versa.
|
|
231
|
+
*/
|
|
232
|
+
enabled?: boolean;
|
|
233
|
+
/**
|
|
234
|
+
* Base URL of the OTLP/HTTP receiver for metrics. Defaults to {@link OtelConfig.endpoint}. Set
|
|
235
|
+
* it when metrics go somewhere else than traces/logs (e.g. a local Grafana while traces go to a
|
|
236
|
+
* hosted backend that does not ingest OTLP metrics).
|
|
237
|
+
*/
|
|
238
|
+
endpoint?: string;
|
|
239
|
+
/** Path appended to the metrics endpoint. Default `'/v1/metrics'`. */
|
|
240
|
+
path?: string;
|
|
241
|
+
/**
|
|
242
|
+
* Headers for the metrics exports. Defaults to {@link OtelConfig.headers} when `endpoint` is not
|
|
243
|
+
* overridden, and to `{}` when it is (credentials for one backend never leak to another).
|
|
244
|
+
*/
|
|
245
|
+
headers?: Record<string, string>;
|
|
246
|
+
/** How often the periodic reader pushes, in ms. Default `60000`. */
|
|
247
|
+
exportIntervalMs?: number;
|
|
200
248
|
}
|
|
201
249
|
/**
|
|
202
250
|
* OTel export configuration (see {@link TelescopeConfig.otel}). Exports already
|
|
@@ -238,6 +286,12 @@ export interface OtelConfig {
|
|
|
238
286
|
entryTypes?: string[];
|
|
239
287
|
/** Per-export HTTP timeout, in ms. Default `5000`. */
|
|
240
288
|
timeoutMs?: number;
|
|
289
|
+
/**
|
|
290
|
+
* The OTLP METRICS signal: AI spend, tokens and agent run timings as counters and histograms.
|
|
291
|
+
* Opt-in and independent of `enabled` (which governs traces and logs). See
|
|
292
|
+
* {@link OtelMetricsConfig}.
|
|
293
|
+
*/
|
|
294
|
+
metrics?: OtelMetricsConfig;
|
|
241
295
|
}
|
|
242
296
|
/** Diagnostics-watcher configuration (see {@link TelescopeConfig.diagnostics}). */
|
|
243
297
|
export interface DiagnosticsConfig {
|
|
@@ -393,6 +447,11 @@ export interface ResolvedTelescopeConfig {
|
|
|
393
447
|
clientErrors: ResolvedClientErrorsConfig;
|
|
394
448
|
/** Resolved OTel-export settings (always present; `enabled` defaults `false`). */
|
|
395
449
|
otel: ResolvedOtelConfig;
|
|
450
|
+
/** Resolved Prometheus scrape settings (always present; `enabled` defaults `false`). */
|
|
451
|
+
prometheus: {
|
|
452
|
+
enabled: boolean;
|
|
453
|
+
maxSeriesPerMetric: number;
|
|
454
|
+
};
|
|
396
455
|
}
|
|
397
456
|
/** The fully-resolved OTel-export config (see {@link OtelConfig}). */
|
|
398
457
|
export interface ResolvedOtelConfig {
|
|
@@ -404,6 +463,19 @@ export interface ResolvedOtelConfig {
|
|
|
404
463
|
serviceName: string;
|
|
405
464
|
entryTypes: string[];
|
|
406
465
|
timeoutMs: number;
|
|
466
|
+
metrics: ResolvedOtelMetricsConfig;
|
|
467
|
+
}
|
|
468
|
+
/** The fully-resolved OTLP metrics config (see {@link OtelMetricsConfig}). */
|
|
469
|
+
export interface ResolvedOtelMetricsConfig {
|
|
470
|
+
enabled: boolean;
|
|
471
|
+
/** Full URL: endpoint + path. */
|
|
472
|
+
url: string;
|
|
473
|
+
headers: Record<string, string>;
|
|
474
|
+
exportIntervalMs: number;
|
|
475
|
+
/** Same as {@link ResolvedOtelConfig.serviceName}. */
|
|
476
|
+
serviceName: string;
|
|
477
|
+
/** Same as {@link ResolvedOtelConfig.timeoutMs}. */
|
|
478
|
+
timeoutMs: number;
|
|
407
479
|
}
|
|
408
480
|
/**
|
|
409
481
|
* Identity helper giving `config/telescope.ts` full type-checking. Mirrors the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAEhC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAe/E;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAED,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAEhC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAE1B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAEvC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAElC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAEnC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAElC
|
|
1
|
+
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"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"}
|