@cogitator-ai/workflows 0.1.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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/builder.d.ts +39 -0
  4. package/dist/builder.d.ts.map +1 -0
  5. package/dist/builder.js +224 -0
  6. package/dist/builder.js.map +1 -0
  7. package/dist/checkpoint.d.ts +33 -0
  8. package/dist/checkpoint.d.ts.map +1 -0
  9. package/dist/checkpoint.js +108 -0
  10. package/dist/checkpoint.js.map +1 -0
  11. package/dist/executor.d.ts +24 -0
  12. package/dist/executor.d.ts.map +1 -0
  13. package/dist/executor.js +207 -0
  14. package/dist/executor.js.map +1 -0
  15. package/dist/human/approval-store.d.ts +95 -0
  16. package/dist/human/approval-store.d.ts.map +1 -0
  17. package/dist/human/approval-store.js +377 -0
  18. package/dist/human/approval-store.js.map +1 -0
  19. package/dist/human/human-node.d.ts +104 -0
  20. package/dist/human/human-node.d.ts.map +1 -0
  21. package/dist/human/human-node.js +342 -0
  22. package/dist/human/human-node.js.map +1 -0
  23. package/dist/human/index.d.ts +17 -0
  24. package/dist/human/index.d.ts.map +1 -0
  25. package/dist/human/index.js +17 -0
  26. package/dist/human/index.js.map +1 -0
  27. package/dist/human/notifiers.d.ts +85 -0
  28. package/dist/human/notifiers.d.ts.map +1 -0
  29. package/dist/human/notifiers.js +289 -0
  30. package/dist/human/notifiers.js.map +1 -0
  31. package/dist/index.d.ts +32 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +19 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/manager/index.d.ts +19 -0
  36. package/dist/manager/index.d.ts.map +1 -0
  37. package/dist/manager/index.js +17 -0
  38. package/dist/manager/index.js.map +1 -0
  39. package/dist/manager/run-store.d.ts +78 -0
  40. package/dist/manager/run-store.d.ts.map +1 -0
  41. package/dist/manager/run-store.js +390 -0
  42. package/dist/manager/run-store.js.map +1 -0
  43. package/dist/manager/scheduler.d.ts +159 -0
  44. package/dist/manager/scheduler.d.ts.map +1 -0
  45. package/dist/manager/scheduler.js +355 -0
  46. package/dist/manager/scheduler.js.map +1 -0
  47. package/dist/manager/workflow-manager.d.ts +114 -0
  48. package/dist/manager/workflow-manager.d.ts.map +1 -0
  49. package/dist/manager/workflow-manager.js +460 -0
  50. package/dist/manager/workflow-manager.js.map +1 -0
  51. package/dist/nodes/agent.d.ts +24 -0
  52. package/dist/nodes/agent.d.ts.map +1 -0
  53. package/dist/nodes/agent.js +37 -0
  54. package/dist/nodes/agent.js.map +1 -0
  55. package/dist/nodes/base.d.ts +12 -0
  56. package/dist/nodes/base.d.ts.map +1 -0
  57. package/dist/nodes/base.js +5 -0
  58. package/dist/nodes/base.js.map +1 -0
  59. package/dist/nodes/function.d.ts +27 -0
  60. package/dist/nodes/function.d.ts.map +1 -0
  61. package/dist/nodes/function.js +29 -0
  62. package/dist/nodes/function.js.map +1 -0
  63. package/dist/nodes/index.d.ts +8 -0
  64. package/dist/nodes/index.d.ts.map +1 -0
  65. package/dist/nodes/index.js +8 -0
  66. package/dist/nodes/index.js.map +1 -0
  67. package/dist/nodes/tool.d.ts +19 -0
  68. package/dist/nodes/tool.d.ts.map +1 -0
  69. package/dist/nodes/tool.js +26 -0
  70. package/dist/nodes/tool.js.map +1 -0
  71. package/dist/observability/exporters.d.ts +93 -0
  72. package/dist/observability/exporters.d.ts.map +1 -0
  73. package/dist/observability/exporters.js +330 -0
  74. package/dist/observability/exporters.js.map +1 -0
  75. package/dist/observability/index.d.ts +17 -0
  76. package/dist/observability/index.d.ts.map +1 -0
  77. package/dist/observability/index.js +17 -0
  78. package/dist/observability/index.js.map +1 -0
  79. package/dist/observability/metrics.d.ts +114 -0
  80. package/dist/observability/metrics.d.ts.map +1 -0
  81. package/dist/observability/metrics.js +435 -0
  82. package/dist/observability/metrics.js.map +1 -0
  83. package/dist/observability/span-attributes.d.ts +95 -0
  84. package/dist/observability/span-attributes.d.ts.map +1 -0
  85. package/dist/observability/span-attributes.js +142 -0
  86. package/dist/observability/span-attributes.js.map +1 -0
  87. package/dist/observability/tracer.d.ts +110 -0
  88. package/dist/observability/tracer.d.ts.map +1 -0
  89. package/dist/observability/tracer.js +409 -0
  90. package/dist/observability/tracer.js.map +1 -0
  91. package/dist/patterns/index.d.ts +15 -0
  92. package/dist/patterns/index.d.ts.map +1 -0
  93. package/dist/patterns/index.js +15 -0
  94. package/dist/patterns/index.js.map +1 -0
  95. package/dist/patterns/map-reduce.d.ts +223 -0
  96. package/dist/patterns/map-reduce.d.ts.map +1 -0
  97. package/dist/patterns/map-reduce.js +378 -0
  98. package/dist/patterns/map-reduce.js.map +1 -0
  99. package/dist/saga/circuit-breaker.d.ts +153 -0
  100. package/dist/saga/circuit-breaker.d.ts.map +1 -0
  101. package/dist/saga/circuit-breaker.js +306 -0
  102. package/dist/saga/circuit-breaker.js.map +1 -0
  103. package/dist/saga/compensation.d.ts +134 -0
  104. package/dist/saga/compensation.d.ts.map +1 -0
  105. package/dist/saga/compensation.js +240 -0
  106. package/dist/saga/compensation.js.map +1 -0
  107. package/dist/saga/dead-letter.d.ts +113 -0
  108. package/dist/saga/dead-letter.d.ts.map +1 -0
  109. package/dist/saga/dead-letter.js +307 -0
  110. package/dist/saga/dead-letter.js.map +1 -0
  111. package/dist/saga/idempotency.d.ts +95 -0
  112. package/dist/saga/idempotency.d.ts.map +1 -0
  113. package/dist/saga/idempotency.js +266 -0
  114. package/dist/saga/idempotency.js.map +1 -0
  115. package/dist/saga/index.d.ts +16 -0
  116. package/dist/saga/index.d.ts.map +1 -0
  117. package/dist/saga/index.js +16 -0
  118. package/dist/saga/index.js.map +1 -0
  119. package/dist/saga/retry.d.ts +59 -0
  120. package/dist/saga/retry.d.ts.map +1 -0
  121. package/dist/saga/retry.js +222 -0
  122. package/dist/saga/retry.js.map +1 -0
  123. package/dist/scheduler.d.ts +37 -0
  124. package/dist/scheduler.d.ts.map +1 -0
  125. package/dist/scheduler.js +151 -0
  126. package/dist/scheduler.js.map +1 -0
  127. package/dist/subworkflows/index.d.ts +16 -0
  128. package/dist/subworkflows/index.d.ts.map +1 -0
  129. package/dist/subworkflows/index.js +16 -0
  130. package/dist/subworkflows/index.js.map +1 -0
  131. package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
  132. package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
  133. package/dist/subworkflows/parallel-subworkflows.js +270 -0
  134. package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
  135. package/dist/subworkflows/subworkflow-node.d.ts +136 -0
  136. package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
  137. package/dist/subworkflows/subworkflow-node.js +164 -0
  138. package/dist/subworkflows/subworkflow-node.js.map +1 -0
  139. package/dist/timers/cron-parser.d.ts +110 -0
  140. package/dist/timers/cron-parser.d.ts.map +1 -0
  141. package/dist/timers/cron-parser.js +412 -0
  142. package/dist/timers/cron-parser.js.map +1 -0
  143. package/dist/timers/index.d.ts +18 -0
  144. package/dist/timers/index.d.ts.map +1 -0
  145. package/dist/timers/index.js +18 -0
  146. package/dist/timers/index.js.map +1 -0
  147. package/dist/timers/timer-manager.d.ts +219 -0
  148. package/dist/timers/timer-manager.d.ts.map +1 -0
  149. package/dist/timers/timer-manager.js +351 -0
  150. package/dist/timers/timer-manager.js.map +1 -0
  151. package/dist/timers/timer-node.d.ts +144 -0
  152. package/dist/timers/timer-node.d.ts.map +1 -0
  153. package/dist/timers/timer-node.js +246 -0
  154. package/dist/timers/timer-node.js.map +1 -0
  155. package/dist/timers/timer-store.d.ts +90 -0
  156. package/dist/timers/timer-store.d.ts.map +1 -0
  157. package/dist/timers/timer-store.js +357 -0
  158. package/dist/timers/timer-store.js.map +1 -0
  159. package/dist/triggers/cron-trigger.d.ts +102 -0
  160. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  161. package/dist/triggers/cron-trigger.js +309 -0
  162. package/dist/triggers/cron-trigger.js.map +1 -0
  163. package/dist/triggers/index.d.ts +14 -0
  164. package/dist/triggers/index.d.ts.map +1 -0
  165. package/dist/triggers/index.js +10 -0
  166. package/dist/triggers/index.js.map +1 -0
  167. package/dist/triggers/rate-limiter.d.ts +130 -0
  168. package/dist/triggers/rate-limiter.d.ts.map +1 -0
  169. package/dist/triggers/rate-limiter.js +294 -0
  170. package/dist/triggers/rate-limiter.js.map +1 -0
  171. package/dist/triggers/trigger-manager.d.ts +166 -0
  172. package/dist/triggers/trigger-manager.d.ts.map +1 -0
  173. package/dist/triggers/trigger-manager.js +436 -0
  174. package/dist/triggers/trigger-manager.js.map +1 -0
  175. package/dist/triggers/webhook-trigger.d.ts +150 -0
  176. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  177. package/dist/triggers/webhook-trigger.js +452 -0
  178. package/dist/triggers/webhook-trigger.js.map +1 -0
  179. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AA4CvF;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,WAAW,CAAmD;IACtE,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAsB;gBAE7B,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAY/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQhF;;OAEG;IACH,sBAAsB,CACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,EAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,IAAI;IAeP;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,SAAI,GACV,IAAI;IA4CP;;OAEG;IACH,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,IAAI;IAoBP;;OAEG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQpD;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAwEhE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAYhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,kBAAkB,IAAI,MAAM;IA2C5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;CAgB7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,wBAAwB,CAE1B;AAOD,wBAAgB,gBAAgB,IAAI,wBAAwB,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAExE"}
