Class: A2A::Server::Middleware::FetchTaskOrRaise

Inherits:
Object
  • Object
show all
Defined in:
lib/a2a/server/middleware/fetch_task.rb

Overview

Loads a task from the store and places it on env["a2a.task"]. Raises A2A::TaskNotFoundError if the task does not exist.

The task ID is read from the request — by default from request.id. Use id_field: to read from a different field, and from: to read from a nested object on the request.

Not part of the default A2A::Server stack — wrap your agent with it:

agent = A2A::Server::Middleware::FetchTaskOrRaise.new(
A2A.agent { |env| task = env["a2a.task"] },
store: sqlite_store
)

Instance Method Summary collapse

Constructor Details

#initialize(app, store:, id_field: :id, from: nil) ⇒ FetchTaskOrRaise

Returns a new instance of FetchTaskOrRaise.



59
60
61
62
63
64
# File 'lib/a2a/server/middleware/fetch_task.rb', line 59

def initialize(app, store:, id_field: :id, from: nil)
  @app      = app
  @store    = store
  @id_field = id_field
  @from     = from
end

Instance Method Details

#call(env) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/a2a/server/middleware/fetch_task.rb', line 66

def call(env)
  request = env["a2a.request"]
  source  = @from ? request.public_send(@from) : request
  id      = source.public_send(@id_field)

  task = @store.get(id)
  raise A2A::TaskNotFoundError.new(id) unless task

  env["a2a.task"] = task

  @app.call(env)
end