@demlik/tea 0.17.0 → 0.18.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 (119) hide show
  1. package/README.md +3 -2
  2. package/dist/agent/index.d.ts +182 -35
  3. package/dist/agent/index.js +11 -11
  4. package/dist/{chunk-KWNCM6XM.js → chunk-AHW2CLPT.js} +65 -18
  5. package/dist/chunk-AHW2CLPT.js.map +1 -0
  6. package/dist/{chunk-K4ETBNKS.js → chunk-AIIXV4XB.js} +38 -9
  7. package/dist/chunk-AIIXV4XB.js.map +1 -0
  8. package/dist/{chunk-LYVOGOBC.js → chunk-BRX3243I.js} +3 -3
  9. package/dist/{chunk-LYVOGOBC.js.map → chunk-BRX3243I.js.map} +1 -1
  10. package/dist/{chunk-GWWCCSDH.js → chunk-C3G2QFEZ.js} +4 -4
  11. package/dist/{chunk-GWWCCSDH.js.map → chunk-C3G2QFEZ.js.map} +1 -1
  12. package/dist/{chunk-C4U5D5HP.js → chunk-FNGZMVIT.js} +3 -3
  13. package/dist/chunk-FNGZMVIT.js.map +1 -0
  14. package/dist/{chunk-QWIPH4YH.js → chunk-H2ELKHI6.js} +16 -6
  15. package/dist/chunk-H2ELKHI6.js.map +1 -0
  16. package/dist/chunk-H3MWNH7A.js +119 -0
  17. package/dist/chunk-H3MWNH7A.js.map +1 -0
  18. package/dist/chunk-I7E7AD2S.js +213 -0
  19. package/dist/chunk-I7E7AD2S.js.map +1 -0
  20. package/dist/{chunk-OYR7ENKU.js → chunk-IHUNKHDX.js} +3 -3
  21. package/dist/{chunk-OYR7ENKU.js.map → chunk-IHUNKHDX.js.map} +1 -1
  22. package/dist/chunk-JVE2LBFJ.js +21 -0
  23. package/dist/chunk-JVE2LBFJ.js.map +1 -0
  24. package/dist/chunk-JVKU2UQC.js +34 -0
  25. package/dist/chunk-JVKU2UQC.js.map +1 -0
  26. package/dist/{chunk-OPH6Y4UT.js → chunk-JYNYG5SF.js} +4 -4
  27. package/dist/{chunk-OPH6Y4UT.js.map → chunk-JYNYG5SF.js.map} +1 -1
  28. package/dist/{chunk-XBZQT2TD.js → chunk-PCJA2HTZ.js} +437 -162
  29. package/dist/chunk-PCJA2HTZ.js.map +1 -0
  30. package/dist/{chunk-DFUEAA6L.js → chunk-PQSDUX6B.js} +3 -3
  31. package/dist/{chunk-DFUEAA6L.js.map → chunk-PQSDUX6B.js.map} +1 -1
  32. package/dist/{chunk-6XBEYZME.js → chunk-WTSOW2MD.js} +5 -5
  33. package/dist/{chunk-6XBEYZME.js.map → chunk-WTSOW2MD.js.map} +1 -1
  34. package/dist/{chunk-4PXNZ5UY.js → chunk-XVIKSRCK.js} +4 -4
  35. package/dist/{chunk-4PXNZ5UY.js.map → chunk-XVIKSRCK.js.map} +1 -1
  36. package/dist/{chunk-4NTCPTNQ.js → chunk-YIMOFXST.js} +3 -3
  37. package/dist/{chunk-4NTCPTNQ.js.map → chunk-YIMOFXST.js.map} +1 -1
  38. package/dist/{core-rDbOaJTN.d.ts → core-Ce9ncpuv.d.ts} +5 -4
  39. package/dist/do/index.d.ts +140 -64
  40. package/dist/do/index.js +17 -18
  41. package/dist/do/index.js.map +1 -1
  42. package/dist/drive-loop-CsUsW3Wo.d.ts +127 -0
  43. package/dist/{durable-effects-CNaw97Be.d.ts → durable-effects-BmUrRA-h.d.ts} +1 -1
  44. package/dist/effect/index.d.ts +6 -150
  45. package/dist/effect/index.js +4 -96
  46. package/dist/effect/index.js.map +1 -1
  47. package/dist/extension/index.d.ts +7 -5
  48. package/dist/extension/index.js +2 -3
  49. package/dist/extension/index.js.map +1 -1
  50. package/dist/flow/index.d.ts +13 -13
  51. package/dist/flow/index.js +13 -12
  52. package/dist/flow/index.js.map +1 -1
  53. package/dist/idempotency/index.d.ts +3 -3
  54. package/dist/idempotency/index.js +4 -4
  55. package/dist/{index-q1PoukOZ.d.ts → index-2kNxy6az.d.ts} +2 -2
  56. package/dist/{index-B_BxplWi.d.ts → index-B1Wzarkl.d.ts} +1 -1
  57. package/dist/{index-Cberb5Rr.d.ts → index-Bf9_bNql.d.ts} +2 -2
  58. package/dist/index-BnsAqn0-.d.ts +286 -0
  59. package/dist/{index-Cx0F2M34.d.ts → index-Ce5GYAuI.d.ts} +2 -2
  60. package/dist/{index-CWmsXNdX.d.ts → index-D8sYVzCI.d.ts} +1 -1
  61. package/dist/{index-CcrKLtse.d.ts → index-DWdg7R1l.d.ts} +1 -1
  62. package/dist/{index-BOrsbdAf.d.ts → index-Dy3379ve.d.ts} +5 -5
  63. package/dist/{index-DaX_P35Q.d.ts → index-e36uEyl4.d.ts} +3 -3
  64. package/dist/index.d.ts +109 -36
  65. package/dist/index.js +2 -2
  66. package/dist/jev/index.d.ts +8 -8
  67. package/dist/jev/index.js +6 -7
  68. package/dist/jev/index.js.map +1 -1
  69. package/dist/{machine-BcfCFMYF.d.ts → machine-CuojfZup.d.ts} +353 -57
  70. package/dist/machine-viz/index.d.ts +1 -1
  71. package/dist/machine-viz/index.js +2 -2
  72. package/dist/mem/index.d.ts +6 -6
  73. package/dist/mem/index.js +6 -2
  74. package/dist/mem/index.js.map +1 -1
  75. package/dist/node/index.d.ts +16 -10
  76. package/dist/node/index.js +22 -3
  77. package/dist/node/index.js.map +1 -1
  78. package/dist/otel/index.d.ts +161 -0
  79. package/dist/otel/index.js +403 -0
  80. package/dist/otel/index.js.map +1 -0
  81. package/dist/paginate/index.d.ts +4 -4
  82. package/dist/paginate/index.js +5 -5
  83. package/dist/parity/index.d.ts +3 -3
  84. package/dist/parity/index.js +3 -3
  85. package/dist/pbt/index.d.ts +166 -53
  86. package/dist/pbt/index.js +2 -2
  87. package/dist/pbt/index.js.map +1 -1
  88. package/dist/persistence/index.d.ts +5 -5
  89. package/dist/persistence/index.js +5 -5
  90. package/dist/promise/index.d.ts +2 -2
  91. package/dist/promise/index.js +4 -3
  92. package/dist/react/index.d.ts +2 -2
  93. package/dist/resilience/index.d.ts +13 -9
  94. package/dist/resilience/index.js +5 -5
  95. package/dist/resilience/index.js.map +1 -1
  96. package/dist/{runtime-types-B62Ucnxr.d.ts → runtime-types-BKg2CGMx.d.ts} +88 -14
  97. package/dist/testing/effect/index.d.ts +65 -0
  98. package/dist/testing/effect/index.js +148 -0
  99. package/dist/testing/effect/index.js.map +1 -0
  100. package/dist/testing/index.d.ts +12 -158
  101. package/dist/testing/index.js +4 -130
  102. package/dist/testing/index.js.map +1 -1
  103. package/dist/testing/promise/index.d.ts +41 -0
  104. package/dist/testing/promise/index.js +37 -0
  105. package/dist/testing/promise/index.js.map +1 -0
  106. package/dist/timing/index.d.ts +4 -4
  107. package/dist/timing/index.js +4 -4
  108. package/dist/{types-DPm5YCDQ.d.ts → types-SzNSHKlV.d.ts} +1 -1
  109. package/dist/work-queue/index.d.ts +4 -4
  110. package/dist/work-queue/index.js +4 -3
  111. package/dist/work-queue/index.js.map +1 -1
  112. package/package.json +25 -13
  113. package/dist/chunk-C4U5D5HP.js.map +0 -1
  114. package/dist/chunk-G5E74IJB.js +0 -8
  115. package/dist/chunk-G5E74IJB.js.map +0 -1
  116. package/dist/chunk-K4ETBNKS.js.map +0 -1
  117. package/dist/chunk-KWNCM6XM.js.map +0 -1
  118. package/dist/chunk-QWIPH4YH.js.map +0 -1
  119. package/dist/chunk-XBZQT2TD.js.map +0 -1
