NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
journal.h
Go to the documentation of this file.
1
5#pragma once
6
8
9#include <cstdint>
10#include <memory>
11#include <optional>
12#include <string>
13#include <string_view>
14
15namespace neograph::program {
16
17enum class ContinuationState : std::uint8_t {
18 Running,
19 Interrupted,
20 Completed,
23 TimedOut,
24 Failed,
25 AmbiguousEffect,
26 CheckpointIncompatible,
27};
28
29NEOGRAPH_PROGRAM_API std::string_view to_string(ContinuationState state) noexcept;
30NEOGRAPH_PROGRAM_API ContinuationState continuation_state_from_string(std::string_view value);
31
32struct ProgramContinuation {
33 std::string operation_id;
34 ContinuationState state = ContinuationState::Running;
35 std::uint64_t attempt = 0;
36
37 bool operator==(const ProgramContinuation&) const = default;
38};
39
45 std::string previous_id;
46 std::string run_id;
47 std::string program_version_id;
48 std::string bundle_id;
49 std::uint64_t sequence = 0;
50 ProgramContinuation continuation;
51 RunBudget remaining_budget{};
52 RunBudget inflight_reservation{};
53 std::optional<CoreCheckpointIdentity> core_checkpoint;
54 std::int64_t timestamp_ms = 0;
55};
56
62struct NEOGRAPH_PROGRAM_API ProgramJournalRecord {
63 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
64
65 std::string id;
66 std::string previous_id;
67 std::string run_id;
68 std::string program_version_id;
69 std::string bundle_id;
70 std::uint64_t sequence = 0;
71 ProgramContinuation continuation;
72 RunBudget remaining_budget{};
73 RunBudget inflight_reservation{};
74 std::optional<CoreCheckpointIdentity> core_checkpoint;
75 std::int64_t timestamp_ms = 0;
76
78 static ProgramJournalRecord parse(std::string_view stored_bytes);
79
81 std::string serialize_canonical() const;
82};
83
84enum class JournalAppendResult : std::uint8_t { Appended, AlreadyPresent, Conflict };
85
86class NEOGRAPH_PROGRAM_API ProgramJournal {
87public:
88 virtual ~ProgramJournal() = default;
89
90 virtual std::optional<ProgramJournalRecord> latest(std::string_view run_id) const = 0;
91
96 virtual JournalAppendResult compare_append(std::string_view expected_previous_id,
97 ProgramJournalRecord record) = 0;
98};
99
101NEOGRAPH_PROGRAM_API bool
103 const ProgramJournalRecord& next) noexcept;
110 const ProgramJournalRecord& previous,
111 const ProgramJournalRecord& next,
112 const ProgramUsage& usage) noexcept;
113
123 const ProgramJournalRecord& previous,
124 const ProgramJournalRecord& next,
125 const ProgramUsage& usage) noexcept;
126
127class NEOGRAPH_PROGRAM_API InMemoryProgramJournal final : public ProgramJournal {
128public:
129 InMemoryProgramJournal();
130 ~InMemoryProgramJournal() override;
131
132 InMemoryProgramJournal(const InMemoryProgramJournal&) = delete;
133 InMemoryProgramJournal& operator=(const InMemoryProgramJournal&) = delete;
134 InMemoryProgramJournal(InMemoryProgramJournal&&) noexcept;
135 InMemoryProgramJournal& operator=(InMemoryProgramJournal&&) noexcept;
136
137 std::optional<ProgramJournalRecord> latest(std::string_view run_id) const override;
138 JournalAppendResult compare_append(std::string_view expected_previous_id,
139 ProgramJournalRecord record) override;
140
141private:
142 struct Impl;
143 std::unique_ptr<Impl> impl_;
144};
145
146} // namespace neograph::program
@ Cancelled
"cancelled" — cancelled via session/cancel.
@ BudgetExhausted
NG.BudgetExhausted: budget or quota exhaustion.
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_transition(const ProgramJournalRecord &previous, const ProgramJournalRecord &next) noexcept
Shared transition predicate used by atomic Program publication backends.
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_reservation_release(const ProgramJournalRecord &previous, const ProgramJournalRecord &next, const ProgramUsage &usage) noexcept
True when next releases previous's reservation for a CallCore that was interrupted rather than comple...
NEOGRAPH_PROGRAM_API bool is_valid_program_journal_reservation_settlement(const ProgramJournalRecord &previous, const ProgramJournalRecord &next, const ProgramUsage &usage) noexcept
Validates release of an explicit in-flight reservation against measured usage.
Immutable outcome of one Program run attempt.
Mutable construction input for a journal record.
Definition journal.h:44
Deep-owned stored journal value.
Definition journal.h:62
std::string serialize_canonical() const
Canonical stored representation, including id.