evlog 2.19.2 → 2.21.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 (160) hide show
  1. package/README.md +30 -1
  2. package/dist/adapters/axiom.d.mts +1 -1
  3. package/dist/adapters/axiom.mjs +2 -2
  4. package/dist/adapters/better-stack.d.mts +1 -1
  5. package/dist/adapters/better-stack.mjs +2 -2
  6. package/dist/adapters/datadog.d.mts +1 -1
  7. package/dist/adapters/datadog.mjs +2 -2
  8. package/dist/adapters/fs.d.mts +1 -1
  9. package/dist/adapters/fs.mjs +1 -1
  10. package/dist/adapters/hyperdx.d.mts +1 -1
  11. package/dist/adapters/hyperdx.mjs +1 -1
  12. package/dist/adapters/memory.d.mts +1 -1
  13. package/dist/adapters/memory.mjs +1 -1
  14. package/dist/adapters/otlp.d.mts +1 -1
  15. package/dist/adapters/otlp.mjs +2 -2
  16. package/dist/adapters/posthog.d.mts +1 -1
  17. package/dist/adapters/posthog.mjs +2 -2
  18. package/dist/adapters/sentry.d.mts +1 -1
  19. package/dist/adapters/sentry.mjs +2 -2
  20. package/dist/ai/index.d.mts +39 -16
  21. package/dist/ai/index.d.mts.map +1 -1
  22. package/dist/ai/index.mjs +81 -16
  23. package/dist/ai/index.mjs.map +1 -1
  24. package/dist/asyncStorageScope-DnF7Xk8l.mjs +81 -0
  25. package/dist/asyncStorageScope-DnF7Xk8l.mjs.map +1 -0
  26. package/dist/{audit-CL0q7GJU.mjs → audit-BXCYMjcC.mjs} +21 -6
  27. package/dist/audit-BXCYMjcC.mjs.map +1 -0
  28. package/dist/{audit-CBfv3rl1.d.mts → audit-BZrUvjfW.d.mts} +2 -1
  29. package/dist/{audit-CBfv3rl1.d.mts.map → audit-BZrUvjfW.d.mts.map} +1 -1
  30. package/dist/audit-action.d.mts +1 -1
  31. package/dist/audit.d.mts +1 -1
  32. package/dist/audit.mjs +1 -1
  33. package/dist/better-auth/index.d.mts +1 -1
  34. package/dist/browser.d.mts +1 -1
  35. package/dist/{catalog-CyemiLYG.d.mts → catalog-1cQnNxR2.d.mts} +3 -3
  36. package/dist/{catalog-CyemiLYG.d.mts.map → catalog-1cQnNxR2.d.mts.map} +1 -1
  37. package/dist/catalog.d.mts +1 -1
  38. package/dist/{define-BuDJpV2b.d.mts → define-Ct2QyrE9.d.mts} +3 -3
  39. package/dist/{define-BuDJpV2b.d.mts.map → define-Ct2QyrE9.d.mts.map} +1 -1
  40. package/dist/{drain-6lV-g7JB.mjs → drain-AD7Mn_5_.mjs} +3 -3
  41. package/dist/{drain-6lV-g7JB.mjs.map → drain-AD7Mn_5_.mjs.map} +1 -1
  42. package/dist/elysia/index.d.mts +6 -5
  43. package/dist/elysia/index.d.mts.map +1 -1
  44. package/dist/elysia/index.mjs +11 -8
  45. package/dist/elysia/index.mjs.map +1 -1
  46. package/dist/{enrich-error-stack-next.node-BecxSKUc.mjs → enrich-error-stack-next.node-KB0Oap7R.mjs} +1 -1
  47. package/dist/{enrich-error-stack-next.node-BecxSKUc.mjs.map → enrich-error-stack-next.node-KB0Oap7R.mjs.map} +1 -1
  48. package/dist/{enricher-VdBVX4oT.d.mts → enricher-BOzt2FCi.d.mts} +2 -2
  49. package/dist/{enricher-VdBVX4oT.d.mts.map → enricher-BOzt2FCi.d.mts.map} +1 -1
  50. package/dist/enrichers.d.mts +2 -2
  51. package/dist/{error-CPCM5a1D.d.mts → error-BRymuv8U.d.mts} +2 -2
  52. package/dist/{error-CPCM5a1D.d.mts.map → error-BRymuv8U.d.mts.map} +1 -1
  53. package/dist/error.d.mts +1 -1
  54. package/dist/{errors-ZdY6Ohi6.d.mts → errors-C7qA6CAi.d.mts} +2 -2
  55. package/dist/{errors-ZdY6Ohi6.d.mts.map → errors-C7qA6CAi.d.mts.map} +1 -1
  56. package/dist/eve/index.d.mts +72 -0
  57. package/dist/eve/index.d.mts.map +1 -0
  58. package/dist/eve/index.mjs +593 -0
  59. package/dist/eve/index.mjs.map +1 -0
  60. package/dist/express/index.d.mts +2 -2
  61. package/dist/express/index.mjs +3 -3
  62. package/dist/fastify/index.d.mts +2 -2
  63. package/dist/fastify/index.mjs +3 -3
  64. package/dist/fork-S9gpZmF8.mjs +72 -0
  65. package/dist/fork-S9gpZmF8.mjs.map +1 -0
  66. package/dist/hono/index.d.mts +2 -2
  67. package/dist/hono/index.mjs +1 -1
  68. package/dist/{http-DA3RWQrm.mjs → http-CuZ6Cm2M.mjs} +2 -2
  69. package/dist/{http-DA3RWQrm.mjs.map → http-CuZ6Cm2M.mjs.map} +1 -1
  70. package/dist/http.d.mts +1 -1
  71. package/dist/index.d.mts +8 -8
  72. package/dist/index.mjs +1 -1
  73. package/dist/{instrumentation-create-STGmQGQt.d.mts → instrumentation-create-gSDk0leX.d.mts} +2 -2
  74. package/dist/{instrumentation-create-STGmQGQt.d.mts.map → instrumentation-create-gSDk0leX.d.mts.map} +1 -1
  75. package/dist/{integration-2PpI-bCm.mjs → integration-CeL90DtN.mjs} +3 -2
  76. package/dist/{integration-2PpI-bCm.mjs.map → integration-CeL90DtN.mjs.map} +1 -1
  77. package/dist/{logger-DWTPZ0c1.d.mts → logger-CxWz7QJ3.d.mts} +7 -3
  78. package/dist/logger-CxWz7QJ3.d.mts.map +1 -0
  79. package/dist/logger.d.mts +2 -2
  80. package/dist/logger.mjs +2 -2
  81. package/dist/{fork-Di44utlp.mjs → middleware-Cdebyfdt.mjs} +3 -69
  82. package/dist/middleware-Cdebyfdt.mjs.map +1 -0
  83. package/dist/{middleware-CjVyGyrG.d.mts → middleware-fbtEs6bq.d.mts} +2 -2
  84. package/dist/{middleware-CjVyGyrG.d.mts.map → middleware-fbtEs6bq.d.mts.map} +1 -1
  85. package/dist/nestjs/index.d.mts +2 -2
  86. package/dist/nestjs/index.mjs +4 -3
  87. package/dist/nestjs/index.mjs.map +1 -1
  88. package/dist/next/client.d.mts +1 -1
  89. package/dist/next/index.d.mts +4 -4
  90. package/dist/next/index.d.mts.map +1 -1
  91. package/dist/next/index.mjs +4 -3
  92. package/dist/next/index.mjs.map +1 -1
  93. package/dist/next/instrumentation/create.d.mts +1 -1
  94. package/dist/next/instrumentation/create.mjs +1 -1
  95. package/dist/next/instrumentation.d.mts +1 -1
  96. package/dist/next/stream.d.mts +1 -1
  97. package/dist/nitro/errorHandler.mjs +1 -1
  98. package/dist/nitro/module.d.mts +2 -2
  99. package/dist/nitro/module.mjs +1 -1
  100. package/dist/nitro/plugin.mjs +2 -2
  101. package/dist/nitro/v3/errorHandler.mjs +1 -1
  102. package/dist/nitro/v3/index.d.mts +2 -2
  103. package/dist/nitro/v3/module.d.mts +1 -1
  104. package/dist/nitro/v3/module.mjs +1 -1
  105. package/dist/nitro/v3/plugin.mjs +2 -2
  106. package/dist/nitro/v3/useLogger.d.mts +1 -1
  107. package/dist/{nitro--E4op34w.d.mts → nitro-CcN7HDnr.d.mts} +2 -2
  108. package/dist/{nitro--E4op34w.d.mts.map → nitro-CcN7HDnr.d.mts.map} +1 -1
  109. package/dist/{nitro-ClHmVj1H.mjs → nitro-DYFCSlho.mjs} +2 -2
  110. package/dist/{nitro-ClHmVj1H.mjs.map → nitro-DYFCSlho.mjs.map} +1 -1
  111. package/dist/{nitroConfigBridge-BkVWnSV3.mjs → nitroConfigBridge-lHPsE5zG.mjs} +8 -6
  112. package/dist/nitroConfigBridge-lHPsE5zG.mjs.map +1 -0
  113. package/dist/{nodeResponse-DKrYWrxk.mjs → nodeResponse-Dsl7gZUf.mjs} +1 -1
  114. package/dist/{nodeResponse-DKrYWrxk.mjs.map → nodeResponse-Dsl7gZUf.mjs.map} +1 -1
  115. package/dist/nuxt/module.d.mts +1 -1
  116. package/dist/nuxt/module.d.mts.map +1 -1
  117. package/dist/nuxt/module.mjs +44 -12
  118. package/dist/nuxt/module.mjs.map +1 -1
  119. package/dist/orpc/index.d.mts +2 -2
  120. package/dist/orpc/index.mjs +2 -2
  121. package/dist/{package-Bgs0VSDF.mjs → package-DtGhNwVN.mjs} +2 -2
  122. package/dist/package-DtGhNwVN.mjs.map +1 -0
  123. package/dist/{parseError-BwBg-iW4.d.mts → parseError-BmoJ7XeF.d.mts} +2 -2
  124. package/dist/parseError-BmoJ7XeF.d.mts.map +1 -0
  125. package/dist/react-router/index.d.mts +2 -2
  126. package/dist/react-router/index.mjs +3 -2
  127. package/dist/react-router/index.mjs.map +1 -1
  128. package/dist/{register-disk-snippet-B_JyhodL.mjs → register-disk-snippet-B5svlT8-.mjs} +1 -1
  129. package/dist/{register-disk-snippet-B_JyhodL.mjs.map → register-disk-snippet-B5svlT8-.mjs.map} +1 -1
  130. package/dist/runtime/client/log.d.mts +1 -1
  131. package/dist/runtime/server/routes/_evlog/ingest.post.mjs +1 -1
  132. package/dist/runtime/server/useLogger.d.mts +1 -1
  133. package/dist/runtime/utils/parseError.d.mts +2 -2
  134. package/dist/{storage-D4sBVffQ.mjs → storage-BeFdoGTI.mjs} +1 -1
  135. package/dist/{storage-D4sBVffQ.mjs.map → storage-BeFdoGTI.mjs.map} +1 -1
  136. package/dist/stream.d.mts +1 -1
  137. package/dist/stream.d.mts.map +1 -1
  138. package/dist/stream.mjs +7 -1
  139. package/dist/stream.mjs.map +1 -1
  140. package/dist/sveltekit/index.d.mts +2 -2
  141. package/dist/sveltekit/index.mjs +5 -4
  142. package/dist/sveltekit/index.mjs.map +1 -1
  143. package/dist/toolkit.d.mts +5 -5
  144. package/dist/toolkit.mjs +7 -6
  145. package/dist/types.d.mts +1 -1
  146. package/dist/{useLogger-DiRWGD33.d.mts → useLogger-BupVLO9_.d.mts} +2 -2
  147. package/dist/{useLogger-DiRWGD33.d.mts.map → useLogger-BupVLO9_.d.mts.map} +1 -1
  148. package/dist/{utils-XPMPENUK.d.mts → utils-D_LY-J1k.d.mts} +2 -2
  149. package/dist/{utils-XPMPENUK.d.mts.map → utils-D_LY-J1k.d.mts.map} +1 -1
  150. package/dist/utils.d.mts +1 -1
  151. package/dist/vite/index.d.mts +1 -1
  152. package/dist/workers.d.mts +1 -1
  153. package/dist/workers.mjs +1 -1
  154. package/package.json +17 -2
  155. package/dist/audit-CL0q7GJU.mjs.map +0 -1
  156. package/dist/fork-Di44utlp.mjs.map +0 -1
  157. package/dist/logger-DWTPZ0c1.d.mts.map +0 -1
  158. package/dist/nitroConfigBridge-BkVWnSV3.mjs.map +0 -1
  159. package/dist/package-Bgs0VSDF.mjs.map +0 -1
  160. package/dist/parseError-BwBg-iW4.d.mts.map +0 -1
