9#include <neograph/mcp/harness_program_store.h>
19namespace neograph::mcp {
21enum class HarnessJournalPayloadMode {
27struct SqliteHarnessJournalConfig {
28 HarnessJournalPayloadMode mode = HarnessJournalPayloadMode::REDACTED;
29 std::vector<std::string> redacted_keys = {
30 "api_key",
"authorization",
"content",
"messages",
"output",
31 "password",
"result",
"secret",
"token",
54class SqliteHarnessProgramTransitionStore;
55class NEOGRAPH_API SqliteHarnessRecordStore final :
public HarnessRecordStore,
56 public HarnessJournal,
57 public HarnessRetentionStore,
58 public HarnessProgramAdapterStore,
59 public HarnessContractRunStore {
62 explicit SqliteHarnessRecordStore(
const std::string& db_path);
64 SqliteHarnessRecordStore(
const std::string& db_path, std::chrono::milliseconds busy_timeout);
66 SqliteHarnessRecordStore(
const std::string& db_path,
67 std::chrono::milliseconds busy_timeout,
68 SqliteHarnessJournalConfig journal_config);
69 ~SqliteHarnessRecordStore()
override;
71 SqliteHarnessRecordStore(
const SqliteHarnessRecordStore&) =
delete;
72 SqliteHarnessRecordStore& operator=(
const SqliteHarnessRecordStore&) =
delete;
74 void save_artifact(
const std::string& artifact_id,
const json& record)
override;
75 std::optional<json> load_artifact(
const std::string& artifact_id)
override;
76 void save_run(
const std::string& run_id,
const json& record)
override;
77 std::optional<json> load_run(
const std::string& run_id)
override;
78 void append_event(
const json& event)
override;
79 std::vector<json> list_events(
const std::string& run_id,
80 std::size_t after_sequence = 0,
81 std::size_t limit = 1000)
override;
82 HarnessRetentionResult cleanup_retained(
const HarnessRetentionPolicy& policy)
override;
83 std::shared_ptr<program::ProgramTransitionStore>
84 bind_program_transitions(HarnessProgramArtifactRecord artifact)
override;
86 void save_contract_run(
const HarnessProgramArtifactRecord& artifact,
89 std::optional<program::ContractRun>
90 load_contract_run(
const HarnessProgramArtifactRecord& artifact,
93#ifdef NEOGRAPH_TESTING
96 void after_next_program_run_read_for_testing(std::function<
void()> callback);
98 void fail_next_program_transition_for_testing(SqliteHarnessProgramFaultPoint point);
101 void crash_next_program_transition_for_testing(SqliteHarnessProgramFaultPoint point);
103 std::optional<HarnessProgramRunRecord>
104 resolve_program_run(std::string_view owner_scope, std::string_view run_id)
const override;
108 friend class SqliteHarnessProgramTransitionStore;
109 std::shared_ptr<Impl> impl_;
NEOGRAPH_API export/import macro for shared-library builds.
Durable-boundary state machine for one implementation attempt.
Deep-owned, content-addressed run snapshot used for reconnect and CAS publication.
Compiler-backed subagent Harness service for the MCP server.
SqliteHarnessProgramFaultPoint
One-shot failure points for durable Program transition tests.