NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
sqlite_harness_store.h
Go to the documentation of this file.
1
5#pragma once
6
7#include <neograph/api.h>
9#include <neograph/mcp/harness_program_store.h>
10
11#include <chrono>
12#include <cstdint>
13#include <functional>
14#include <memory>
15#include <optional>
16#include <string>
17#include <vector>
18
19namespace neograph::mcp {
20
21enum class HarnessJournalPayloadMode {
22 REDACTED,
23 METADATA_ONLY,
24 FULL,
25};
26
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",
32 };
33};
34
42enum class SqliteHarnessProgramFaultPoint : std::uint8_t {
43 AfterBegin,
44 AfterRunWrite,
45 AfterJournalWrite,
46 AfterEventWrite,
47 AfterEffectWrite,
48 AfterContextWrite,
49 AfterHookWrite,
50 BeforeCommit,
51};
52
54class SqliteHarnessProgramTransitionStore;
55class NEOGRAPH_API SqliteHarnessRecordStore final : public HarnessRecordStore,
56 public HarnessJournal,
57 public HarnessRetentionStore,
58 public HarnessProgramAdapterStore,
59 public HarnessContractRunStore {
60public:
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;
70
71 SqliteHarnessRecordStore(const SqliteHarnessRecordStore&) = delete;
72 SqliteHarnessRecordStore& operator=(const SqliteHarnessRecordStore&) = delete;
73
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;
85
86 void save_contract_run(const HarnessProgramArtifactRecord& artifact,
87 const program::ProgramRunRecord& run_record,
88 const program::ContractRun& contract_run) override;
89 std::optional<program::ContractRun>
90 load_contract_run(const HarnessProgramArtifactRecord& artifact,
91 const program::ProgramRunRecord& run_record) const override;
92
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);
102#endif
103 std::optional<HarnessProgramRunRecord>
104 resolve_program_run(std::string_view owner_scope, std::string_view run_id) const override;
105
106private:
107 struct Impl;
108 friend class SqliteHarnessProgramTransitionStore;
109 std::shared_ptr<Impl> impl_;
110};
111
112} // namespace neograph::mcp
NEOGRAPH_API export/import macro for shared-library builds.
Durable-boundary state machine for one implementation attempt.
Definition contract.h:194
Deep-owned, content-addressed run snapshot used for reconnect and CAS publication.
Definition run_record.h:119
Compiler-backed subagent Harness service for the MCP server.
SqliteHarnessProgramFaultPoint
One-shot failure points for durable Program transition tests.