NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
harness_program_translator.h
1#pragma once
2
3#include <neograph/api.h>
9
10#include <cstdint>
11#include <map>
12#include <optional>
13#include <stdexcept>
14#include <string>
15#include <string_view>
16#include <vector>
17
18namespace neograph::mcp {
19
20inline constexpr std::string_view HARNESS_WORKER_NODE_TYPE = "neograph_harness_worker";
21inline constexpr std::string_view HARNESS_JUDGE_NODE_TYPE = "neograph_harness_judge";
22inline constexpr std::string_view HARNESS_PROGRAM_AGENT_ID = "neograph-harness";
23
24class NEOGRAPH_HARNESS_API HarnessTranslationError final : public std::invalid_argument {
25public:
26 HarnessTranslationError(std::string code, std::string pointer, std::string message);
27
28 const std::string& code() const noexcept;
29 const std::string& pointer() const noexcept;
30
31private:
32 std::string code_;
33 std::string pointer_;
34};
35
36struct HarnessTranslationDefaults {
37 std::uint64_t timeout_seconds = 600;
38 std::uint32_t max_parallel_workers = 4;
39 std::uint64_t max_program_operations = 64;
40 std::uint64_t max_core_steps = 40;
41 std::uint32_t max_worker_retries = 1;
42 std::uint64_t provider_timeout_seconds = 600;
43 std::uint64_t max_output_tokens = 4096;
44 std::uint64_t input_token_ceiling_per_round = 16384;
45 std::uint32_t max_provider_tool_rounds = 8;
46 std::uint64_t monetary_microunits = 1;
47 std::optional<program::ExecutableIdentity> provider;
48 std::vector<std::string> read_only_effects;
49 std::string source_id_prefix = "harness";
50};
51
57struct NEOGRAPH_HARNESS_API HarnessInvocationTemplate {
58 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
59
60 json input = json::object();
61 program::RunBudget budget;
62
63 std::string serialize_canonical() const;
64 static HarnessInvocationTemplate parse(std::string_view stored_bytes);
65
66 bool operator==(const HarnessInvocationTemplate&) const = default;
67};
68
73NEOGRAPH_HARNESS_API program::RunInvocation
74bind_harness_invocation(HarnessInvocationTemplate request,
75 std::string owner_scope,
76 std::string program_version_id,
77 std::string run_id,
78 std::string correlation_id);
79
80struct HarnessWireReceipt {
81 std::string source_id;
82 std::string mode;
84 program::AuthoringFrontend authoring_frontend = program::AuthoringFrontend::TrustedCpp;
85 std::string preset;
86 std::string workspace_revision;
87 std::vector<std::string> worker_ids;
88 std::vector<std::string> tool_ids;
89 json projection;
90};
91
92struct HarnessCapabilityBinding {
93 program::ExecutableIdentity executable;
94 json host_configuration;
95};
96
97struct HarnessCapabilityBindingRequest {
98 std::optional<program::ExecutableIdentity> provider;
99 std::vector<HarnessCapabilityBinding> tools;
100 json policy_restrictions;
101};
102
103struct HarnessTranslation {
104 program::ProgramSource source;
105 HarnessInvocationTemplate invocation_template;
106 program::ContractRecord input_contract;
107 program::ContractRecord output_contract;
108 std::map<std::string, json> sealed_workers;
109 HarnessWireReceipt wire;
110 HarnessCapabilityBindingRequest bindings;
111 std::optional<program::ContractManifest> contract;
112};
113
114class NEOGRAPH_HARNESS_API HarnessRequestTranslator final {
115public:
116 static HarnessTranslation translate(const json& request,
117 const program::RegistrySnapshot& registry,
118 const HarnessTranslationDefaults& defaults);
119};
120
121NEOGRAPH_HARNESS_API json harness_program_request_schema();
122NEOGRAPH_HARNESS_API json harness_program_output_schema();
123
124struct HarnessNodeRegistration {
125 program::ExecutableManifest manifest;
126 graph::NodeFactoryFn factory;
127 json config_schema;
128 json effects;
129 program::ExecutableRequirementResolver requirement_resolver;
130};
131
132struct HarnessReducerRegistration {
133 program::ExecutableManifest manifest;
134 graph::ReducerFn reducer;
135};
136
137struct HarnessConditionRegistration {
138 program::ExecutableManifest manifest;
139 graph::ConditionFn condition;
140 std::optional<graph::ConditionSpec> spec;
141};
142
143struct HarnessProviderRegistration {
144 program::ExecutableManifest manifest;
145 program::ProviderMetadata metadata;
146};
147
148struct HarnessToolRegistration {
149 program::ExecutableManifest manifest;
150 program::ToolMetadata metadata;
151};
152
153struct HarnessProgramRegistryConfig {
154 HarnessNodeRegistration worker;
155 HarnessNodeRegistration judge;
156 std::vector<HarnessNodeRegistration> additional_nodes;
157 std::vector<HarnessReducerRegistration> additional_reducers;
158 std::vector<HarnessConditionRegistration> conditions;
159 std::optional<HarnessProviderRegistration> provider;
160 std::vector<HarnessToolRegistration> tools;
161};
162
163struct HarnessProgramSnapshotConfig {
164 HarnessProgramRegistryConfig registry;
165 std::string admission_profile_id = "neograph-harness-v1";
166 std::string admission_semantic_version = "1.0.0";
167 program::AdmissionMode admission_mode = program::AdmissionMode::MultiTenant;
168 std::string policy_id = "neograph-harness-policy-v1";
169 std::string policy_semantic_version = "1.0.0";
170 std::string owner_scope;
171 std::vector<std::string> allowed_capabilities;
172 std::vector<std::string> allowed_effects;
173 std::vector<std::string> allowed_module_digests;
174 program::BudgetLimits budget_ceiling;
175};
176
177struct HarnessProgramSnapshots {
178 program::RegistrySnapshot registry;
179 program::AdmissionProfile admission_profile;
180 program::PolicySnapshot policy;
181};
182
183NEOGRAPH_HARNESS_API HarnessProgramSnapshots
184build_harness_program_snapshots(HarnessProgramSnapshotConfig config);
185
186} // namespace neograph::mcp
Immutable Program admission and policy snapshots.
NEOGRAPH_API export/import macro for shared-library builds.
The public authoring boundary and stored-artifact migration rules.
AuthoringFrontend
The only source frontends admitted for new publication.
Definition authoring.h:25
Legacy process-global registries for graph executables.
Frozen implementation contracts and fail-closed verification evidence.
Execution service for admitted immutable Programs.
Immutable input and budget selected during Harness translation, before the admitted ProgramVersion an...
One owner-scoped Program request.
Definition invocation.h:115