@@ -0,0 +1,403 @@
1
+ import { AGENT_EVENT_TYPES } from '../chunk-PCJA2HTZ.js';
2
+ import '../chunk-XVIKSRCK.js';
3
+ import '../chunk-YIMOFXST.js';
4
+ import '../chunk-QNGYQMZB.js';
5
+ import '../chunk-WTSOW2MD.js';
6
+ import '../chunk-C3G2QFEZ.js';
7
+ import '../chunk-VBDU4JL6.js';
8
+ import '../chunk-4LPY67E4.js';
9
+ import '../chunk-TXN2KFHF.js';
10
+ import '../chunk-H2ELKHI6.js';
11
+ import '../chunk-AHW2CLPT.js';
12
+ import '../chunk-JVE2LBFJ.js';
13
+ import '../chunk-FNGZMVIT.js';
14
+ import '../chunk-AIIXV4XB.js';
15
+ import { SpanKind, trace, ROOT_CONTEXT, TraceFlags, SpanStatusCode } from '@opentelemetry/api';
16
+
17
+ // src/otel/sha256.ts
18
+ function sha256Hex(message) {
19
+ const bytes = new TextEncoder().encode(message);
20
+ const blocks = new Uint8Array(Math.ceil((bytes.length + 9) / 64) * 64);
21
+ blocks.set(bytes);
22
+ blocks[bytes.length] = 128;
23
+ const view = new DataView(blocks.buffer);
24
+ const bits = bytes.length * 8;
25
+ view.setUint32(blocks.length - 8, Math.floor(bits / 4294967296));
26
+ view.setUint32(blocks.length - 4, bits >>> 0);
27
+ const h = [...H0];
28
+ const w = new Array(64).fill(0);
29
+ for (let offset = 0; offset < blocks.length; offset += 64) {
30
+ for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);
31
+ for (let i = 16; i < 64; i++) {
32
+ const w15 = w[i - 15] ?? 0;
33
+ const w2 = w[i - 2] ?? 0;
34
+ const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ w15 >>> 3;
35
+ const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ w2 >>> 10;
36
+ w[i] = (w[i - 16] ?? 0) + s0 + (w[i - 7] ?? 0) + s1 | 0;
37
+ }
38
+ let [a, b, c, d, e, f, g, hh] = h;
39
+ for (let i = 0; i < 64; i++) {
40
+ const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
41
+ const ch = e & f ^ ~e & g;
42
+ const t1 = hh + s1 + ch + (K[i] ?? 0) + (w[i] ?? 0) | 0;
43
+ const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
44
+ const maj = a & b ^ a & c ^ b & c;
45
+ const t2 = s0 + maj | 0;
46
+ hh = g;
47
+ g = f;
48
+ f = e;
49
+ e = d + t1 | 0;
50
+ d = c;
51
+ c = b;
52
+ b = a;
53
+ a = t1 + t2 | 0;
54
+ }
55
+ const round = [a, b, c, d, e, f, g, hh];
56
+ for (let i = 0; i < 8; i++) h[i] = (h[i] ?? 0) + (round[i] ?? 0) | 0;
57
+ }
58
+ return h.map((word) => (word >>> 0).toString(16).padStart(8, "0")).join("");
59
+ }
60
+ function rotr(x, n) {
61
+ return x >>> n | x << 32 - n;
62
+ }
63
+ var H0 = [
64
+ 1779033703,
65
+ 3144134277,
66
+ 1013904242,
67
+ 2773480762,
68
+ 1359893119,
69
+ 2600822924,
70
+ 528734635,
71
+ 1541459225
72
+ ];
73
+ var K = [
74
+ 1116352408,
75
+ 1899447441,
76
+ 3049323471,
77
+ 3921009573,
78
+ 961987163,
79
+ 1508970993,
80
+ 2453635748,
81
+ 2870763221,
82
+ 3624381080,
83
+ 310598401,
84
+ 607225278,
85
+ 1426881987,
86
+ 1925078388,
87
+ 2162078206,
88
+ 2614888103,
89
+ 3248222580,
90
+ 3835390401,
91
+ 4022224774,
92
+ 264347078,
93
+ 604807628,
94
+ 770255983,
95
+ 1249150122,
96
+ 1555081692,
97
+ 1996064986,
98
+ 2554220882,
99
+ 2821834349,
100
+ 2952996808,
101
+ 3210313671,
102
+ 3336571891,
103
+ 3584528711,
104
+ 113926993,
105
+ 338241895,
106
+ 666307205,
107
+ 773529912,
108
+ 1294757372,
109
+ 1396182291,
110
+ 1695183700,
111
+ 1986661051,
112
+ 2177026350,
113
+ 2456956037,
114
+ 2730485921,
115
+ 2820302411,
116
+ 3259730800,
117
+ 3345764771,
118
+ 3516065817,
119
+ 3600352804,
120
+ 4094571909,
121
+ 275423344,
122
+ 430227734,
123
+ 506948616,
124
+ 659060556,
125
+ 883997877,
126
+ 958139571,
127
+ 1322822218,
128
+ 1537002063,
129
+ 1747873779,
130
+ 1955562222,
131
+ 2024104815,
132
+ 2227730452,
133
+ 2361852424,
134
+ 2428436474,
135
+ 2756734187,
136
+ 3204031479,
137
+ 3329325298
138
+ ];
139
+
140
+ // src/otel/index.ts
141
+ function traceAgent(runtime, opts) {
142
+ const spans = agentSpans(opts);
143
+ const offs = AGENT_EVENT_TYPES.map((type) => runtime.on(type, spans.onEvent));
144
+ return () => {
145
+ for (const off of offs) off();
146
+ spans.end();
147
+ };
148
+ }
149
+ function agentSpans(opts) {
150
+ const { tracer } = opts;
151
+ const mask = opts.mask ?? maskBase64DataUris;
152
+ const name = opts.name ?? "agent";
153
+ const traceIdOf = opts.traceIdOf ?? runTraceId;
154
+ const runs = /* @__PURE__ */ new Map();
155
+ const exported = (value) => {
156
+ const masked = mask({ data: json(value) });
157
+ return typeof masked === "string" ? masked : json(masked);
158
+ };
159
+ const openRun = (runId, at) => {
160
+ const known = runs.get(runId);
161
+ if (known !== void 0) return known;
162
+ const parent = trace.setSpanContext(ROOT_CONTEXT, {
163
+ traceId: traceIdOf(runId),
164
+ spanId: detachedSpanId(runId),
165
+ traceFlags: TraceFlags.SAMPLED,
166
+ isRemote: true
167
+ });
168
+ const span = startSpan(
169
+ tracer,
170
+ `invoke_agent ${name}`,
171
+ at,
172
+ {
173
+ kind: SpanKind.INTERNAL,
174
+ attributes: {
175
+ "gen_ai.operation.name": "invoke_agent",
176
+ "gen_ai.agent.name": name,
177
+ "gen_ai.conversation.id": runId,
178
+ "langfuse.observation.type": "agent",
179
+ "langfuse.trace.name": name,
180
+ "tea.run.id": runId
181
+ }
182
+ },
183
+ parent
184
+ );
185
+ const opened = {
186
+ span,
187
+ context: trace.setSpan(parent, span),
188
+ brain: null,
189
+ tools: /* @__PURE__ */ new Map(),
190
+ lastAt: at
191
+ };
192
+ runs.set(runId, opened);
193
+ return opened;
194
+ };
195
+ const onEvent = (event) => {
196
+ const run = openRun(event.runId, event.at);
197
+ run.lastAt = event.at;
198
+ switch (event.type) {
199
+ case "BrainStarted": {
200
+ if (run.brain !== null) return;
201
+ const model = event.model;
202
+ run.brain = startSpan(
203
+ tracer,
204
+ model === null ? "chat" : `chat ${model}`,
205
+ event.at,
206
+ {
207
+ kind: SpanKind.CLIENT,
208
+ attributes: {
209
+ "gen_ai.operation.name": "chat",
210
+ ...model === null ? {} : {
211
+ "gen_ai.request.model": model,
212
+ "langfuse.observation.model.name": model
213
+ },
214
+ "langfuse.observation.type": "generation",
215
+ "langfuse.observation.input": exported(event.payload),
216
+ "tea.agent.turn": event.turn,
217
+ "tea.agent.purpose": event.purpose
218
+ }
219
+ },
220
+ run.context
221
+ );
222
+ return;
223
+ }
224
+ case "TurnSettled": {
225
+ const brain = run.brain ?? startSpan(
226
+ tracer,
227
+ "chat",
228
+ event.at,
229
+ { kind: SpanKind.CLIENT },
230
+ run.context
231
+ );
232
+ brain.setAttributes({
233
+ "langfuse.observation.output": exported(event.turn),
234
+ ...usageAttributes(event.usage)
235
+ });
236
+ endSpan(brain, event.at);
237
+ run.brain = null;
238
+ return;
239
+ }
240
+ case "ToolStarted": {
241
+ if (run.tools.has(event.callId)) return;
242
+ run.tools.set(
243
+ event.callId,
244
+ startSpan(
245
+ tracer,
246
+ `execute_tool ${event.name}`,
247
+ event.at,
248
+ {
249
+ kind: SpanKind.INTERNAL,
250
+ attributes: {
251
+ "gen_ai.operation.name": "execute_tool",
252
+ "gen_ai.tool.name": event.name,
253
+ "gen_ai.tool.call.id": event.callId,
254
+ "langfuse.observation.type": "tool",
255
+ "langfuse.observation.input": exported(event.args)
256
+ }
257
+ },
258
+ run.context
259
+ )
260
+ );
261
+ return;
262
+ }
263
+ case "ToolSettled": {
264
+ const span = run.tools.get(event.callId);
265
+ if (span === void 0) return;
266
+ span.setAttribute(
267
+ "langfuse.observation.output",
268
+ exported(event.result)
269
+ );
270
+ endSpan(span, event.at);
271
+ run.tools.delete(event.callId);
272
+ return;
273
+ }
274
+ case "ToolFailed": {
275
+ const span = run.tools.get(event.callId);
276
+ if (span === void 0) return;
277
+ span.setAttribute(
278
+ "langfuse.observation.output",
279
+ exported(event.failure)
280
+ );
281
+ failed(span, event.failure.reason, errorType(event.failure));
282
+ endSpan(span, event.at);
283
+ run.tools.delete(event.callId);
284
+ return;
285
+ }
286
+ case "RunDone":
287
+ closeRun(run, event.status, event.at, exported);
288
+ runs.delete(event.runId);
289
+ return;
290
+ }
291
+ };
292
+ const end = (at) => {
293
+ for (const run of runs.values()) {
294
+ const endAt = at ?? run.lastAt;
295
+ for (const span of [...openChildren(run), run.span]) {
296
+ span.setAttribute("tea.run.detached", true);
297
+ endSpan(span, endAt);
298
+ }
299
+ }
300
+ runs.clear();
301
+ };
302
+ return { onEvent, end };
303
+ }
304
+ var maskBase64DataUris = ({ data }) => typeof data === "string" ? data.replace(BASE64_DATA_URI, STRIPPED_DATA_URI) : data;
305
+ function runTraceId(runId) {
306
+ return sha256Hex(runId).slice(0, 32);
307
+ }
308
+ var BASE64_DATA_URI = /data:[^;]+;base64,[A-Za-z0-9+/=]+/g;
309
+ var STRIPPED_DATA_URI = "[base64 data URI stripped before export]";
310
+ function spanTime(at) {
311
+ const seconds = Math.floor(at / 1e3);
312
+ const nanos = Math.round((at - seconds * 1e3) * 1e6);
313
+ return nanos === 1e9 ? [seconds + 1, 0] : [seconds, nanos];
314
+ }
315
+ function startSpan(tracer, spanName, at, options, context) {
316
+ return tracer.startSpan(
317
+ spanName,
318
+ { ...options, startTime: spanTime(at) },
319
+ context
320
+ );
321
+ }
322
+ function endSpan(span, at) {
323
+ span.end(spanTime(at));
324
+ }
325
+ function detachedSpanId(runId) {
326
+ return sha256Hex(runId).slice(32, 48);
327
+ }
328
+ function openChildren(run) {
329
+ return [...run.brain === null ? [] : [run.brain], ...run.tools.values()];
330
+ }
331
+ function closeRun(run, status, at, exported) {
332
+ switch (status.kind) {
333
+ case "done":
334
+ for (const span of openChildren(run)) endSpan(span, at);
335
+ run.span.setAttribute(
336
+ "langfuse.observation.output",
337
+ exported(status.output)
338
+ );
339
+ break;
340
+ case "failed": {
341
+ const reason = status.failure.reason;
342
+ for (const span of openChildren(run)) {
343
+ failed(
344
+ span,
345
+ `run failed (${reason}) before this settled`,
346
+ "run_failed"
347
+ );
348
+ endSpan(span, at);
349
+ }
350
+ run.span.setAttribute(
351
+ "langfuse.observation.output",
352
+ exported(status.failure)
353
+ );
354
+ failed(run.span, `run failed: ${reason}`, reason);
355
+ break;
356
+ }
357
+ case "cancelled":
358
+ for (const span of openChildren(run)) {
359
+ cancelled(span);
360
+ endSpan(span, at);
361
+ }
362
+ cancelled(run.span);
363
+ break;
364
+ }
365
+ endSpan(run.span, at);
366
+ }
367
+ function failed(span, message, type) {
368
+ span.setStatus({ code: SpanStatusCode.ERROR, message });
369
+ span.setAttributes({
370
+ "error.type": type,
371
+ "langfuse.observation.level": "ERROR",
372
+ "langfuse.observation.status_message": message
373
+ });
374
+ }
375
+ function cancelled(span) {
376
+ span.setAttributes({
377
+ "langfuse.observation.level": "WARNING",
378
+ "langfuse.observation.status_message": "cancelled"
379
+ });
380
+ }
381
+ function errorType(failure) {
382
+ return failure._tag ?? "tool_error";
383
+ }
384
+ function usageAttributes(usage) {
385
+ if (usage === void 0) return {};
386
+ return {
387
+ "gen_ai.usage.input_tokens": usage.inputTokens,
388
+ "gen_ai.usage.output_tokens": usage.outputTokens,
389
+ ...usage.cachedInputTokens === void 0 ? {} : { "gen_ai.usage.cache_read.input_tokens": usage.cachedInputTokens },
390
+ ...usage.reasoningTokens === void 0 ? {} : { "gen_ai.usage.reasoning.output_tokens": usage.reasoningTokens }
391
+ };
392
+ }
393
+ function json(value) {
394
+ try {
395
+ return JSON.stringify(value) ?? "null";
396
+ } catch {
397
+ return JSON.stringify(String(value));
398
+ }
399
+ }
400
+
401
+ export { agentSpans, maskBase64DataUris, runTraceId, traceAgent };
402
+ //# sourceMappingURL=index.js.map
403
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/otel/sha256.ts","../../src/otel/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SHA-256 of a string's UTF-8 bytes, as 64 lowercase hex characters (FIPS\n * 180-4). Synchronous and dependency-free, because the trace id has to exist\n * the moment a run's first event arrives, on every host tea runs on — and the\n * one digest every host shares, `crypto.subtle.digest`, is async.\n */\nexport function sha256Hex(message: string): string {\n const bytes = new TextEncoder().encode(message);\n // The message, a 0x80 byte, zero padding, and the bit length as a 64-bit\n // big-endian integer, filling a whole number of 64-byte blocks.\n const blocks = new Uint8Array(Math.ceil((bytes.length + 9) / 64) * 64);\n blocks.set(bytes);\n blocks[bytes.length] = 0x80;\n const view = new DataView(blocks.buffer);\n const bits = bytes.length * 8;\n view.setUint32(blocks.length - 8, Math.floor(bits / 0x100000000));\n view.setUint32(blocks.length - 4, bits >>> 0);\n\n const h = [...H0];\n const w = new Array<number>(64).fill(0);\n for (let offset = 0; offset < blocks.length; offset += 64) {\n for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);\n for (let i = 16; i < 64; i++) {\n const w15 = w[i - 15] ?? 0;\n const w2 = w[i - 2] ?? 0;\n const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ (w15 >>> 3);\n const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ (w2 >>> 10);\n w[i] = ((w[i - 16] ?? 0) + s0 + (w[i - 7] ?? 0) + s1) | 0;\n }\n let [a, b, c, d, e, f, g, hh] = h as [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n ];\n for (let i = 0; i < 64; i++) {\n const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = (e & f) ^ (~e & g);\n const t1 = (hh + s1 + ch + (K[i] ?? 0) + (w[i] ?? 0)) | 0;\n const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const t2 = (s0 + maj) | 0;\n hh = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n const round = [a, b, c, d, e, f, g, hh];\n for (let i = 0; i < 8; i++) h[i] = ((h[i] ?? 0) + (round[i] ?? 0)) | 0;\n }\n return h.map((word) => (word >>> 0).toString(16).padStart(8, \"0\")).join(\"\");\n}\n\nfunction rotr(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n}\n\nconst H0: readonly number[] = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,\n 0x1f83d9ab, 0x5be0cd19,\n];\n\nconst K: readonly number[] = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n","/**\n * @packageDocumentation\n * @demlik/tea/otel — an agent run as OpenTelemetry spans.\n *\n * `traceAgent(runtime, { tracer })` listens to an agent runtime's semantic\n * events and writes one span tree per run: a run span, a brain-call span per\n * turn and a tool span per tool call, the brain and tool spans children of the\n * run. Nothing here touches the reducer: the spans are a projection of the\n * `AgentEvent` stream, the way `transcript` is.\n *\n * The attributes follow the OpenTelemetry GenAI semantic conventions\n * (`gen_ai.*`), plus Langfuse's observation attributes (`langfuse.*`), so\n * Langfuse renders the run as an agent with generations and tool calls without\n * tea depending on any Langfuse package. Any OTel backend reads the same spans.\n *\n * `@opentelemetry/api` is an optional peer. Only this entry imports it.\n *\n * ## One trace across a kill\n *\n * The trace id is derived from the run's `runId` — the SHA-256 of it, cut to\n * 32 hex characters, which is exactly Langfuse's `createTraceId(runId)` — and\n * the run span is parented to a detached span context carrying it. The id\n * lives on the durable Model, so a process that resumes the run from its\n * `Store` writes into the same trace as the one that was killed. Spans the\n * killed process never ended are never exported; OpenTelemetry exports a span\n * when it ends. What it did end is in the trace beside the resumed leg.\n *\n * ## Time\n *\n * Every span starts and ends at the `at` of the event that opened or closed\n * it, and `at` is read as **epoch milliseconds** — the runtime's `clock`\n * contract. It reaches OpenTelemetry as an exact `HrTime`, never a bare\n * number, so a small clock value (a logical or test clock) stays the instant\n * it names instead of being rebased onto process start.\n */\n\nimport {\n type Attributes,\n type Context,\n type HrTime,\n ROOT_CONTEXT,\n type Span,\n SpanKind,\n type SpanOptions,\n SpanStatusCode,\n TraceFlags,\n type Tracer,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n AGENT_EVENT_TYPES,\n type AgentEndedStatus,\n type AgentEvent,\n type ToolFailure,\n type TurnUsage,\n} from \"../agent/index\";\nimport { sha256Hex } from \"./sha256\";\n\n/**\n * A mask over one exported input or output — the same shape as\n * `LangfuseSpanProcessor`'s `mask`, so one function serves both. `data` is the\n * value already serialized to JSON; return what should be exported instead.\n */\nexport type SpanMask = (params: { readonly data: unknown }) => unknown;\n\n/** How {@link traceAgent} writes spans. */\nexport interface TraceAgentOptions {\n /** The tracer the spans are started on — `provider.getTracer(\"…\")`. */\n readonly tracer: Tracer;\n /**\n * Applied to every exported input and output. Omit → {@link maskBase64DataUris},\n * which keeps a screenshot a tool returned from being exported as megabytes\n * of base64.\n */\n readonly mask?: SpanMask;\n /**\n * The agent's name, on `gen_ai.agent.name`, the run span's name and\n * Langfuse's trace name. Omit → `\"agent\"`.\n */\n readonly name?: string;\n /**\n * The trace id a run writes into, from its `runId`. Omit → {@link runTraceId}.\n * Must return 32 lowercase hex characters, not all zero.\n */\n readonly traceIdOf?: (runId: string) => string;\n}\n\n/** Anything that delivers an agent's events by type — a runtime built with `events: agentEvents()`. */\nexport interface AgentEventSource<R> {\n on<K extends AgentEvent<R>[\"type\"]>(\n type: K,\n handler: (event: Extract<AgentEvent<R>, { type: K }>) => void,\n ): () => void;\n}\n\n/**\n * Trace an agent runtime into OpenTelemetry. Subscribes to every\n * `AgentEvent` type on `runtime` and returns a cleanup that detaches the\n * subscriptions and ends any span still open, at the `at` of the last event\n * its run folded.\n *\n * The runtime must project events — built with\n * `run(machine, { events: agentEvents() })`. For `defineAgent`, which takes an\n * `onEvent` listener instead of handing out its runtime, wire\n * {@link agentSpans}'s `onEvent` there.\n *\n * Each span is timed by its events' `at`, read as epoch milliseconds.\n *\n * @example\n * ```ts\n * import { type AgentEventSource, traceAgent } from \"@demlik/tea/otel\";\n * import type { TracerProvider } from \"@opentelemetry/api\";\n *\n * declare const provider: TracerProvider;\n * // Built with `run(machine, { ...wired, ctx, events: agentEvents() }).ready`.\n * declare const runtime: AgentEventSource<string>;\n *\n * const stop = traceAgent(runtime, { tracer: provider.getTracer(\"audit\") });\n * ```\n */\nexport function traceAgent<R>(\n runtime: AgentEventSource<R>,\n opts: TraceAgentOptions,\n): () => void {\n const spans = agentSpans<R>(opts);\n const offs = AGENT_EVENT_TYPES.map((type) => runtime.on(type, spans.onEvent));\n return () => {\n for (const off of offs) off();\n spans.end();\n };\n}\n\n/** The span writer {@link traceAgent} subscribes, for wiring to an `onEvent` listener. */\nexport interface AgentSpans<R> {\n /** Fold one event into the span tree. */\n readonly onEvent: (event: AgentEvent<R>) => void;\n /**\n * End every span still open — the leg this process ran, when it stops\n * before its run does. Each carries `tea.run.detached: true`.\n *\n * With `at`, every open span ends at `at`, used as given. Without it, each\n * run's spans end at the `at` of the last event that run folded — its own\n * clock, never wall time.\n */\n readonly end: (at?: number) => void;\n}\n\n/**\n * The span writer behind {@link traceAgent}, as a listener. Use it where the\n * events arrive through a callback rather than a runtime:\n *\n * @example\n * ```ts\n * import { defineAgent } from \"@demlik/tea/agent\";\n * import { agentSpans } from \"@demlik/tea/otel\";\n * import { trace } from \"@opentelemetry/api\";\n *\n * const agent = defineAgent({\n * model: async () => ({ content: \"done\", toolCalls: [] }),\n * tools: [],\n * instructions: \"Summarise the page.\",\n * });\n *\n * const spans = agentSpans({ tracer: trace.getTracer(\"audit\") });\n * await agent.run(\"https://example.com\", { onEvent: spans.onEvent });\n * ```\n */\nexport function agentSpans<R>(opts: TraceAgentOptions): AgentSpans<R> {\n const { tracer } = opts;\n const mask = opts.mask ?? maskBase64DataUris;\n const name = opts.name ?? \"agent\";\n const traceIdOf = opts.traceIdOf ?? runTraceId;\n const runs = new Map<string, OpenRun>();\n\n const exported = (value: unknown): string => {\n const masked = mask({ data: json(value) });\n return typeof masked === \"string\" ? masked : json(masked);\n };\n\n const openRun = (runId: string, at: number): OpenRun => {\n const known = runs.get(runId);\n if (known !== undefined) return known;\n const parent = trace.setSpanContext(ROOT_CONTEXT, {\n traceId: traceIdOf(runId),\n spanId: detachedSpanId(runId),\n traceFlags: TraceFlags.SAMPLED,\n isRemote: true,\n });\n const span = startSpan(\n tracer,\n `invoke_agent ${name}`,\n at,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"gen_ai.operation.name\": \"invoke_agent\",\n \"gen_ai.agent.name\": name,\n \"gen_ai.conversation.id\": runId,\n \"langfuse.observation.type\": \"agent\",\n \"langfuse.trace.name\": name,\n \"tea.run.id\": runId,\n },\n },\n parent,\n );\n const opened: OpenRun = {\n span,\n context: trace.setSpan(parent, span),\n brain: null,\n tools: new Map(),\n lastAt: at,\n };\n runs.set(runId, opened);\n return opened;\n };\n\n const onEvent = (event: AgentEvent<R>): void => {\n const run = openRun(event.runId, event.at);\n run.lastAt = event.at;\n switch (event.type) {\n case \"BrainStarted\": {\n // A boot in the same process re-issues the call already open.\n if (run.brain !== null) return;\n const model = event.model;\n run.brain = startSpan(\n tracer,\n model === null ? \"chat\" : `chat ${model}`,\n event.at,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"gen_ai.operation.name\": \"chat\",\n ...(model === null\n ? {}\n : {\n \"gen_ai.request.model\": model,\n \"langfuse.observation.model.name\": model,\n }),\n \"langfuse.observation.type\": \"generation\",\n \"langfuse.observation.input\": exported(event.payload),\n \"tea.agent.turn\": event.turn,\n \"tea.agent.purpose\": event.purpose,\n },\n },\n run.context,\n );\n return;\n }\n case \"TurnSettled\": {\n const brain =\n run.brain ??\n startSpan(\n tracer,\n \"chat\",\n event.at,\n { kind: SpanKind.CLIENT },\n run.context,\n );\n brain.setAttributes({\n \"langfuse.observation.output\": exported(event.turn),\n ...usageAttributes(event.usage),\n });\n endSpan(brain, event.at);\n run.brain = null;\n return;\n }\n case \"ToolStarted\": {\n if (run.tools.has(event.callId)) return;\n run.tools.set(\n event.callId,\n startSpan(\n tracer,\n `execute_tool ${event.name}`,\n event.at,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"gen_ai.operation.name\": \"execute_tool\",\n \"gen_ai.tool.name\": event.name,\n \"gen_ai.tool.call.id\": event.callId,\n \"langfuse.observation.type\": \"tool\",\n \"langfuse.observation.input\": exported(event.args),\n },\n },\n run.context,\n ),\n );\n return;\n }\n case \"ToolSettled\": {\n const span = run.tools.get(event.callId);\n if (span === undefined) return;\n span.setAttribute(\n \"langfuse.observation.output\",\n exported(event.result),\n );\n endSpan(span, event.at);\n run.tools.delete(event.callId);\n return;\n }\n case \"ToolFailed\": {\n const span = run.tools.get(event.callId);\n if (span === undefined) return;\n span.setAttribute(\n \"langfuse.observation.output\",\n exported(event.failure),\n );\n failed(span, event.failure.reason, errorType(event.failure));\n endSpan(span, event.at);\n run.tools.delete(event.callId);\n return;\n }\n case \"RunDone\":\n closeRun(run, event.status, event.at, exported);\n runs.delete(event.runId);\n return;\n }\n };\n\n const end = (at?: number): void => {\n for (const run of runs.values()) {\n const endAt = at ?? run.lastAt;\n for (const span of [...openChildren(run), run.span]) {\n span.setAttribute(\"tea.run.detached\", true);\n endSpan(span, endAt);\n }\n }\n runs.clear();\n };\n\n return { onEvent, end };\n}\n\n/**\n * The default {@link SpanMask}: every base64 `data:` URI in a string becomes\n * `[base64 data URI stripped before export]`. Anything that is not a string\n * passes through untouched.\n */\nexport const maskBase64DataUris: SpanMask = ({ data }) =>\n typeof data === \"string\"\n ? data.replace(BASE64_DATA_URI, STRIPPED_DATA_URI)\n : data;\n\n/**\n * The trace id a run's spans are written into: the SHA-256 of `runId` as\n * lowercase hex, cut to 32 characters. It equals Langfuse's\n * `createTraceId(runId)`, so a trace can be looked up by the run it traced.\n */\nexport function runTraceId(runId: string): string {\n return sha256Hex(runId).slice(0, 32);\n}\n\n// ---------------------------------------------------------------------------\n\nconst BASE64_DATA_URI = /data:[^;]+;base64,[A-Za-z0-9+/=]+/g;\nconst STRIPPED_DATA_URI = \"[base64 data URI stripped before export]\";\n\ninterface OpenRun {\n readonly span: Span;\n readonly context: Context;\n brain: Span | null;\n readonly tools: Map<string, Span>;\n /** The `at` of the last event this run folded — where a detach ends it. */\n lastAt: number;\n}\n\n// The one place a run's clock becomes OpenTelemetry time. `at` is epoch\n// milliseconds. A bare number is ambiguous to the SDK: one no bigger than\n// `performance.now()` is read as milliseconds since process start and rebased\n// onto `performance.timeOrigin`, so a small clock value would silently move by\n// however long the process has been up (#367). An `HrTime` is taken as-is.\nfunction spanTime(at: number): HrTime {\n const seconds = Math.floor(at / 1_000);\n const nanos = Math.round((at - seconds * 1_000) * 1_000_000);\n return nanos === 1_000_000_000 ? [seconds + 1, 0] : [seconds, nanos];\n}\n\n// A span opened at `at`. The options carry no `startTime`, so no call site\n// can hand OpenTelemetry a raw clock value.\nfunction startSpan(\n tracer: Tracer,\n spanName: string,\n at: number,\n options: Omit<SpanOptions, \"startTime\">,\n context: Context,\n): Span {\n return tracer.startSpan(\n spanName,\n { ...options, startTime: spanTime(at) },\n context,\n );\n}\n\n// The one place a span ends. Every `Span#end` in this module goes through it,\n// which `span-end.test.ts` holds, so no end reaches OpenTelemetry off the\n// run's clock.\nfunction endSpan(span: Span, at: number): void {\n span.end(spanTime(at));\n}\n\n// The detached parent every run span hangs off. Derived from the run rather\n// than a constant so two runs never share a phantom parent; it is never\n// exported itself, only named as a parent.\nfunction detachedSpanId(runId: string): string {\n return sha256Hex(runId).slice(32, 48);\n}\n\nfunction openChildren(run: OpenRun): readonly Span[] {\n return [...(run.brain === null ? [] : [run.brain]), ...run.tools.values()];\n}\n\n// End the run span and whatever it still holds open, with the ending the run\n// reached. A child still open when a run fails or is cancelled did not\n// finish, and says so.\nfunction closeRun(\n run: OpenRun,\n status: AgentEndedStatus,\n at: number,\n exported: (value: unknown) => string,\n): void {\n switch (status.kind) {\n case \"done\":\n // Nothing is still open on a run that finished, unless a settle never\n // reached the events — end it rather than leave it unexported.\n for (const span of openChildren(run)) endSpan(span, at);\n run.span.setAttribute(\n \"langfuse.observation.output\",\n exported(status.output),\n );\n break;\n case \"failed\": {\n const reason = status.failure.reason;\n for (const span of openChildren(run)) {\n failed(\n span,\n `run failed (${reason}) before this settled`,\n \"run_failed\",\n );\n endSpan(span, at);\n }\n run.span.setAttribute(\n \"langfuse.observation.output\",\n exported(status.failure),\n );\n failed(run.span, `run failed: ${reason}`, reason);\n break;\n }\n case \"cancelled\":\n for (const span of openChildren(run)) {\n cancelled(span);\n endSpan(span, at);\n }\n cancelled(run.span);\n break;\n }\n endSpan(run.span, at);\n}\n\nfunction failed(span: Span, message: string, type: string): void {\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.setAttributes({\n \"error.type\": type,\n \"langfuse.observation.level\": \"ERROR\",\n \"langfuse.observation.status_message\": message,\n });\n}\n\n// Cancelled is not an error — the caller asked — so the status stays unset\n// and Langfuse reads it as a warning.\nfunction cancelled(span: Span): void {\n span.setAttributes({\n \"langfuse.observation.level\": \"WARNING\",\n \"langfuse.observation.status_message\": \"cancelled\",\n });\n}\n\nfunction errorType(failure: ToolFailure): string {\n return failure._tag ?? \"tool_error\";\n}\n\n// The token usage the provider reported for the turn (#332), as the GenAI\n// usage attributes Langfuse reads into the generation's usage. A turn with no\n// reported usage contributes nothing, rather than a zero that reads as free.\nfunction usageAttributes(usage: TurnUsage | undefined): Attributes {\n if (usage === undefined) return {};\n return {\n \"gen_ai.usage.input_tokens\": usage.inputTokens,\n \"gen_ai.usage.output_tokens\": usage.outputTokens,\n ...(usage.cachedInputTokens === undefined\n ? {}\n : { \"gen_ai.usage.cache_read.input_tokens\": usage.cachedInputTokens }),\n ...(usage.reasoningTokens === undefined\n ? {}\n : { \"gen_ai.usage.reasoning.output_tokens\": usage.reasoningTokens }),\n };\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value) ?? \"null\";\n } catch {\n return JSON.stringify(String(value));\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { C as Cmd, b as CmdDef, T as TimerDeps } from '../core-rDbOaJTN.js';
1
+ import { C as Cmd, b as CmdDef, T as TimerDeps } from '../core-Ce9ncpuv.js';
2
2
  import { RetryPolicy } from '../retry-backoff/index.js';
3
- import { a as DeadlineSub } from '../index-DaX_P35Q.js';
4
- import { a as ResilientState, b as ResilientTimerMsg, R as RunCmd, F as FailMsg, S as SucceedMsg, f as CircuitConfig, l as RateLimitConfig, m as DeadlineConfig } from '../index-q1PoukOZ.js';
3
+ import { a as DeadlineSub } from '../index-e36uEyl4.js';
4
+ import { a as ResilientState, b as ResilientTimerMsg, R as RunCmd, F as FailMsg, S as SucceedMsg, f as CircuitConfig, l as RateLimitConfig, m as DeadlineConfig } from '../index-2kNxy6az.js';
5
5
  import '@standard-schema/spec';
6
- import '../types-DPm5YCDQ.js';
6
+ import '../types-SzNSHKlV.js';
7
7
 
8
8
  /**
9
9
  * internal/paginate/paginator — the cursor/offset/page-token walk loop as pure
@@ -1,9 +1,9 @@
1
- export { PAGE_KEY, createPaginatedWalk, defaultPaginatorPolicy, drain, initPaginator, isDone, liftWalk, recordPage, resume, start } from '../chunk-OYR7ENKU.js';
2
- import '../chunk-6XBEYZME.js';
1
+ export { PAGE_KEY, createPaginatedWalk, defaultPaginatorPolicy, drain, initPaginator, isDone, liftWalk, recordPage, resume, start } from '../chunk-IHUNKHDX.js';
2
+ import '../chunk-WTSOW2MD.js';
3
+ import '../chunk-C3G2QFEZ.js';
3
4
  import '../chunk-VBDU4JL6.js';
4
5
  import '../chunk-4LPY67E4.js';
5
- import '../chunk-GWWCCSDH.js';
6
- import '../chunk-C4U5D5HP.js';
7
- import '../chunk-K4ETBNKS.js';
6
+ import '../chunk-FNGZMVIT.js';
7
+ import '../chunk-AIIXV4XB.js';
8
8
  //# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- import { B as BootingRuntime } from '../runtime-types-B62Ucnxr.js';
2
- import { C as Cmd, S as Sub, M as Machine } from '../core-rDbOaJTN.js';
3
- import { T as Trace, R as RecorderOptions } from '../index-B_BxplWi.js';
1
+ import { B as BootingRuntime } from '../runtime-types-BKg2CGMx.js';
2
+ import { C as Cmd, c as Sub, M as Machine } from '../core-Ce9ncpuv.js';
3
+ import { T as Trace, R as RecorderOptions } from '../index-B1Wzarkl.js';
4
4
  import '@standard-schema/spec';
5
5
 
6
6
  /**
@@ -1,7 +1,7 @@
1
- import { recorder, deepEqual } from '../chunk-LYVOGOBC.js';
2
- import '../chunk-C4U5D5HP.js';
3
- import { replay } from '../chunk-K4ETBNKS.js';
1
+ import { recorder, deepEqual } from '../chunk-BRX3243I.js';
4
2
  import '../chunk-HWVW4AXC.js';
3
+ import '../chunk-FNGZMVIT.js';
4
+ import { replay } from '../chunk-AIIXV4XB.js';
5
5
 
6
6
  // src/parity/index.ts
7
7
  function recordRun(runtime, opts) {