@respan/instrumentation-flue 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.
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # @respan/instrumentation-flue
2
+
3
+ Respan instrumentation plugin for the Flue TypeScript runtime.
4
+
5
+ The instrumentor subscribes to Flue's `observe()` runtime event stream and
6
+ translates stable Flue activity events into canonical Respan spans:
7
+
8
+ - workflow run lifecycle
9
+ - direct agent lifecycle
10
+ - prompt, skill, task, shell, and compaction operations
11
+ - delegated tasks
12
+ - model turns
13
+ - tool executions
14
+ - structured application logs
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @respan/instrumentation-flue @flue/runtime
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ```ts
25
+ import { Respan } from "@respan/respan";
26
+ import { FlueInstrumentor } from "@respan/instrumentation-flue";
27
+
28
+ const respan = new Respan({
29
+ apiKey: process.env.RESPAN_API_KEY,
30
+ instrumentations: [
31
+ new FlueInstrumentor({
32
+ workflowName: "Flue App.workflow",
33
+ }),
34
+ ],
35
+ });
36
+
37
+ await respan.initialize();
38
+ ```
39
+
40
+ Register the instrumentor once during application startup before Flue handles
41
+ workflow or agent activity.
@@ -0,0 +1,60 @@
1
+ import type { FlueContext, FlueEvent, FlueEventSubscriber } from "@flue/runtime";
2
+ type FlueObserve = (subscriber: FlueEventSubscriber) => () => void;
3
+ export interface FlueRuntimeModule {
4
+ observe?: FlueObserve;
5
+ }
6
+ export interface FlueInstrumentorOptions {
7
+ runtimeModule?: FlueRuntimeModule;
8
+ workflowName?: string;
9
+ }
10
+ export declare class FlueInstrumentor {
11
+ readonly name = "flue";
12
+ private readonly _runtimeModule?;
13
+ private readonly _fallbackWorkflowName?;
14
+ private _unsubscribe?;
15
+ private _isActive;
16
+ private readonly _traceIds;
17
+ private readonly _workflowNames;
18
+ private readonly _runStarts;
19
+ private readonly _agentStarts;
20
+ private readonly _operationStarts;
21
+ private readonly _taskStarts;
22
+ private readonly _toolStarts;
23
+ private readonly _turns;
24
+ private readonly _compactionStarts;
25
+ constructor(options?: FlueInstrumentorOptions);
26
+ activate(): Promise<void>;
27
+ deactivate(): void;
28
+ isActive(): boolean;
29
+ handleEvent(event: FlueEvent, _ctx?: FlueContext): void;
30
+ private _resolveRuntimeModule;
31
+ private _emitRunEnd;
32
+ private _emitAgentEnd;
33
+ private _emitOperation;
34
+ private _emitTask;
35
+ private _emitTool;
36
+ private _emitTurn;
37
+ private _emitCompaction;
38
+ private _emitLog;
39
+ private _emitSubmissionSettled;
40
+ private _emitSpan;
41
+ private _resolveTraceId;
42
+ private _upsertTurn;
43
+ private _traceKey;
44
+ private _agentKey;
45
+ private _toolKey;
46
+ private _compactionKey;
47
+ private _agentName;
48
+ private _identityInput;
49
+ private _workflowSpanId;
50
+ private _agentSpanId;
51
+ private _operationSpanId;
52
+ private _taskSpanId;
53
+ private _toolSpanId;
54
+ private _turnSpanId;
55
+ private _compactionSpanId;
56
+ private _eventSpanId;
57
+ private _rootParentId;
58
+ private _operationOrRootParentId;
59
+ }
60
+ export { FlueInstrumentor as RespanFlueObserver };
package/dist/index.js ADDED
@@ -0,0 +1,774 @@
1
+ import { context, trace } from "@opentelemetry/api";
2
+ import { ATTR_ERROR_MESSAGE, ATTR_GEN_AI_COMPLETION, ATTR_GEN_AI_PROMPT, ATTR_GEN_AI_REQUEST_MODEL, ATTR_GEN_AI_SYSTEM, ATTR_GEN_AI_USAGE_COMPLETION_TOKENS, ATTR_GEN_AI_USAGE_INPUT_TOKENS, ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, ATTR_GEN_AI_USAGE_PROMPT_TOKENS, } from "@opentelemetry/semantic-conventions/incubating";
3
+ import { RespanLogType, RespanSpanAttributes, } from "@respan/respan-sdk";
4
+ import { buildReadableSpan, ensureTraceId, injectSpan, } from "@respan/tracing";
5
+ import { SpanAttributes } from "@traceloop/ai-semantic-conventions";
6
+ const PACKAGE_VERSION = "0.1.0";
7
+ const INSTRUMENTATION_NAME = "@respan/instrumentation-flue";
8
+ const FLUE_INSTRUMENTATION_NAME = "flue";
9
+ const RESPAN_LOG_METHOD_TS_TRACING = "ts_tracing";
10
+ const STATUS_CODE_ATTR = "status_code";
11
+ const GEN_AI_COMPLETION_PREFIX = `${ATTR_GEN_AI_COMPLETION}.0`;
12
+ const GEN_AI_COMPLETION_ROLE = `${GEN_AI_COMPLETION_PREFIX}.role`;
13
+ const GEN_AI_COMPLETION_CONTENT = `${GEN_AI_COMPLETION_PREFIX}.content`;
14
+ const GEN_AI_COMPLETION_TOOL_CALLS = `${GEN_AI_COMPLETION_PREFIX}.tool_calls`;
15
+ export class FlueInstrumentor {
16
+ name = FLUE_INSTRUMENTATION_NAME;
17
+ _runtimeModule;
18
+ _fallbackWorkflowName;
19
+ _unsubscribe;
20
+ _isActive = false;
21
+ _traceIds = new Map();
22
+ _workflowNames = new Map();
23
+ _runStarts = new Map();
24
+ _agentStarts = new Map();
25
+ _operationStarts = new Map();
26
+ _taskStarts = new Map();
27
+ _toolStarts = new Map();
28
+ _turns = new Map();
29
+ _compactionStarts = new Map();
30
+ constructor(options = {}) {
31
+ this._runtimeModule = options.runtimeModule;
32
+ this._fallbackWorkflowName = options.workflowName;
33
+ }
34
+ async activate() {
35
+ if (this._isActive) {
36
+ return;
37
+ }
38
+ const runtime = this._runtimeModule ?? await this._resolveRuntimeModule();
39
+ if (!runtime?.observe) {
40
+ return;
41
+ }
42
+ this._unsubscribe = runtime.observe((event, ctx) => {
43
+ this.handleEvent(event, ctx);
44
+ });
45
+ this._isActive = true;
46
+ }
47
+ deactivate() {
48
+ this._unsubscribe?.();
49
+ this._unsubscribe = undefined;
50
+ this._isActive = false;
51
+ this._traceIds.clear();
52
+ this._workflowNames.clear();
53
+ this._runStarts.clear();
54
+ this._agentStarts.clear();
55
+ this._operationStarts.clear();
56
+ this._taskStarts.clear();
57
+ this._toolStarts.clear();
58
+ this._turns.clear();
59
+ this._compactionStarts.clear();
60
+ }
61
+ isActive() {
62
+ return this._isActive;
63
+ }
64
+ handleEvent(event, _ctx) {
65
+ switch (event.type) {
66
+ case "run_start":
67
+ this._runStarts.set(event.runId, { event, timestamp: event.startedAt ?? event.timestamp });
68
+ this._workflowNames.set(this._traceKey(event), event.workflowName);
69
+ break;
70
+ case "run_resume":
71
+ this._runStarts.set(event.runId, { event, timestamp: event.startedAt ?? event.timestamp });
72
+ this._workflowNames.set(this._traceKey(event), event.workflowName);
73
+ break;
74
+ case "run_end":
75
+ this._emitRunEnd(event);
76
+ break;
77
+ case "agent_start":
78
+ this._agentStarts.set(this._agentKey(event), { event, timestamp: event.timestamp });
79
+ break;
80
+ case "agent_end":
81
+ this._emitAgentEnd(event);
82
+ break;
83
+ case "operation_start":
84
+ this._operationStarts.set(event.operationId, { event, timestamp: event.timestamp });
85
+ break;
86
+ case "operation":
87
+ this._emitOperation(event);
88
+ break;
89
+ case "task_start":
90
+ this._taskStarts.set(event.taskId, { event, timestamp: event.timestamp });
91
+ break;
92
+ case "task":
93
+ this._emitTask(event);
94
+ break;
95
+ case "tool_start":
96
+ this._toolStarts.set(this._toolKey(event), {
97
+ start: { event, timestamp: event.timestamp },
98
+ });
99
+ break;
100
+ case "tool":
101
+ this._emitTool(event);
102
+ break;
103
+ case "turn_start":
104
+ this._upsertTurn(event.turnId).start = { event, timestamp: event.timestamp };
105
+ break;
106
+ case "turn_request":
107
+ this._upsertTurn(event.turnId).request = event;
108
+ break;
109
+ case "turn":
110
+ this._emitTurn(event);
111
+ break;
112
+ case "compaction_start":
113
+ this._compactionStarts.set(this._compactionKey(event), { event, timestamp: event.timestamp });
114
+ break;
115
+ case "compaction":
116
+ this._emitCompaction(event);
117
+ break;
118
+ case "log":
119
+ this._emitLog(event);
120
+ break;
121
+ case "submission_settled":
122
+ this._emitSubmissionSettled(event);
123
+ break;
124
+ case "idle":
125
+ case "message_start":
126
+ case "message_end":
127
+ case "turn_messages":
128
+ case "text_delta":
129
+ case "thinking_start":
130
+ case "thinking_delta":
131
+ case "thinking_end":
132
+ break;
133
+ }
134
+ }
135
+ async _resolveRuntimeModule() {
136
+ try {
137
+ return (await import("@flue/runtime"));
138
+ }
139
+ catch {
140
+ return undefined;
141
+ }
142
+ }
143
+ _emitRunEnd(event) {
144
+ const start = this._runStarts.get(event.runId);
145
+ const workflowName = this._workflowNames.get(this._traceKey(event)) ??
146
+ startEventValue(start, "workflowName") ??
147
+ this._fallbackWorkflowName ??
148
+ "flue.workflow";
149
+ this._emitSpan({
150
+ name: `flue.workflow.${workflowName}`,
151
+ logType: RespanLogType.WORKFLOW,
152
+ entityName: String(workflowName),
153
+ event,
154
+ input: startEventValue(start, "payload"),
155
+ output: event.isError ? errorOutput(event.error) : event.result,
156
+ start,
157
+ durationMs: event.durationMs,
158
+ error: event.error,
159
+ spanId: this._workflowSpanId(event),
160
+ workflowName: String(workflowName),
161
+ });
162
+ this._runStarts.delete(event.runId);
163
+ }
164
+ _emitAgentEnd(event) {
165
+ const start = this._agentStarts.get(this._agentKey(event));
166
+ const entityName = this._agentName(event);
167
+ this._emitSpan({
168
+ name: `flue.agent.${entityName}`,
169
+ logType: RespanLogType.AGENT,
170
+ entityName,
171
+ event,
172
+ input: this._identityInput(event),
173
+ output: { messages: event.messages },
174
+ start,
175
+ spanId: this._agentSpanId(event),
176
+ parentId: this._rootParentId(event),
177
+ });
178
+ this._agentStarts.delete(this._agentKey(event));
179
+ }
180
+ _emitOperation(event) {
181
+ const start = this._operationStarts.get(event.operationId);
182
+ const logType = event.operationKind === "shell" ? RespanLogType.TOOL : RespanLogType.TASK;
183
+ this._emitSpan({
184
+ name: `flue.operation.${event.operationKind}`,
185
+ logType,
186
+ entityName: `flue.${event.operationKind}`,
187
+ event,
188
+ input: {
189
+ operationId: event.operationId,
190
+ operationKind: event.operationKind,
191
+ },
192
+ output: event.isError ? errorOutput(event.error) : event.result,
193
+ start,
194
+ durationMs: event.durationMs,
195
+ error: event.error,
196
+ spanId: this._operationSpanId(event),
197
+ parentId: this._rootParentId(event),
198
+ attributes: {
199
+ [metadataKey("flue_operation_kind")]: event.operationKind,
200
+ },
201
+ });
202
+ this._operationStarts.delete(event.operationId);
203
+ }
204
+ _emitTask(event) {
205
+ const start = this._taskStarts.get(event.taskId);
206
+ const taskStart = start?.event;
207
+ const entityName = taskStart?.agent ? `flue.task.${taskStart.agent}` : "flue.task";
208
+ this._emitSpan({
209
+ name: entityName,
210
+ logType: RespanLogType.TASK,
211
+ entityName,
212
+ event,
213
+ input: {
214
+ prompt: taskStart?.prompt,
215
+ agent: taskStart?.agent ?? event.agent,
216
+ cwd: taskStart?.cwd,
217
+ },
218
+ output: event.isError ? errorOutput(event.result) : event.result,
219
+ start,
220
+ durationMs: event.durationMs,
221
+ error: event.isError ? event.result : undefined,
222
+ spanId: this._taskSpanId(event),
223
+ parentId: this._operationOrRootParentId(event),
224
+ attributes: {
225
+ [metadataKey("flue_task_agent")]: taskStart?.agent ?? event.agent,
226
+ },
227
+ });
228
+ this._taskStarts.delete(event.taskId);
229
+ }
230
+ _emitTool(event) {
231
+ const state = this._toolStarts.get(this._toolKey(event));
232
+ const startEvent = state?.start?.event;
233
+ this._emitSpan({
234
+ name: `flue.tool.${event.toolName}`,
235
+ logType: RespanLogType.TOOL,
236
+ entityName: event.toolName,
237
+ event,
238
+ input: {
239
+ name: event.toolName,
240
+ arguments: startEvent?.args,
241
+ },
242
+ output: event.isError ? errorOutput(event.result) : event.result,
243
+ start: state?.start,
244
+ durationMs: event.durationMs,
245
+ error: event.isError ? event.result : undefined,
246
+ spanId: this._toolSpanId(event),
247
+ parentId: this._operationOrRootParentId(event),
248
+ });
249
+ this._toolStarts.delete(this._toolKey(event));
250
+ }
251
+ _emitTurn(event) {
252
+ const state = this._turns.get(event.turnId);
253
+ const request = state?.request;
254
+ const attributes = {
255
+ [SpanAttributes.LLM_REQUEST_TYPE]: RespanLogType.CHAT,
256
+ [metadataKey("flue_turn_purpose")]: event.purpose,
257
+ };
258
+ const provider = request?.provider ?? event.provider;
259
+ const model = request?.model ?? event.model;
260
+ if (provider) {
261
+ attributes[ATTR_GEN_AI_SYSTEM] = normalizeProvider(provider);
262
+ }
263
+ if (model) {
264
+ attributes[ATTR_GEN_AI_REQUEST_MODEL] = normalizeModel(model, provider);
265
+ }
266
+ if (request?.api) {
267
+ attributes[metadataKey("flue_model_api")] = request.api;
268
+ }
269
+ else if (event.api) {
270
+ attributes[metadataKey("flue_model_api")] = event.api;
271
+ }
272
+ if (request?.reasoning) {
273
+ attributes[metadataKey("flue_reasoning")] = request.reasoning;
274
+ }
275
+ if (request?.input) {
276
+ addPromptAttributes(attributes, request.input.systemPrompt, request.input.messages);
277
+ if (request.input.tools && request.input.tools.length > 0) {
278
+ attributes[SpanAttributes.LLM_REQUEST_FUNCTIONS] = safeJson(request.input.tools.map(toToolDefinition));
279
+ }
280
+ }
281
+ if (event.output) {
282
+ addCompletionAttributes(attributes, event.output);
283
+ }
284
+ addUsageAttributes(attributes, event.usage);
285
+ this._emitSpan({
286
+ name: `flue.turn.${event.purpose}`,
287
+ logType: RespanLogType.CHAT,
288
+ entityName: `flue.${event.purpose}.turn`,
289
+ event,
290
+ input: request?.input,
291
+ output: event.isError ? errorOutput(event.error) : event.output,
292
+ start: state?.start,
293
+ durationMs: event.durationMs,
294
+ error: event.error,
295
+ spanId: this._turnSpanId(event),
296
+ parentId: this._operationOrRootParentId(event),
297
+ attributes,
298
+ });
299
+ this._turns.delete(event.turnId);
300
+ }
301
+ _emitCompaction(event) {
302
+ const start = this._compactionStarts.get(this._compactionKey(event));
303
+ const startEvent = start?.event;
304
+ const attributes = {
305
+ [metadataKey("flue_compaction_messages_before")]: event.messagesBefore,
306
+ [metadataKey("flue_compaction_messages_after")]: event.messagesAfter,
307
+ };
308
+ if (startEvent?.reason) {
309
+ attributes[metadataKey("flue_compaction_reason")] = startEvent.reason;
310
+ }
311
+ if (startEvent?.estimatedTokens !== undefined) {
312
+ attributes[metadataKey("flue_compaction_estimated_tokens")] = startEvent.estimatedTokens;
313
+ }
314
+ addUsageMetadata(attributes, event.usage);
315
+ this._emitSpan({
316
+ name: "flue.compaction",
317
+ logType: RespanLogType.TASK,
318
+ entityName: "flue.compaction",
319
+ event,
320
+ input: {
321
+ reason: startEvent?.reason,
322
+ estimatedTokens: startEvent?.estimatedTokens,
323
+ },
324
+ output: {
325
+ messagesBefore: event.messagesBefore,
326
+ messagesAfter: event.messagesAfter,
327
+ },
328
+ start,
329
+ durationMs: event.durationMs,
330
+ error: event.error,
331
+ parentId: this._operationOrRootParentId(event),
332
+ spanId: this._compactionSpanId(event),
333
+ attributes,
334
+ });
335
+ this._compactionStarts.delete(this._compactionKey(event));
336
+ }
337
+ _emitLog(event) {
338
+ this._emitSpan({
339
+ name: `flue.log.${event.level}`,
340
+ logType: RespanLogType.TASK,
341
+ entityName: `flue.log.${event.level}`,
342
+ event,
343
+ input: event.attributes ?? {},
344
+ output: { level: event.level, message: event.message },
345
+ parentId: this._operationOrRootParentId(event),
346
+ spanId: this._eventSpanId(event, `log:${event.eventIndex}`),
347
+ attributes: {
348
+ [metadataKey("flue_log_level")]: event.level,
349
+ [metadataKey("flue_log_message")]: event.message,
350
+ },
351
+ });
352
+ }
353
+ _emitSubmissionSettled(event) {
354
+ this._emitSpan({
355
+ name: `flue.submission.${event.outcome}`,
356
+ logType: RespanLogType.TASK,
357
+ entityName: `flue.submission.${event.outcome}`,
358
+ event,
359
+ input: { submissionId: event.submissionId },
360
+ output: {
361
+ outcome: event.outcome,
362
+ error: event.error,
363
+ },
364
+ error: event.outcome === "failed" ? event.error : undefined,
365
+ parentId: this._rootParentId(event),
366
+ spanId: this._eventSpanId(event, `submission:${event.submissionId}`),
367
+ attributes: {
368
+ [metadataKey("flue_submission_id")]: event.submissionId,
369
+ [metadataKey("flue_submission_outcome")]: event.outcome,
370
+ },
371
+ });
372
+ }
373
+ _emitSpan(input) {
374
+ const event = input.event;
375
+ const errorMessage = input.error === undefined ? undefined : errorMessageFrom(input.error);
376
+ const statusCode = input.statusCode ?? (errorMessage ? 500 : 200);
377
+ const attrs = {
378
+ [RespanSpanAttributes.RESPAN_LOG_METHOD]: RESPAN_LOG_METHOD_TS_TRACING,
379
+ [RespanSpanAttributes.RESPAN_LOG_TYPE]: input.logType,
380
+ [SpanAttributes.TRACELOOP_ENTITY_NAME]: input.entityName,
381
+ [SpanAttributes.TRACELOOP_ENTITY_PATH]: input.entityName,
382
+ ...(errorMessage
383
+ ? {
384
+ [ATTR_ERROR_MESSAGE]: errorMessage,
385
+ [STATUS_CODE_ATTR]: statusCode,
386
+ }
387
+ : {}),
388
+ [metadataKey("flue_event_type")]: event.type,
389
+ [metadataKey("flue_event_index")]: event.eventIndex,
390
+ ...identityMetadata(event),
391
+ ...input.attributes,
392
+ };
393
+ const workflowName = input.workflowName ??
394
+ this._workflowNames.get(this._traceKey(event)) ??
395
+ this._fallbackWorkflowName;
396
+ if (workflowName) {
397
+ attrs[SpanAttributes.TRACELOOP_WORKFLOW_NAME] = workflowName;
398
+ }
399
+ if (input.input !== undefined) {
400
+ attrs[SpanAttributes.TRACELOOP_ENTITY_INPUT] = safeJson(input.input);
401
+ }
402
+ if (input.output !== undefined) {
403
+ attrs[SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = safeJson(input.output);
404
+ }
405
+ const traceId = this._resolveTraceId(event);
406
+ const activeContext = trace.getSpan(context.active())?.spanContext();
407
+ const parentId = input.parentId ?? (activeContext?.traceId === traceId ? activeContext.spanId : undefined);
408
+ const endTimeIso = event.timestamp;
409
+ const startTimeIso = input.start?.timestamp ??
410
+ startTimeFromDuration(event.timestamp, input.durationMs) ??
411
+ event.timestamp;
412
+ const readableSpan = buildReadableSpan({
413
+ name: input.name,
414
+ traceId,
415
+ spanId: input.spanId,
416
+ parentId,
417
+ startTimeIso,
418
+ endTimeIso,
419
+ attributes: sanitizeAttributes(attrs),
420
+ statusCode,
421
+ errorMessage,
422
+ });
423
+ readableSpan.instrumentationLibrary = {
424
+ name: INSTRUMENTATION_NAME,
425
+ version: PACKAGE_VERSION,
426
+ };
427
+ injectSpan(readableSpan);
428
+ }
429
+ _resolveTraceId(event) {
430
+ const key = this._traceKey(event);
431
+ const existing = this._traceIds.get(key);
432
+ if (existing) {
433
+ return existing;
434
+ }
435
+ const activeTraceId = trace.getSpan(context.active())?.spanContext().traceId;
436
+ const resolved = isUsableTraceId(activeTraceId)
437
+ ? activeTraceId
438
+ : ensureTraceId(key);
439
+ this._traceIds.set(key, resolved);
440
+ return resolved;
441
+ }
442
+ _upsertTurn(turnId) {
443
+ const existing = this._turns.get(turnId);
444
+ if (existing) {
445
+ return existing;
446
+ }
447
+ const state = {};
448
+ this._turns.set(turnId, state);
449
+ return state;
450
+ }
451
+ _traceKey(event) {
452
+ return event.runId ??
453
+ event.instanceId ??
454
+ event.dispatchId ??
455
+ event.submissionId ??
456
+ `${event.harness ?? "harness"}:${event.session ?? "session"}`;
457
+ }
458
+ _agentKey(event) {
459
+ return `${this._traceKey(event)}:${event.instanceId ?? event.harness ?? event.session ?? "agent"}`;
460
+ }
461
+ _toolKey(event) {
462
+ return `${this._traceKey(event)}:${event.toolCallId}`;
463
+ }
464
+ _compactionKey(event) {
465
+ return `${this._traceKey(event)}:${event.operationId ?? "compaction"}`;
466
+ }
467
+ _agentName(event) {
468
+ return event.instanceId ??
469
+ event.harness ??
470
+ event.session ??
471
+ event.runId ??
472
+ "agent";
473
+ }
474
+ _identityInput(event) {
475
+ return {
476
+ runId: event.runId,
477
+ instanceId: event.instanceId,
478
+ dispatchId: event.dispatchId,
479
+ harness: event.harness,
480
+ session: event.session,
481
+ };
482
+ }
483
+ _workflowSpanId(event) {
484
+ return this._eventSpanId(event, "workflow");
485
+ }
486
+ _agentSpanId(event) {
487
+ return this._eventSpanId(event, `agent:${this._agentName(event)}`);
488
+ }
489
+ _operationSpanId(event) {
490
+ return this._eventSpanId(event, `operation:${event.operationId}`);
491
+ }
492
+ _taskSpanId(event) {
493
+ return this._eventSpanId(event, `task:${event.taskId}`);
494
+ }
495
+ _toolSpanId(event) {
496
+ return this._eventSpanId(event, `tool:${event.toolCallId}`);
497
+ }
498
+ _turnSpanId(event) {
499
+ return this._eventSpanId(event, `turn:${event.turnId}`);
500
+ }
501
+ _compactionSpanId(event) {
502
+ return this._eventSpanId(event, `compaction:${event.operationId ?? event.eventIndex}`);
503
+ }
504
+ _eventSpanId(event, suffix) {
505
+ return `flue:${this._traceKey(event)}:${suffix}`;
506
+ }
507
+ _rootParentId(event) {
508
+ if (event.runId) {
509
+ return this._workflowSpanId(event);
510
+ }
511
+ return undefined;
512
+ }
513
+ _operationOrRootParentId(event) {
514
+ if (event.operationId) {
515
+ return this._operationSpanId(event);
516
+ }
517
+ return this._rootParentId(event) ?? (event.instanceId ? this._agentSpanId(event) : undefined);
518
+ }
519
+ }
520
+ export { FlueInstrumentor as RespanFlueObserver };
521
+ function addPromptAttributes(attrs, systemPrompt, messages) {
522
+ let index = 0;
523
+ if (systemPrompt) {
524
+ attrs[promptRoleKey(index)] = "system";
525
+ attrs[promptContentKey(index)] = systemPrompt;
526
+ index += 1;
527
+ }
528
+ for (const message of messages) {
529
+ attrs[promptRoleKey(index)] = normalizePromptRole(message.role);
530
+ attrs[promptContentKey(index)] = messageToContent(message);
531
+ const toolCalls = messageToToolCalls(message);
532
+ if (toolCalls.length > 0) {
533
+ attrs[promptToolCallsKey(index)] = safeJson(toolCalls);
534
+ }
535
+ index += 1;
536
+ }
537
+ }
538
+ function addCompletionAttributes(attrs, message) {
539
+ attrs[GEN_AI_COMPLETION_ROLE] = "assistant";
540
+ attrs[GEN_AI_COMPLETION_CONTENT] = assistantContent(message);
541
+ const toolCalls = assistantToolCalls(message);
542
+ if (toolCalls.length > 0) {
543
+ attrs[GEN_AI_COMPLETION_TOOL_CALLS] = safeJson(toolCalls);
544
+ }
545
+ }
546
+ function addUsageAttributes(attrs, usage) {
547
+ if (!usage) {
548
+ return;
549
+ }
550
+ attrs[ATTR_GEN_AI_USAGE_INPUT_TOKENS] = usage.input;
551
+ attrs[ATTR_GEN_AI_USAGE_PROMPT_TOKENS] = usage.input;
552
+ attrs[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS] = usage.output;
553
+ attrs[ATTR_GEN_AI_USAGE_COMPLETION_TOKENS] = usage.output;
554
+ attrs[SpanAttributes.LLM_USAGE_TOTAL_TOKENS] = usage.totalTokens;
555
+ addUsageMetadata(attrs, usage);
556
+ }
557
+ function addUsageMetadata(attrs, usage) {
558
+ if (!usage) {
559
+ return;
560
+ }
561
+ attrs[metadataKey("flue_usage_cache_read_tokens")] = usage.cacheRead;
562
+ attrs[metadataKey("flue_usage_cache_write_tokens")] = usage.cacheWrite;
563
+ attrs[metadataKey("flue_usage_cost_total")] = usage.cost.total;
564
+ }
565
+ function promptRoleKey(index) {
566
+ return `${ATTR_GEN_AI_PROMPT}.${index}.role`;
567
+ }
568
+ function promptContentKey(index) {
569
+ return `${ATTR_GEN_AI_PROMPT}.${index}.content`;
570
+ }
571
+ function promptToolCallsKey(index) {
572
+ return `${ATTR_GEN_AI_PROMPT}.${index}.tool_calls`;
573
+ }
574
+ function normalizePromptRole(role) {
575
+ if (role === "toolResult") {
576
+ return "tool";
577
+ }
578
+ return role;
579
+ }
580
+ function messageToContent(message) {
581
+ if (message.role === "toolResult") {
582
+ return contentBlocksToText(message.content);
583
+ }
584
+ if (typeof message.content === "string") {
585
+ return message.content;
586
+ }
587
+ return contentBlocksToText(message.content);
588
+ }
589
+ function messageToToolCalls(message) {
590
+ if (message.role !== "assistant") {
591
+ return [];
592
+ }
593
+ return assistantToolCalls(message);
594
+ }
595
+ function assistantContent(message) {
596
+ return contentBlocksToText(message.content.filter((block) => block.type !== "toolCall"));
597
+ }
598
+ function assistantToolCalls(message) {
599
+ return message.content
600
+ .filter((block) => block.type === "toolCall")
601
+ .map(toOpenAIToolCall);
602
+ }
603
+ function contentBlocksToText(blocks) {
604
+ return blocks
605
+ .map((block) => {
606
+ if (block.type === "text") {
607
+ return block.text ?? "";
608
+ }
609
+ if (block.type === "thinking") {
610
+ return block.thinking ?? "";
611
+ }
612
+ if (block.type === "image") {
613
+ return `[image:${block.mimeType ?? "unknown"}]`;
614
+ }
615
+ if (block.type === "toolCall") {
616
+ return "";
617
+ }
618
+ return safeJson(block);
619
+ })
620
+ .filter(Boolean)
621
+ .join("\n");
622
+ }
623
+ function toOpenAIToolCall(call) {
624
+ return {
625
+ id: call.id,
626
+ type: "function",
627
+ function: {
628
+ name: call.name,
629
+ arguments: safeJson(call.arguments ?? {}),
630
+ },
631
+ };
632
+ }
633
+ function toToolDefinition(tool) {
634
+ return {
635
+ name: tool.name,
636
+ description: tool.description,
637
+ parameters: toSerializableValue(tool.parameters),
638
+ };
639
+ }
640
+ function normalizeProvider(provider) {
641
+ return provider.toLowerCase();
642
+ }
643
+ function normalizeModel(model, provider) {
644
+ const prefix = provider ? `${provider}/` : undefined;
645
+ if (prefix && model.startsWith(prefix)) {
646
+ return model.slice(prefix.length);
647
+ }
648
+ return model;
649
+ }
650
+ function startEventValue(start, key) {
651
+ return start?.event && key in start.event
652
+ ? start.event[key]
653
+ : undefined;
654
+ }
655
+ function startTimeFromDuration(endTimeIso, durationMs) {
656
+ if (durationMs === undefined) {
657
+ return undefined;
658
+ }
659
+ const endMs = new Date(endTimeIso).getTime();
660
+ if (!Number.isFinite(endMs)) {
661
+ return undefined;
662
+ }
663
+ return new Date(endMs - durationMs).toISOString();
664
+ }
665
+ function errorMessageFrom(error) {
666
+ if (error instanceof Error) {
667
+ return error.message;
668
+ }
669
+ if (typeof error === "string") {
670
+ return error;
671
+ }
672
+ if (error && typeof error === "object" && "message" in error) {
673
+ return String(error.message);
674
+ }
675
+ return safeJson(error);
676
+ }
677
+ function errorOutput(error) {
678
+ if (error instanceof Error) {
679
+ return {
680
+ error: error.name,
681
+ message: error.message,
682
+ stack: error.stack,
683
+ };
684
+ }
685
+ if (error && typeof error === "object") {
686
+ return toSerializableValue(error);
687
+ }
688
+ return {
689
+ error: String(error),
690
+ };
691
+ }
692
+ function identityMetadata(event) {
693
+ return {
694
+ [metadataKey("flue_run_id")]: event.runId,
695
+ [metadataKey("flue_instance_id")]: event.instanceId,
696
+ [metadataKey("flue_dispatch_id")]: event.dispatchId,
697
+ [metadataKey("flue_submission_id")]: event.submissionId,
698
+ [metadataKey("flue_harness")]: event.harness,
699
+ [metadataKey("flue_session")]: event.session,
700
+ [metadataKey("flue_parent_session")]: event.parentSession,
701
+ [metadataKey("flue_operation_id")]: event.operationId,
702
+ [metadataKey("flue_turn_id")]: event.turnId,
703
+ [metadataKey("flue_task_id")]: event.taskId,
704
+ };
705
+ }
706
+ function metadataKey(key) {
707
+ return `${RespanSpanAttributes.RESPAN_METADATA}.${key}`;
708
+ }
709
+ function sanitizeAttributes(attrs) {
710
+ const sanitized = {};
711
+ for (const [key, value] of Object.entries(attrs)) {
712
+ if (value === undefined || value === null) {
713
+ continue;
714
+ }
715
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
716
+ sanitized[key] = value;
717
+ continue;
718
+ }
719
+ if (Array.isArray(value) && value.every((item) => typeof item === "string")) {
720
+ sanitized[key] = value;
721
+ continue;
722
+ }
723
+ if (Array.isArray(value) && value.every((item) => typeof item === "number")) {
724
+ sanitized[key] = value;
725
+ continue;
726
+ }
727
+ if (Array.isArray(value) && value.every((item) => typeof item === "boolean")) {
728
+ sanitized[key] = value;
729
+ continue;
730
+ }
731
+ sanitized[key] = safeJson(value);
732
+ }
733
+ return sanitized;
734
+ }
735
+ function safeJson(value) {
736
+ try {
737
+ return JSON.stringify(toSerializableValue(value), (_key, innerValue) => typeof innerValue === "bigint" ? innerValue.toString() : innerValue);
738
+ }
739
+ catch {
740
+ return JSON.stringify(String(value));
741
+ }
742
+ }
743
+ function toSerializableValue(value) {
744
+ if (value === undefined) {
745
+ return null;
746
+ }
747
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
748
+ return value;
749
+ }
750
+ if (typeof value === "bigint") {
751
+ return value.toString();
752
+ }
753
+ if (value instanceof Error) {
754
+ return errorOutput(value);
755
+ }
756
+ if (Array.isArray(value)) {
757
+ return value.map(toSerializableValue);
758
+ }
759
+ if (typeof value === "object") {
760
+ const output = {};
761
+ for (const [key, innerValue] of Object.entries(value)) {
762
+ if (typeof innerValue === "function" || typeof innerValue === "symbol") {
763
+ continue;
764
+ }
765
+ output[key] = toSerializableValue(innerValue);
766
+ }
767
+ return output;
768
+ }
769
+ return String(value);
770
+ }
771
+ function isUsableTraceId(value) {
772
+ return Boolean(value && /^[0-9a-f]{32}$/i.test(value));
773
+ }
774
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@respan/instrumentation-flue",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Respan instrumentation plugin for the Flue TypeScript runtime",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "author": "Respan <team@respan.ai>",
9
+ "license": "Apache-2.0",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/respanai/respan",
13
+ "directory": "javascript-sdks/instrumentations/respan-instrumentation-flue"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "test": "yarn build && node --test tests/*.test.mjs",
26
+ "publish:package": "yarn npm publish",
27
+ "release": "yarn build && yarn version patch && yarn publish:package"
28
+ },
29
+ "dependencies": {
30
+ "@opentelemetry/api": "^1.9.0",
31
+ "@opentelemetry/sdk-trace-base": "^1.26.0",
32
+ "@opentelemetry/semantic-conventions": "^1.40.0",
33
+ "@respan/respan-sdk": "^1.1.7",
34
+ "@respan/tracing": "^1.1.6",
35
+ "@traceloop/ai-semantic-conventions": "^0.13.0"
36
+ },
37
+ "peerDependencies": {
38
+ "@flue/runtime": ">=1.0.0-beta.1"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "@flue/runtime": {
42
+ "optional": false
43
+ }
44
+ },
45
+ "devDependencies": {
46
+ "@flue/runtime": "1.0.0-beta.2",
47
+ "@types/node": "^22.15.29",
48
+ "typescript": "^5.7.3"
49
+ }
50
+ }