NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
pending.h
Go to the documentation of this file.
1
5#pragma once
6
7#include <neograph/api.h>
8#include <neograph/json.h>
10
11#include <cstdint>
12#include <memory>
13#include <optional>
14#include <string>
15#include <string_view>
16
17namespace neograph::program {
18
19enum class ProgramPendingInputKind : std::uint8_t {
20 Input,
21 CapabilityResult,
22};
23
24enum class ProgramPendingState : std::uint8_t {
25 Awaiting,
26 Consumed,
27 Expired,
29 Ambiguous,
30};
31
32enum class ProgramEffectIdempotency : std::uint8_t {
33 Idempotent,
34 NonIdempotent,
35};
36
37enum class ProgramEffectReconciliation : std::uint8_t {
38 None,
39 Completed,
40 Failed,
41 Unknown,
42};
43
45enum class ProgramPendingDisposition : std::uint8_t {
46 Applied,
47 Duplicate,
48 Conflict,
49 WrongPendingId,
50 SchemaMismatch,
51 Expired,
52 Cancelled,
53 NotAwaiting,
54};
55
56struct ProgramPendingInputData {
57 std::string operation_id;
58 std::string call_id;
59 ProgramPendingInputKind kind = ProgramPendingInputKind::Input;
60 json result_schema = json::object();
61 json payload = json::object();
62 std::optional<std::uint64_t> expires_at_unix_ms;
63 std::string core_node;
64 json core_interrupt_value;
65 ProgramPendingState state = ProgramPendingState::Awaiting;
66 std::optional<json> consumed_result;
72 std::string core_interrupt_id;
73
74 bool operator==(const ProgramPendingInputData&) const = default;
75};
76
77struct ProgramPendingEffectData {
78 std::string operation_id;
79 std::string call_id;
80 std::string effect_id;
81 json result_schema = json::object();
82 json payload = json::object();
83 std::optional<std::uint64_t> expires_at_unix_ms;
84 EffectMode effect_mode = EffectMode::Brokered;
85 ProgramEffectIdempotency idempotency = ProgramEffectIdempotency::Idempotent;
86 std::string core_node;
87 json core_interrupt_value;
88 ProgramPendingState state = ProgramPendingState::Awaiting;
89 ProgramEffectReconciliation reconciliation = ProgramEffectReconciliation::None;
90 std::optional<json> reconciled_result;
92 std::string core_interrupt_id;
93
94 bool operator==(const ProgramPendingEffectData&) const = default;
95};
96
97class ProgramPendingInput;
98class ProgramPendingEffect;
99struct ProgramPendingInputUpdate;
100struct ProgramPendingEffectUpdate;
101
108class NEOGRAPH_PROGRAM_API ProgramPendingInput {
109public:
112 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 2;
113
114 explicit ProgramPendingInput(ProgramPendingInputData data);
115 static ProgramPendingInput parse(std::string_view stored_bytes);
116
117 const std::string& operation_id() const noexcept;
118 const std::string& call_id() const noexcept;
119 ProgramPendingInputKind kind() const noexcept;
120 json result_schema() const;
121 json payload() const;
122 std::optional<std::uint64_t> expires_at_unix_ms() const noexcept;
123 const std::string& core_node() const noexcept;
124 json core_interrupt_value() const;
125 const std::string& core_interrupt_id() const noexcept;
126 ProgramPendingState state() const noexcept;
127 std::optional<json> consumed_result() const;
128
129 ProgramPendingInputUpdate submit(std::string_view call_id,
130 const json& result,
131 std::uint64_t now_unix_ms) const;
132 ProgramPendingInputUpdate expire(std::uint64_t now_unix_ms) const;
133 ProgramPendingInputUpdate cancel() const;
134
135 std::string serialize_canonical() const;
136 bool operator==(const ProgramPendingInput& other) const;
137
138private:
139 struct Impl;
140 explicit ProgramPendingInput(std::shared_ptr<const Impl> impl);
141 std::shared_ptr<const Impl> impl_;
142};
143
144struct ProgramPendingInputUpdate {
145 ProgramPendingDisposition disposition;
147 std::string diagnostic_code;
148 std::string message;
149
150 bool state_changed() const noexcept;
151};
152
160class NEOGRAPH_PROGRAM_API ProgramPendingEffect {
161public:
163 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 2;
164
165 explicit ProgramPendingEffect(ProgramPendingEffectData data);
166 static ProgramPendingEffect parse(std::string_view stored_bytes);
167
168 const std::string& operation_id() const noexcept;
169 const std::string& call_id() const noexcept;
170 const std::string& effect_id() const noexcept;
171 json result_schema() const;
172 json payload() const;
173 std::optional<std::uint64_t> expires_at_unix_ms() const noexcept;
174 EffectMode effect_mode() const noexcept;
175 ProgramEffectIdempotency idempotency() const noexcept;
176 const std::string& core_node() const noexcept;
177 json core_interrupt_value() const;
178 const std::string& core_interrupt_id() const noexcept;
179 ProgramPendingState state() const noexcept;
180 ProgramEffectReconciliation reconciliation() const noexcept;
181 std::optional<json> reconciled_result() const;
182 ProgramPendingEffectUpdate submit(std::string_view call_id,
183 std::string_view effect_id,
184 const json& result,
185 std::uint64_t now_unix_ms) const;
186
187 ProgramPendingEffectUpdate mark_outcome_unknown(std::uint64_t now_unix_ms) const;
188 ProgramPendingEffectUpdate reconcile(std::string_view call_id,
189 std::string_view effect_id,
190 ProgramEffectReconciliation resolution,
191 std::optional<json> result,
192 std::uint64_t now_unix_ms) const;
193 ProgramPendingEffectUpdate expire(std::uint64_t now_unix_ms) const;
194 ProgramPendingEffectUpdate cancel() const;
195
196 std::string serialize_canonical() const;
197 bool operator==(const ProgramPendingEffect& other) const;
198
199private:
200 struct Impl;
201 explicit ProgramPendingEffect(std::shared_ptr<const Impl> impl);
202 std::shared_ptr<const Impl> impl_;
203};
204
205struct ProgramPendingEffectUpdate {
206 ProgramPendingDisposition disposition;
208 std::string diagnostic_code;
209 std::string message;
210
211 bool state_changed() const noexcept;
212};
213
214NEOGRAPH_PROGRAM_API std::string_view to_string(ProgramPendingInputKind value) noexcept;
215NEOGRAPH_PROGRAM_API std::string_view to_string(ProgramPendingState value) noexcept;
216NEOGRAPH_PROGRAM_API std::string_view to_string(ProgramEffectIdempotency value) noexcept;
217NEOGRAPH_PROGRAM_API std::string_view to_string(ProgramEffectReconciliation value) noexcept;
218NEOGRAPH_PROGRAM_API std::string_view to_string(ProgramPendingDisposition value) noexcept;
219
220} // namespace neograph::program
@ Cancelled
"cancelled" — cancelled via session/cancel.
NEOGRAPH_API export/import macro for shared-library builds.
Immutable durable external-effect state.
Definition pending.h:160
Immutable pending host input/capability result.
Definition pending.h:108
Thin C++ RAII wrapper around yyjson with nlohmann-compatible API.
ProgramPendingDisposition
Stable result of applying one pending-value transition.
Definition pending.h:45
Immutable executable registry snapshots for Program admission.