21namespace neograph::a2a {
23using json = neograph::json;
38NEOGRAPH_API std::string task_state_to_string(TaskState s);
39NEOGRAPH_API TaskState task_state_from_string(std::string_view s);
42enum class Role { User, Agent };
44NEOGRAPH_API std::string role_to_string(Role r);
45NEOGRAPH_API Role role_from_string(std::string_view s);
67 std::vector<std::string> reference_task_ids;
68 std::vector<std::string> extensions;
70 std::string kind =
"message";
75 std::string artifact_id;
76 std::vector<Part> parts;
77 std::optional<std::string> name;
78 std::optional<std::string> description;
85 std::optional<Message> message;
94 std::vector<Artifact> artifacts;
95 std::vector<Message> history;
97 std::string kind =
"task";
102 std::vector<std::string> accepted_output_modes;
103 std::optional<bool> blocking;
104 std::optional<int> history_length;
111 std::optional<MessageSendConfiguration> configuration;
123 std::string context_id;
127 std::string kind =
"status-update";
130struct NEOGRAPH_API TaskArtifactUpdateEvent {
132 std::string context_id;
135 bool last_chunk =
false;
137 std::string kind =
"artifact-update";
144 enum class Type { StatusUpdate, ArtifactUpdate,
Task };
145 Type type = Type::Task;
146 std::optional<TaskStatusUpdateEvent> status_update;
147 std::optional<TaskArtifactUpdateEvent> artifact_update;
148 std::optional<a2a::Task> task;
150 bool is_final()
const noexcept {
151 if (type == Type::StatusUpdate && status_update)
return status_update->final;
152 if (type == Type::Task)
return true;
162 std::string description;
166 std::string preferred_transport =
"JSONRPC";
167 std::vector<std::string> default_input_modes;
168 std::vector<std::string> default_output_modes;
170 bool streaming =
false;
171 bool push_notifications =
false;
172 bool extended_card =
false;
173 bool supports_authenticated_extended =
false;
185NEOGRAPH_API
void to_json(json& j,
const Part& p);
186NEOGRAPH_API
void from_json(
const json& j,
Part& p);
188NEOGRAPH_API
void to_json(json& j,
const Message& m);
189NEOGRAPH_API
void from_json(
const json& j,
Message& m);
191NEOGRAPH_API
void to_json(json& j,
const Artifact& a);
192NEOGRAPH_API
void from_json(
const json& j,
Artifact& a);
194NEOGRAPH_API
void to_json(json& j,
const TaskStatus& s);
195NEOGRAPH_API
void from_json(
const json& j,
TaskStatus& s);
197NEOGRAPH_API
void to_json(json& j,
const Task& t);
198NEOGRAPH_API
void from_json(
const json& j,
Task& t);
206NEOGRAPH_API
void to_json(json& j,
const AgentCard& c);
207NEOGRAPH_API
void from_json(
const json& j,
AgentCard& c);
212NEOGRAPH_API
void to_json(json& j,
const TaskArtifactUpdateEvent& e);
213NEOGRAPH_API
void from_json(
const json& j, TaskArtifactUpdateEvent& e);
Role
Message role (spec §6.4).
NEOGRAPH_API StreamEvent parse_stream_event(const json &j)
Parse a single SSE data: {...} JSON object into the right variant.
TaskState
TaskState — exact strings from spec §6.3 (kebab-case).
NEOGRAPH_API export/import macro for shared-library builds.
Thin C++ RAII wrapper around yyjson with nlohmann-compatible API.
Subset of AgentCard required to interact (spec §5.5).
std::string url
primary endpoint
std::string protocol_version
e.g. "0.3.0"
std::vector< std::string > skill_names
Parsed skill names — full skill objects available in raw["skills"].
json raw
Full original document as received. Preserves fields we don't yet model.
Generated output (spec §6.7).
Optional knobs for message/send (spec §7.2).
Params object for message/send and message/stream.
A single conversational turn (spec §6.4).
std::vector< Part > parts
REQUIRED, ≥1 element.
std::string message_id
client-generated UUID, REQUIRED
std::optional< std::string > context_id
grouping id
json metadata
optional bag
std::optional< std::string > task_id
server task id (omit on first send)
One content fragment of a Message or Artifact.
json metadata
optional extension bag
std::string kind
"text" | "file" | "data"
static Part text_part(std::string s)
Convenience: TextPart of given content.
json file
populated when kind == "file" (FileWithBytes/Uri)
json data
populated when kind == "data" (arbitrary JSON)
std::string text
populated when kind == "text"
Tagged union over the two streaming event types + the terminal Task message.
SSE event emitted by message/stream and tasks/resubscribe while a Task is running.
Status snapshot of a running Task (spec §6.5).
std::optional< std::string > timestamp
RFC3339 UTC.
A unit of work tracked by the agent (spec §6.1).
std::string id
server-generated, REQUIRED
std::string context_id
server-generated grouping id