Task Stores
This guide covers the in-memory and SQLite task stores and their shared interface.
In-Memory (development)
store = A2A::TaskStore.new
server = A2A::Server.new(agent_card: card, store: store)
SQLite (production)
require "a2a/store"
store = A2A::Store::SQLite.new(path: "agent.db")
server = A2A::Server.new(agent_card: card, store: store)
Store Interface
Both stores share the same interface:
store.create(task_id, context_id)
store.get(task_id) # => Hash or nil
store.update_state(task_id, "TASK_STATE_WORKING", message: { ... })
store.add_artifact(task_id, { "artifactId" => "...", "parts" => [...] })
store.add_message(task_id, { "role" => "ROLE_AGENT", "parts" => [...] })
store.complete(task_id, result)
store.fail(task_id, "something went wrong")
store.cancel(task_id)
store.list(context_id: "ctx-1", state: "TASK_STATE_COMPLETED")
# Pub/sub (for SubscribeToTask)
queue = store.subscribe(task_id)
store.unsubscribe(task_id, queue)
# Push notification configs
store.create_push_config(task_id, config)
store.get_push_config(task_id, config_id)
store.list_push_configs(task_id)
store.delete_push_config(task_id, config_id)