pub struct MemoryCaptureTurnRequest {
pub host_session_id: String,
pub host_turn_index: i64,
pub role: String,
pub content: String,
pub host_kind: Option<String>,
pub host_version: Option<String>,
pub tool_calls: Vec<ToolCallSummary>,
pub timestamp_iso: Option<String>,
pub host_signature_b64: Option<String>,
pub host_pubkey_b64: Option<String>,
pub namespace: Option<String>,
pub metadata: Option<Value>,
}Expand description
memory_capture_turn request body per RFC-0001 §“Tool input schema”.
Field-by-field doc comments become the schemars-generated
description strings in the MCP inputSchema. The schema doubles
as the wire contract for every MCP-aware host that volunteers
turns.
Fields§
§host_session_id: StringOpaque identifier the host issues per conversation session.
Stable across turns within a session; distinct across
sessions. Used as one half of the dedup key
(host_session_id, host_turn_index).
host_turn_index: i64Monotonically increasing per-(host_session_id) turn counter.
Starts at 0 for the first turn. The substrate uses
(host_session_id, host_turn_index) as the canonical dedup
key so re-delivery of the same turn is idempotent.
role: StringSpeaker classification — user / assistant / tool_use /
tool_result / system / other. Drives downstream
memory_kind assignment in the v0.8 decision-detector
classifier.
content: StringVerbatim turn text. The substrate preserves this byte-for-byte; classifiers run separately downstream via the existing atomiser / curator surface.
host_kind: Option<String>Identifier for the host implementation (e.g. "claude-code",
"codex", "gemini", "cursor", "cline"). Surfaced in the
audit trail + the operator-facing per-host coverage report.
When omitted, defaults to "unknown".
host_version: Option<String>Version string for the host implementation. Surfaced in the audit trail so future format drift can be diagnosed by host version.
tool_calls: Vec<ToolCallSummary>Optional summary of tool invocations within this assistant
turn. Each entry is {tool: string, brief: string}. The
substrate preserves the list verbatim but does not (at v0.7.0)
classify or index per-tool-call. Reserved for v0.7.x atom-
per-tool indexing; the field is wire-stable today so hosts
can already populate it without breakage.
timestamp_iso: Option<String>RFC3339 instant the host emitted the turn. Used as the
recovered memory’s created_at so the timeline matches the
original conversation rather than the capture-call wall-clock.
When omitted, the substrate stamps with its current clock.
host_signature_b64: Option<String>Optional Ed25519 signature over the canonical-bytes encoding
host_session_id || 0x00 || host_turn_index || 0x00 || role || 0x00 || content. When present + verified, the substrate
writes attest_level = "signed_by_peer" on the resulting
memory. When absent, attest_level = "self_signed".
host_pubkey_b64: Option<String>Ed25519 pubkey the substrate should verify
host_signature_b64 against. The pubkey MUST be pre-enrolled
via the existing federation peer-allowlist mechanism.
Unenrolled pubkeys cause the call to fail with
HOST_PUBKEY_NOT_ENROLLED.
namespace: Option<String>Substrate namespace the turn lands in. Defaults to the agent’s resolved default namespace per the calling context.
metadata: Option<Value>Optional arbitrary metadata the host wants to preserve
alongside the turn. Reserved keys (agent_id, entity_id,
mentioned_entity_id) follow the existing
crate::validate::RequestValidator rules.
Trait Implementations§
Source§impl Clone for MemoryCaptureTurnRequest
impl Clone for MemoryCaptureTurnRequest
Source§fn clone(&self) -> MemoryCaptureTurnRequest
fn clone(&self) -> MemoryCaptureTurnRequest
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MemoryCaptureTurnRequest
impl Debug for MemoryCaptureTurnRequest
Source§impl<'de> Deserialize<'de> for MemoryCaptureTurnRequest
impl<'de> Deserialize<'de> for MemoryCaptureTurnRequest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for MemoryCaptureTurnRequest
impl JsonSchema for MemoryCaptureTurnRequest
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for MemoryCaptureTurnRequest
impl RefUnwindSafe for MemoryCaptureTurnRequest
impl Send for MemoryCaptureTurnRequest
impl Sync for MemoryCaptureTurnRequest
impl Unpin for MemoryCaptureTurnRequest
impl UnsafeUnpin for MemoryCaptureTurnRequest
impl UnwindSafe for MemoryCaptureTurnRequest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more