(update: Partial<DevToolsStep>)
| 365 | |
| 366 | let finalized = false; |
| 367 | const finalizeStep = async (update: Partial<DevToolsStep>): Promise<void> => { |
| 368 | if (finalized) { |
| 369 | return; |
| 370 | } |
| 371 | |
| 372 | finalized = true; |
| 373 | if (params.abortSignal != null) { |
| 374 | params.abortSignal.removeEventListener("abort", abortHandler); |
| 375 | } |
| 376 | |
| 377 | try { |
| 378 | await service.updateStep(workspaceId, stepId, { |
| 379 | durationMs: Date.now() - startedAtMs, |
| 380 | ...update, |
| 381 | }); |
| 382 | } catch (error) { |
| 383 | // DevTools persistence is best-effort; never let observability failures |
| 384 | // reject the model call that already succeeded. |
| 385 | log.warn("DevTools: failed to persist step finalization", { |
| 386 | workspaceId, |
| 387 | stepId, |
| 388 | error, |
| 389 | }); |
| 390 | } |
| 391 | }; |
| 392 | |
| 393 | const abortHandler = (): void => { |
| 394 | const capturedRequestHeaders = consumeCapturedRequestHeaders(stepId); |
no test coverage detected