package/README.md CHANGED
@@ -560,6 +560,32 @@ export default async function fetch(request: Request) {
560
560
 
561
561
  See the full [orpc example](https://github.com/HugoRCD/evlog/tree/main/examples/orpc) for a complete working project.
562
562
 
563
+ ## eve
564
+
565
+ ```typescript
566
+ // agent/hooks/evlog.ts
567
+ import { defineEvlogHook } from 'evlog/eve'
568
+ import { createAxiomDrain } from 'evlog/axiom'
569
+
570
+ export default defineEvlogHook({
571
+ init: { env: { service: 'my-agent' } },
572
+ drain: createAxiomDrain(),
573
+ maxSessions: 256,
574
+ })
575
+ ```
576
+
577
+ ```typescript
578
+ // agent/tools/my_tool.ts — inside execute()
579
+ import { useLogger } from 'evlog/eve'
580
+
581
+ const log = useLogger()
582
+ log.set({ order: { id: input.orderId } })
583
+ ```
584
+
585
+ `defineEvlogHook()` maps eve turn lifecycle events to one wide event per turn. Call `useLogger()` in tools — the logger is bound via AsyncLocalStorage on `turn.started`. Pass `ctx` only when ALS is unavailable (`useLogger(ctx)`). Pretty-printing follows `isDev()` by default (tree locally, JSON in production); set `init.pretty: false` explicitly if you need to override. Complements eve Agent Runs and OpenTelemetry — see the [eve use case](https://evlog.dev/use-cases/eve).
586
+
587
+ See the full [eve example](https://github.com/HugoRCD/evlog/tree/main/examples/eve) for a complete agent layout.
588
+
563
589
  ## Browser
564
590
 
565
591
  Use the `log` API on the client side for structured browser logging:
@@ -794,7 +820,9 @@ See [the Audit Logs guide](https://evlog.dev/use-cases/audit/overview) for compl
794
820
 
795
821
  ## AI SDK Integration
796
822
 
797
- Capture token usage, tool calls, model info, and streaming metrics from the [Vercel AI SDK](https://ai-sdk.dev) into wide events. Requires `ai >= 6.0.0`.
823
+ Capture token usage, tool calls, model info, and streaming metrics from the [Vercel AI SDK](https://ai-sdk.dev) into wide events. Compatible with AI SDK v6 and v7 (`ai >= 6.0.168`). AI SDK v7 requires Node.js 22+.
824
+
825
+ For tool execution timing, abort tracking, and auto embed capture, pass `createEvlogIntegration(ai)` to `telemetry.integrations` (v7) or `experimental_telemetry.integrations` (v6).
798
826
 
799
827
  ```typescript
800
828
  import { streamText } from 'ai'
@@ -1388,6 +1416,7 @@ try {
1388
1416
  | **Fastify** | `app.register(evlog)` with `import { evlog } from 'evlog/fastify'` ([example](./examples/fastify)) |
1389
1417
  | **Elysia** | `.use(evlog())` with `import { evlog } from 'evlog/elysia'` ([example](./examples/elysia)) |
1390
1418
  | **oRPC** | `withEvlog(handler)` + `os.use(evlog())` with `import { evlog, withEvlog } from 'evlog/orpc'` ([example](./examples/orpc)) |
1419
+ | **eve** | `defineEvlogHook()` in `agent/hooks/evlog.ts` with `import { defineEvlogHook, useLogger } from 'evlog/eve'` ([example](./examples/eve)) |
1391
1420
  | **Cloudflare Workers** | Manual setup with `import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'` ([example](./examples/workers)) |
1392
1421
  | **Custom** | Build your own with `import { createMiddlewareLogger } from 'evlog/toolkit'` ([guide](https://evlog.dev/extend/custom-framework)) |
1393
1422
  | **Analog** | Nitro v2 module setup |
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/axiom.d.ts
3
3
  interface BaseAxiomConfig {
4
4
  /** Axiom dataset name. */
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-AD7Mn_5_.mjs";
3
3
  //#region src/adapters/axiom.ts
4
4
  const AXIOM_FIELDS = [
5
5
  {
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/better-stack.d.ts
3
3
  interface BetterStackConfig {
4
4
  /** Better Stack API key (replaces deprecated `sourceToken`). */
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-AD7Mn_5_.mjs";
3
3
  //#region src/adapters/better-stack.ts
4
4
  const BETTER_STACK_FIELDS = [
5
5
  {
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/datadog.d.ts
3
3
  interface DatadogConfig {
4
4
  /** Datadog API key with Logs intake permission */
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
3
3
  //#region src/adapters/datadog.ts
4
4
  const DATADOG_FIELDS = [
5
5
  {
@@ -1,4 +1,4 @@
1
- import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/fs.d.ts
3
3
  interface FsConfig {
4
4
  /** Directory for log files. Default: `.evlog/logs` */
@@ -1,4 +1,4 @@
1
- import { o as resolveAdapterConfig, t as defineDrain } from "../drain-6lV-g7JB.mjs";
1
+ import { o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
2
2
  import { join, sep } from "node:path";
3
3
  import { createReadStream } from "node:fs";
4
4
  import { appendFile, mkdir, open, readdir, stat, unlink, writeFile } from "node:fs/promises";
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  import { OTLPConfig } from "./otlp.mjs";
3
3
 
4
4
  //#region src/adapters/hyperdx.d.ts
@@ -1,4 +1,4 @@
1
- import { i as formatPublicEnvKeys, o as resolveAdapterConfig, t as defineDrain } from "../drain-6lV-g7JB.mjs";
1
+ import { i as formatPublicEnvKeys, o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
2
2
  import { sendBatchToOTLP } from "./otlp.mjs";
3
3
  //#region src/adapters/hyperdx.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/memory.d.ts
3
3
  /**
4
4
  * Configuration for the in-memory drain.
@@ -1,4 +1,4 @@
1
- import { o as resolveAdapterConfig, t as defineDrain } from "../drain-6lV-g7JB.mjs";
1
+ import { o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
2
2
  //#region src/adapters/memory.ts
3
3
  const DEFAULT_STORE = "default";
4
4
  const DEFAULT_MAX_EVENTS = 1e3;
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/otlp.d.ts
3
3
  interface OTLPConfig {
4
4
  /** OTLP HTTP endpoint (e.g., http://localhost:4318) */
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
3
3
  import { n as toOtlpAttributeValue } from "../event-qwAv-7AZ.mjs";
4
4
  import { n as OTEL_SEVERITY_TEXT, t as OTEL_SEVERITY_NUMBER } from "../severity-CwXUSHt3.mjs";
5
5
  //#region src/adapters/otlp.ts
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/posthog.d.ts
3
3
  /**
4
4
  * Mode for {@link createPostHogDrain}.
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, t as defineDrain } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
3
3
  import { sendBatchToOTLP } from "./otlp.mjs";
4
4
  //#region src/adapters/posthog.ts
5
5
  const POSTHOG_FIELDS = [
@@ -1,4 +1,4 @@
1
- import { U as DrainContext, ht as WideEvent } from "../audit-CBfv3rl1.mjs";
1
+ import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
2
2
  //#region src/adapters/sentry.d.ts
3
3
  interface SentryConfig {
4
4
  /** Sentry DSN */
@@ -1,5 +1,5 @@
1
- import { r as httpPost } from "../http-DA3RWQrm.mjs";
2
- import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-6lV-g7JB.mjs";
1
+ import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
2
+ import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
3
3
  import { t as OTEL_SEVERITY_NUMBER } from "../severity-CwXUSHt3.mjs";
4
4
  //#region src/adapters/sentry.ts
5
5
  const SENTRY_FIELDS = [
@@ -1,8 +1,22 @@
1
- import { ot as RequestLogger } from "../audit-CBfv3rl1.mjs";
2
- import { GatewayModelId, TelemetryIntegration } from "ai";
3
- import { LanguageModelV3, LanguageModelV3Middleware } from "@ai-sdk/provider";
1
+ import { ot as RequestLogger } from "../audit-BZrUvjfW.mjs";
2
+ import { LanguageModel, LanguageModelMiddleware } from "ai";
4
3
 
5
4
  //#region src/ai/index.d.ts
5
+ /**
6
+ * Telemetry integration returned by {@link createEvlogIntegration}.
7
+ * Implements hooks for AI SDK v6 (`onToolCallFinish`, `onFinish`) and v7
8
+ * (`onToolExecutionEnd`, `onEnd`, `onEmbedEnd`, `onAbort`, `onError`).
9
+ */
10
+ type EvlogTelemetry = {
11
+ onStart?: (event: unknown) => void | PromiseLike<void>; /** AI SDK v6 — superseded by `onToolExecutionEnd` in v7. */
12
+ onToolCallFinish?: (event: unknown) => void | PromiseLike<void>;
13
+ onToolExecutionEnd?: (event: unknown) => void | PromiseLike<void>; /** AI SDK v6 — superseded by `onEnd` in v7. */
14
+ onFinish?: (event: unknown) => void | PromiseLike<void>;
15
+ onEnd?: (event: unknown) => void | PromiseLike<void>;
16
+ onEmbedEnd?: (event: unknown) => void | PromiseLike<void>;
17
+ onAbort?: (event: unknown) => void | PromiseLike<void>;
18
+ onError?: (event: unknown) => void | PromiseLike<void>;
19
+ };
6
20
  /**
7
21
  * Fine-grained control over tool call input capture.
8
22
  */
@@ -68,7 +82,7 @@ interface AIStepUsage {
68
82
  toolCalls?: string[];
69
83
  }
70
84
  /**
71
- * Tool execution detail captured via `TelemetryIntegration`.
85
+ * Tool execution detail captured via telemetry integration hooks.
72
86
  */
73
87
  interface AIToolExecution {
74
88
  name: string;
@@ -139,22 +153,29 @@ interface AILogger {
139
153
  * All `generateText` and `streamText` calls using the wrapped model
140
154
  * are captured automatically into the wide event.
141
155
  *
142
- * Accepts a `LanguageModelV3` object or a model string (e.g. `'anthropic/claude-sonnet-4.6'`).
156
+ * Accepts a language model object (`LanguageModelV3` or `LanguageModelV4`)
157
+ * or a model string (e.g. `'anthropic/claude-sonnet-4.6'`).
143
158
  * Strings are resolved via the AI SDK gateway.
144
159
  *
160
+ * On AI SDK v7, the wrapped model is a `LanguageModelV4`. On v6 it remains
161
+ * a `LanguageModelV3`. Both are accepted as input.
162
+ *
145
163
  * Also works with pre-wrapped models (e.g. from supermemory, guardrails):
146
164
  * `ai.wrap(withSupermemory(base, orgId))` composes correctly.
147
165
  *
148
- * @example
166
+ * @example Gateway model string
149
167
  * ```ts
150
168
  * const ai = createAILogger(log)
151
169
  * const model = ai.wrap('anthropic/claude-sonnet-4.6')
170
+ * ```
152
171
  *
153
- * // Also accepts a model object
172
+ * @example Provider model object (V3 or V4)
173
+ * ```ts
174
+ * const ai = createAILogger(log)
154
175
  * const model = ai.wrap(anthropic('claude-sonnet-4.6'))
155
176
  * ```
156
177
  */
157
- wrap: (model: LanguageModelV3 | GatewayModelId) => LanguageModelV3;
178
+ wrap: (model: LanguageModel) => LanguageModel;
158
179
  /**
159
180
  * Manually capture token usage from an `embed()` or `embedMany()` result.
160
181
  * Embedding models use a different type than language models, so they
@@ -300,7 +321,7 @@ interface UsageAccumulator {
300
321
  * })
301
322
  * ```
302
323
  */
303
- declare function createAIMiddleware(log: RequestLogger, options?: AILoggerOptions): LanguageModelV3Middleware;
324
+ declare function createAIMiddleware(log: RequestLogger, options?: AILoggerOptions): LanguageModelMiddleware;
304
325
  /**
305
326
  * Create an AI logger that captures AI SDK data into the wide event.
306
327
  *
@@ -371,9 +392,13 @@ interface AccumulatorState {
371
392
  _log?: RequestLogger;
372
393
  }
373
394
  /**
374
- * Create an AI SDK `TelemetryIntegration` that captures tool execution
395
+ * Create an AI SDK telemetry integration that captures tool execution
375
396
  * timing, errors, and total generation wall time into the wide event.
376
397
  *
398
+ * Compatible with AI SDK v6 (`TelemetryIntegration`) and v7 (`Telemetry`).
399
+ * On v7, also captures embeddings via `onEmbedEnd`, aborts via `onAbort`,
400
+ * and unrecoverable errors via `onError`.
401
+ *
377
402
  * Complements the middleware-based `createAILogger`: the middleware captures
378
403
  * token usage and streaming metrics at the model level, while the integration
379
404
  * captures application-level lifecycle events (tool execution, total duration).
@@ -391,8 +416,7 @@ interface AccumulatorState {
391
416
  * const result = await generateText({
392
417
  * model: ai.wrap('anthropic/claude-sonnet-4.6'),
393
418
  * tools: { getWeather },
394
- * experimental_telemetry: {
395
- * isEnabled: true,
419
+ * telemetry: {
396
420
  * integrations: [createEvlogIntegration(ai)],
397
421
  * },
398
422
  * })
@@ -406,14 +430,13 @@ interface AccumulatorState {
406
430
  *
407
431
  * const result = await generateText({
408
432
  * model: openai('gpt-4o'),
409
- * experimental_telemetry: {
410
- * isEnabled: true,
433
+ * telemetry: {
411
434
  * integrations: [integration],
412
435
  * },
413
436
  * })
414
437
  * ```
415
438
  */
416
- declare function createEvlogIntegration(logOrAi: RequestLogger | AILogger, options?: AILoggerOptions): TelemetryIntegration;
439
+ declare function createEvlogIntegration(logOrAi: RequestLogger | AILogger, options?: AILoggerOptions): EvlogTelemetry;
417
440
  //#endregion
418
- export { AIEmbeddingData, AIEventData, AILogger, AILoggerOptions, AIMetadata, AIMetadataListener, AIStepUsage, AIToolExecution, ModelCost, ToolInputsOptions, createAILogger, createAIMiddleware, createEvlogIntegration };
441
+ export { AIEmbeddingData, AIEventData, AILogger, AILoggerOptions, AIMetadata, AIMetadataListener, AIStepUsage, AIToolExecution, EvlogTelemetry, ModelCost, ToolInputsOptions, createAILogger, createAIMiddleware, createEvlogIntegration };
419
442
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":"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"}
package/dist/ai/index.mjs CHANGED
@@ -1,5 +1,7 @@
1
- import { bindTelemetryIntegration, gateway, wrapLanguageModel } from "ai";
1
+ import * as aiModule from "ai";
2
+ import { gateway, wrapLanguageModel } from "ai";
2
3
  //#region src/ai/index.ts
4
+ const { bindTelemetryIntegration } = aiModule;
3
5
  function addUsage(acc, usage) {
4
6
  acc.inputTokens += usage.inputTokens.total ?? 0;
5
7
  acc.outputTokens += usage.outputTokens.total ?? 0;
@@ -288,7 +290,7 @@ function buildMiddleware(log, options) {
288
290
  }
289
291
  function buildMiddlewareFromState(log, state) {
290
292
  return {
291
- specificationVersion: "v3",
293
+ specificationVersion: "v4",
292
294
  wrapGenerate: async ({ doGenerate, model }) => {
293
295
  try {
294
296
  const result = await doGenerate();
@@ -418,10 +420,63 @@ function buildMiddlewareFromState(log, state) {
418
420
  }
419
421
  };
420
422
  }
423
+ function formatTelemetryError(error) {
424
+ return error instanceof Error ? error.message : String(error);
425
+ }
426
+ function recordToolExecution(state, input) {
427
+ const execution = {
428
+ name: input.name,
429
+ durationMs: input.durationMs,
430
+ success: input.success
431
+ };
432
+ if (input.error) execution.error = input.error;
433
+ state.toolExecutions.push(execution);
434
+ }
435
+ function adaptV6ToolEvent(event) {
436
+ return {
437
+ name: event.toolCall.toolName,
438
+ durationMs: event.durationMs,
439
+ success: event.success,
440
+ error: !event.success && event.error !== void 0 ? formatTelemetryError(event.error) : void 0
441
+ };
442
+ }
443
+ function adaptV7ToolEvent(event) {
444
+ const success = event.toolOutput.type === "tool-result";
445
+ return {
446
+ name: event.toolCall.toolName,
447
+ durationMs: event.toolExecutionMs,
448
+ success,
449
+ error: !success && event.toolOutput.type === "tool-error" ? formatTelemetryError(event.toolOutput.error) : void 0
450
+ };
451
+ }
452
+ function recordGenerationEnd(state, log) {
453
+ if (state.generationStartTime !== void 0) state.totalDurationMs = Date.now() - state.generationStartTime;
454
+ flushState(log, state);
455
+ }
456
+ function recordEmbedEnd(state, log, event) {
457
+ state.calls++;
458
+ state.usage.inputTokens += event.usage.tokens;
459
+ const dimensions = event.embeddings[0]?.length;
460
+ state.embedding = {
461
+ tokens: (state.embedding?.tokens ?? 0) + event.usage.tokens,
462
+ model: event.modelId,
463
+ ...dimensions !== void 0 ? { dimensions } : state.embedding?.dimensions ? { dimensions: state.embedding.dimensions } : {},
464
+ count: (state.embedding?.count ?? 0) + event.values.length
465
+ };
466
+ flushState(log, state);
467
+ }
468
+ function finalizeIntegration(integration) {
469
+ if (typeof bindTelemetryIntegration === "function") return bindTelemetryIntegration(integration);
470
+ return integration;
471
+ }
421
472
  /**
422
- * Create an AI SDK `TelemetryIntegration` that captures tool execution
473
+ * Create an AI SDK telemetry integration that captures tool execution
423
474
  * timing, errors, and total generation wall time into the wide event.
424
475
  *
476
+ * Compatible with AI SDK v6 (`TelemetryIntegration`) and v7 (`Telemetry`).
477
+ * On v7, also captures embeddings via `onEmbedEnd`, aborts via `onAbort`,
478
+ * and unrecoverable errors via `onError`.
479
+ *
425
480
  * Complements the middleware-based `createAILogger`: the middleware captures
426
481
  * token usage and streaming metrics at the model level, while the integration
427
482
  * captures application-level lifecycle events (tool execution, total duration).
@@ -439,8 +494,7 @@ function buildMiddlewareFromState(log, state) {
439
494
  * const result = await generateText({
440
495
  * model: ai.wrap('anthropic/claude-sonnet-4.6'),
441
496
  * tools: { getWeather },
442
- * experimental_telemetry: {
443
- * isEnabled: true,
497
+ * telemetry: {
444
498
  * integrations: [createEvlogIntegration(ai)],
445
499
  * },
446
500
  * })
@@ -454,8 +508,7 @@ function buildMiddlewareFromState(log, state) {
454
508
  *
455
509
  * const result = await generateText({
456
510
  * model: openai('gpt-4o'),
457
- * experimental_telemetry: {
458
- * isEnabled: true,
511
+ * telemetry: {
459
512
  * integrations: [integration],
460
513
  * },
461
514
  * })
@@ -477,20 +530,32 @@ function createEvlogIntegration(logOrAi, options) {
477
530
  state.generationStartTime = Date.now();
478
531
  }
479
532
  onToolCallFinish(event) {
480
- const execution = {
481
- name: event.toolCall.toolName,
482
- durationMs: event.durationMs,
483
- success: event.success
484
- };
485
- if (!event.success && event.error) execution.error = event.error instanceof Error ? event.error.message : String(event.error);
486
- state.toolExecutions.push(execution);
533
+ recordToolExecution(state, adaptV6ToolEvent(event));
534
+ }
535
+ onToolExecutionEnd(event) {
536
+ recordToolExecution(state, adaptV7ToolEvent(event));
487
537
  }
488
538
  onFinish(_event) {
489
- if (state.generationStartTime) state.totalDurationMs = Date.now() - state.generationStartTime;
539
+ recordGenerationEnd(state, log);
540
+ }
541
+ onEnd(_event) {
542
+ recordGenerationEnd(state, log);
543
+ }
544
+ onEmbedEnd(event) {
545
+ recordEmbedEnd(state, log, event);
546
+ }
547
+ onAbort(event) {
548
+ state.lastFinishReason = "abort";
549
+ const { reason } = event;
550
+ if (reason !== void 0) state.lastError = formatTelemetryError(reason);
551
+ recordGenerationEnd(state, log);
552
+ }
553
+ onError(error) {
554
+ state.lastError = formatTelemetryError(error);
490
555
  flushState(log, state);
491
556
  }
492
557
  }
493
- return bindTelemetryIntegration(new EvlogIntegration());
558
+ return finalizeIntegration(new EvlogIntegration());
494
559
  }
495
560
  //#endregion
496
561
  export { createAILogger, createAIMiddleware, createEvlogIntegration };