pub struct DaemonRequestFrame {Show 16 fields
pub ops: String,
pub plan: bool,
pub presentation: Option<String>,
pub presentation_per_op: Option<Vec<Option<String>>>,
pub namespace: String,
pub actor_id: Option<String>,
pub process_ref: Option<String>,
pub visible_namespaces: Vec<String>,
pub config_id: String,
pub protocol_version: u32,
pub probe_only: bool,
pub metrics_only: bool,
pub format: Option<String>,
pub format_per_op: Option<Vec<Option<String>>>,
pub from_wire: bool,
pub request_id: Option<u64>,
}Expand description
Request frame sent from a client to the daemon.
Fields§
§ops: String§plan: boolParse and inspect the catalog without dispatch, identity, or storage access.
presentation: Option<String>§presentation_per_op: Option<Vec<Option<String>>>§namespace: StringThe client’s resolved storage/gate default namespace for this request.
As of protocol version 3 (ADR-096) the daemon serves the request under this namespace instead of rejecting on mismatch: a per-request identity input, not a same-process-identity assertion.
actor_id: Option<String>The client’s resolved write-stamp / gate actor identity (ADR-057),
carried on the frame so the warm daemon stamps writes with the
caller’s actor instead of its own baked actor_id (ADR-096). None
mints ActorRef::anonymous(), matching an unconfigured actor.
process_ref: Option<String>Opaque process provenance resolved in the originating client process. It is carried per request because a shared warm daemon’s environment does not identify the worker that submitted the operation. Protocol v4 makes this field part of dispatch semantics: a v3 daemon must reject the request rather than execute it while silently discarding provenance.
visible_namespaces: Vec<String>The client’s resolved extra read-visibility namespaces (ADR-007 Rule
3b), carried on the frame so the warm daemon widens read scope to
match the caller’s own configuration rather than its own baked
visible_namespaces (ADR-096). A non-local actor_id joins default
reads where the registry mints the token (ADR-007 Rev 4 Rule 3b), so
an empty list still includes that actor in default reads. Explicit
namespace= operations remain scoped to exactly that namespace.
config_id: StringFingerprint of the client’s engine-coherence config: packs, db target, embedders, backend routing, and construction-baked outbound policy. Identity fields are carried separately in this frame. The daemon rejects requests whose configuration differs, except when its extra-embedder set is a superset of the client’s and every other field matches. See ADR-027 / ADR-049 / ADR-096.
protocol_version: u32IPC protocol version sent by the client. Pre-versioning clients omit
this field (deserializes to 0). The daemon compares against
PROTOCOL_VERSION and rejects mismatches with an explicit error.
probe_only: boolWhen true, the daemon returns an identity frame (ok=true, result=None)
immediately after identity validation — without calling the dispatcher.
Used by the client’s under-lock recovery probe to confirm a daemon is
alive and identity-matching without dispatching any mutating verb.
Pre-probe clients omit this field (deserializes to false → normal dispatch).
metrics_only: boolWhen true, the daemon returns a point-in-time MetricsSnapshot of
its server-side gauges (a read-only measurement surface for the
load/perf harness) instead of dispatching any op. Handled before the
config_id equality reject: a gauge read is process-global and
namespace/config-agnostic, not a namespaced record operation.
READ-ONLY — this field is the only input the frame accepts for a
metrics request; there is no reset or mutation reachable over the
wire. Pre-metrics clients omit this field (deserializes to false →
normal dispatch, unaffected).
format: Option<String>Output format for this request (ADR-078). Forwarded to the daemon’s
serialization seam. None means use the daemon’s resolved default.
format_per_op: Option<Vec<Option<String>>>Per-operation output format overrides (ADR-078).
from_wire: boolWhether this request originated from the agent-facing MCP request
tool (the wire surface). When true, the daemon rejects
Visibility::Subhandler verbs: agents must not invoke internal
subhandlers. When false (the default, and the only value any
operator path sends), subhandlers are allowed: kkernel exec and
other in-process callers are trusted operator surfaces.
This is the origin discriminator, not a daemon-vs-local one: operator requests flow through the daemon by default too, so the gate cannot key on transport.
request_id: Option<u64>Request-group correlation id (khive#948), echoed back unchanged on
DaemonResponseFrame::request_id and stamped into the dispatch’s
audit event (resource.request_id) so a benchmark harness can join
its own pre-send sample to the server-side audit row for the same
request. Agent-facing MCP requests always carry one: the bridge keeps a
caller-supplied value or mints an opaque nonzero value when absent.
Operator-built/probe frames may still use None. Purely additive —
#[serde(default)] matches metrics_only/format/format_per_op
precedent, with no PROTOCOL_VERSION bump.
Trait Implementations§
Source§impl Default for DaemonRequestFrame
impl Default for DaemonRequestFrame
Source§impl<'de> Deserialize<'de> for DaemonRequestFrame
impl<'de> Deserialize<'de> for DaemonRequestFrame
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>,
Auto Trait Implementations§
impl Freeze for DaemonRequestFrame
impl RefUnwindSafe for DaemonRequestFrame
impl Send for DaemonRequestFrame
impl Sync for DaemonRequestFrame
impl Unpin for DaemonRequestFrame
impl UnsafeUnpin for DaemonRequestFrame
impl UnwindSafe for DaemonRequestFrame
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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