#![forbid(unsafe_code)]
pub mod additional;
pub mod agents;
pub mod anomaly;
pub mod archaeology;
pub mod army;
pub mod association;
pub mod autonomous;
pub mod bagua;
pub mod bayesian_tools;
pub mod bicameral;
pub mod boundary;
pub mod bounty_connector;
pub mod bounty_evidence;
pub mod bounty_ledger;
pub mod breaker_tools;
pub mod captains;
pub mod claims_tools;
pub mod code;
pub mod common;
pub mod conformal;
pub mod consciousness;
pub mod constellation;
pub mod coordination;
pub mod correlation;
pub mod dharma;
pub mod drive;
pub mod firewall;
pub mod galaxy;
pub mod geneseed;
pub mod glyph;
pub mod governance_tools;
pub mod graph;
pub mod homeostasis;
pub mod imagination;
pub mod karma;
pub mod knowledge_graph;
pub mod lkep;
pub mod memory_ops;
pub mod mesh_tools;
pub mod network;
pub mod nlu_tools;
pub mod oss_bounty;
pub mod patterns;
pub mod pipeline;
pub mod pray;
pub mod reasoning;
pub mod research;
pub mod resonance;
pub mod rsi;
pub mod sandbox;
pub mod sangha_tools;
pub mod security_breaker;
pub mod security_probe;
pub mod self_play;
pub mod selfmodel;
pub mod sensorimotor_tools;
pub mod session;
pub mod session_ops;
pub mod simulation_tools;
pub mod system;
pub mod tasks;
pub mod telemetry_tools;
pub mod tools_mgmt;
pub mod transaction;
pub mod v4;
pub mod violet;
pub mod web;
pub use additional::{
CittaCoherenceTool, DharmaProfilesTool, MemoryCountTool, MemoryNearbyTool, MemoryTagsTool,
SessionListTool,
};
pub use agents::{
AgentCapabilitiesTool, AgentDeregisterTool, AgentDescriptionsTool, AgentHeartbeatHistoryTool,
AgentHeartbeatTool, AgentListTool, AgentRegisterTool, AgentTrustTool,
};
pub use anomaly::{AnomalyDetectTool, StateRevertTool, StateSnapshotTool};
pub use archaeology::{ArchaeologySearchTool, LearningPatternTool, LearningSuggestTool};
pub use army::{ArmyDeployTool, GalacticColdRotateTool, GalacticTriageTool};
pub use association::{MemoryAssociateMineTool, MemoryCorroborateTool, MemoryRelateTool};
pub use autonomous::{
ConsolidationCompressTool, ConsolidationConnectTool, EmergenceScanTool, RetentionPruneTool,
SensorimotorScanTool, SpiralReportTool,
};
pub use bagua::BaguaDispatchTool;
pub use bayesian_tools::{McOptimizeTool, McSurrogateTool};
pub use bicameral::{BicameralReasonTool, BicameralStatusTool};
pub use boundary::{AntiLoopCheckTool, BoundaryEnforceTool};
pub use captains::{CaptainDeployTool, HologramQueryTool, HologramRebalanceTool};
pub use claims_tools::{ClaimsTool, register_claims};
pub use consciousness::{
ApotheosisCheckTool, CittaHistoryTool, CittaReflectTool, CittaStatusTool,
ConsciousnessDepthTool, DreamAnalyzeTool, DreamStatusTool, DreamTriggerTool, SmaranaStatusTool,
SmaranaTraceTool,
};
pub use constellation::{ConstellationDetectTool, ConstellationListTool};
pub use coordination::{
CodeCheckTool, CodeClaimTool, CodeListTool, CodeReleaseTool, Lease, LeaseLedger,
register_coordination,
};
pub use correlation::{CorrelationAnalyzeTool, GodNodesTool, KaizenCorrelateTool};
pub use dharma::{
DharmaAcsTool, DharmaAuditTool, DharmaEscalateTool, DharmaResolveReviewTool,
DharmaReviewQueueTool, DharmaRulesTool,
};
pub use drive::{DriveEventTool, DriveSnapshotTool};
pub use galaxy::{
GalaxyBackupTool, GalaxyDashboardTool, GalaxyExportTool, GalaxyHealthTool, GalaxyImportTool,
GalaxyMergeTool, GalaxyPurgeTool, GalaxyRestoreTool, GalaxySnapshotTool, GalaxyStatsTool,
GalaxyTaxonomyTool, GalaxyTransferTool,
};
pub use geneseed::{GeneseedMineTool, GeneseedStatsTool};
pub use governance_tools::{
CouncilDeliberateTool, HermitMediateTool, HermitResolveTool, HermitStatusTool,
HermitWithdrawTool, register_governance_tools,
};
pub use graph::{GraphCommunityTool, GraphPropagateTool, GraphWalkTool};
pub use homeostasis::{
HomeostasisAdjustTool, HomeostasisAlertsTool, HomeostasisCheckTool, HomeostasisHistoryTool,
};
pub use imagination::{
ImaginePredictTool, ImagineReflectTool, ImagineScenarioTool, register_imagination,
};
pub use karma::{KarmaAnchorTool, KarmaClearTool, KarmaHistoryTool, KarmaVerifyChainTool};
pub use knowledge_graph::{KgExtractTool, KgQueryTool, KgTopTool};
pub use memory_ops::{
MemoryAggregateTool, MemoryBatchReadTool, MemoryConsolidateTool, MemoryDecayTool,
MemoryDeduplicateTool, MemoryEpisodicSearchTool, MemoryExportTool, MemoryFilterTool,
MemoryHybridRecallTool, MemoryRecallFeedbackTool, MemoryReembedTool, MemoryRevisionsTool,
MemorySortTool, MemoryStatsTool, MemoryTagTool, MemoryUpdateTool,
};
pub use mesh_tools::{
MeshChatTool, MeshJoinTool, MeshQuarantineTool, MeshReadTool, MeshStatusTool,
register_sangha_mesh,
};
pub use network::{
AssociationMineTool, EmergenceReportTool, NetworkCentralityTool, NetworkClustersTool,
NetworkStatsTool, PatternDetectTool,
};
pub use nlu_tools::NluShadowReportTool;
pub use patterns::{PatternSearchTool, SalienceSpotlightTool, SerendipitySurfaceTool};
pub use pipeline::{
PipelineCreateTool, PipelineListTool, PipelineStatusTool, SkillInvokeTool, SkillListTool,
};
pub use pray::{HongmenRank, PrayMetaTool, WhiteLotusLodge};
pub use reasoning::{ExplainTool, ReasoningBicameralTool, ThinkTool};
pub use research::{
ResearchRabbitHoleTool, ResearchRepoTool, ResearchTopicTool, register_research,
};
pub use resonance::{BusEmitTool, BusRecentTool, BusStatsTool};
pub use rsi::{
ActiveProposalsTool, DispatchTelemetry, FrictionAutoLogTool, FrictionLogTool,
FrictionResolveTool, FrictionReviewTool, ImproveProposalsTool, RedteamCoverageReportTool,
RedteamFromFrictionTool, RedteamProposalsTool, friction_hash, friction_hash_exists,
};
pub use sangha_tools::{
SanghaChatTool, SanghaDiscoverTool, SanghaLocksTool, SanghaPeersTool, SanghaQuarantineTool,
SanghaSignalTool,
};
pub use self_play::{
SelfPlayExportTool, SelfPlayRunTool, SelfPlayStatusTool, SharedSelfPlayLoop,
build_self_play_loop, new_shared_loop, register_self_play,
};
pub use sensorimotor_tools::{
ActuatorCommandTool, ActuatorEStopTool, ActuatorListTool, ReflexAddTool, ReflexEvaluateTool,
ReflexListTool, SensorHistoryTool, SensorListTool, SensorPollTool, SensorReadTool,
};
pub use session::{
SessionCheckpointNodiscoveryTool, SessionCheckpointTool, SessionEndTool, SessionRecallTool,
SessionStartTool, SessionVerifyTool,
};
pub use session_ops::{
SessionContinuityTool, SessionDigestTool, SessionExportTool, SessionHandoffTool,
SessionImportTool, SessionRecordTool, SessionReplayTool, register_session_ops,
};
pub use simulation_tools::{SimCounterfactualTool, SimForecastTool, SimMcTool};
pub use system::{SystemConfigTool, SystemFlushTool, SystemHealthTool};
pub use tasks::{TaskDistributeTool, TaskStatusTool};
pub use tools_mgmt::{ToolsEffectivenessReportTool, ToolsRetireTool, ToolsUsageReportTool};
pub use transaction::{
TransactionBeginTool, TransactionCommitTool, TransactionRollbackTool, TransactionState,
};
pub use v4::{
ReflexDispatchTool, ReflexStatusTool, TimescaleHooksTool, TimescaleStatusTool,
WorkspaceEventsTool, WorkspacePublishTool, WorkspaceSpotlightTool, WorkspaceStatsTool,
};
pub use web::{WebDeepFetchTool, WebFetchTool, WebSearchAndReadTool, WebSearchTool, register_web};
use std::sync::Arc;
use wm_cognitive::GanYingBus;
use wm_governance::KarmaLedger;
use wm_memory::{AssociationStore, MemoryStore, RecallEngine, SearchEngine};
use wm_substrate::SubstrateMonitor;
use wm_substrate::anomaly::AnomalyDetector;
use wm_substrate::homeostatic::HomeostaticLoop;
use wm_substrate::sensorimotor::{ReflexLoop, SensorimotorBus};
fn pray_meta_tool(
store: &Arc<MemoryStore>,
search: Option<Arc<SearchEngine>>,
associations: Arc<AssociationStore>,
) -> Arc<PrayMetaTool> {
let mut tool = PrayMetaTool::new(store.clone()).with_associations(associations);
if let Some(search) = search {
tool = tool.with_search(search);
}
Arc::new(tool)
}
fn cold_rotate_tool(
store: &Arc<MemoryStore>,
search: Option<Arc<SearchEngine>>,
associations: Arc<AssociationStore>,
) -> Arc<GalacticColdRotateTool> {
let mut tool = GalacticColdRotateTool::new(store.clone()).with_associations(associations);
if let Some(search) = search {
tool = tool.with_search(search);
}
Arc::new(tool)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum RegistryPersistenceMode {
#[default]
Normal,
EvaluatorPreservation,
}
#[allow(clippy::too_many_arguments)]
pub fn register_expansion(
registry: &wm_dispatch::ToolRegistry,
store: &Arc<MemoryStore>,
search: Option<Arc<SearchEngine>>,
recall: Option<Arc<RecallEngine>>,
associations: Arc<AssociationStore>,
spiral_tracker: Arc<std::sync::Mutex<wm_cognitive::SpiralTracker>>,
karma: Option<Arc<KarmaLedger>>,
substrate: Option<Arc<SubstrateMonitor>>,
homeostatic_loop: Option<Arc<std::sync::Mutex<HomeostaticLoop>>>,
anomaly_detector: Option<Arc<std::sync::Mutex<AnomalyDetector>>>,
sensorimotor_bus: Option<Arc<std::sync::Mutex<SensorimotorBus>>>,
reflex_loop: Option<Arc<std::sync::Mutex<ReflexLoop>>>,
gan_ying_bus: Option<&Arc<std::sync::Mutex<GanYingBus>>>,
transaction_state: TransactionState,
resource_rules: Option<&Arc<wm_governance::ResourceRules>>,
escalation_queue: Option<&Arc<std::sync::Mutex<wm_governance::EscalationQueue>>>,
dharma_gate: Option<&Arc<wm_governance::DharmaGate>>,
firewall: Option<&Arc<crate::expansion::firewall::TxFirewall>>,
code_graph: Option<&Arc<std::sync::Mutex<crate::expansion::code::CodeGraph>>>,
registry_persistence: RegistryPersistenceMode,
) -> wm_dispatch::ToolRegistry {
let reg = registry
.register(Arc::new(MemoryConsolidateTool::new(
store.clone(),
search.clone(),
)))
.register(Arc::new(MemoryDecayTool::new(store.clone())))
.register(Arc::new(MemoryBatchReadTool::new(store.clone())))
.register(Arc::new(MemoryUpdateTool::new(store.clone(), search.clone())))
.register(Arc::new(MemoryRevisionsTool::new(store.clone())))
.register(Arc::new(MemoryTagTool::new(store.clone())))
.register(Arc::new(MemoryStatsTool::new(store.clone())))
.register(Arc::new(
MemoryHybridRecallTool::new(store.clone(), search.clone(), recall.clone())
.with_associations(Some(associations.clone())),
))
.register(Arc::new(MemoryRecallFeedbackTool::new(recall)))
.register(Arc::new(MemoryEpisodicSearchTool::new(store.clone())))
.register(Arc::new(MemoryAggregateTool::new(
search.clone(),
store.clone(),
))) .register(Arc::new(MemorySortTool::new(store.clone())))
.register(Arc::new(MemoryFilterTool::new(store.clone())))
.register(Arc::new(MemoryDeduplicateTool::new(store.clone(), search.clone())))
.register(Arc::new(MemoryExportTool::new(store.clone())))
.register(Arc::new(
SessionStartTool::new(store.clone()).with_search(search.clone()),
))
.register(Arc::new(
SessionCheckpointTool::new(store.clone()).with_search(search.clone()),
))
.register(Arc::new(
SessionCheckpointNodiscoveryTool::new(store.clone()).with_search(search.clone()),
))
.register(Arc::new(SessionVerifyTool::new(store.clone())))
.register(Arc::new(SessionRecallTool::new(store.clone())))
.register(Arc::new(SessionDigestTool::new(store.clone())))
.register(Arc::new(
SessionEndTool::new(store.clone()).with_search(search.clone()),
))
;
let reg = register_coordination(®, gan_ying_bus);
let mut reg = reg
.register(Arc::new(CittaStatusTool::new()))
.register(Arc::new(CittaReflectTool::new(store.clone())))
.register(Arc::new(DreamStatusTool::new(store.clone())))
.register(Arc::new(DreamTriggerTool::new(store.clone())))
.register(Arc::new(ToolsEffectivenessReportTool::new()))
.register(Arc::new(ToolsRetireTool::new()))
.register(Arc::new(PatternSearchTool::new(store.clone())))
.register(Arc::new(SalienceSpotlightTool::new(store.clone())))
.register(Arc::new(SerendipitySurfaceTool::new(store.clone())))
.register(Arc::new(ConstellationDetectTool::new(store.clone())))
.register(Arc::new(ConstellationListTool::new(store.clone())))
.register(Arc::new(GalaxyStatsTool::new(store.clone())))
.register(Arc::new(GalaxyExportTool::new(store.clone())))
.register(Arc::new(GalaxyImportTool::new(store.clone())))
.register(Arc::new(GalaxyTransferTool::new(
store.clone(),
search.clone(),
)))
.register(Arc::new(GalaxyMergeTool::new(store.clone())))
.register(Arc::new(GalaxySnapshotTool::new(store.clone())))
.register(Arc::new(GalaxyRestoreTool::new(
store.clone(),
search.clone(),
)))
.register(Arc::new(GalaxyDashboardTool::new(store.clone())))
.register(Arc::new(GalaxyBackupTool::new(store.clone())))
.register(Arc::new(GalaxyTaxonomyTool::new(store.clone())))
.register(Arc::new(GalaxyPurgeTool::new(store.clone(), search.clone())))
.register(Arc::new(GalaxyHealthTool::new(store.clone())))
.register(Arc::new(ArmyDeployTool::new(store.clone())))
.register(Arc::new(GalacticTriageTool::new(store.clone())))
.register(cold_rotate_tool(store, search.clone(), associations.clone()))
.register(pray_meta_tool(store, search.clone(), associations.clone()))
.register(Arc::new(CaptainDeployTool::new(store.clone())))
.register(Arc::new(HologramRebalanceTool::new(store.clone())))
.register(Arc::new(HologramQueryTool::new(store.clone())))
.register(Arc::new(BaguaDispatchTool::new(store.clone())))
.register(Arc::new(GeneseedMineTool::new(store.clone())))
.register(Arc::new(GeneseedStatsTool::new(store.clone())))
.register(Arc::new(KgExtractTool::new(store.clone())))
.register(Arc::new(KgQueryTool::new(store.clone())))
.register(Arc::new(KgTopTool::new(store.clone())))
.register(Arc::new(GraphWalkTool::new(store.clone())))
.register(Arc::new(GraphCommunityTool::new(store.clone())))
.register(Arc::new(GraphPropagateTool::new(store.clone())))
.register(Arc::new(ArchaeologySearchTool::new(store.clone())))
.register(Arc::new(LearningPatternTool::new(store.clone())))
.register(Arc::new(LearningSuggestTool::new(store.clone())))
.register(Arc::new(ReasoningBicameralTool::new(store.clone())))
.register(Arc::new(ThinkTool::new(store.clone())))
.register(Arc::new(ExplainTool::new(store.clone())))
.register(Arc::new(PipelineCreateTool::new(store.clone())))
.register(Arc::new(PipelineListTool::new(store.clone())))
.register(Arc::new(PipelineStatusTool::new(store.clone())))
.register(Arc::new(SkillInvokeTool::new(store.clone())))
.register(Arc::new(SkillListTool::new(store.clone())))
.register(Arc::new(AnomalyDetectTool::new(store.clone())))
.register(Arc::new(StateSnapshotTool::new(store.clone())))
.register(Arc::new(StateRevertTool::new(store.clone())))
.register(Arc::new(CorrelationAnalyzeTool::new(store.clone())))
.register(Arc::new(GodNodesTool::new(store.clone())))
.register(Arc::new(KaizenCorrelateTool::new(store.clone())))
.register(Arc::new(AntiLoopCheckTool::new(store.clone())))
.register(Arc::new(BoundaryEnforceTool::new(store.clone())))
;
if let Some(k) = karma {
reg = reg
.register(Arc::new(KarmaHistoryTool::new(k.clone())))
.register(Arc::new(KarmaVerifyChainTool::new(k.clone())))
.register(Arc::new(KarmaClearTool::new(k.clone())))
.register(Arc::new(KarmaAnchorTool::new(k)));
}
let mut reg = reg
.register(Arc::new(DharmaRulesTool::new()))
.register(Arc::new(DharmaAuditTool::new(store.clone())))
.register(Arc::new(DharmaAcsTool::new()))
.register(Arc::new(AgentRegisterTool::new(store.clone())))
.register(Arc::new(AgentListTool::new(store.clone())))
.register(Arc::new(AgentHeartbeatTool::new(store.clone())))
.register(Arc::new(AgentTrustTool::new(store.clone())))
.register(Arc::new(AgentDescriptionsTool::new(store.clone())))
.register(Arc::new(AgentCapabilitiesTool::new(store.clone())))
.register(Arc::new(AgentHeartbeatHistoryTool::new(store.clone())))
.register(Arc::new(AgentDeregisterTool::new(
store.clone(),
search.clone(),
)))
.register(Arc::new(TaskDistributeTool::new(store.clone())))
.register(Arc::new(TaskStatusTool::new(store.clone())))
.register(Arc::new(
if let Some(ref se) = search {
SystemHealthTool::with_search(store.clone(), se.clone())
} else {
SystemHealthTool::new(store.clone())
},
))
.register(Arc::new(SystemConfigTool::new()))
.register(Arc::new(SystemFlushTool::new(store.clone(), search.clone())))
.register(Arc::new(MemoryAssociateMineTool::new(store.clone())))
.register(Arc::new(MemoryRelateTool::new(store.clone())))
.register(Arc::new(MemoryCorroborateTool::new(store.clone())))
.register(Arc::new(MemoryCountTool::new(store.clone())))
.register(Arc::new(MemoryTagsTool::new(store.clone())))
.register(Arc::new(SessionListTool::new(store.clone())))
.register(Arc::new(CittaCoherenceTool::new()))
.register(Arc::new(DharmaProfilesTool::new()))
.register(Arc::new(MemoryNearbyTool::new(store.clone())))
.register(Arc::new(ConsolidationConnectTool::new(
store.clone(),
associations.clone(),
spiral_tracker.clone(),
)))
.register(Arc::new(ConsolidationCompressTool::new(
store.clone(),
associations.clone(),
spiral_tracker.clone(),
)))
.register(Arc::new(EmergenceScanTool::new(
store.clone(),
associations.clone(),
spiral_tracker.clone(),
)))
.register(Arc::new(RetentionPruneTool::new(
store.clone(),
associations.clone(),
spiral_tracker.clone(),
)))
.register(Arc::new(SpiralReportTool::new(spiral_tracker.clone())))
.register(Arc::new(AssociationMineTool::new(store.clone())))
.register(Arc::new(PatternDetectTool::new(store.clone())))
.register(Arc::new(EmergenceReportTool::new(store.clone())))
.register(Arc::new(NetworkStatsTool::new(store.clone())))
.register(Arc::new(NetworkCentralityTool::new(store.clone())))
.register(Arc::new(NetworkClustersTool::new(store.clone())))
.register(Arc::new(SmaranaStatusTool::new(store.clone())))
.register(Arc::new(SmaranaTraceTool::new(store.clone())))
.register(Arc::new(ApotheosisCheckTool::new(store.clone())))
.register(Arc::new(CittaHistoryTool::new(store.clone())))
.register(Arc::new(DreamAnalyzeTool::new(store.clone())))
.register(Arc::new(ConsciousnessDepthTool::new(store.clone())));
if let Some(sm) = substrate {
let loop_ = homeostatic_loop
.unwrap_or_else(|| Arc::new(std::sync::Mutex::new(HomeostaticLoop::default())));
let detector = anomaly_detector
.unwrap_or_else(|| Arc::new(std::sync::Mutex::new(AnomalyDetector::default())));
reg = reg
.register(Arc::new(HomeostasisCheckTool::new(
sm.clone(),
loop_,
detector.clone(),
)))
.register(Arc::new(HomeostasisAdjustTool::new(sm.clone())))
.register(Arc::new(HomeostasisHistoryTool::new(sm.clone())))
.register(Arc::new(HomeostasisAlertsTool::new(sm, detector)));
}
let _ = &mut reg;
reg = rsi::register_rsi(®, store, None, &associations, None, None);
let bus = sensorimotor_bus.unwrap_or_else(|| {
Arc::new(std::sync::Mutex::new(
wm_substrate::sensorimotor::linux_hardware_bus(),
))
});
let reflex = reflex_loop.unwrap_or_else(|| Arc::new(std::sync::Mutex::new(ReflexLoop::new())));
reg =
sensorimotor_tools::register_sensorimotor(®, bus.clone(), reflex.clone(), gan_ying_bus);
reg = reg.register(Arc::new(SensorimotorScanTool::new(
store.clone(),
associations,
spiral_tracker,
bus,
reflex,
)));
reg = reg
.register(Arc::new(TransactionBeginTool::new(
store.clone(),
transaction_state.clone(),
)))
.register(Arc::new(TransactionCommitTool::new(
store.clone(),
transaction_state.clone(),
search.clone(),
)))
.register(Arc::new(TransactionRollbackTool::new(
store.clone(),
transaction_state,
search.clone(),
)));
reg = register_imagination(®, store);
reg = register_self_play(®, store, new_shared_loop());
reg = register_web(®);
reg = register_research(®, store, gan_ying_bus);
let telemetry_search = search.clone();
reg = register_session_ops(®, store, search);
if let (Some(queue), Some(gate)) = (escalation_queue, dharma_gate) {
reg = reg
.register(Arc::new(DharmaEscalateTool::new(
gate.clone(),
queue.clone(),
)))
.register(Arc::new(DharmaReviewQueueTool::new(queue.clone())))
.register(Arc::new(DharmaResolveReviewTool::new(queue.clone())));
}
reg = crate::expansion::sandbox::register_sandbox(®, resource_rules);
if let Some(fw) = firewall {
reg = crate::expansion::firewall::register_firewall(®, fw.clone());
}
if let Some(cg) = code_graph {
reg = crate::expansion::code::register_code(®, cg.clone());
}
reg = match registry_persistence {
RegistryPersistenceMode::Normal => {
crate::expansion::violet::register_violet_persistent(®, &store.path().join("violet"))
}
RegistryPersistenceMode::EvaluatorPreservation => {
crate::expansion::violet::register_violet(®)
}
};
reg = crate::expansion::security_breaker::register_security_breaker(®);
reg = crate::expansion::security_probe::register_security_probe(®);
let board_path = store.path().join("bounty_board.json");
match crate::expansion::bounty_connector::BountyBoard::open(board_path) {
Ok(board) => {
let mut connector =
crate::expansion::bounty_connector::BountyConnector::new(Arc::new(board));
if let Ok(fixture) = std::env::var("WM_BOUNTY_STATIC_JSON") {
connector = connector.with_platform(Arc::new(
crate::expansion::bounty_connector::StaticJsonPlatform::new(
"static",
std::path::PathBuf::from(fixture),
),
));
}
reg = crate::expansion::bounty_connector::register_bounty(®, Arc::new(connector));
}
Err(e) => tracing::warn!("bounty board unavailable: {e}"),
}
reg = crate::expansion::bounty_ledger::register_bounty_ledger(
®,
store.path().join("bounty_ledger.jsonl"),
);
reg = crate::expansion::bounty_evidence::register_bounty_evidence(
®,
store.path().join("evidence"),
);
reg = crate::expansion::oss_bounty::register_oss_bounty(®);
reg = crate::expansion::telemetry_tools::register_telemetry(®, store, telemetry_search);
let hermit = Arc::new(std::sync::RwLock::new(
wm_governance::HermitProtection::new(),
));
reg = crate::expansion::governance_tools::register_governance_tools(®, hermit);
reg
}