@ai-sdk/devtools 1.0.4 → 1.0.5

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
@@ -19,6 +19,13 @@ import { Telemetry } from 'ai';
19
19
  */
20
20
  declare const devToolsMiddleware: () => LanguageModelV4Middleware;
21
21
 
22
+ interface DevToolsTelemetryOptions {
23
+ /**
24
+ * Identifier used to group multiple AI SDK calls into one DevTools run.
25
+ * Reuse the same value when resuming an interrupted interaction.
26
+ */
27
+ runId?: string;
28
+ }
22
29
  /**
23
30
  * Creates a devtools telemetry integration that logs all AI SDK operations
24
31
  * to the devtools viewer.
@@ -34,6 +41,6 @@ declare const devToolsMiddleware: () => LanguageModelV4Middleware;
34
41
  * Telemetry is enabled by default — no need to set `telemetry`
35
42
  * unless you want to configure `functionId`, `recordInputs`, or `recordOutputs`.
36
43
  */
37
- declare function DevToolsTelemetry(): Telemetry;
44
+ declare function DevToolsTelemetry(options?: DevToolsTelemetryOptions): Telemetry;
38
45
 
39
- export { DevToolsTelemetry, devToolsMiddleware };
46
+ export { DevToolsTelemetry, type DevToolsTelemetryOptions, devToolsMiddleware };
package/dist/index.js CHANGED
@@ -117,6 +117,10 @@ var updateStepResult = async (stepId, result) => {
117
117
  notifyServer("step-update");
118
118
  }
119
119
  };
120
+ var getStepsForRun = async (runId) => {
121
+ const db = getDb();
122
+ return db.steps.filter((s) => s.run_id === runId).sort((a, b) => a.step_number - b.step_number);
123
+ };
120
124
 
121
125
  // src/middleware.ts
122
126
  var generateId = () => crypto.randomUUID();
@@ -433,7 +437,7 @@ function getOperationType(operationId) {
433
437
  }
434
438
  return "generate";
435
439
  }
