use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, JsonSchema)]
pub enum EdgeType {
Semantic,
Temporal,
Causal,
Entity,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub namespaces: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchWitnessedParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub namespaces: Option<Vec<String>>,
#[serde(default)]
pub request_id: Option<String>,
#[serde(default)]
pub retrieval_mode: Option<RetrievalModeParam>,
#[serde(default)]
pub replay_mode: Option<ReplayModeParam>,
}
#[derive(Debug, Clone, Copy, Deserialize, Serialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RetrievalModeParam {
Hybrid,
FtsOnly,
VectorOnly,
}
#[derive(Debug, Clone, Copy, Deserialize, Serialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ReplayModeParam {
NoReplay,
StoreInputs,
}
#[derive(Debug, Clone, Deserialize, JsonSchema)]
pub struct GovernedNamespaceScopeParams {
pub namespace: String,
#[serde(default)]
pub domain: Option<String>,
#[serde(default)]
pub workspace_id: Option<String>,
#[serde(default)]
pub repo_id: Option<String>,
}
#[derive(Debug, Clone, Copy, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum GovernedAccessPurposeParam {
Recall,
Assertion,
Action,
Export,
Replay,
Admin,
}
#[derive(Debug, Clone, Deserialize, JsonSchema)]
pub struct GovernedLeaseParams {
pub lease_id: String,
pub delegator: String,
pub delegatee: String,
pub purposes: Vec<GovernedAccessPurposeParam>,
pub scope: GovernedNamespaceScopeParams,
#[serde(default)]
pub audiences: Vec<String>,
pub expires_at: String,
#[serde(default)]
pub revoked: bool,
#[serde(default)]
pub elevation: bool,
}
#[derive(Debug, Clone, Deserialize, JsonSchema)]
pub struct GovernedDecisionParams {
pub fact_id: String,
pub caller: String,
pub subject: String,
pub audiences: Vec<String>,
pub scope: GovernedNamespaceScopeParams,
#[serde(default)]
pub delegation_or_elevation: Option<GovernedLeaseParams>,
}
#[allow(dead_code)]
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchExplainedParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct AddFactParams {
pub content: String,
pub namespace: String,
#[serde(default)]
pub source: Option<String>,
#[serde(default)]
pub extract_entities: Option<bool>,
#[serde(default)]
pub memory_kind: Option<String>,
#[serde(default)]
pub sensitivity: Option<String>,
#[serde(default)]
pub evidence_refs: Option<Vec<String>>,
#[serde(default)]
pub idempotency_key: Option<String>,
}
#[cfg(test)]
mod add_fact_param_tests {
use super::AddFactParams;
#[test]
fn add_fact_idempotency_key_is_optional_and_backward_compatible() {
let legacy: AddFactParams =
serde_json::from_str(r#"{"content":"same fact","namespace":"general"}"#).unwrap();
assert_eq!(legacy.idempotency_key, None);
let keyed: AddFactParams = serde_json::from_str(
r#"{"content":"same fact","namespace":"general","idempotency_key":"request-42"}"#,
)
.unwrap();
assert_eq!(keyed.idempotency_key.as_deref(), Some("request-42"));
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct IngestDocumentParams {
pub content: String,
pub title: String,
pub namespace: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GraphPathParams {
pub from_id: String,
pub to_id: String,
#[serde(default)]
pub max_depth: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RouteQueryParams {
pub query: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DetectContradictionsParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub record_to_ledger: Option<bool>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchWithRoutingParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub contradictions: Option<Vec<(String, String)>>,
#[serde(default)]
pub group_by_community: Option<bool>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SetProvenanceParams {
pub item_id: String,
pub confidence: f64,
pub support_count: u32,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DecoderAnalyzeParams {
pub results: Vec<(String, f64)>,
#[serde(default)]
pub contradictions: Option<Vec<(String, String)>>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DiscordSearchParams {
pub direct_result_ids: Vec<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RunLifecycleParams {
pub item_ids: Vec<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct AddGraphEdgeParams {
pub source: String,
pub target: String,
pub edge_type: EdgeType,
#[serde(default = "default_weight")]
pub weight: f64,
#[serde(default)]
pub cosine_similarity: Option<f32>,
#[serde(default)]
pub delta_secs: Option<u64>,
#[serde(default)]
pub confidence: Option<f32>,
#[serde(default)]
pub evidence_ids: Option<Vec<String>>,
#[serde(default)]
pub relation: Option<String>,
#[serde(default)]
pub metadata: Option<String>,
}
fn default_weight() -> f64 {
1.0
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ListGraphEdgesParams {
#[serde(default)]
pub node_id: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct InvalidateGraphEdgeParams {
pub edge_id: String,
pub reason: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FactorGraphNodeInput {
pub item_id: String,
pub initial_belief: f64,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FactorGraphParams {
pub nodes: Vec<FactorGraphNodeInput>,
#[serde(default)]
pub semantic_weight: Option<f64>,
#[serde(default)]
pub temporal_weight: Option<f64>,
#[serde(default)]
pub causal_weight: Option<f64>,
#[serde(default)]
pub entity_weight: Option<f64>,
#[serde(default)]
pub self_influence: Option<f64>,
#[serde(default)]
pub max_iterations: Option<u32>,
#[serde(default)]
pub convergence_threshold: Option<f64>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct TopologyParams {
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct CommunityParams {
#[serde(default)]
pub resolution: Option<f64>,
#[serde(default)]
pub seed: Option<u64>,
#[serde(default)]
pub contradictions: Option<Vec<(String, String)>>,
#[serde(default)]
pub importance_scores: Option<Vec<(String, f64)>>,
#[serde(default)]
pub summarize: Option<bool>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetFactParams {
pub fact_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ListFactsParams {
pub namespace: String,
#[serde(default)]
pub limit: Option<u32>,
#[serde(default)]
pub offset: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetFactNeighborsParams {
pub item_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SupersedeFactParams {
pub old_fact_id: String,
pub content: String,
#[serde(default)]
pub namespace: Option<String>,
#[serde(default)]
pub source: Option<String>,
#[serde(default)]
pub reason: Option<String>,
}
#[allow(dead_code)]
#[derive(Debug, Deserialize, JsonSchema)]
pub struct CreateSessionParams {
pub channel: String,
#[serde(default)]
pub metadata: Option<String>,
}
#[allow(dead_code)]
#[derive(Debug, Deserialize, JsonSchema)]
pub struct AddMessageParams {
pub session_id: String,
pub role: String,
pub content: String,
}
#[allow(dead_code)]
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ListSessionsParams {
#[serde(default)]
pub limit: Option<u32>,
#[serde(default)]
pub offset: Option<u32>,
}
#[allow(dead_code)]
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetMessagesParams {
pub session_id: String,
#[serde(default)]
pub max_tokens: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchConversationsParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DeleteFactParams {
pub fact_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DeleteNamespaceParams {
pub namespace: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct UpdateFactParams {
pub fact_id: String,
pub content: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ConsolidateFactsParams {
pub keep_id: String,
pub supersede_id: String,
pub merged_content: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RecordOutcomeParams {
pub query: String,
pub outcome: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct CreateClaimParams {
pub fact_id: String,
pub source_span: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct AddEvidenceParams {
pub claim_id: String,
pub evidence_text: String,
pub source_type: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct JudgeSupportParams {
pub claim_id: String,
pub judgment: String,
pub rationale: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct CompactClaimLedgerParams {
#[serde(default)]
pub dry_run: Option<bool>,
#[serde(default)]
pub max_entries: Option<usize>,
#[serde(default)]
pub max_bytes: Option<u64>,
#[serde(default)]
pub retain_tail_entries: Option<usize>,
#[serde(default)]
pub max_backups: Option<usize>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchProofDebtParams {
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub namespaces: Option<Vec<String>>,
#[serde(default)]
pub budget_micros: Option<u64>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct BenchmarkTrustParams {
#[serde(default)]
pub query_count: Option<u32>,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub namespaces: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SubgraphPruneParams {
#[serde(default)]
pub dry_run: Option<bool>,
#[serde(default)]
pub max_prune: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SearchAsOfParams {
pub query: String,
pub as_of_date: String,
#[serde(default)]
pub top_k: Option<usize>,
pub namespace: Option<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct VerifyClaimParams {
pub claim: String,
pub risk_class: String,
#[serde(default)]
pub evidence_refs: Option<Vec<String>>,
#[serde(default)]
pub refutation_attempted: Option<bool>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetSearchReceiptParams {
pub receipt_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ReplaySearchReceiptParams {
pub receipt_id: String,
pub query: String,
#[serde(default)]
pub top_k: Option<u32>,
#[serde(default)]
pub namespaces: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ReplayStoredSearchParams {
pub receipt_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ReconcileParams {
pub action: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct EmbeddingsAreDirtyParams {}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ListImportsParams {
#[serde(default)]
pub namespace: Option<String>,
#[serde(default)]
pub limit: Option<u32>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ImportStatusParams {
pub envelope_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ImportEnvelopeParams {
pub envelope_json: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ParseJsonParams {
pub raw_output: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ParseJsonValueParams {
pub raw_output: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct StripThinkTagsParams {
pub text: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RepairJsonParams {
pub json_string: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ParseStringListParams {
pub raw_output: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ParseChoiceParams {
pub raw_output: String,
pub options: Vec<String>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ParseNumberParams {
pub raw_output: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ProjectionQueryParams {
pub namespace: String,
#[serde(default)]
pub domain: Option<String>,
#[serde(default)]
pub workspace_id: Option<String>,
#[serde(default)]
pub repo_id: Option<String>,
#[serde(default)]
pub text_query: Option<String>,
#[serde(default)]
pub valid_at: Option<String>,
#[serde(default)]
pub recorded_at_or_before: Option<String>,
#[serde(default)]
pub subject_entity_id: Option<String>,
#[serde(default)]
pub canonical_entity_id: Option<String>,
#[serde(default)]
pub claim_state: Option<String>,
#[serde(default)]
pub claim_id: Option<String>,
#[serde(default)]
pub claim_version_id: Option<String>,
#[serde(default)]
pub limit: Option<u32>,
}