pub struct CapabilityFeatures {Show 13 fields
pub keyword_search: bool,
pub semantic_search: bool,
pub hybrid_recall: bool,
pub query_expansion: bool,
pub auto_consolidation: bool,
pub auto_tagging: bool,
pub contradiction_analysis: bool,
pub cross_encoder_reranking: bool,
pub memory_reflection: PlannedFeature,
pub embedder_loaded: bool,
pub recall_mode_active: RecallMode,
pub reranker_active: RerankerMode,
pub reflection_boost: ReflectionBoostReport,
}Expand description
Boolean feature flags exposed in the capabilities report.
Fields§
§keyword_search: bool§semantic_search: bool§hybrid_recall: bool§query_expansion: bool§auto_consolidation: bool§auto_tagging: bool§contradiction_analysis: bool§cross_encoder_reranking: bool§memory_reflection: PlannedFeatureMemory-reflection (v0.7.0): planned-feature object. Was a
bool before the v0.6.3.1 P1 honesty patch; an object now so
operators can tell “feature exists but disabled” apart from
“feature not in this build”.
v0.7.0 recursive-learning ship (issue #655). The flag is
{ planned: false, version: "v0.7.0", enabled: true } because
the underlying primitive landed across Tasks 1-6 on
feat/v0.7.0-recursive-learning:
- Column (Task 1/8, commit
f5d8a9e) —memories.reflection_depth INTEGER NOT NULL DEFAULT 0, first added in the recursive-learning schema bump (column inventory lives indocs/MIGRATION_v0.7.md; the currentCURRENT_SCHEMA_VERSIONis 53 in lockstep on both sqlite and postgres ladders as of v0.7.0 — v48 addedfederation_push_dlq(#933), v49 added 14 nullablearchived_memoriescolumns (#1025), v50 extendedagent_quotasPK withnamespace(#1156), v51 addedfederation_nonce_cache(#1255 / PR #1296), v52 addedtranscript_line_dedup(#1389 L4 / RFC-0001), v53 scoped thememories_auFTS5 sync trigger to (title, content, tags) only (R5.F5.2 / #1418)).Memory::reflection_depth: i32with#[serde(default)]for wire-compat with pre-v0.7.0 federation peers. - Governance field (Task 2/8, commit
630a6db) —GovernancePolicy.max_reflection_depth: Option<u32>(per namespace, JSON metadata, no schema bump). Accessoreffective_max_reflection_depth() -> u32returns the compiled default3when unset;Some(0)is the documented kill-switch. - Relation (Task 3/8, commit
b51a3f3) —reflects_onjoins the canonicalVALID_RELATIONSset; directionality matchesderived_from(reflection issource_id, original istarget_id);db::find_pathswalks it without further work. - MCP tool (Task 4/8, commit
3dc76f3) —memory_reflect(Family::Power, tool count 51 → 52). Atomic insert of a reflection memory + Nreflects_onlink writes inside a singleBEGIN IMMEDIATE/COMMITtransaction. Postgres parity via inherentPostgresStore::reflect. - Error variant (Task 4/8) —
MemoryError::ReflectionDepthExceeded { attempted: u32, cap: u32, namespace: String }→ HTTP409 CONFLICT, codeREFLECTION_DEPTH_EXCEEDED. - Hook events (Task 6/8, commit
fbf093c) —HookEvent::PreReflect(decision-class,EventClass::Write, 5s deadline, fires before the depth-cap check,Denyvetoes viaReflectError::HookVeto) +HookEvent::PostReflect(notify-class,EventClass::Write, 5s deadline, fires afterCOMMIT). Pipeline event count 21 → 23. - Audit chain (Task 5/8, commit
c61a05b) — every depth-cap refusal appends areflection.depth_exceededrow to the append-onlysigned_eventsaudit table under a canonical-CBOR payload + SHA-256payload_hash+attest_level = "unsigned". Content body is deliberately omitted (PII guarantee); hook vetoes are NOT audited by this row (caller-policy refusals carry their own provenance).
The v1 wire-shape projection collapses this object back to a
single bool (via Capabilities::to_v1), so pre-v0.6.3.1
clients that pinned the v1 schema continue to see the same
boolean field at the same path (and now read true).
embedder_loaded: boolv0.6.2 (S18): runtime-observed embedder state. semantic_search
above reflects configured capability (derived from the tier’s
embedding_model setting). embedder_loaded reflects actual
state after Embedder::load() attempted to materialize the
HuggingFace model on startup. When an operator configures the
semantic tier but the model download or mmap fails (offline
runner, read-only fs, missing tokens), semantic_search=true
would mislead. This flag exposes the truth so setup scripts can
assert the daemon is actually ready for semantic recall before
dispatching scenarios. Default false; populated by
handle_capabilities when the HTTP/MCP wrapper hands in the
live embedder handle.
recall_mode_active: RecallModev0.6.3.1 (P1 honesty patch): runtime recall-mode tag. Reflects
the live embedder + LLM availability, not the configured tier.
See RecallMode.
reranker_active: RerankerModev0.6.3.1 (P1 honesty patch): runtime reranker-mode tag.
Reflects the live CrossEncoder variant. See RerankerMode.
reflection_boost: ReflectionBoostReportv0.7.0 L2-8 — reflection-aware reranker boost configuration.
boost = 1.0 means the boost is disabled and the reranker
reproduces its pre-L2-8 behavior. Default (1.2) is the value
the daemon ships with; operators can inspect this to verify
the live boost matches their configured policy. Skipped from
the wire when serialising a pre-L2-8 default so older
capabilities consumers round-trip cleanly.
Trait Implementations§
Source§impl Clone for CapabilityFeatures
impl Clone for CapabilityFeatures
Source§fn clone(&self) -> CapabilityFeatures
fn clone(&self) -> CapabilityFeatures
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 CapabilityFeatures
impl Debug for CapabilityFeatures
Source§impl<'de> Deserialize<'de> for CapabilityFeatures
impl<'de> Deserialize<'de> for CapabilityFeatures
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 CapabilityFeatures
impl RefUnwindSafe for CapabilityFeatures
impl Send for CapabilityFeatures
impl Sync for CapabilityFeatures
impl Unpin for CapabilityFeatures
impl UnsafeUnpin for CapabilityFeatures
impl UnwindSafe for CapabilityFeatures
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