@@ -0,0 +1,435 @@
1
+ /**
2
+ * WorkflowMetricsCollector - Metrics collection for workflow execution
3
+ *
4
+ * Features:
5
+ * - Counters for executions, successes, failures
6
+ * - Histograms for latency distribution
7
+ * - Gauges for active workflows, queue depth
8
+ * - Per-node and per-workflow metrics
9
+ * - Token and cost tracking
10
+ * - Prometheus-compatible output
11
+ */
12
+ const DEFAULT_LATENCY_BUCKETS = [
13
+ 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000,
14
+ ];
15
+ const DEFAULT_TOKEN_BUCKETS = [
16
+ 100, 500, 1000, 5000, 10000, 50000, 100000,
17
+ ];
18
+ const DEFAULT_COST_BUCKETS = [
19
+ 0.001, 0.01, 0.1, 0.5, 1, 5, 10, 50,
20
+ ];
21
+ /**
22
+ * Calculate percentile from sorted array
23
+ */
24
+ function percentile(sortedValues, p) {
25
+ if (sortedValues.length === 0)
26
+ return 0;
27
+ const idx = Math.ceil((p / 100) * sortedValues.length) - 1;
28
+ return sortedValues[Math.max(0, idx)];
29
+ }
30
+ /**
31
+ * WorkflowMetricsCollector - Main metrics collection class
32
+ */
33
+ export class WorkflowMetricsCollector {
34
+ config;
35
+ counters = new Map();
36
+ gauges = new Map();
37
+ histograms = new Map();
38
+ latencySamples = new Map();
39
+ nodeMetrics = new Map();
40
+ tokenUsage = new Map();
41
+ costTracking = new Map();
42
+ lastUpdated = Date.now();
43
+ constructor(config = {}) {
44
+ this.config = {
45
+ enabled: true,
46
+ prefix: 'cogitator_workflow',
47
+ labels: {},
48
+ latencyBuckets: DEFAULT_LATENCY_BUCKETS,
49
+ tokenBuckets: DEFAULT_TOKEN_BUCKETS,
50
+ costBuckets: DEFAULT_COST_BUCKETS,
51
+ ...config,
52
+ };
53
+ }
54
+ /**
55
+ * Get prefixed metric name
56
+ */
57
+ metricName(name) {
58
+ return this.config.prefix ? `${this.config.prefix}_${name}` : name;
59
+ }
60
+ /**
61
+ * Record workflow start
62
+ */
63
+ recordWorkflowStart(workflowName, labels) {
64
+ const key = this.metricName('executions_total');
65
+ this.incrementCounter(key, { workflow: workflowName, ...labels });
66
+ const activeKey = this.metricName('active_workflows');
67
+ this.incrementGauge(activeKey, { workflow: workflowName });
68
+ }
69
+ /**
70
+ * Record workflow completion
71
+ */
72
+ recordWorkflowComplete(workflowName, durationMs, status, labels) {
73
+ const activeKey = this.metricName('active_workflows');
74
+ this.decrementGauge(activeKey, { workflow: workflowName });
75
+ const statusKey = this.metricName(`executions_${status}_total`);
76
+ this.incrementCounter(statusKey, { workflow: workflowName, ...labels });
77
+ const latencyKey = this.metricName('execution_duration_ms');
78
+ this.recordHistogram(latencyKey, durationMs, { workflow: workflowName });
79
+ this.recordLatencySample(workflowName, durationMs);
80
+ this.lastUpdated = Date.now();
81
+ }
82
+ /**
83
+ * Record node execution
84
+ */
85
+ recordNodeExecution(workflowName, nodeName, nodeType, durationMs, success, retries = 0) {
86
+ if (!this.nodeMetrics.has(workflowName)) {
87
+ this.nodeMetrics.set(workflowName, new Map());
88
+ }
89
+ const workflowNodes = this.nodeMetrics.get(workflowName);
90
+ if (!workflowNodes.has(nodeName)) {
91
+ workflowNodes.set(nodeName, {
92
+ executionCount: 0,
93
+ successCount: 0,
94
+ failureCount: 0,
95
+ retryCount: 0,
96
+ durations: [],
97
+ });
98
+ }
99
+ const nodeData = workflowNodes.get(nodeName);
100
+ nodeData.executionCount++;
101
+ nodeData.durations.push(durationMs);
102
+ if (success) {
103
+ nodeData.successCount++;
104
+ }
105
+ else {
106
+ nodeData.failureCount++;
107
+ }
108
+ nodeData.retryCount += retries;
109
+ const nodeLatencyKey = this.metricName('node_duration_ms');
110
+ this.recordHistogram(nodeLatencyKey, durationMs, {
111
+ workflow: workflowName,
112
+ node: nodeName,
113
+ type: nodeType,
114
+ });
115
+ const nodeExecKey = this.metricName('node_executions_total');
116
+ this.incrementCounter(nodeExecKey, {
117
+ workflow: workflowName,
118
+ node: nodeName,
119
+ status: success ? 'success' : 'failure',
120
+ });
121
+ }
122
+ /**
123
+ * Record token usage
124
+ */
125
+ recordTokenUsage(workflowName, inputTokens, outputTokens) {
126
+ if (!this.tokenUsage.has(workflowName)) {
127
+ this.tokenUsage.set(workflowName, {
128
+ input: 0,
129
+ output: 0,
130
+ total: 0,
131
+ });
132
+ }
133
+ const usage = this.tokenUsage.get(workflowName);
134
+ usage.input += inputTokens;
135
+ usage.output += outputTokens;
136
+ usage.total += inputTokens + outputTokens;
137
+ const tokenKey = this.metricName('tokens_total');
138
+ this.recordHistogram(tokenKey, inputTokens + outputTokens, {
139
+ workflow: workflowName,
140
+ });
141
+ }
142
+ /**
143
+ * Record cost
144
+ */
145
+ recordCost(workflowName, cost) {
146
+ const current = this.costTracking.get(workflowName) ?? 0;
147
+ this.costTracking.set(workflowName, current + cost);
148
+ const costKey = this.metricName('cost_usd');
149
+ this.recordHistogram(costKey, cost, { workflow: workflowName });
150
+ }
151
+ /**
152
+ * Get workflow metrics summary
153
+ */
154
+ getWorkflowMetrics(workflowName) {
155
+ const samples = this.latencySamples.get(workflowName);
156
+ if (!samples || samples.length === 0) {
157
+ return null;
158
+ }
159
+ const durations = samples.map((s) => s.value).sort((a, b) => a - b);
160
+ const totalKey = this.metricName('executions_total');
161
+ const successKey = this.metricName('executions_success_total');
162
+ const failureKey = this.metricName('executions_failure_total');
163
+ const cancelledKey = this.metricName('executions_cancelled_total');
164
+ const getCounterValue = (key) => {
165
+ const counter = this.counters.get(`${key}:workflow=${workflowName}`);
166
+ return counter?.value ?? 0;
167
+ };
168
+ const nodeMetricsMap = new Map();
169
+ const workflowNodes = this.nodeMetrics.get(workflowName);
170
+ if (workflowNodes) {
171
+ for (const [nodeName, data] of workflowNodes) {
172
+ const sortedDurations = [...data.durations].sort((a, b) => a - b);
173
+ const avg = sortedDurations.reduce((sum, d) => sum + d, 0) /
174
+ sortedDurations.length;
175
+ nodeMetricsMap.set(nodeName, {
176
+ executionCount: data.executionCount,
177
+ successCount: data.successCount,
178
+ failureCount: data.failureCount,
179
+ retryCount: data.retryCount,
180
+ avgDuration: avg,
181
+ p50Duration: percentile(sortedDurations, 50),
182
+ p95Duration: percentile(sortedDurations, 95),
183
+ p99Duration: percentile(sortedDurations, 99),
184
+ minDuration: sortedDurations[0] ?? 0,
185
+ maxDuration: sortedDurations[sortedDurations.length - 1] ?? 0,
186
+ });
187
+ }
188
+ }
189
+ const tokenData = this.tokenUsage.get(workflowName) ?? {
190
+ input: 0,
191
+ output: 0,
192
+ total: 0,
193
+ };
194
+ const totalCost = this.costTracking.get(workflowName) ?? 0;
195
+ return {
196
+ workflowName,
197
+ executionCount: getCounterValue(totalKey),
198
+ successCount: getCounterValue(successKey),
199
+ failureCount: getCounterValue(failureKey),
200
+ cancelledCount: getCounterValue(cancelledKey),
201
+ latency: {
202
+ avg: durations.reduce((sum, d) => sum + d, 0) / durations.length,
203
+ p50: percentile(durations, 50),
204
+ p90: percentile(durations, 90),
205
+ p99: percentile(durations, 99),
206
+ min: durations[0],
207
+ max: durations[durations.length - 1],
208
+ },
209
+ nodeMetrics: nodeMetricsMap,
210
+ tokenUsage: tokenData,
211
+ totalCost,
212
+ lastUpdated: this.lastUpdated,
213
+ };
214
+ }
215
+ /**
216
+ * Increment counter
217
+ */
218
+ incrementCounter(name, labels, value = 1) {
219
+ const key = this.labeledKey(name, labels);
220
+ const current = this.counters.get(key);
221
+ if (current) {
222
+ current.value += value;
223
+ }
224
+ else {
225
+ this.counters.set(key, {
226
+ value,
227
+ labels: { ...this.config.labels, ...labels },
228
+ });
229
+ }
230
+ }
231
+ /**
232
+ * Set gauge value
233
+ */
234
+ setGauge(name, value, labels) {
235
+ const key = this.labeledKey(name, labels);
236
+ this.gauges.set(key, {
237
+ value,
238
+ labels: { ...this.config.labels, ...labels },
239
+ });
240
+ }
241
+ /**
242
+ * Increment gauge
243
+ */
244
+ incrementGauge(name, labels) {
245
+ const key = this.labeledKey(name, labels);
246
+ const current = this.gauges.get(key);
247
+ this.setGauge(name, (current?.value ?? 0) + 1, labels);
248
+ }
249
+ /**
250
+ * Decrement gauge
251
+ */
252
+ decrementGauge(name, labels) {
253
+ const key = this.labeledKey(name, labels);
254
+ const current = this.gauges.get(key);
255
+ this.setGauge(name, Math.max(0, (current?.value ?? 0) - 1), labels);
256
+ }
257
+ /**
258
+ * Record histogram value
259
+ */
260
+ recordHistogram(name, value, labels) {
261
+ const key = this.labeledKey(name, labels);
262
+ let histogram = this.histograms.get(key);
263
+ if (!histogram) {
264
+ const buckets = this.getBucketsForMetric(name);
265
+ histogram = {
266
+ buckets: new Map(buckets.map((b) => [b, 0])),
267
+ sum: 0,
268
+ count: 0,
269
+ min: Infinity,
270
+ max: -Infinity,
271
+ };
272
+ this.histograms.set(key, histogram);
273
+ }
274
+ histogram.sum += value;
275
+ histogram.count++;
276
+ histogram.min = Math.min(histogram.min, value);
277
+ histogram.max = Math.max(histogram.max, value);
278
+ for (const [bucket, count] of histogram.buckets) {
279
+ if (value <= bucket) {
280
+ histogram.buckets.set(bucket, count + 1);
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Record latency sample for percentile calculations
286
+ */
287
+ recordLatencySample(workflowName, value) {
288
+ if (!this.latencySamples.has(workflowName)) {
289
+ this.latencySamples.set(workflowName, []);
290
+ }
291
+ const samples = this.latencySamples.get(workflowName);
292
+ samples.push({ value, timestamp: Date.now() });
293
+ if (samples.length > 1000) {
294
+ samples.shift();
295
+ }
296
+ }
297
+ /**
298
+ * Get appropriate buckets for a metric
299
+ */
300
+ getBucketsForMetric(name) {
301
+ if (name.includes('duration') || name.includes('latency')) {
302
+ return this.config.latencyBuckets ?? DEFAULT_LATENCY_BUCKETS;
303
+ }
304
+ if (name.includes('token')) {
305
+ return this.config.tokenBuckets ?? DEFAULT_TOKEN_BUCKETS;
306
+ }
307
+ if (name.includes('cost')) {
308
+ return this.config.costBuckets ?? DEFAULT_COST_BUCKETS;
309
+ }
310
+ return DEFAULT_LATENCY_BUCKETS;
311
+ }
312
+ /**
313
+ * Build labeled key for maps
314
+ */
315
+ labeledKey(name, labels) {
316
+ if (!labels || Object.keys(labels).length === 0) {
317
+ return name;
318
+ }
319
+ const labelPairs = Object.entries(labels)
320
+ .sort(([a], [b]) => a.localeCompare(b))
321
+ .map(([k, v]) => `${k}=${v}`)
322
+ .join(',');
323
+ return `${name}:${labelPairs}`;
324
+ }
325
+ /**
326
+ * Export metrics in Prometheus text format
327
+ */
328
+ toPrometheusFormat() {
329
+ const lines = [];
330
+ for (const [key, data] of this.counters) {
331
+ const [name] = key.split(':');
332
+ const labelStr = this.formatPrometheusLabels(data.labels);
333
+ lines.push(`# TYPE ${name} counter`);
334
+ lines.push(`${name}${labelStr} ${data.value.toString()}`);
335
+ }
336
+ for (const [key, data] of this.gauges) {
337
+ const [name] = key.split(':');
338
+ const labelStr = this.formatPrometheusLabels(data.labels);
339
+ lines.push(`# TYPE ${name} gauge`);
340
+ lines.push(`${name}${labelStr} ${data.value.toString()}`);
341
+ }
342
+ for (const [key, data] of this.histograms) {
343
+ const [name, labelsPart] = key.split(':');
344
+ const labels = this.parseLabels(labelsPart);
345
+ const baseLabelStr = this.formatPrometheusLabels(labels);
346
+ lines.push(`# TYPE ${name} histogram`);
347
+ for (const [bucket, count] of data.buckets) {
348
+ const bucketLabels = { ...labels, le: bucket.toString() };
349
+ lines.push(`${name}_bucket${this.formatPrometheusLabels(bucketLabels)} ${count.toString()}`);
350
+ }
351
+ const infLabels = { ...labels, le: '+Inf' };
352
+ lines.push(`${name}_bucket${this.formatPrometheusLabels(infLabels)} ${data.count.toString()}`);
353
+ lines.push(`${name}_sum${baseLabelStr} ${data.sum.toString()}`);
354
+ lines.push(`${name}_count${baseLabelStr} ${data.count.toString()}`);
355
+ }
356
+ return lines.join('\n');
357
+ }
358
+ /**
359
+ * Format labels for Prometheus
360
+ */
361
+ formatPrometheusLabels(labels) {
362
+ if (!labels || Object.keys(labels).length === 0) {
363
+ return '';
364
+ }
365
+ const pairs = Object.entries(labels)
366
+ .map(([k, v]) => `${k}="${v}"`)
367
+ .join(',');
368
+ return `{${pairs}}`;
369
+ }
370
+ /**
371
+ * Parse labels from key
372
+ */
373
+ parseLabels(labelsPart) {
374
+ if (!labelsPart)
375
+ return {};
376
+ const labels = {};
377
+ const pairs = labelsPart.split(',');
378
+ for (const pair of pairs) {
379
+ const [k, v] = pair.split('=');
380
+ if (k && v) {
381
+ labels[k] = v;
382
+ }
383
+ }
384
+ return labels;
385
+ }
386
+ /**
387
+ * Reset all metrics
388
+ */
389
+ reset() {
390
+ this.counters.clear();
391
+ this.gauges.clear();
392
+ this.histograms.clear();
393
+ this.latencySamples.clear();
394
+ this.nodeMetrics.clear();
395
+ this.tokenUsage.clear();
396
+ this.costTracking.clear();
397
+ this.lastUpdated = Date.now();
398
+ }
399
+ /**
400
+ * Get all workflow names with metrics
401
+ */
402
+ getWorkflowNames() {
403
+ const names = new Set();
404
+ for (const [key] of this.counters) {
405
+ const match = /workflow=([^,}]+)/.exec(key);
406
+ if (match) {
407
+ names.add(match[1]);
408
+ }
409
+ }
410
+ for (const name of this.latencySamples.keys()) {
411
+ names.add(name);
412
+ }
413
+ return [...names];
414
+ }
415
+ }
416
+ /**
417
+ * Create a metrics collector instance
418
+ */
419
+ export function createMetricsCollector(config) {
420
+ return new WorkflowMetricsCollector(config);
421
+ }
422
+ /**
423
+ * Global metrics collector for convenience
424
+ */
425
+ let globalMetrics = null;
426
+ export function getGlobalMetrics() {
427
+ if (!globalMetrics) {
428
+ globalMetrics = new WorkflowMetricsCollector({ enabled: false });
429
+ }
430
+ return globalMetrics;
431
+ }
432
+ export function setGlobalMetrics(metrics) {
433
+ globalMetrics = metrics;
434
+ }
435
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Standard span attributes for workflow tracing
3
+ * Based on OpenTelemetry semantic conventions + custom workflow attributes
4
+ */
5
+ export declare const TRACE_PARENT_HEADER = "traceparent";
6
+ export declare const TRACE_STATE_HEADER = "tracestate";
7
+ export declare const BAGGAGE_HEADER = "baggage";
8
+ export declare const SERVICE_NAME = "service.name";
9
+ export declare const SERVICE_VERSION = "service.version";
10
+ export declare const SERVICE_INSTANCE_ID = "service.instance.id";
11
+ export declare const WORKFLOW_NAME = "workflow.name";
12
+ export declare const WORKFLOW_ID = "workflow.id";
13
+ export declare const WORKFLOW_RUN_ID = "workflow.run.id";
14
+ export declare const WORKFLOW_VERSION = "workflow.version";
15
+ export declare const WORKFLOW_ENTRY_POINT = "workflow.entry_point";
16
+ export declare const WORKFLOW_NODE_COUNT = "workflow.node_count";
17
+ export declare const WORKFLOW_STATUS = "workflow.status";
18
+ export declare const NODE_NAME = "node.name";
19
+ export declare const NODE_TYPE = "node.type";
20
+ export declare const NODE_INDEX = "node.index";
21
+ export declare const NODE_RETRY_COUNT = "node.retry_count";
22
+ export declare const NODE_TIMEOUT = "node.timeout";
23
+ export declare const NODE_DURATION = "node.duration_ms";
24
+ export declare const NODE_STATUS = "node.status";
25
+ export declare const LLM_SYSTEM = "llm.system";
26
+ export declare const LLM_REQUEST_MODEL = "llm.request.model";
27
+ export declare const LLM_RESPONSE_MODEL = "llm.response.model";
28
+ export declare const LLM_REQUEST_MAX_TOKENS = "llm.request.max_tokens";
29
+ export declare const LLM_REQUEST_TEMPERATURE = "llm.request.temperature";
30
+ export declare const LLM_REQUEST_TOP_P = "llm.request.top_p";
31
+ export declare const LLM_USAGE_INPUT_TOKENS = "llm.usage.input_tokens";
32
+ export declare const LLM_USAGE_OUTPUT_TOKENS = "llm.usage.output_tokens";
33
+ export declare const LLM_USAGE_TOTAL_TOKENS = "llm.usage.total_tokens";
34
+ export declare const LLM_USAGE_COST = "llm.usage.cost";
35
+ export declare const TOOL_NAME = "tool.name";
36
+ export declare const TOOL_PARAMETERS = "tool.parameters";
37
+ export declare const TOOL_RESULT = "tool.result";
38
+ export declare const TOOL_DURATION = "tool.duration_ms";
39
+ export declare const TOOL_SUCCESS = "tool.success";
40
+ export declare const ERROR_TYPE = "error.type";
41
+ export declare const ERROR_MESSAGE = "error.message";
42
+ export declare const ERROR_STACK = "error.stack";
43
+ export declare const ERROR_CODE = "error.code";
44
+ export declare const RETRY_ATTEMPT = "retry.attempt";
45
+ export declare const RETRY_MAX = "retry.max";
46
+ export declare const RETRY_DELAY = "retry.delay_ms";
47
+ export declare const CIRCUIT_BREAKER_STATE = "circuit_breaker.state";
48
+ export declare const COMPENSATION_TRIGGERED = "compensation.triggered";
49
+ export declare const COMPENSATION_NODE = "compensation.node";
50
+ export declare const DEAD_LETTER_QUEUE = "dlq.added";
51
+ export declare const APPROVAL_ID = "approval.id";
52
+ export declare const APPROVAL_TYPE = "approval.type";
53
+ export declare const APPROVAL_STATUS = "approval.status";
54
+ export declare const APPROVAL_TIMEOUT = "approval.timeout_ms";
55
+ export declare const APPROVAL_ASSIGNEE = "approval.assignee";
56
+ export declare const TIMER_TYPE = "timer.type";
57
+ export declare const TIMER_DELAY = "timer.delay_ms";
58
+ export declare const TIMER_CRON = "timer.cron";
59
+ export declare const TIMER_SCHEDULED_AT = "timer.scheduled_at";
60
+ export declare const TIMER_FIRED_AT = "timer.fired_at";
61
+ export declare const SUBWORKFLOW_NAME = "subworkflow.name";
62
+ export declare const SUBWORKFLOW_DEPTH = "subworkflow.depth";
63
+ export declare const SUBWORKFLOW_PARENT_ID = "subworkflow.parent_id";
64
+ export declare const TRIGGER_TYPE = "trigger.type";
65
+ export declare const TRIGGER_ID = "trigger.id";
66
+ export declare const TRIGGER_SOURCE = "trigger.source";
67
+ export declare const WEBHOOK_PATH = "webhook.path";
68
+ export declare const WEBHOOK_METHOD = "webhook.method";
69
+ export declare const CRON_EXPRESSION = "cron.expression";
70
+ export declare const CRON_NEXT_RUN = "cron.next_run";
71
+ /**
72
+ * Build standard workflow span attributes
73
+ */
74
+ export declare function workflowSpanAttributes(workflowName: string, workflowId: string, runId: string, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
75
+ /**
76
+ * Build standard node span attributes
77
+ */
78
+ export declare function nodeSpanAttributes(nodeName: string, nodeType: string, nodeIndex: number, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
79
+ /**
80
+ * Build LLM span attributes from token usage
81
+ */
82
+ export declare function llmSpanAttributes(system: string, model: string, inputTokens: number, outputTokens: number, cost?: number, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
83
+ /**
84
+ * Build tool span attributes
85
+ */
86
+ export declare function toolSpanAttributes(toolName: string, success: boolean, durationMs: number, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
87
+ /**
88
+ * Build error span attributes
89
+ */
90
+ export declare function errorSpanAttributes(error: Error, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
91
+ /**
92
+ * Build retry span attributes
93
+ */
94
+ export declare function retrySpanAttributes(attempt: number, maxAttempts: number, delayMs: number, additionalAttrs?: Record<string, unknown>): Record<string, unknown>;
95
+ //# sourceMappingURL=span-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-attributes.d.ts","sourceRoot":"","sources":["../../src/observability/span-attributes.ts"],"names":[],"mappings":"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"}