NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
core_tool_grant_store.h
1#pragma once
2
3#include <neograph/api.h>
5#include <neograph/program/core_tool_grant.h>
6
7#include <asio/awaitable.hpp>
8
9#include <cstdint>
10#include <functional>
11#include <memory>
12#include <optional>
13#include <string>
14#include <string_view>
15
16namespace neograph::program {
17
20 std::string owner_scope;
21 std::string program_version_id;
22 std::string run_id;
23 std::string operation_id;
24 std::uint64_t attempt = 0;
25 std::string binding_fingerprint;
26 std::string grant_id;
27};
28
29enum class ProgramCoreToolGrantAdmission {
30 Admitted,
31 AlreadyPresent,
32 Conflict,
33};
34
44class NEOGRAPH_PROGRAM_API ProgramCoreToolGrantStore {
45public:
46 virtual ~ProgramCoreToolGrantStore() = default;
47
48 [[nodiscard]] virtual asio::awaitable<ProgramCoreToolGrantAdmission> admit(
49 const ProgramCoreToolGrantRecord& record) = 0;
50 [[nodiscard]] virtual asio::awaitable<std::optional<ProgramCoreToolGrantRecord>> load(
51 const ProgramCoreToolGrantContext& context) const = 0;
52 [[nodiscard]] virtual asio::awaitable<bool> revoke(const ProgramCoreToolGrantContext& context) = 0;
53};
54
59class NEOGRAPH_PROGRAM_API SyncProgramCoreToolGrantStore : public ProgramCoreToolGrantStore {
60public:
61 // The synchronous operations. Each has the contract of the awaitable operation of the same name.
62 virtual ProgramCoreToolGrantAdmission admit_sync(const ProgramCoreToolGrantRecord& record) = 0;
63 virtual std::optional<ProgramCoreToolGrantRecord> load_sync(
64 const ProgramCoreToolGrantContext& context) const = 0;
65 virtual bool revoke_sync(const ProgramCoreToolGrantContext& context) = 0;
66
67 // The awaitable interface, completed by the operations above: at once on the calling thread,
68 // or on a thread of a bounded pool when offloads() is true.
69 [[nodiscard]] asio::awaitable<ProgramCoreToolGrantAdmission> admit(
70 const ProgramCoreToolGrantRecord& record) final;
71 [[nodiscard]] asio::awaitable<std::optional<ProgramCoreToolGrantRecord>> load(
72 const ProgramCoreToolGrantContext& context) const final;
73 [[nodiscard]] asio::awaitable<bool> revoke(const ProgramCoreToolGrantContext& context) final;
74
76 bool completes_at_once() const noexcept { return !offloads(); }
77
78protected:
80 virtual bool offloads() const noexcept { return false; }
81};
82
87class NEOGRAPH_PROGRAM_API BlockingProgramCoreToolGrantStore {
88public:
89 BlockingProgramCoreToolGrantStore(std::shared_ptr<ProgramCoreToolGrantStore> store, BlockingStorePolicy policy = {});
92
93 const std::shared_ptr<ProgramCoreToolGrantStore>& store() const noexcept { return store_; }
94
95 ProgramCoreToolGrantAdmission admit(const ProgramCoreToolGrantRecord& record) const;
96 std::optional<ProgramCoreToolGrantRecord> load(const ProgramCoreToolGrantContext& context) const;
97 bool revoke(const ProgramCoreToolGrantContext& context) const;
98
99private:
100 std::shared_ptr<ProgramCoreToolGrantStore> store_;
101 SyncProgramCoreToolGrantStore* sync_ = nullptr;
102 BlockingStorePolicy policy_;
103};
104
106using ProgramCoreToolGrantPolicyFactory = std::function<
107 std::optional<ProgramCoreToolGrant>(const ProgramCoreToolGrantRecord&)>;
108
114NEOGRAPH_PROGRAM_API ProgramCoreToolGrantResolver make_durable_core_tool_grant_resolver(
115 std::shared_ptr<ProgramCoreToolGrantStore> store,
116 ProgramCoreToolGrantPolicyFactory policy_factory);
117
122NEOGRAPH_PROGRAM_API ProgramCoreToolGrantAwaitableResolver make_durable_core_tool_grant_awaitable_resolver(
123 std::shared_ptr<ProgramCoreToolGrantStore> store,
124 ProgramCoreToolGrantPolicyFactory policy_factory);
125
126} // namespace neograph::program
NEOGRAPH_API export/import macro for shared-library builds.
A ProgramCoreToolGrantStore for a caller that cannot suspend.
BlockingProgramCoreToolGrantStore(ProgramCoreToolGrantStore &store, BlockingStorePolicy policy={})
A view of a store that outlives it.
Trusted hosts admit exact grants before starting an effectful Core operation.
Base of a ProgramCoreToolGrantStore whose backend is synchronous.
virtual bool offloads() const noexcept
True for a backend that blocks for long: each operation then runs on a pool thread.
bool completes_at_once() const noexcept
True when every awaitable operation completes at once on the calling thread, not on a pool thread.
How a Program store call is awaited, and how a synchronous caller waits for one (#556).
When a Blocking...Store may wait for a store call that does not complete at once.
Definition store_call.h:39
Immutable Program identity presented to a host before one Core operation.
Host-admitted identity, not an executable capability or a Program proposal.