NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
registry.h
Go to the documentation of this file.
1
5#pragma once
6
7#include <neograph/api.h>
8#include <neograph/graph/registry.h>
9#include <neograph/json.h>
11
12#include <cstdint>
13#include <functional>
14#include <memory>
15#include <optional>
16#include <string>
17#include <string_view>
18#include <vector>
19
20namespace neograph::program {
21
22namespace detail {
23class RegistrySnapshotAccess;
24}
25
26enum class EffectMode : std::uint8_t {
27 Brokered,
28 TrustedNative,
29};
30
31NEOGRAPH_PROGRAM_API std::string_view to_string(EffectMode mode) noexcept;
32NEOGRAPH_PROGRAM_API EffectMode effect_mode_from_string(std::string_view value);
33
34struct ExecutableManifest {
35 ExecutableIdentity identity;
36 EffectMode effect_mode = EffectMode::Brokered;
37 std::string attestation_id; // host declaration id; not a signature
38 std::vector<std::string> required_capabilities;
39 std::vector<std::string> declared_effects;
40 std::vector<ExecutableIdentity> required_executables;
42 ExecutionGuarantee execution_guarantee = ExecutionGuarantee::Strict;
43};
44
45struct ProviderMetadata {
46 json request_schema;
47 json response_schema;
48};
49
50struct ToolMetadata {
51 json input_schema;
52 json output_schema;
53};
54
55struct ImportedExecutableMetadata {
56 std::string module_id;
57 std::string export_name;
58 std::string dependency_digest;
59 ExecutableIdentity target;
60};
73 std::function<std::vector<ExecutableIdentity>(const json& node_config)>;
74
75class NEOGRAPH_PROGRAM_API RegistrySnapshot {
76public:
77 RegistrySnapshot(const RegistrySnapshot&) noexcept = default;
78 RegistrySnapshot(RegistrySnapshot&&) noexcept = default;
79 RegistrySnapshot& operator=(const RegistrySnapshot&) noexcept = default;
80 RegistrySnapshot& operator=(RegistrySnapshot&&) noexcept = default;
81 ~RegistrySnapshot();
82
83 const std::string& fingerprint() const noexcept;
84 std::vector<ExecutableIdentity> identities() const;
85 std::optional<ExecutableManifest> find(ExecutableKind kind, std::string_view name) const;
86 json manifest() const;
87 std::optional<NativeControlBinding> find_native(std::string_view name) const;
88 std::string serialize_canonical() const;
89
90private:
91 struct Impl;
92 std::shared_ptr<const Impl> impl_;
93
94 explicit RegistrySnapshot(std::shared_ptr<const Impl> impl);
95 friend class RegistrySnapshotBuilder;
96 friend class detail::RegistrySnapshotAccess;
97};
98
110class NEOGRAPH_PROGRAM_API RegistrySnapshotBuilder {
111public:
116 RegistrySnapshotBuilder& operator=(const RegistrySnapshotBuilder&) = delete;
118
119 RegistrySnapshotBuilder& add_node(
120 ExecutableManifest manifest,
121 graph::NodeFactoryFn factory,
122 json config_schema,
123 json effects,
124 ExecutableRequirementResolver requirement_resolver = {});
129 ExecutableManifest manifest,
130 graph::NodeFactoryFn factory,
131 json config_schema,
132 json effects,
133 ExecutableRequirementResolver requirement_resolver = {});
137 ExecutableManifest manifest,
138 ExecutableRequirementResolver requirement_resolver);
139 RegistrySnapshotBuilder& add_core_tool_dispatch(
140 ExecutableManifest manifest,
141 ExecutableRequirementResolver requirement_resolver);
148 ExecutableManifest manifest,
149 ExecutableRequirementResolver requirement_resolver);
150 RegistrySnapshotBuilder& add_reducer(ExecutableManifest manifest, graph::ReducerFn reducer);
151 RegistrySnapshotBuilder& add_condition(ExecutableManifest manifest,
152 graph::ConditionFn condition,
153 std::optional<graph::ConditionSpec> spec);
154 RegistrySnapshotBuilder& add_provider(ExecutableManifest manifest, ProviderMetadata metadata);
155 RegistrySnapshotBuilder& add_tool(ExecutableManifest manifest, ToolMetadata metadata);
156 RegistrySnapshotBuilder& add_imported(ExecutableManifest manifest,
157 ImportedExecutableMetadata metadata);
159 RegistrySnapshotBuilder& add_native(ExecutableManifest manifest, NativeControlBinding binding) &;
160 RegistrySnapshotBuilder&& add_native(ExecutableManifest manifest, NativeControlBinding binding) &&;
167 RegistrySnapshotBuilder& add_native(std::uint32_t import_slot,
168 ExecutableManifest manifest,
169 NativeControlBinding binding) &;
170 RegistrySnapshotBuilder&& add_native(std::uint32_t import_slot,
171 ExecutableManifest manifest,
172 NativeControlBinding binding) &&;
173
174 RegistrySnapshot build() &&;
175
176private:
177 RegistrySnapshotBuilder& add_node_impl(
178 ExecutableManifest manifest,
179 graph::NodeFactoryFn factory,
180 json config_schema,
181 json effects,
182 ExecutableRequirementResolver requirement_resolver,
183 bool allow_executable_bindings);
184 struct Impl;
185 std::unique_ptr<Impl> impl_;
186};
187
188} // namespace neograph::program
NEOGRAPH_API export/import macro for shared-library builds.
ExecutionGuarantee
The lowest recoverability/integrity class reachable through an executable closure.
Definition bundle.h:29
C++ wrapper over a C v1 plugin binding for trusted in-process dispatch only.
Definition native.h:159
Move-only builder for one sealed, process-local executable registry.
Definition registry.h:110
RegistrySnapshotBuilder & add_native(ExecutableManifest manifest, NativeControlBinding binding) &
Register a native callable for direct lookup without granting a JavaScript slot.
RegistrySnapshotBuilder & add_core_endpoint_node(ExecutableManifest manifest, ExecutableRequirementResolver requirement_resolver)
A built-in SchemaProvider endpoint node (#531): the manifest names its type (embed,...
RegistrySnapshotBuilder & add_native(std::uint32_t import_slot, ExecutableManifest manifest, NativeControlBinding binding) &
Seal a native binding to one non-built-in JavaScript import slot.
RegistrySnapshotBuilder & add_core_llm_call(ExecutableManifest manifest, ExecutableRequirementResolver requirement_resolver)
Fixed NeoGraph implementations that may hold exact bound executables.
RegistrySnapshotBuilder & add_host_brokered_node(ExecutableManifest manifest, graph::NodeFactoryFn factory, json config_schema, json effects, ExecutableRequirementResolver requirement_resolver={})
Host-reviewed broker nodes may retain only their exact declared bindings.
std::function< json(const json &current, const json &incoming)> ReducerFn
Custom reducer function signature.
Definition types.h:103
std::function< std::string(const GraphState &)> ConditionFn
Condition function signature for conditional edge routing.
Definition types.h:919
Thin C++ RAII wrapper around yyjson with nlohmann-compatible API.
std::function< std::unique_ptr< GraphNode >(const std::string &name, const json &config, const NodeContext &ctx)> NodeFactoryFn
Factory function signature for creating graph nodes.
Definition loader.h:175
C++ ownership-safe wrapper for the Program native C v1 ABI.
std::function< std::vector< ExecutableIdentity >(const json &node_config)> ExecutableRequirementResolver
Pure node-config to exact executable requirements callback.
Definition registry.h:73