feat: sync DurableAgent with latest workflow repo changes#13774
Merged
gr2m merged 2 commits intogr2m/durable-agentfrom Mar 23, 2026
Merged
feat: sync DurableAgent with latest workflow repo changes#13774gr2m merged 2 commits intogr2m/durable-agentfrom
gr2m merged 2 commits intogr2m/durable-agentfrom
Conversation
Sync changes from vercel/workflow packages/ai/src/agent since Jan 30 (PR #12165 creation date): - Add telemetry support via recordSpan wrapper around model.doStream() and new telemetry.ts module with OTel span recording - Add normalizeFinishReason for cross-version compatibility (v5 string vs v6 { unified, raw } object) - Fix prepareStep ordering: messages applied before system so system message isn't lost when messages replaces the prompt (#1389) - Make DurableAgentOptions generic: tools/toolChoice properly typed - Add prepareStep to DurableAgentOptions constructor for default step preparation across all stream() calls - Add TelemetrySettings.recordInputs/recordOutputs options - Add InferDurableAgentTools/InferDurableAgentUIMessage type helpers - Update sendStart docstring explaining when to set false - Pass telemetry through to executeTool calls Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AI SDK v5 support is not needed. Use finishReason.unified directly instead of the normalizeFinishReason wrapper that handled both v5 string and v6 object formats. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gr2m
added a commit
that referenced
this pull request
Mar 24, 2026
## Summary Syncs DurableAgent code with changes from [vercel/workflow](https://github.com/vercel/workflow/tree/main/packages/ai/src/agent) since PR #12165 was opened (Jan 30, 2026). Key workflow PRs incorporated: - [#1362](vercel/workflow#1362) — AI SDK v6 migration, compat tests - [#1385](vercel/workflow#1385) — Various compatibility fixes - [#1389](vercel/workflow#1389) — Fix prepareStep system message lost when messages also returned - [#1329](vercel/workflow#1329) — Client-side tools support ## Changes - **Telemetry**: Add `recordSpan` wrapper around `model.doStream()` with OTel span attributes (provider, model, generation settings). New `telemetry.ts` module with lazy OTel API loading. - **`normalizeFinishReason`**: Handle both v5 string (`'stop'`) and v6 object (`{ unified: 'stop', raw: 'stop' }`) finish reason formats - **prepareStep ordering fix**: Apply `messages` override before `system` so the system message isn't lost when messages replaces the prompt - **Generic `DurableAgentOptions<TTools>`**: Tools and toolChoice properly typed through the generic parameter - **Constructor `prepareStep`**: New field on `DurableAgentOptions` for default step preparation across all `stream()` calls - **`TelemetrySettings`**: Add `recordInputs`/`recordOutputs` options - **Type helpers**: Export `InferDurableAgentTools` and `InferDurableAgentUIMessage` - **`sendStart` docs**: Explain when to set `false` (custom pre-stream UIMessageChunks) - **Telemetry threading**: Pass telemetry settings through to `executeTool` calls ## Test plan - [x] `pnpm type-check` — zero production code errors - [x] `pnpm check` — lint passes - [x] `pnpm build` in packages/durable-agent — builds - [x] `pnpm test:node` in packages/durable-agent — 60 passed, 22 expected fail (same as before) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Syncs DurableAgent code with changes from vercel/workflow since PR #12165 was opened (Jan 30, 2026). Key workflow PRs incorporated:
Changes
recordSpanwrapper aroundmodel.doStream()with OTel span attributes (provider, model, generation settings). Newtelemetry.tsmodule with lazy OTel API loading.normalizeFinishReason: Handle both v5 string ('stop') and v6 object ({ unified: 'stop', raw: 'stop' }) finish reason formatsmessagesoverride beforesystemso the system message isn't lost when messages replaces the promptDurableAgentOptions<TTools>: Tools and toolChoice properly typed through the generic parameterprepareStep: New field onDurableAgentOptionsfor default step preparation across allstream()callsTelemetrySettings: AddrecordInputs/recordOutputsoptionsInferDurableAgentToolsandInferDurableAgentUIMessagesendStartdocs: Explain when to setfalse(custom pre-stream UIMessageChunks)executeToolcallsTest plan
pnpm type-check— zero production code errorspnpm check— lint passespnpm buildin packages/durable-agent — buildspnpm test:nodein packages/durable-agent — 60 passed, 22 expected fail (same as before)