18namespace neograph::mcp {
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";
24class NEOGRAPH_HARNESS_API HarnessTranslationError final :
public std::invalid_argument {
26 HarnessTranslationError(std::string code, std::string pointer, std::string message);
28 const std::string& code() const noexcept;
29 const std::
string& pointer() const noexcept;
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";
58 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
60 json input = json::object();
61 program::RunBudget budget;
63 std::string serialize_canonical()
const;
75 std::string owner_scope,
76 std::string program_version_id,
78 std::string correlation_id);
80struct HarnessWireReceipt {
81 std::string source_id;
86 std::string workspace_revision;
87 std::vector<std::string> worker_ids;
88 std::vector<std::string> tool_ids;
92struct HarnessCapabilityBinding {
93 program::ExecutableIdentity executable;
94 json host_configuration;
97struct HarnessCapabilityBindingRequest {
98 std::optional<program::ExecutableIdentity> provider;
99 std::vector<HarnessCapabilityBinding> tools;
100 json policy_restrictions;
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;
114class NEOGRAPH_HARNESS_API HarnessRequestTranslator final {
116 static HarnessTranslation translate(
const json& request,
117 const program::RegistrySnapshot& registry,
118 const HarnessTranslationDefaults& defaults);
121NEOGRAPH_HARNESS_API json harness_program_request_schema();
122NEOGRAPH_HARNESS_API json harness_program_output_schema();
124struct HarnessNodeRegistration {
125 program::ExecutableManifest manifest;
126 graph::NodeFactoryFn factory;
129 program::ExecutableRequirementResolver requirement_resolver;
132struct HarnessReducerRegistration {
133 program::ExecutableManifest manifest;
134 graph::ReducerFn reducer;
137struct HarnessConditionRegistration {
138 program::ExecutableManifest manifest;
139 graph::ConditionFn condition;
140 std::optional<graph::ConditionSpec> spec;
143struct HarnessProviderRegistration {
144 program::ExecutableManifest manifest;
145 program::ProviderMetadata metadata;
148struct HarnessToolRegistration {
149 program::ExecutableManifest manifest;
150 program::ToolMetadata metadata;
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;
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;
177struct HarnessProgramSnapshots {
178 program::RegistrySnapshot registry;
179 program::AdmissionProfile admission_profile;
180 program::PolicySnapshot policy;
183NEOGRAPH_HARNESS_API HarnessProgramSnapshots
184build_harness_program_snapshots(HarnessProgramSnapshotConfig config);
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.
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.