All Topics
All Topics
Technology
Technology
AI
AI
Business
Business
Entertainment
Entertainment
News
News
Programming
Programming
Security
Security
Science
Science
Design
Design
Environment
Environment
Finance
Finance
Crypto
Crypto
Politics
Politics
Sports
Sports
Education
Education
Gaming
Gaming
Art
Art
Music
Music
Health
Health
Books
Books
Food
Food
Travel
Travel
Personal
Personal
Bluesky
Twitter

Agents, Workflows - Agents SDK v0.3.7: Workflows integration, synchronous state, and scheduleEvery()

5mo ago

Source

CloudflareAgents, Workflows - Agents SDK v0.3.7: Workflows integration, synchronous state, and scheduleEvery()cloudflare.com
Snippet from the RSS feed
The latest release of the Agents SDK brings first-class support for Cloudflare Workflows , synchronous state management, and new scheduling capabilities. Cloudflare Workflows integration Agents excel at real-time communication and state management. Workflows excel at durable execution. Together, they enable powerful patterns where Agents handle WebSocket connections while Workflows handle long-running tasks, retries, and human-in-the-loop flows. Use the new AgentWorkflow class to define workflows with typed access to your Agent: JavaScript import { AgentWorkflow } from "agents/workflows" ; export class ProcessingWorkflow extends AgentWorkflow { async run ( event , step ) { // Call Agent methods via RPC await this . agent . updateStatus ( event . payload . taskId , "processing" ) ; // Non-durable: progress reporting to clients await this . reportProgress ( { step : "process" , percent : 0.5 } ) ; this . broadcastToClients ( { type : "update" , taskId : event . payload . taskId } ) ; // Durable via step: idempotent, won't repeat on retry await step . mergeAgentState ( { taskProgress : 0.5 } ) ; const result = await step . do ( "process" , async () => { return processData ( event . payload . data ) ; } ) ; await step . reportComplete ( result ) ; return result ; } } TypeScript import { AgentWorkflow } from "agents/workflows" ; import type { AgentWorkflowEvent , AgentWorkflowStep } from "agents/workflows" ; export class ProcessingWorkflow extends AgentWorkflow < MyAgent , TaskParams > { async run ( event : AgentWorkflowEvent < TaskParams >, step : AgentWorkflowStep ) { // Call Agent methods via RPC await this . agent . updateStatus ( event . payload . taskId , "processing" ) ; // Non-durable: progress reporting to clients await this . reportProgress ( { step : "process" , percent : 0.5 } ) ; this . broadcastToClients ( { type : "update" , taskId : event . payload . taskId } ) ; // Durable via step: idempotent, won't repeat on retry await step . mergeAgentState ( { taskProgress : 0.5 } ) ; const result = await step . do ( "process" , async () => { return processData ( event . payload . data ) ; } ) ; await step . reportComplete ( result ) ; return result ; } } Start workflows from your Agent with runWorkflow() and handle lifecycle events: JavaScript export class MyAgent extends Agent { async startTask ( taskId , data ) { const instanceId = await this . runWorkflow ( "PROCESSING_WORKFLOW" , { taskId , data , } ) ; return { instanceId }; } async onWorkflowProgress ( workflowName , instanceId , progress ) { this . broadcast ( JSON . stringify ( { type : "progress" , progress } )) ; } async onWorkflowComplete ( workflowName , instanceId , result ) { console . log ( `Workflow ${ instanceId } completed` ) ; } async onWorkflowError ( workflowName , instanceId , error ) { console . error ( `Workflow ${ instanceId } failed:` , error ) ; } } TypeScript export class MyAgent extends Agent { async startTask ( taskId : string , data : string ) { const instanceId = await this . runWorkflow ( "PROCESSING_WORKFLOW" , { taskId , data , } ) ; return { instanceId }; } async onWorkflowProgress ( workflowName : string , instanceId : string , progress : unknown , ) { this . broadcast ( JSON . stringify ( { type : "progress" , progress } )) ; } async onWorkflowComplete ( workflowName : string , instanceId : string , result ?: unknown , ) { console . log ( `Workflow ${ instanceId } completed` ) ; } async onWorkflowError ( workflowName : string , instanceId : string , error : unknown , ) { console . error ( `Workflow ${ instanceId } failed:` , error ) ; } } Key workflow methods on your Agent: runWorkflow(workflowName, params, options?) — Start a workflow with optional metadata getWorkflow(workflowId) / getWorkflows(criteria?) — Query workflows with cursor-based pagination approveWorkflow(workflowId) / rejectWorkflow(workflowId) — Human-in-the-loop approval flows pauseWorkflow() , resumeWorkflow() , terminateWorkflow() — Workflow control Synchronous setState() State updates are now synchronous with a new validateStateChange() validation hook: JavaScript export class MyAgent extends Agent { validateStateChange ( oldState , newState ) { // Return false to reject the change if ( newState . count < 0 ) return false ; // Return modified state to transform return { ... newState , lastUpdated : Date . now () }; } } TypeScript export class MyAgent extends Agent < Env , State > { validateStateChange ( oldState : State , newState : State ) : State

You might also wanna read

Comments

Sign in to join the conversation.

No comments yet. Be the first.