@lumenflow/metrics 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.
Files changed (51) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +161 -0
  3. package/dist/dora/calculate-dora-metrics.d.ts +34 -0
  4. package/dist/dora/calculate-dora-metrics.d.ts.map +1 -0
  5. package/dist/dora/calculate-dora-metrics.js +178 -0
  6. package/dist/dora/calculate-dora-metrics.js.map +1 -0
  7. package/dist/dora/constants.d.ts +61 -0
  8. package/dist/dora/constants.d.ts.map +1 -0
  9. package/dist/dora/constants.js +65 -0
  10. package/dist/dora/constants.js.map +1 -0
  11. package/dist/dora/index.d.ts +11 -0
  12. package/dist/dora/index.d.ts.map +1 -0
  13. package/dist/dora/index.js +11 -0
  14. package/dist/dora/index.js.map +1 -0
  15. package/dist/flow/analyze-bottlenecks.d.ts +51 -0
  16. package/dist/flow/analyze-bottlenecks.d.ts.map +1 -0
  17. package/dist/flow/analyze-bottlenecks.js +253 -0
  18. package/dist/flow/analyze-bottlenecks.js.map +1 -0
  19. package/dist/flow/calculate-flow-state.d.ts +13 -0
  20. package/dist/flow/calculate-flow-state.d.ts.map +1 -0
  21. package/dist/flow/calculate-flow-state.js +27 -0
  22. package/dist/flow/calculate-flow-state.js.map +1 -0
  23. package/dist/flow/capture-metrics-snapshot.d.ts +13 -0
  24. package/dist/flow/capture-metrics-snapshot.d.ts.map +1 -0
  25. package/dist/flow/capture-metrics-snapshot.js +126 -0
  26. package/dist/flow/capture-metrics-snapshot.js.map +1 -0
  27. package/dist/flow/generate-flow-report.d.ts +13 -0
  28. package/dist/flow/generate-flow-report.d.ts.map +1 -0
  29. package/dist/flow/generate-flow-report.js +254 -0
  30. package/dist/flow/generate-flow-report.js.map +1 -0
  31. package/dist/flow/index.d.ts +12 -0
  32. package/dist/flow/index.d.ts.map +1 -0
  33. package/dist/flow/index.js +12 -0
  34. package/dist/flow/index.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +15 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/telemetry/emit-telemetry.d.ts +31 -0
  40. package/dist/telemetry/emit-telemetry.d.ts.map +1 -0
  41. package/dist/telemetry/emit-telemetry.js +103 -0
  42. package/dist/telemetry/emit-telemetry.js.map +1 -0
  43. package/dist/telemetry/index.d.ts +9 -0
  44. package/dist/telemetry/index.d.ts.map +1 -0
  45. package/dist/telemetry/index.js +9 -0
  46. package/dist/telemetry/index.js.map +1 -0
  47. package/dist/types.d.ts +332 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +10 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +74 -0
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Flow Report Generator
3
+ *
4
+ * Generates DORA/SPACE metrics flow reports from telemetry and WU data.
5
+ *
6
+ * @module @lumenflow/metrics/flow
7
+ */
8
+ import { quantile } from 'simple-statistics';
9
+ import { STATISTICS } from '../dora/constants.js';
10
+ const PERCENTAGE_PRECISION = 1;
11
+ /**
12
+ * Round to specified decimal places
13
+ */
14
+ function round(value, precision = PERCENTAGE_PRECISION) {
15
+ return value.toFixed(precision);
16
+ }
17
+ /**
18
+ * Calculate gate pass rate
19
+ */
20
+ function calculateGatePassRate(events) {
21
+ const total = events.length;
22
+ const passed = events.filter((e) => e.passed).length;
23
+ const failed = total - passed;
24
+ const passRate = total > 0 ? round((passed / total) * STATISTICS.PERCENTAGE_MULTIPLIER) : '0.0';
25
+ return { passRate, total, passed, failed };
26
+ }
27
+ /**
28
+ * Calculate gate P95 duration
29
+ */
30
+ function calculateGateP95(events) {
31
+ if (events.length === 0)
32
+ return 0;
33
+ const durations = events.map((e) => e.durationMs).sort((a, b) => a - b);
34
+ return quantile(durations, STATISTICS.P95_PERCENTILE);
35
+ }
36
+ /**
37
+ * Initialize gate statistics for a gate name
38
+ */
39
+ function initGateStats() {
40
+ return { total: 0, passed: 0, failed: 0, passRate: '0.0' };
41
+ }
42
+ /**
43
+ * Update gate stats with event data
44
+ */
45
+ function updateGateStats(stats, passed) {
46
+ stats.total++;
47
+ if (passed) {
48
+ stats.passed++;
49
+ }
50
+ else {
51
+ stats.failed++;
52
+ }
53
+ }
54
+ /**
55
+ * Calculate pass rate for gate stats
56
+ */
57
+ function calculatePassRate(stats) {
58
+ if (stats.total > 0) {
59
+ stats.passRate = round((stats.passed / stats.total) * STATISTICS.PERCENTAGE_MULTIPLIER);
60
+ }
61
+ }
62
+ /**
63
+ * Convert Map to plain object (safe conversion avoiding object injection)
64
+ */
65
+ function mapToObject(map) {
66
+ const result = {};
67
+ for (const [key, value] of map.entries()) {
68
+ Object.defineProperty(result, key, {
69
+ value,
70
+ writable: true,
71
+ enumerable: true,
72
+ configurable: true,
73
+ });
74
+ }
75
+ return result;
76
+ }
77
+ /**
78
+ * Group gates by name with statistics
79
+ */
80
+ function groupGatesByName(events) {
81
+ const byNameMap = new Map();
82
+ for (const event of events) {
83
+ const name = event.gateName;
84
+ if (!byNameMap.has(name)) {
85
+ byNameMap.set(name, initGateStats());
86
+ }
87
+ const stats = byNameMap.get(name);
88
+ if (stats) {
89
+ updateGateStats(stats, event.passed);
90
+ }
91
+ }
92
+ // Calculate pass rates
93
+ for (const stats of byNameMap.values()) {
94
+ calculatePassRate(stats);
95
+ }
96
+ return mapToObject(byNameMap);
97
+ }
98
+ /**
99
+ * Calculate LLM error and fallback rates
100
+ */
101
+ function calculateLLMRates(completeEvents, errorCount) {
102
+ const total = completeEvents.length + errorCount;
103
+ const errorRate = total > 0 ? round((errorCount / total) * STATISTICS.PERCENTAGE_MULTIPLIER) : '0.0';
104
+ const fallbackCount = completeEvents.filter((e) => e.fallbackUsed).length;
105
+ const fallbackRate = completeEvents.length > 0
106
+ ? round((fallbackCount / completeEvents.length) * STATISTICS.PERCENTAGE_MULTIPLIER)
107
+ : '0.0';
108
+ return { errorRate, fallbackRate };
109
+ }
110
+ /**
111
+ * Calculate LLM latency percentiles
112
+ */
113
+ function calculateLLMLatencies(completeEvents) {
114
+ const durations = completeEvents
115
+ .map((e) => e.durationMs)
116
+ .filter((d) => d !== undefined)
117
+ .sort((a, b) => a - b);
118
+ if (durations.length === 0) {
119
+ return { avgLatencyMs: 0, p50LatencyMs: 0, p95LatencyMs: 0, p99LatencyMs: 0 };
120
+ }
121
+ const avgLatencyMs = Math.round(durations.reduce((sum, d) => sum + d, 0) / durations.length);
122
+ const p50LatencyMs = quantile(durations, STATISTICS.MEDIAN_PERCENTILE);
123
+ const p95LatencyMs = quantile(durations, STATISTICS.P95_PERCENTILE);
124
+ const p99LatencyMs = quantile(durations, STATISTICS.P99_PERCENTILE);
125
+ return { avgLatencyMs, p50LatencyMs, p95LatencyMs, p99LatencyMs };
126
+ }
127
+ /**
128
+ * Calculate LLM token and cost totals
129
+ */
130
+ function calculateLLMCosts(completeEvents) {
131
+ const totalTokens = completeEvents.reduce((sum, e) => sum + (e.tokensUsed ?? 0), 0);
132
+ const totalCostUsd = completeEvents.reduce((sum, e) => sum + (e.estimatedCostUsd ?? 0), 0);
133
+ const confidences = completeEvents
134
+ .map((e) => e.confidence)
135
+ .filter((c) => c !== undefined);
136
+ const avgConfidence = confidences.length > 0
137
+ ? (confidences.reduce((sum, c) => sum + c, 0) / confidences.length).toFixed(2)
138
+ : '0.00';
139
+ return { totalTokens, totalCostUsd, avgConfidence };
140
+ }
141
+ /**
142
+ * Initialize LLM type stats
143
+ */
144
+ function initLLMTypeStats() {
145
+ return {
146
+ count: 0,
147
+ avgLatencyMs: 0,
148
+ totalCostUsd: 0,
149
+ fallbackRate: '0.0',
150
+ };
151
+ }
152
+ /**
153
+ * Update LLM type stats with event data
154
+ */
155
+ function updateLLMTypeStats(stats, event) {
156
+ stats.count++;
157
+ stats.avgLatencyMs += event.durationMs ?? 0;
158
+ stats.totalCostUsd += event.estimatedCostUsd ?? 0;
159
+ }
160
+ /**
161
+ * Calculate averages for LLM type stats
162
+ */
163
+ function calculateLLMTypeAverages(stats, type, completeEvents) {
164
+ if (stats.count > 0) {
165
+ stats.avgLatencyMs = Math.round(stats.avgLatencyMs / stats.count);
166
+ const typeFallbacks = completeEvents.filter((e) => e.classificationType === type && e.fallbackUsed).length;
167
+ stats.fallbackRate = round((typeFallbacks / stats.count) * STATISTICS.PERCENTAGE_MULTIPLIER);
168
+ }
169
+ }
170
+ /**
171
+ * Group LLM events by classification type
172
+ */
173
+ function groupLLMByType(completeEvents) {
174
+ const byTypeMap = new Map();
175
+ for (const event of completeEvents) {
176
+ const type = event.classificationType;
177
+ if (!byTypeMap.has(type)) {
178
+ byTypeMap.set(type, initLLMTypeStats());
179
+ }
180
+ const stats = byTypeMap.get(type);
181
+ if (stats) {
182
+ updateLLMTypeStats(stats, event);
183
+ }
184
+ }
185
+ // Calculate averages and fallback rates
186
+ for (const [type, stats] of byTypeMap.entries()) {
187
+ calculateLLMTypeAverages(stats, type, completeEvents);
188
+ }
189
+ return mapToObject(byTypeMap);
190
+ }
191
+ /**
192
+ * Calculate LLM classification metrics
193
+ */
194
+ function calculateLLMMetrics(events) {
195
+ const completeEvents = events.filter((e) => e.eventType === 'llm.classification.complete');
196
+ const errorEvents = events.filter((e) => e.eventType === 'llm.classification.error');
197
+ if (completeEvents.length === 0) {
198
+ return {
199
+ totalClassifications: 0,
200
+ errorRate: '0.0',
201
+ fallbackRate: '0.0',
202
+ avgLatencyMs: 0,
203
+ p50LatencyMs: 0,
204
+ p95LatencyMs: 0,
205
+ p99LatencyMs: 0,
206
+ totalTokens: 0,
207
+ totalCostUsd: 0,
208
+ avgConfidence: '0.00',
209
+ byType: {},
210
+ };
211
+ }
212
+ const { errorRate, fallbackRate } = calculateLLMRates(completeEvents, errorEvents.length);
213
+ const latencies = calculateLLMLatencies(completeEvents);
214
+ const costs = calculateLLMCosts(completeEvents);
215
+ const byType = groupLLMByType(completeEvents);
216
+ return {
217
+ totalClassifications: completeEvents.length,
218
+ errorRate,
219
+ fallbackRate,
220
+ ...latencies,
221
+ ...costs,
222
+ byType,
223
+ };
224
+ }
225
+ /**
226
+ * Generate flow report from input data
227
+ */
228
+ export function generateFlowReport(input) {
229
+ const { gateEvents, llmEvents, completedWUs, dateRange } = input;
230
+ const gateStats = calculateGatePassRate(gateEvents);
231
+ const gateP95 = calculateGateP95(gateEvents);
232
+ const byName = groupGatesByName(gateEvents);
233
+ const llmMetrics = calculateLLMMetrics(llmEvents);
234
+ const wuList = completedWUs.map((wu) => ({
235
+ wuId: wu.id,
236
+ completedDate: wu.completedAt?.toISOString().split('T')[0] ?? '',
237
+ lane: wu.lane,
238
+ title: wu.title,
239
+ }));
240
+ return {
241
+ range: dateRange,
242
+ gates: {
243
+ ...gateStats,
244
+ p95: gateP95,
245
+ byName,
246
+ },
247
+ wus: {
248
+ completed: completedWUs.length,
249
+ list: wuList,
250
+ },
251
+ llm: llmMetrics,
252
+ };
253
+ }
254
+ //# sourceMappingURL=generate-flow-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-flow-report.js","sourceRoot":"","sources":["../../src/flow/generate-flow-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Flow Metrics Module
3
+ *
4
+ * Flow state calculation, bottleneck analysis, and report generation.
5
+ *
6
+ * @module @lumenflow/metrics/flow
7
+ */
8
+ export { calculateFlowState } from './calculate-flow-state.js';
9
+ export { analyzeBottlenecks, criticalPath, impactScore, topologicalSort, getBottleneckAnalysis, type DependencyGraph, } from './analyze-bottlenecks.js';
10
+ export { generateFlowReport } from './generate-flow-report.js';
11
+ export { captureMetricsSnapshot } from './capture-metrics-snapshot.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Flow Metrics Module
3
+ *
4
+ * Flow state calculation, bottleneck analysis, and report generation.
5
+ *
6
+ * @module @lumenflow/metrics/flow
7
+ */
8
+ export { calculateFlowState } from './calculate-flow-state.js';
9
+ export { analyzeBottlenecks, criticalPath, impactScore, topologicalSort, getBottleneckAnalysis, } from './analyze-bottlenecks.js';
10
+ export { generateFlowReport } from './generate-flow-report.js';
11
+ export { captureMetricsSnapshot } from './capture-metrics-snapshot.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,GAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @lumenflow/metrics
3
+ *
4
+ * DORA/SPACE analytics and flow metrics for LumenFlow workflow framework.
5
+ *
6
+ * @module @lumenflow/metrics
7
+ */
8
+ export declare const METRICS_VERSION = "0.1.0";
9
+ export type { DORAStatusTier, WUMetrics, GitCommit, SkipGatesEntry, DeploymentFrequencyMetrics, LeadTimeMetrics, ChangeFailureRateMetrics, MTTRMetrics, DORAMetrics, LaneHealth, FlowState, GateTelemetryEvent, LLMTelemetryEvent, GateMetricsByName, LLMMetrics, FlowReportData, BottleneckResult, CriticalPathResult, BottleneckAnalysis, DependencyGraphNode, MetricsSnapshotType, MetricsSnapshot, TelemetryEmitFn, GateEventInput, LLMClassificationStartInput, LLMClassificationCompleteInput, LLMClassificationErrorInput, WUFlowEventInput, FlowReportInput, MetricsSnapshotInput, } from './types.js';
10
+ export { calculateDeploymentFrequency, calculateLeadTime, calculateCFR, calculateMTTR, calculateDORAMetrics, identifyEmergencyFixes, DEPLOYMENT_FREQUENCY, LEAD_TIME_HOURS, CFR_PERCENT, MTTR_HOURS, STATISTICS, } from './dora/index.js';
11
+ export { calculateFlowState, analyzeBottlenecks, criticalPath, impactScore, topologicalSort, getBottleneckAnalysis, generateFlowReport, captureMetricsSnapshot, type DependencyGraph, } from './flow/index.js';
12
+ export { createTelemetryEmitter, TELEMETRY_PATHS, type TelemetryEmitter, } from './telemetry/index.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,eAAe,UAAU,CAAC;AAGvC,YAAY,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,EACxB,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @lumenflow/metrics
3
+ *
4
+ * DORA/SPACE analytics and flow metrics for LumenFlow workflow framework.
5
+ *
6
+ * @module @lumenflow/metrics
7
+ */
8
+ export const METRICS_VERSION = '0.1.0';
9
+ // DORA metrics
10
+ export { calculateDeploymentFrequency, calculateLeadTime, calculateCFR, calculateMTTR, calculateDORAMetrics, identifyEmergencyFixes, DEPLOYMENT_FREQUENCY, LEAD_TIME_HOURS, CFR_PERCENT, MTTR_HOURS, STATISTICS, } from './dora/index.js';
11
+ // Flow metrics
12
+ export { calculateFlowState, analyzeBottlenecks, criticalPath, impactScore, topologicalSort, getBottleneckAnalysis, generateFlowReport, captureMetricsSnapshot, } from './flow/index.js';
13
+ // Telemetry
14
+ export { createTelemetryEmitter, TELEMETRY_PATHS, } from './telemetry/index.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAoCvC,eAAe;AACf,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,eAAe;AACf,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AAEzB,YAAY;AACZ,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Telemetry Emission Module
3
+ *
4
+ * Emits structured NDJSON telemetry for gates execution, LLM classification,
5
+ * and WU flow metrics.
6
+ *
7
+ * @module @lumenflow/metrics/telemetry
8
+ */
9
+ import type { TelemetryEmitFn, GateEventInput, LLMClassificationStartInput, LLMClassificationCompleteInput, LLMClassificationErrorInput, WUFlowEventInput } from '../types.js';
10
+ /** Default telemetry paths */
11
+ export declare const TELEMETRY_PATHS: {
12
+ readonly GATES: ".beacon/telemetry/gates.ndjson";
13
+ readonly LLM_CLASSIFICATION: ".beacon/telemetry/llm-classification.ndjson";
14
+ readonly FLOW_LOG: ".beacon/flow.log";
15
+ };
16
+ /**
17
+ * Telemetry emitter interface
18
+ */
19
+ export interface TelemetryEmitter {
20
+ emitGateEvent(data: GateEventInput, logPath?: string): void;
21
+ emitLLMClassificationStart(data: LLMClassificationStartInput, logPath?: string): void;
22
+ emitLLMClassificationComplete(data: LLMClassificationCompleteInput, logPath?: string): void;
23
+ emitLLMClassificationError(data: LLMClassificationErrorInput, logPath?: string): void;
24
+ emitWUFlowEvent(data: WUFlowEventInput, logPath?: string): void;
25
+ }
26
+ /**
27
+ * Create a telemetry emitter with the given emit function.
28
+ * This allows consumers to provide their own filesystem implementation.
29
+ */
30
+ export declare function createTelemetryEmitter(emit: TelemetryEmitFn): TelemetryEmitter;
31
+ //# sourceMappingURL=emit-telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry/emit-telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,8BAA8B;AAC9B,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5D,0BAA0B,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtF,6BAA6B,CAAC,IAAI,EAAE,8BAA8B,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5F,0BAA0B,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtF,eAAe,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,gBAAgB,CAqG9E"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Telemetry Emission Module
3
+ *
4
+ * Emits structured NDJSON telemetry for gates execution, LLM classification,
5
+ * and WU flow metrics.
6
+ *
7
+ * @module @lumenflow/metrics/telemetry
8
+ */
9
+ /** Default telemetry paths */
10
+ export const TELEMETRY_PATHS = {
11
+ GATES: '.beacon/telemetry/gates.ndjson',
12
+ LLM_CLASSIFICATION: '.beacon/telemetry/llm-classification.ndjson',
13
+ FLOW_LOG: '.beacon/flow.log',
14
+ };
15
+ /**
16
+ * Create a telemetry emitter with the given emit function.
17
+ * This allows consumers to provide their own filesystem implementation.
18
+ */
19
+ export function createTelemetryEmitter(emit) {
20
+ return {
21
+ /**
22
+ * Emit a gates execution event
23
+ */
24
+ emitGateEvent(data, logPath = TELEMETRY_PATHS.GATES) {
25
+ const event = {
26
+ timestamp: new Date().toISOString(),
27
+ wu_id: data.wuId ?? null,
28
+ lane: data.lane ?? null,
29
+ gate_name: data.gateName,
30
+ passed: data.passed,
31
+ duration_ms: data.durationMs,
32
+ };
33
+ emit(logPath, event);
34
+ },
35
+ /**
36
+ * Emit LLM classification start event
37
+ */
38
+ emitLLMClassificationStart(data, logPath = TELEMETRY_PATHS.LLM_CLASSIFICATION) {
39
+ const event = {
40
+ timestamp: new Date().toISOString(),
41
+ event_type: 'llm.classification.start',
42
+ classification_type: data.classificationType,
43
+ has_context: data.hasContext ?? false,
44
+ wu_id: data.wuId ?? null,
45
+ lane: data.lane ?? null,
46
+ };
47
+ emit(logPath, event);
48
+ },
49
+ /**
50
+ * Emit LLM classification complete event
51
+ */
52
+ emitLLMClassificationComplete(data, logPath = TELEMETRY_PATHS.LLM_CLASSIFICATION) {
53
+ const event = {
54
+ timestamp: new Date().toISOString(),
55
+ event_type: 'llm.classification.complete',
56
+ classification_type: data.classificationType,
57
+ duration_ms: data.durationMs,
58
+ tokens_used: data.tokensUsed,
59
+ estimated_cost_usd: data.estimatedCostUsd,
60
+ confidence: data.confidence,
61
+ fallback_used: data.fallbackUsed,
62
+ wu_id: data.wuId ?? null,
63
+ lane: data.lane ?? null,
64
+ };
65
+ if (data.fallbackUsed && data.fallbackReason) {
66
+ event['fallback_reason'] = data.fallbackReason;
67
+ }
68
+ emit(logPath, event);
69
+ },
70
+ /**
71
+ * Emit LLM classification error event
72
+ */
73
+ emitLLMClassificationError(data, logPath = TELEMETRY_PATHS.LLM_CLASSIFICATION) {
74
+ const event = {
75
+ timestamp: new Date().toISOString(),
76
+ event_type: 'llm.classification.error',
77
+ classification_type: data.classificationType,
78
+ error_type: data.errorType,
79
+ error_message: data.errorMessage,
80
+ wu_id: data.wuId ?? null,
81
+ lane: data.lane ?? null,
82
+ };
83
+ if (data.durationMs !== undefined) {
84
+ event['duration_ms'] = data.durationMs;
85
+ }
86
+ if (data.inputTextPreview) {
87
+ event['input_text_preview'] = '[REDACTED]';
88
+ }
89
+ emit(logPath, event);
90
+ },
91
+ /**
92
+ * Emit WU flow telemetry event
93
+ */
94
+ emitWUFlowEvent(data, logPath = TELEMETRY_PATHS.FLOW_LOG) {
95
+ const event = {
96
+ timestamp: new Date().toISOString(),
97
+ ...data,
98
+ };
99
+ emit(logPath, event);
100
+ },
101
+ };
102
+ }
103
+ //# sourceMappingURL=emit-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-telemetry.js","sourceRoot":"","sources":["../../src/telemetry/emit-telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Telemetry Module
3
+ *
4
+ * Structured telemetry emission for gates, LLM classification, and WU flow events.
5
+ *
6
+ * @module @lumenflow/metrics/telemetry
7
+ */
8
+ export { createTelemetryEmitter, TELEMETRY_PATHS, type TelemetryEmitter, } from './emit-telemetry.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Telemetry Module
3
+ *
4
+ * Structured telemetry emission for gates, LLM classification, and WU flow events.
5
+ *
6
+ * @module @lumenflow/metrics/telemetry
7
+ */
8
+ export { createTelemetryEmitter, TELEMETRY_PATHS, } from './emit-telemetry.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,qBAAqB,CAAC"}