NeoGraph 0.10.0
A C++17 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
types.h
Go to the documentation of this file.
1
12#pragma once
13
14#include <neograph/api.h>
15#include <neograph/json.h>
16
17#include <optional>
18#include <string>
19#include <vector>
20
21namespace neograph::a2a {
22
23using json = neograph::json;
24
26enum class TaskState {
27 Submitted,
28 Working,
29 InputRequired,
30 Completed,
31 Canceled,
32 Failed,
33 Rejected,
34 AuthRequired,
35 Unknown,
36};
37
38NEOGRAPH_API std::string task_state_to_string(TaskState s);
39NEOGRAPH_API TaskState task_state_from_string(std::string_view s);
40
42enum class Role { User, Agent };
43
44NEOGRAPH_API std::string role_to_string(Role r);
45NEOGRAPH_API Role role_from_string(std::string_view s);
46
49struct NEOGRAPH_API Part {
50 std::string kind;
51 std::string text;
52 json file;
53 json data;
54 json metadata;
55
57 static Part text_part(std::string s);
58};
59
61struct NEOGRAPH_API Message {
62 std::string message_id;
63 Role role = Role::User;
64 std::vector<Part> parts;
65 std::optional<std::string> task_id;
66 std::optional<std::string> context_id;
67 std::vector<std::string> reference_task_ids;
68 std::vector<std::string> extensions;
69 json metadata;
70 std::string kind = "message";
71};
72
74struct NEOGRAPH_API Artifact {
75 std::string artifact_id;
76 std::vector<Part> parts;
77 std::optional<std::string> name;
78 std::optional<std::string> description;
79 json metadata;
80};
81
83struct NEOGRAPH_API TaskStatus {
84 TaskState state = TaskState::Submitted;
85 std::optional<Message> message;
86 std::optional<std::string> timestamp;
87};
88
90struct NEOGRAPH_API Task {
91 std::string id;
92 std::string context_id;
93 TaskStatus status;
94 std::vector<Artifact> artifacts;
95 std::vector<Message> history;
96 json metadata;
97 std::string kind = "task";
98};
99
101struct NEOGRAPH_API MessageSendConfiguration {
102 std::vector<std::string> accepted_output_modes;
103 std::optional<bool> blocking;
104 std::optional<int> history_length;
106};
107
109struct NEOGRAPH_API MessageSendParams {
110 Message message;
111 std::optional<MessageSendConfiguration> configuration;
112 json metadata;
113};
114
121struct NEOGRAPH_API TaskStatusUpdateEvent {
122 std::string task_id;
123 std::string context_id;
124 TaskStatus status;
125 bool final = false;
126 json metadata;
127 std::string kind = "status-update";
128};
129
130struct NEOGRAPH_API TaskArtifactUpdateEvent {
131 std::string task_id;
132 std::string context_id;
133 Artifact artifact;
134 bool append = false;
135 bool last_chunk = false;
136 json metadata;
137 std::string kind = "artifact-update";
138};
139
143struct NEOGRAPH_API StreamEvent {
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;
149
150 bool is_final() const noexcept {
151 if (type == Type::StatusUpdate && status_update) return status_update->final;
152 if (type == Type::Task) return true;
153 return false;
154 }
155};
156
160struct NEOGRAPH_API AgentCard {
161 std::string name;
162 std::string description;
163 std::string url;
164 std::string version;
165 std::string protocol_version;
166 std::string preferred_transport = "JSONRPC";
167 std::vector<std::string> default_input_modes;
168 std::vector<std::string> default_output_modes;
169
170 bool streaming = false;
171 bool push_notifications = false;
172 bool extended_card = false;
173 bool supports_authenticated_extended = false;
174
176 std::vector<std::string> skill_names;
177
179 json raw;
180};
181
182// ---------------------------------------------------------------------------
183// JSON adapters (defined in src/a2a/types.cpp).
184// ---------------------------------------------------------------------------
185NEOGRAPH_API void to_json(json& j, const Part& p);
186NEOGRAPH_API void from_json(const json& j, Part& p);
187
188NEOGRAPH_API void to_json(json& j, const Message& m);
189NEOGRAPH_API void from_json(const json& j, Message& m);
190
191NEOGRAPH_API void to_json(json& j, const Artifact& a);
192NEOGRAPH_API void from_json(const json& j, Artifact& a);
193
194NEOGRAPH_API void to_json(json& j, const TaskStatus& s);
195NEOGRAPH_API void from_json(const json& j, TaskStatus& s);
196
197NEOGRAPH_API void to_json(json& j, const Task& t);
198NEOGRAPH_API void from_json(const json& j, Task& t);
199
200NEOGRAPH_API void to_json(json& j, const MessageSendConfiguration& c);
201NEOGRAPH_API void from_json(const json& j, MessageSendConfiguration& c);
202
203NEOGRAPH_API void to_json(json& j, const MessageSendParams& p);
204NEOGRAPH_API void from_json(const json& j, MessageSendParams& p);
205
206NEOGRAPH_API void to_json(json& j, const AgentCard& c);
207NEOGRAPH_API void from_json(const json& j, AgentCard& c);
208
209NEOGRAPH_API void to_json(json& j, const TaskStatusUpdateEvent& e);
210NEOGRAPH_API void from_json(const json& j, TaskStatusUpdateEvent& e);
211
212NEOGRAPH_API void to_json(json& j, const TaskArtifactUpdateEvent& e);
213NEOGRAPH_API void from_json(const json& j, TaskArtifactUpdateEvent& e);
214
218NEOGRAPH_API StreamEvent parse_stream_event(const json& j);
219
220} // namespace neograph::a2a
Role
Message role (spec §6.4).
Definition types.h:42
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).
Definition types.h:26
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).
Definition types.h:160
std::string url
primary endpoint
Definition types.h:163
std::string protocol_version
e.g. "0.3.0"
Definition types.h:165
std::vector< std::string > skill_names
Parsed skill names — full skill objects available in raw["skills"].
Definition types.h:176
json raw
Full original document as received. Preserves fields we don't yet model.
Definition types.h:179
Generated output (spec §6.7).
Definition types.h:74
Optional knobs for message/send (spec §7.2).
Definition types.h:101
Params object for message/send and message/stream.
Definition types.h:109
A single conversational turn (spec §6.4).
Definition types.h:61
std::vector< Part > parts
REQUIRED, ≥1 element.
Definition types.h:64
std::string message_id
client-generated UUID, REQUIRED
Definition types.h:62
std::optional< std::string > context_id
grouping id
Definition types.h:66
json metadata
optional bag
Definition types.h:69
std::optional< std::string > task_id
server task id (omit on first send)
Definition types.h:65
One content fragment of a Message or Artifact.
Definition types.h:49
json metadata
optional extension bag
Definition types.h:54
std::string kind
"text" | "file" | "data"
Definition types.h:50
static Part text_part(std::string s)
Convenience: TextPart of given content.
json file
populated when kind == "file" (FileWithBytes/Uri)
Definition types.h:52
json data
populated when kind == "data" (arbitrary JSON)
Definition types.h:53
std::string text
populated when kind == "text"
Definition types.h:51
Tagged union over the two streaming event types + the terminal Task message.
Definition types.h:143
SSE event emitted by message/stream and tasks/resubscribe while a Task is running.
Definition types.h:121
Status snapshot of a running Task (spec §6.5).
Definition types.h:83
std::optional< std::string > timestamp
RFC3339 UTC.
Definition types.h:86
A unit of work tracked by the agent (spec §6.1).
Definition types.h:90
std::string id
server-generated, REQUIRED
Definition types.h:91
std::string context_id
server-generated grouping id
Definition types.h:92