436
- function DevToolsTelemetry() {
440
+ function DevToolsTelemetry(options = {}) {
437
441
  if (process.env.NODE_ENV === "production") {
438
442
  throw new Error(
439
443
  "@ai-sdk/devtools should not be used in production. Remove DevToolsTelemetry from your telemetry configuration for production builds."
@@ -476,7 +480,8 @@ function DevToolsTelemetry() {
476
480
  frequencyPenalty: event.frequencyPenalty,
477
481
  seed: event.seed
478
482
  },
479
- stepStates: /* @__PURE__ */ new Map()
483
+ stepStates: /* @__PURE__ */ new Map(),
484
+ stepNumberOffset: 0
480
485
  };
481
486
  callStates.set(callId, state);
482
487
  return state;
@@ -494,6 +499,10 @@ function DevToolsTelemetry() {
494
499
  operationId,
495
500
  startEvent
496
501
  );
502
+ if (options.runId != null) {
503
+ state.runId = options.runId;
504
+ state.stepNumberOffset = (await getStepsForRun(options.runId)).length;
505
+ }
497
506
  await createRun(state.runId, parentInfo, state.functionId);
498
507
  },
499
508
  onStepStart: async (event) => {
@@ -513,7 +522,7 @@ function DevToolsTelemetry() {
513
522
  await createStep({
514
523
  id: stepId,
515
524
  run_id: state.runId,
516
- step_number: stepNumber + 1,
525
+ step_number: state.stepNumberOffset + stepNumber + 1,
517
526
  type: state.operationType,
518
527
  model_id: stepStartEvent.modelId,
519
528
  provider: stepStartEvent.provider ?? null,
@@ -552,7 +561,7 @@ function DevToolsTelemetry() {
552
561
  await createStep({
553
562
  id: stepId,
554
563
  run_id: state.runId,
555
- step_number: stepStartEvent.stepNumber + 1,
564
+ step_number: state.stepNumberOffset + stepStartEvent.stepNumber + 1,
556
565
  type: state.operationType,
557
566
  model_id: stepStartEvent.modelId,
558
567
  provider: stepStartEvent.provider ?? null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/devtools",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -55,7 +55,7 @@
55
55
  "vite": "^6.4.3",
56
56
  "vitest": "^4.1.6",
57
57
  "zod": "3.25.76",
58
- "ai": "7.0.20"
58
+ "ai": "7.0.26"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public",
package/src/index.ts CHANGED
@@ -1,2 +1,5 @@
1
1
  export { devToolsMiddleware } from './middleware.js';
2
- export { DevToolsTelemetry } from './integration.js';
2
+ export {
3
+ DevToolsTelemetry,
4
+ type DevToolsTelemetryOptions,
5
+ } from './integration.js';
@@ -11,6 +11,7 @@ import type {
11
11
  import {
12
12
  createRun,
13
13
  createStep,
14
+ getStepsForRun,
14
15
  updateStepResult,
15
16
  notifyServerAsync,
16
17
  } from './db.js';
@@ -28,6 +29,15 @@ interface CallState {
28
29
  functionId: string | undefined;
29
30
  settings: Record<string, unknown>;
30
31
  stepStates: Map<number, StepState>;
32
+ stepNumberOffset: number;
33
+ }
34
+
35
+ export interface DevToolsTelemetryOptions {
36
+ /**
37
+ * Identifier used to group multiple AI SDK calls into one DevTools run.
38
+ * Reuse the same value when resuming an interrupted interaction.
39
+ */
40
+ runId?: string;
31
41
  }
32
42
 
33
43
  const activeSteps = new Map<string, StepState>();
@@ -99,7 +109,9 @@ function getOperationType(operationId: string): OperationType {
99
109
  * Telemetry is enabled by default — no need to set `telemetry`
100
110
  * unless you want to configure `functionId`, `recordInputs`, or `recordOutputs`.
101
111
  */
102
- export function DevToolsTelemetry(): Telemetry {
112
+ export function DevToolsTelemetry(
113
+ options: DevToolsTelemetryOptions = {},
114
+ ): Telemetry {
103
115
  if (process.env.NODE_ENV === 'production') {
104
116
  throw new Error(
105
117
  '@ai-sdk/devtools should not be used in production. ' +
@@ -179,6 +191,7 @@ export function DevToolsTelemetry(): Telemetry {
179
191
  seed: event.seed,
180
192
  },
181
193
  stepStates: new Map(),
194
+ stepNumberOffset: 0,
182
195
  };
183
196
  callStates.set(callId, state);
184
197
  return state;
@@ -211,6 +224,11 @@ export function DevToolsTelemetry(): Telemetry {
211
224
  startEvent,
212
225
  );
213
226
 
227
+ if (options.runId != null) {
228
+ state.runId = options.runId;
229
+ state.stepNumberOffset = (await getStepsForRun(options.runId)).length;
230
+ }
231
+
214
232
  await createRun(state.runId, parentInfo, state.functionId);
215
233
  },
216
234
 
@@ -238,7 +256,7 @@ export function DevToolsTelemetry(): Telemetry {
238
256
  await createStep({
239
257
  id: stepId,
240
258
  run_id: state.runId,
241
- step_number: stepNumber + 1,
259
+ step_number: state.stepNumberOffset + stepNumber + 1,
242
260
  type: state.operationType,
243
261
  model_id: stepStartEvent.modelId,
244
262
  provider: stepStartEvent.provider ?? null,
@@ -288,7 +306,7 @@ export function DevToolsTelemetry(): Telemetry {
288
306
  await createStep({
289
307
  id: stepId,
290
308
  run_id: state.runId,
291
- step_number: stepStartEvent.stepNumber + 1,
309
+ step_number: state.stepNumberOffset + stepStartEvent.stepNumber + 1,
292
310
  type: state.operationType,
293
311
  model_id: stepStartEvent.modelId,
294
312
  provider: stepStartEvent.provider ?? null,