@glassflow-ai/rius 0.7.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -14,6 +14,17 @@ interface RiusOptions {
14
14
  endpoint?: string;
15
15
  apiKey?: string;
16
16
  serviceName?: string;
17
+ /**
18
+ * The running build's version, stamped on the resource as `service.version`.
19
+ * There is deliberately NO default: `service.name` already shows what a
20
+ * missing value costs, where the `unknown_service` placeholder merges every
21
+ * unconfigured process into one bucket. An absent version is a visibly
22
+ * absent version, so the resource simply omits the key.
23
+ *
24
+ * Resolution: this option, then `RIUS_SERVICE_VERSION`, then
25
+ * `service.version` inside `OTEL_RESOURCE_ATTRIBUTES`, then unset.
26
+ */
27
+ serviceVersion?: string;
17
28
  disabled?: boolean;
18
29
  sampleRate?: number;
19
30
  captureContent?: boolean;
@@ -22,6 +33,34 @@ interface RiusOptions {
22
33
  heartbeatInterval?: number;
23
34
  heartbeat?: boolean;
24
35
  agentName?: string;
36
+ /**
37
+ * A STABLE identifier for the agent this process is, stamped on the
38
+ * resource as `rius.main_agent.id`. A registry id or a hosted agent's ARN,
39
+ * NOT a transient in-memory or process-local id: a uuid minted at startup
40
+ * identifies a run, not an agent, and would split one agent into a fresh
41
+ * bucket per restart. `service.instance.id` already answers "which
42
+ * process". Absent by default and never defaulted.
43
+ *
44
+ * Resolution: this option, then `RIUS_MAIN_AGENT_ID`, then unset.
45
+ */
46
+ mainAgentId?: string;
47
+ /**
48
+ * A human-readable description of the agent this process is, stamped as
49
+ * `rius.main_agent.description`. This option, then
50
+ * `RIUS_MAIN_AGENT_DESCRIPTION`, then unset.
51
+ */
52
+ mainAgentDescription?: string;
53
+ /**
54
+ * The version of the AGENT DEFINITION this process runs — its prompt, tools
55
+ * and policy — stamped as `rius.main_agent.version`. Deliberately NOT
56
+ * `serviceVersion`, which is the version of the build hosting it: the two
57
+ * move independently, and neither is ever derived from the other.
58
+ *
59
+ * Resolution: this option, then `RIUS_MAIN_AGENT_VERSION`, then unset. The
60
+ * OTel environment is not consulted, unlike `serviceVersion`: no convention
61
+ * defines this key, so `OTEL_RESOURCE_ATTRIBUTES` cannot be carrying it.
62
+ */
63
+ mainAgentVersion?: string;
25
64
  partialSpans?: boolean;
26
65
  /** Seconds to debounce a pending-span snapshot after span start. */
27
66
  partialSpansDelay?: number;
@@ -31,6 +70,22 @@ interface RiusOptions {
31
70
  * one with `withSession()` instead, which overrides this default.
32
71
  */
33
72
  sessionId?: string;
73
+ /**
74
+ * What to do when another SDK already holds the OpenTelemetry global tracer
75
+ * provider at `init()` (`RIUS_BRIDGE_FOREIGN_PROVIDER`; off by default).
76
+ *
77
+ * Off, Rius keeps to its own provider: LLM spans started inside the other
78
+ * SDK's spans arrive without their parent, flagged `rius.parent.foreign`,
79
+ * counted in the heartbeat, and the first one logs a warning. On, Rius also
80
+ * exports the other SDK's spans (the parents), under Rius's resource
81
+ * identity and subject to Rius's sampling and content settings, and it never
82
+ * modifies what the other SDK exports. Either way the resource records the
83
+ * conflict as `rius.sdk.global_provider`.
84
+ *
85
+ * Off by default: exporting another SDK's spans is consent the caller gives
86
+ * explicitly.
87
+ */
88
+ bridgeForeignProvider?: boolean;
34
89
  }
35
90
 
36
91
  type HeartbeatTransport = (payload: Record<string, unknown>, timeoutMs: number) => Promise<void>;
@@ -174,8 +229,8 @@ interface SpanOptions {
174
229
  /**
175
230
  * The OpenTelemetry `SpanKind` FIELD (INTERNAL, CLIENT, …), orthogonal to
176
231
  * `kind` above, which is our taxonomy attribute. Conventions set it per
177
- * operation — a remote tool call is CLIENT — so it is opt-in here and left
178
- * at the tracer's default (INTERNAL) otherwise.
232
+ * operation, so by default it is derived from `kind` (see `otelSpanKind`);
233
+ * set this to override, as the MCP wrapper does for a remote tool call.
179
234
  */
180
235
  otelKind?: SpanKind$1;
181
236
  input?: unknown;
@@ -186,6 +241,85 @@ interface SpanOptions {
186
241
  * `withUser` around the handler.
187
242
  */
188
243
  userId?: string;
244
+ /**
245
+ * The tool name a TOOL span carries as `gen_ai.tool.name`. Defaults to the
246
+ * span name, which is what a caller who passes nothing meant back when the
247
+ * two were necessarily the same string. Pass it explicitly whenever the
248
+ * span name is not the bare tool name — and prefer passing it INSTEAD of a
249
+ * span name, which gets you the conventions' `execute_tool {tool}` name for
250
+ * free. With neither, the span is named `execute_tool` and carries no tool
251
+ * name: nothing is invented.
252
+ */
253
+ toolName?: string;
254
+ /**
255
+ * The id of the model's tool-call message this TOOL span answers, set as
256
+ * `gen_ai.tool.call.id`. Caller-supplied and nothing else: the id belongs
257
+ * to the assistant turn that requested the call, which the SDK never sees,
258
+ * so there is nothing to derive it from and it is omitted rather than
259
+ * invented. Scoped to TOOL, like `toolName`: on any other kind the key
260
+ * would claim a tool call that is not there.
261
+ */
262
+ toolCallId?: string;
263
+ /**
264
+ * What kind of tool this TOOL span ran, set as `gen_ai.tool.type` — the
265
+ * conventions' examples are `"function"`, `"extension"` and `"datastore"`.
266
+ * Caller-supplied, recorded verbatim, never guessed from the callable: a
267
+ * wrapped function is not automatically a `function` tool, since the same
268
+ * wrapper is what an agent-side extension call goes through. Scoped to
269
+ * TOOL, like `toolCallId`.
270
+ */
271
+ toolType?: string;
272
+ /**
273
+ * The index, collection or knowledge base a RETRIEVER span searched, set as
274
+ * `gen_ai.data_source.id`. Ignored on every other kind: the key means the
275
+ * target of a retrieval, and putting it elsewhere would make the attribute
276
+ * mean something different depending on the span. Omitted when not passed,
277
+ * never guessed.
278
+ */
279
+ dataSourceId?: string;
280
+ /**
281
+ * How many documents a RETRIEVER span asked for, set as
282
+ * `gen_ai.retrieval.top_k`. Ignored on every other kind. What came back is
283
+ * not an option here: it is unknown at span creation, so it is recorded
284
+ * afterwards with `Observation.setRetrievedDocuments`.
285
+ */
286
+ topK?: number;
287
+ /**
288
+ * The agent an AGENT span INVOKES, set as `gen_ai.agent.name`. That is what
289
+ * the key means on an invoke-agent span, where the conventions make it
290
+ * Conditionally Required; on an execute-tool span the same key means the
291
+ * agent DOING the call, which is why this is scoped to AGENT here. Unset,
292
+ * it falls back to the agent name `init()` was given. It is never taken
293
+ * from the span name, unlike the tool name: that fallback exists only
294
+ * because a tool's name and its span name were historically one string,
295
+ * and a wrong agent name mislabels every span beneath it. Ignored on every
296
+ * other kind, where the key would read as "the agent that produced this
297
+ * span" — which is what the resource attribute of the same name says.
298
+ *
299
+ * On the scoped surface this name also becomes the enclosing agent scope,
300
+ * so TOOL spans opened inside the callback carry it as the agent that
301
+ * EXECUTED them. See {@link startAsCurrentSpan}.
302
+ */
303
+ agentName?: string;
304
+ /**
305
+ * The invoked agent's identifier, set as `gen_ai.agent.id`. This key is for
306
+ * a HOSTED agent resource, such as a Bedrock agent ARN; the conventions
307
+ * advise against recording a transient in-memory instance id there, so an
308
+ * in-process agent leaves it unset. Ignored on every other kind.
309
+ */
310
+ agentId?: string;
311
+ /**
312
+ * The invoked agent's version, set as `gen_ai.agent.version`: the version of
313
+ * the agent DEFINITION this span invoked — its prompt, tools and policy.
314
+ * Taken verbatim; the conventions' own examples are `1.0.0` and
315
+ * `2025-05-01`, so there is no one format to hold callers to.
316
+ *
317
+ * Never derived from `service.version` (the build running this process) nor
318
+ * from the main-agent version (the agent this process IS): a process at one
319
+ * version can invoke agents at several others. Ignored on every other kind,
320
+ * like the name and the id it accompanies.
321
+ */
322
+ agentVersion?: string;
189
323
  /**
190
324
  * Identity attributes to set at span CREATION rather than after it. Pending
191
325
  * snapshots are built at start, so anything a caller would otherwise
@@ -202,6 +336,20 @@ declare class Observation {
202
336
  constructor(span: Span);
203
337
  setInput(value: unknown): this;
204
338
  setOutput(value: unknown): this;
339
+ /**
340
+ * Record what a retrieval returned, as `gen_ai.retrieval.documents`.
341
+ *
342
+ * The conventions define this as an array of objects, each with an optional
343
+ * `id` and an optional `score`. Identifiers and relevance, never document
344
+ * text, which is why it is not treated as content: it survives
345
+ * `captureContent: false` the way token counts do. Put the retrieved text in
346
+ * `setOutput` if you want it captured, and masking applies to it there.
347
+ *
348
+ * Unlike `dataSourceId` and `topK`, which describe the request and are
349
+ * passed at span creation, this is only knowable once the search has run, so
350
+ * it never reaches a pending snapshot.
351
+ */
352
+ setRetrievedDocuments(documents: unknown): this;
205
353
  /**
206
354
  * Set an arbitrary attribute. Primitives and homogeneous primitive arrays
207
355
  * are passed through as the OTel values they are; objects are JSON-encoded
@@ -210,9 +358,16 @@ declare class Observation {
210
358
  */
211
359
  setAttribute(key: string, value: unknown): this;
212
360
  /**
213
- * Record an error on the span and set ERROR status. This is exactly what the
214
- * `startAsCurrent*` helpers do on a thrown error, exposed so the manual
215
- * `start*` path does not have to reach through `.span` to match it.
361
+ * Record an error on the span, set ERROR status and `error.type`. This is
362
+ * exactly what the `startAsCurrent*` helpers do on a thrown error, exposed
363
+ * so the manual `start*` path does not have to reach through `.span` to
364
+ * match it.
365
+ *
366
+ * `error.type` is Conditionally Required by the GenAI conventions on every
367
+ * span that ends in an error, and every helper's throw path funnels through
368
+ * here, so this is the one place that sets it. The error's name or class
369
+ * (see errorType), never the message: it must stay low-cardinality and free
370
+ * of echoed content.
216
371
  *
217
372
  * Accepts `unknown` because that is what a `catch` binding is; a non-Error
218
373
  * throwable is wrapped so `recordException` still gets a real Error.
@@ -225,19 +380,35 @@ declare class Observation {
225
380
  /**
226
381
  * Create a span and return a handle. You MUST call end() (or use `using`).
227
382
  * The span is parented to whatever is current but does NOT become current.
383
+ *
384
+ * Because it never becomes current, an AGENT span created here opens no
385
+ * agent scope: a TOOL span started while it is open falls back to the
386
+ * configured agent name for `gen_ai.agent.name` rather than naming this one.
387
+ * Use {@link startAsCurrentSpan} (or `observe`) where that matters.
388
+ *
389
+ * The name is optional: omit it and the span is named the way the GenAI
390
+ * conventions say to, `{operation} {target}` — `execute_tool get_weather`,
391
+ * `invoke_agent planner`, `retrieval docs-index` — from the attributes it is
392
+ * being created with. A name you pass always wins.
228
393
  */
229
394
  declare function startSpan(name: string, options?: SpanOptions): Observation;
395
+ declare function startSpan(options?: SpanOptions): Observation;
230
396
  /** The body of a scoped span. */
231
397
  type SpanBody<T> = (observation: Observation) => Promise<T> | T;
232
398
  /**
233
399
  * Run `fn` with a new span active, so spans created inside it nest under this
234
400
  * one across async boundaries. Auto-ends, records exceptions, rethrows.
235
401
  *
236
- * `options` is optional, so the common case is `startAsCurrentSpan(name, fn)`
237
- * rather than `startAsCurrentSpan(name, {}, fn)`. The callback stays last.
402
+ * Both the name and `options` are optional, and the callback always comes
403
+ * last: `startAsCurrentSpan(name, fn)`, `startAsCurrentSpan(options, fn)` and
404
+ * `startAsCurrentSpan(fn)` all work, as does the full three-argument form.
405
+ * Omitting the name asks for the conventions' `{operation} {target}` name;
406
+ * see {@link startSpan}.
238
407
  */
239
408
  declare function startAsCurrentSpan<T>(name: string, fn: SpanBody<T>): Promise<T>;
240
409
  declare function startAsCurrentSpan<T>(name: string, options: SpanOptions, fn: SpanBody<T>): Promise<T>;
410
+ declare function startAsCurrentSpan<T>(options: SpanOptions, fn: SpanBody<T>): Promise<T>;
411
+ declare function startAsCurrentSpan<T>(fn: SpanBody<T>): Promise<T>;
241
412
 
242
413
  /**
243
414
  * Options for {@link startGeneration} and {@link startAsCurrentGeneration}:
@@ -248,17 +419,26 @@ interface GenerationOptions {
248
419
  provider?: string;
249
420
  input?: unknown;
250
421
  /**
251
- * Request parameters, each recorded as `gen_ai.request.<key>` — for example
252
- * `{ temperature: 0.2, max_tokens: 512 }`. Keys are passed through verbatim,
253
- * so use the provider's own parameter names.
422
+ * Request parameters, for example `{ temperature: 0.2, max_tokens: 512 }`,
423
+ * recorded at span creation so they ride pending snapshots.
424
+ *
425
+ * A parameter the GenAI conventions define, under its canonical name or a
426
+ * recognised provider spelling (OpenAI's `max_completion_tokens`, Google's
427
+ * `maxOutputTokens`, a camelCase `topP`), is recorded under its canonical
428
+ * `gen_ai.request.*` key and only that one. Everything else is recorded
429
+ * under `rius.request.<key>`, this SDK's own namespace, with the key
430
+ * otherwise untouched. Values that are not scalars or homogeneous scalar
431
+ * arrays are JSON-encoded; `null` and `undefined` mean "not set" and are
432
+ * skipped. The `model` and `reasoningLevel` options win over a parameter
433
+ * that maps to the same key.
254
434
  */
255
435
  modelParameters?: Record<string, unknown>;
256
436
  /**
257
437
  * Requested reasoning/thinking effort level
258
438
  * (`gen_ai.request.reasoning.level`), e.g. OpenAI's `reasoning.effort`
259
- * values. Provider-defined string, recorded verbatim. A first-class option
260
- * because the `modelParameters` pass-through would spell the key
261
- * `gen_ai.request.reasoning_level`, which is not the convention's name.
439
+ * values. Provider-defined string, recorded verbatim. Passing
440
+ * `reasoning_effort` through `modelParameters` lands on the same key; this
441
+ * option wins when both are given.
262
442
  */
263
443
  reasoningLevel?: string;
264
444
  /**
@@ -271,6 +451,17 @@ interface GenerationOptions {
271
451
  * creation and, for the scoped variant, on every span opened inside it.
272
452
  */
273
453
  userId?: string;
454
+ /**
455
+ * The output modality requested of the model (`gen_ai.output.type`) —
456
+ * `"text"`, `"json"`, `"image"` or `"speech"` per the conventions, which
457
+ * make it Conditionally Required when the request asks for a specific
458
+ * output format. An option rather than a setter because it is a property of
459
+ * the REQUEST: known before the call, so it is set at span creation and
460
+ * reaches pending snapshots. The string is recorded verbatim, not validated
461
+ * against the four members: the enum is open, and a provider's own spelling
462
+ * is still what the caller asked for.
463
+ */
464
+ outputType?: string;
274
465
  /**
275
466
  * Operation name (`gen_ai.operation.name`); default `"chat"`. Set it for
276
467
  * `text_completion`, `embeddings` or `generate_content` calls, as the
@@ -282,11 +473,34 @@ interface GenerationOptions {
282
473
  declare class Generation extends Observation {
283
474
  private readonly provider?;
284
475
  private firstTokenRecorded;
476
+ /**
477
+ * Monotonic clock at construction, which is span creation for both
478
+ * `startGeneration` and the scoped form. The API `Span` exposes no start
479
+ * time, so this is what `recordFirstToken` measures the first chunk against.
480
+ */
481
+ private readonly startedAt;
482
+ /**
483
+ * The latest normalized input / output and the tool definitions, kept so
484
+ * `rius.context.sizes` can be computed from all three once, in {@link end}.
485
+ */
486
+ private inputMessages?;
487
+ private outputMessages?;
488
+ private tools?;
285
489
  /**
286
490
  * The provider passed at creation; drives the Anthropic input-token summing
287
491
  * in {@link setUsage}. A bare `new Generation(span)` has none and never sums.
288
492
  */
289
493
  constructor(span: ConstructorParameters<typeof Observation>[0], provider?: string | undefined);
494
+ /**
495
+ * Computed once, as the span ends, rather than on every content write: a
496
+ * generation with tools, input and output would otherwise pay for it three
497
+ * times, and only the last result matters. Derived from the normalized
498
+ * messages BEFORE truncation, which is what makes it trustworthy when the
499
+ * content attributes are not.
500
+ */
501
+ private setContextSizes;
502
+ /** Ends the span after recording the context sizes; idempotent like the base. */
503
+ end(): void;
290
504
  /**
291
505
  * Record the request messages (`gen_ai.input.messages`), normalised to the
292
506
  * GenAI `{role, parts}` shape like the Python SDK does: bare strings, OpenAI
@@ -306,6 +520,15 @@ declare class Generation extends Observation {
306
520
  */
307
521
  setToolDefinitions(tools: unknown[]): this;
308
522
  setModel(model: string): this;
523
+ /**
524
+ * The provider's identifier for this completion (`gen_ai.response.id`) —
525
+ * OpenAI's `id`, Anthropic's `id`, and so on. A post-call setter and not a
526
+ * creation option for the reason `setModel` is one: the value arrives WITH
527
+ * the response, so no span can carry it at creation and no pending snapshot
528
+ * can either. Recorded verbatim; it is an opaque provider string, and it is
529
+ * not content, so it survives `captureContent: false`.
530
+ */
531
+ setResponseId(id: string): this;
309
532
  /**
310
533
  * Token usage (`gen_ai.usage.*`). Pass provider-reported values as-is;
311
534
  * never pre-add anything. Per the GenAI conventions, `inputTokens` is the
@@ -341,30 +564,93 @@ declare class Generation extends Observation {
341
564
  */
342
565
  setFinishReasons(reasons: string | string[]): this;
343
566
  /**
344
- * The TTFT anchor: event time minus span start. Idempotent: only the
345
- * first call records the event, so a streaming loop can call this
346
- * unconditionally on every chunk without inflating the span. A no-op
347
- * after the span has ended.
567
+ * Mark the arrival of the first streamed token. Records the
568
+ * `gen_ai.first_token` event (the timestamp the backend derives TTFT from)
569
+ * and, per the GenAI conventions, the derived
570
+ * `gen_ai.response.time_to_first_chunk` (seconds since span creation) plus
571
+ * `gen_ai.request.stream = true`: a first chunk arriving is what tells the
572
+ * SDK the request streamed. Idempotent: only the first call records, so a
573
+ * streaming loop can call this unconditionally on every chunk without
574
+ * inflating the span. A no-op after the span has ended.
348
575
  */
349
576
  recordFirstToken(): this;
350
577
  }
351
- /** Create a generation span and return a handle. You MUST call end(). */
578
+ /**
579
+ * Create a generation span and return a handle. You MUST call end().
580
+ *
581
+ * The name is optional; omitted, the span is named `{operation} {model}`.
582
+ */
352
583
  declare function startGeneration(name: string, options?: GenerationOptions): Generation;
584
+ declare function startGeneration(options?: GenerationOptions): Generation;
353
585
  /** The body of a scoped generation. */
354
586
  type GenerationBody<T> = (generation: Generation) => Promise<T> | T;
355
587
  /**
356
588
  * Run `fn` with a generation span active. Auto-ends, records exceptions.
357
589
  *
358
- * `options` is optional, so `startAsCurrentGeneration(name, fn)` works without
359
- * an empty object. The callback stays last.
590
+ * Both the name and `options` are optional and the callback stays last, so
591
+ * `startAsCurrentGeneration({ model: "gpt-4o" }, fn)` names the span
592
+ * `chat gpt-4o` for you.
360
593
  */
361
594
  declare function startAsCurrentGeneration<T>(name: string, fn: GenerationBody<T>): Promise<T>;
362
595
  declare function startAsCurrentGeneration<T>(name: string, options: GenerationOptions, fn: GenerationBody<T>): Promise<T>;
596
+ declare function startAsCurrentGeneration<T>(options: GenerationOptions, fn: GenerationBody<T>): Promise<T>;
597
+ declare function startAsCurrentGeneration<T>(fn: GenerationBody<T>): Promise<T>;
363
598
 
364
599
  /** Options for {@link observe}. */
365
600
  interface ObserveOptions {
366
601
  name?: string;
367
602
  kind?: SpanKind;
603
+ /**
604
+ * The tool name a TOOL-kind wrapper carries as `gen_ai.tool.name`. Defaults
605
+ * to the span name, so a wrapped function whose name IS the tool name needs
606
+ * nothing; pass it when the two differ.
607
+ */
608
+ toolName?: string;
609
+ /**
610
+ * The id of the model tool-call a TOOL-kind wrapper answers, set as
611
+ * `gen_ai.tool.call.id`. Only the caller has it — a wrapper sees the
612
+ * arguments, never the assistant message that produced them — so it is
613
+ * passed or omitted, never derived. Ignored on every other kind.
614
+ */
615
+ toolCallId?: string;
616
+ /**
617
+ * What kind of tool a TOOL-kind wrapper runs, set as `gen_ai.tool.type`
618
+ * (`"function"`, `"extension"`, `"datastore"`). Recorded verbatim and never
619
+ * inferred from the wrapped callable: the wrapper shape says nothing about
620
+ * where the tool actually executes. Ignored on every other kind.
621
+ */
622
+ toolType?: string;
623
+ /**
624
+ * The index, collection or knowledge base a RETRIEVER-kind wrapper searched,
625
+ * set as `gen_ai.data_source.id`. Ignored on every other kind.
626
+ */
627
+ dataSourceId?: string;
628
+ /**
629
+ * How many documents a RETRIEVER-kind wrapper asked for, set as
630
+ * `gen_ai.retrieval.top_k`. Ignored on every other kind.
631
+ */
632
+ topK?: number;
633
+ /**
634
+ * The agent an AGENT-kind wrapper invokes, set as `gen_ai.agent.name`.
635
+ * Unset, it falls back to the agent name `init()` was given; it is never
636
+ * taken from the wrapped function's name. Ignored on every other kind.
637
+ *
638
+ * It also scopes the call: TOOL spans opened while the wrapped function
639
+ * runs carry this name as the agent that EXECUTED them, which is what the
640
+ * same key means on an execute-tool span.
641
+ */
642
+ agentName?: string;
643
+ /**
644
+ * The invoked agent's identifier (`gen_ai.agent.id`). For a HOSTED agent
645
+ * resource such as a Bedrock agent ARN; an in-process agent leaves it unset.
646
+ */
647
+ agentId?: string;
648
+ /**
649
+ * The invoked agent's version (`gen_ai.agent.version`): the version of the
650
+ * agent definition, taken verbatim and never derived from the service
651
+ * version or from the version of the agent this process is.
652
+ */
653
+ agentVersion?: string;
368
654
  captureInput?: boolean;
369
655
  captureOutput?: boolean;
370
656
  }
@@ -448,6 +734,6 @@ declare function withSession<T>(sessionId: string, fn: (sessionId: string) => T)
448
734
  */
449
735
  declare function withUser<T>(userId: string, fn: (userId: string) => T): T;
450
736
 
451
- declare const VERSION = "0.7.0";
737
+ declare const VERSION = "1.0.0";
452
738
 
453
739
  export { Generation, type GenerationBody, type GenerationOptions, type InitOptions, type Mask, Observation, type ObserveOptions, RiusClient, type RiusOptions, type SpanBody, SpanKind, type SpanOptions, VERSION, type WorkspaceExporterFactory, getTracer, init, observe, registerWorkspace, startAsCurrentGeneration, startAsCurrentSpan, startGeneration, startSpan, withSession, withUser, withWorkspace };