1#![forbid(unsafe_code)]
33
34pub mod additional;
35pub mod agents;
36pub mod anomaly;
37pub mod archaeology;
38pub mod army;
39pub mod association;
40pub mod autonomous;
41pub mod bagua;
42pub mod bayesian_tools;
43pub mod bicameral;
44pub mod boundary;
45pub mod bounty_connector;
46pub mod bounty_evidence;
47pub mod bounty_ledger;
48pub mod breaker_tools;
49pub mod captains;
50pub mod claims_tools;
51pub mod code;
52pub mod common;
53pub mod conformal;
54pub mod consciousness;
55pub mod constellation;
56pub mod coordination;
57pub mod correlation;
58pub mod dharma;
59pub mod drive;
60pub mod firewall;
61pub mod funnel;
62pub mod funnel_share;
63pub mod galaxy;
64pub mod geneseed;
65pub mod glyph;
66pub mod governance_tools;
67pub mod graph;
68pub mod homeostasis;
69pub mod imagination;
70pub mod karma;
71pub mod knowledge_graph;
72pub mod lkep;
73pub mod memory_ops;
74pub mod mesh_tools;
75pub mod network;
76pub mod nlu_tools;
77pub mod oss_bounty;
78pub mod patterns;
79pub mod pipeline;
80pub mod pray;
81pub mod reasoning;
82pub mod research;
83pub mod resonance;
84pub mod rsi;
85pub mod sandbox;
86pub mod sangha_tools;
87pub mod security_breaker;
88pub mod security_probe;
89pub mod self_play;
90pub mod selfmodel;
91pub mod sensorimotor_tools;
92pub mod session;
93pub mod session_ops;
94pub mod simulation_tools;
95pub mod system;
96pub mod tasks;
97pub mod telemetry_tools;
98pub mod tools_mgmt;
99pub mod transaction;
100pub mod v4;
101pub mod violet;
102pub mod web;
103
104pub use additional::{
106 CittaCoherenceTool, DharmaProfilesTool, MemoryCountTool, MemoryNearbyTool, MemoryTagsTool,
107 SessionListTool,
108};
109pub use agents::{
110 AgentCapabilitiesTool, AgentDeregisterTool, AgentDescriptionsTool, AgentHeartbeatHistoryTool,
111 AgentHeartbeatTool, AgentListTool, AgentRegisterTool, AgentTrustTool,
112};
113pub use anomaly::{AnomalyDetectTool, StateRevertTool, StateSnapshotTool};
114pub use archaeology::{ArchaeologySearchTool, LearningPatternTool, LearningSuggestTool};
115pub use army::{ArmyDeployTool, GalacticColdRotateTool, GalacticTriageTool};
116pub use association::{MemoryAssociateMineTool, MemoryCorroborateTool, MemoryRelateTool};
117pub use autonomous::{
118 ConsolidationCompressTool, ConsolidationConnectTool, EmergenceScanTool, RetentionPruneTool,
119 SensorimotorScanTool, SpiralReportTool,
120};
121pub use bagua::BaguaDispatchTool;
122pub use bayesian_tools::{McOptimizeTool, McSurrogateTool};
123pub use bicameral::{BicameralReasonTool, BicameralStatusTool};
124pub use boundary::{AntiLoopCheckTool, BoundaryEnforceTool};
125pub use captains::{CaptainDeployTool, HologramQueryTool, HologramRebalanceTool};
126pub use claims_tools::{ClaimsTool, register_claims};
127pub use consciousness::{
128 ApotheosisCheckTool, CittaHistoryTool, CittaReflectTool, CittaStatusTool,
129 ConsciousnessDepthTool, DreamAnalyzeTool, DreamStatusTool, DreamTriggerTool, SmaranaStatusTool,
130 SmaranaTraceTool,
131};
132pub use constellation::{ConstellationDetectTool, ConstellationListTool};
133pub use coordination::{
134 CodeCheckTool, CodeClaimTool, CodeListTool, CodeReleaseTool, Lease, LeaseLedger,
135 register_coordination,
136};
137pub use correlation::{CorrelationAnalyzeTool, GodNodesTool, KaizenCorrelateTool};
138pub use dharma::{
139 DharmaAcsTool, DharmaAuditTool, DharmaEscalateTool, DharmaResolveReviewTool,
140 DharmaReviewQueueTool, DharmaRulesTool,
141};
142pub use drive::{DriveEventTool, DriveSnapshotTool};
143pub use galaxy::{
144 GalaxyBackupTool, GalaxyDashboardTool, GalaxyExportTool, GalaxyHealthTool, GalaxyImportTool,
145 GalaxyMergeTool, GalaxyPurgeTool, GalaxyRestoreTool, GalaxySnapshotTool, GalaxyStatsTool,
146 GalaxyTaxonomyTool, GalaxyTransferTool,
147};
148pub use geneseed::{GeneseedMineTool, GeneseedStatsTool};
149pub use governance_tools::{
150 CouncilDeliberateTool, HermitMediateTool, HermitResolveTool, HermitStatusTool,
151 HermitWithdrawTool, register_governance_tools,
152};
153pub use graph::{GraphCommunityTool, GraphPropagateTool, GraphWalkTool};
154pub use homeostasis::{
155 HomeostasisAdjustTool, HomeostasisAlertsTool, HomeostasisCheckTool, HomeostasisHistoryTool,
156};
157pub use imagination::{
158 ImaginePredictTool, ImagineReflectTool, ImagineScenarioTool, register_imagination,
159};
160pub use karma::{KarmaAnchorTool, KarmaClearTool, KarmaHistoryTool, KarmaVerifyChainTool};
161pub use knowledge_graph::{KgExtractTool, KgQueryTool, KgTopTool};
162pub use memory_ops::{
163 MemoryAggregateTool, MemoryBatchReadTool, MemoryConsolidateTool, MemoryDecayTool,
164 MemoryDeduplicateTool, MemoryEpisodicSearchTool, MemoryExportTool, MemoryFilterTool,
165 MemoryHybridRecallTool, MemoryRecallFeedbackTool, MemoryReembedTool, MemoryRevisionsTool,
166 MemorySortTool, MemoryStatsTool, MemoryTagTool, MemoryUpdateTool,
167};
168pub use mesh_tools::{
169 MeshChatTool, MeshJoinTool, MeshQuarantineTool, MeshReadTool, MeshStatusTool,
170 register_sangha_mesh,
171};
172pub use network::{
173 AssociationMineTool, EmergenceReportTool, NetworkCentralityTool, NetworkClustersTool,
174 NetworkStatsTool, PatternDetectTool,
175};
176pub use nlu_tools::NluShadowReportTool;
177pub use patterns::{PatternSearchTool, SalienceSpotlightTool, SerendipitySurfaceTool};
178pub use pipeline::{
179 PipelineCreateTool, PipelineListTool, PipelineStatusTool, SkillInvokeTool, SkillListTool,
180};
181pub use pray::{HongmenRank, PrayMetaTool, WhiteLotusLodge};
182pub use reasoning::{ExplainTool, ReasoningBicameralTool, ThinkTool};
183pub use research::{
184 ResearchRabbitHoleTool, ResearchRepoTool, ResearchTopicTool, register_research,
185};
186pub use resonance::{BusEmitTool, BusRecentTool, BusStatsTool};
187pub use rsi::{
188 ActiveProposalsTool, DispatchTelemetry, FrictionAutoLogTool, FrictionLogTool,
189 FrictionResolveTool, FrictionReviewTool, ImproveProposalsTool, RedteamCoverageReportTool,
190 RedteamFromFrictionTool, RedteamProposalsTool, friction_hash, friction_hash_exists,
191};
192pub use sangha_tools::{
193 SanghaChatTool, SanghaDiscoverTool, SanghaLocksTool, SanghaPeersTool, SanghaQuarantineTool,
194 SanghaSignalTool,
195};
196pub use self_play::{
197 SelfPlayExportTool, SelfPlayRunTool, SelfPlayStatusTool, SharedSelfPlayLoop,
198 build_self_play_loop, new_shared_loop, register_self_play,
199};
200pub use sensorimotor_tools::{
201 ActuatorCommandTool, ActuatorEStopTool, ActuatorListTool, ReflexAddTool, ReflexEvaluateTool,
202 ReflexListTool, SensorHistoryTool, SensorListTool, SensorPollTool, SensorReadTool,
203};
204pub use session::{
205 SessionCheckpointNodiscoveryTool, SessionCheckpointTool, SessionEndTool, SessionRecallTool,
206 SessionStartTool, SessionVerifyTool,
207};
208pub use session_ops::{
209 SessionContinuityTool, SessionDigestTool, SessionExportTool, SessionHandoffTool,
210 SessionImportTool, SessionRecordTool, SessionReplayTool, register_session_ops,
211};
212pub use simulation_tools::{SimCounterfactualTool, SimForecastTool, SimMcTool};
213pub use system::{SystemConfigTool, SystemFlushTool, SystemHealthTool};
214pub use tasks::{TaskDistributeTool, TaskStatusTool};
215pub use tools_mgmt::{ToolsEffectivenessReportTool, ToolsRetireTool, ToolsUsageReportTool};
216pub use transaction::{
217 TransactionBeginTool, TransactionCommitTool, TransactionRollbackTool, TransactionState,
218};
219pub use v4::{
220 ReflexDispatchTool, ReflexStatusTool, TimescaleHooksTool, TimescaleStatusTool,
221 WorkspaceEventsTool, WorkspacePublishTool, WorkspaceSpotlightTool, WorkspaceStatsTool,
222};
223pub use web::{WebDeepFetchTool, WebFetchTool, WebSearchAndReadTool, WebSearchTool, register_web};
224
225use std::sync::Arc;
226use wm_cognitive::GanYingBus;
227use wm_governance::KarmaLedger;
228use wm_memory::{AssociationStore, MemoryStore, RecallEngine, SearchEngine};
229use wm_substrate::SubstrateMonitor;
230use wm_substrate::anomaly::AnomalyDetector;
231use wm_substrate::homeostatic::HomeostaticLoop;
232use wm_substrate::sensorimotor::{ReflexLoop, SensorimotorBus};
233
234fn pray_meta_tool(
237 store: &Arc<MemoryStore>,
238 search: Option<Arc<SearchEngine>>,
239 associations: Arc<AssociationStore>,
240) -> Arc<PrayMetaTool> {
241 let mut tool = PrayMetaTool::new(store.clone()).with_associations(associations);
242 if let Some(search) = search {
243 tool = tool.with_search(search);
244 }
245 Arc::new(tool)
246}
247
248fn cold_rotate_tool(
251 store: &Arc<MemoryStore>,
252 search: Option<Arc<SearchEngine>>,
253 associations: Arc<AssociationStore>,
254) -> Arc<GalacticColdRotateTool> {
255 let mut tool = GalacticColdRotateTool::new(store.clone()).with_associations(associations);
256 if let Some(search) = search {
257 tool = tool.with_search(search);
258 }
259 Arc::new(tool)
260}
261
262#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
267pub enum RegistryPersistenceMode {
268 #[default]
270 Normal,
271 EvaluatorPreservation,
273}
274
275#[allow(clippy::too_many_arguments)]
276pub fn register_expansion(
277 registry: &wm_dispatch::ToolRegistry,
278 store: &Arc<MemoryStore>,
279 search: Option<Arc<SearchEngine>>,
280 recall: Option<Arc<RecallEngine>>,
281 associations: Arc<AssociationStore>,
282 spiral_tracker: Arc<std::sync::Mutex<wm_cognitive::SpiralTracker>>,
283 karma: Option<Arc<KarmaLedger>>,
284 substrate: Option<Arc<SubstrateMonitor>>,
285 homeostatic_loop: Option<Arc<std::sync::Mutex<HomeostaticLoop>>>,
286 anomaly_detector: Option<Arc<std::sync::Mutex<AnomalyDetector>>>,
287 sensorimotor_bus: Option<Arc<std::sync::Mutex<SensorimotorBus>>>,
288 reflex_loop: Option<Arc<std::sync::Mutex<ReflexLoop>>>,
289 gan_ying_bus: Option<&Arc<std::sync::Mutex<GanYingBus>>>,
290 transaction_state: TransactionState,
291 resource_rules: Option<&Arc<wm_governance::ResourceRules>>,
292 escalation_queue: Option<&Arc<std::sync::Mutex<wm_governance::EscalationQueue>>>,
293 dharma_gate: Option<&Arc<wm_governance::DharmaGate>>,
294 firewall: Option<&Arc<crate::expansion::firewall::TxFirewall>>,
295 code_graph: Option<&Arc<std::sync::Mutex<crate::expansion::code::CodeGraph>>>,
296 registry_persistence: RegistryPersistenceMode,
297) -> wm_dispatch::ToolRegistry {
298 let reg = registry
299 .register(Arc::new(MemoryConsolidateTool::new(
301 store.clone(),
302 search.clone(),
303 )))
304 .register(Arc::new(MemoryDecayTool::new(store.clone())))
305 .register(Arc::new(MemoryBatchReadTool::new(store.clone())))
306 .register(Arc::new(MemoryUpdateTool::new(store.clone(), search.clone())))
307 .register(Arc::new(MemoryRevisionsTool::new(store.clone())))
308 .register(Arc::new(MemoryTagTool::new(store.clone())))
309 .register(Arc::new(MemoryStatsTool::new(store.clone())))
310 .register(Arc::new(
311 MemoryHybridRecallTool::new(store.clone(), search.clone(), recall.clone())
312 .with_associations(Some(associations.clone())),
313 ))
314 .register(Arc::new(MemoryRecallFeedbackTool::new(recall)))
315 .register(Arc::new(MemoryEpisodicSearchTool::new(store.clone())))
316 .register(Arc::new(MemoryAggregateTool::new(
317 search.clone(),
318 store.clone(),
319 ))) .register(Arc::new(MemorySortTool::new(store.clone())))
321 .register(Arc::new(MemoryFilterTool::new(store.clone())))
322 .register(Arc::new(MemoryDeduplicateTool::new(store.clone(), search.clone())))
323 .register(Arc::new(MemoryExportTool::new(store.clone())))
324 .register(Arc::new(
326 SessionStartTool::new(store.clone()).with_search(search.clone()),
327 ))
328 .register(Arc::new(
329 SessionCheckpointTool::new(store.clone()).with_search(search.clone()),
330 ))
331 .register(Arc::new(
332 SessionCheckpointNodiscoveryTool::new(store.clone()).with_search(search.clone()),
333 ))
334 .register(Arc::new(SessionVerifyTool::new(store.clone())))
335 .register(Arc::new(SessionRecallTool::new(store.clone())))
336 .register(Arc::new(SessionDigestTool::new(store.clone())))
337 .register(Arc::new(
338 SessionEndTool::new(store.clone()).with_search(search.clone()),
339 ))
340 ;
342 let reg = register_coordination(®, gan_ying_bus);
343 let mut reg = reg
344 .register(Arc::new(CittaStatusTool::new()))
346 .register(Arc::new(CittaReflectTool::new(store.clone())))
347 .register(Arc::new(DreamStatusTool::new(store.clone())))
348 .register(Arc::new(DreamTriggerTool::new(store.clone())))
349 .register(Arc::new(ToolsEffectivenessReportTool::new()))
351 .register(Arc::new(ToolsRetireTool::new()))
352 .register(Arc::new(PatternSearchTool::new(store.clone())))
354 .register(Arc::new(SalienceSpotlightTool::new(store.clone())))
355 .register(Arc::new(SerendipitySurfaceTool::new(store.clone())))
356 .register(Arc::new(ConstellationDetectTool::new(store.clone())))
358 .register(Arc::new(ConstellationListTool::new(store.clone())))
359 .register(Arc::new(GalaxyStatsTool::new(store.clone())))
361 .register(Arc::new(GalaxyExportTool::new(store.clone())))
362 .register(Arc::new(GalaxyImportTool::new(store.clone())))
363 .register(Arc::new(GalaxyTransferTool::new(
364 store.clone(),
365 search.clone(),
366 )))
367 .register(Arc::new(GalaxyMergeTool::new(store.clone())))
368 .register(Arc::new(GalaxySnapshotTool::new(store.clone())))
369 .register(Arc::new(GalaxyRestoreTool::new(
370 store.clone(),
371 search.clone(),
372 )))
373 .register(Arc::new(GalaxyDashboardTool::new(store.clone())))
374 .register(Arc::new(GalaxyBackupTool::new(store.clone())))
375 .register(Arc::new(GalaxyTaxonomyTool::new(store.clone())))
376 .register(Arc::new(GalaxyPurgeTool::new(store.clone(), search.clone())))
377 .register(Arc::new(GalaxyHealthTool::new(store.clone())))
378 .register(Arc::new(ArmyDeployTool::new(store.clone())))
380 .register(Arc::new(GalacticTriageTool::new(store.clone())))
381 .register(cold_rotate_tool(store, search.clone(), associations.clone()))
382 .register(pray_meta_tool(store, search.clone(), associations.clone()))
384 .register(Arc::new(CaptainDeployTool::new(store.clone())))
385 .register(Arc::new(HologramRebalanceTool::new(store.clone())))
386 .register(Arc::new(HologramQueryTool::new(store.clone())))
387 .register(Arc::new(BaguaDispatchTool::new(store.clone())))
388 .register(Arc::new(GeneseedMineTool::new(store.clone())))
390 .register(Arc::new(GeneseedStatsTool::new(store.clone())))
391 .register(Arc::new(KgExtractTool::new(store.clone())))
393 .register(Arc::new(KgQueryTool::new(store.clone())))
394 .register(Arc::new(KgTopTool::new(store.clone())))
395 .register(Arc::new(GraphWalkTool::new(store.clone())))
397 .register(Arc::new(GraphCommunityTool::new(store.clone())))
398 .register(Arc::new(GraphPropagateTool::new(store.clone())))
399 .register(Arc::new(ArchaeologySearchTool::new(store.clone())))
401 .register(Arc::new(LearningPatternTool::new(store.clone())))
402 .register(Arc::new(LearningSuggestTool::new(store.clone())))
403 .register(Arc::new(ReasoningBicameralTool::new(store.clone())))
405 .register(Arc::new(ThinkTool::new(store.clone())))
406 .register(Arc::new(ExplainTool::new(store.clone())))
407 .register(Arc::new(PipelineCreateTool::new(store.clone())))
409 .register(Arc::new(PipelineListTool::new(store.clone())))
410 .register(Arc::new(PipelineStatusTool::new(store.clone())))
411 .register(Arc::new(SkillInvokeTool::new(store.clone())))
412 .register(Arc::new(SkillListTool::new(store.clone())))
413 .register(Arc::new(AnomalyDetectTool::new(store.clone())))
415 .register(Arc::new(StateSnapshotTool::new(store.clone())))
416 .register(Arc::new(StateRevertTool::new(store.clone())))
417 .register(Arc::new(CorrelationAnalyzeTool::new(store.clone())))
419 .register(Arc::new(GodNodesTool::new(store.clone())))
420 .register(Arc::new(KaizenCorrelateTool::new(store.clone())))
421 .register(Arc::new(AntiLoopCheckTool::new(store.clone())))
423 .register(Arc::new(BoundaryEnforceTool::new(store.clone())))
424 ;
426 if let Some(k) = karma {
427 reg = reg
428 .register(Arc::new(KarmaHistoryTool::new(k.clone())))
429 .register(Arc::new(KarmaVerifyChainTool::new(k.clone())))
430 .register(Arc::new(KarmaClearTool::new(k.clone())))
431 .register(Arc::new(KarmaAnchorTool::new(k)));
432 }
433 let mut reg = reg
434 .register(Arc::new(DharmaRulesTool::new()))
436 .register(Arc::new(DharmaAuditTool::new(store.clone())))
437 .register(Arc::new(DharmaAcsTool::new()))
438 .register(Arc::new(AgentRegisterTool::new(store.clone())))
440 .register(Arc::new(AgentListTool::new(store.clone())))
441 .register(Arc::new(AgentHeartbeatTool::new(store.clone())))
442 .register(Arc::new(AgentTrustTool::new(store.clone())))
443 .register(Arc::new(AgentDescriptionsTool::new(store.clone())))
444 .register(Arc::new(AgentCapabilitiesTool::new(store.clone())))
445 .register(Arc::new(AgentHeartbeatHistoryTool::new(store.clone())))
446 .register(Arc::new(AgentDeregisterTool::new(
447 store.clone(),
448 search.clone(),
449 )))
450 .register(Arc::new(TaskDistributeTool::new(store.clone())))
452 .register(Arc::new(TaskStatusTool::new(store.clone())))
453 .register(Arc::new(
455 if let Some(ref se) = search {
456 SystemHealthTool::with_search(store.clone(), se.clone())
457 } else {
458 SystemHealthTool::new(store.clone())
459 },
460 ))
461 .register(Arc::new(SystemConfigTool::new()))
462 .register(Arc::new(SystemFlushTool::new(store.clone(), search.clone())))
463 .register(Arc::new(MemoryAssociateMineTool::new(store.clone())))
465 .register(Arc::new(MemoryRelateTool::new(store.clone())))
467 .register(Arc::new(MemoryCorroborateTool::new(store.clone())))
469 .register(Arc::new(MemoryCountTool::new(store.clone())))
471 .register(Arc::new(MemoryTagsTool::new(store.clone())))
472 .register(Arc::new(SessionListTool::new(store.clone())))
473 .register(Arc::new(CittaCoherenceTool::new()))
474 .register(Arc::new(DharmaProfilesTool::new()))
475 .register(Arc::new(MemoryNearbyTool::new(store.clone())))
477 .register(Arc::new(ConsolidationConnectTool::new(
479 store.clone(),
480 associations.clone(),
481 spiral_tracker.clone(),
482 )))
483 .register(Arc::new(ConsolidationCompressTool::new(
484 store.clone(),
485 associations.clone(),
486 spiral_tracker.clone(),
487 )))
488 .register(Arc::new(EmergenceScanTool::new(
489 store.clone(),
490 associations.clone(),
491 spiral_tracker.clone(),
492 )))
493 .register(Arc::new(RetentionPruneTool::new(
494 store.clone(),
495 associations.clone(),
496 spiral_tracker.clone(),
497 )))
498 .register(Arc::new(SpiralReportTool::new(spiral_tracker.clone())))
500 .register(Arc::new(AssociationMineTool::new(store.clone())))
502 .register(Arc::new(PatternDetectTool::new(store.clone())))
503 .register(Arc::new(EmergenceReportTool::new(store.clone())))
504 .register(Arc::new(NetworkStatsTool::new(store.clone())))
505 .register(Arc::new(NetworkCentralityTool::new(store.clone())))
506 .register(Arc::new(NetworkClustersTool::new(store.clone())))
507 .register(Arc::new(SmaranaStatusTool::new(store.clone())))
509 .register(Arc::new(SmaranaTraceTool::new(store.clone())))
510 .register(Arc::new(ApotheosisCheckTool::new(store.clone())))
511 .register(Arc::new(CittaHistoryTool::new(store.clone())))
512 .register(Arc::new(DreamAnalyzeTool::new(store.clone())))
513 .register(Arc::new(ConsciousnessDepthTool::new(store.clone())));
514
515 if let Some(sm) = substrate {
517 let loop_ = homeostatic_loop
518 .unwrap_or_else(|| Arc::new(std::sync::Mutex::new(HomeostaticLoop::default())));
519 let detector = anomaly_detector
520 .unwrap_or_else(|| Arc::new(std::sync::Mutex::new(AnomalyDetector::default())));
521 reg = reg
522 .register(Arc::new(HomeostasisCheckTool::new(
523 sm.clone(),
524 loop_,
525 detector.clone(),
526 )))
527 .register(Arc::new(HomeostasisAdjustTool::new(sm.clone())))
528 .register(Arc::new(HomeostasisHistoryTool::new(sm.clone())))
529 .register(Arc::new(HomeostasisAlertsTool::new(sm, detector)));
530 }
531
532 let _ = &mut reg; reg = rsi::register_rsi(®, store, None, &associations, None, None);
536
537 let bus = sensorimotor_bus.unwrap_or_else(|| {
539 Arc::new(std::sync::Mutex::new(
540 wm_substrate::sensorimotor::linux_hardware_bus(),
541 ))
542 });
543 let reflex = reflex_loop.unwrap_or_else(|| Arc::new(std::sync::Mutex::new(ReflexLoop::new())));
544 reg =
545 sensorimotor_tools::register_sensorimotor(®, bus.clone(), reflex.clone(), gan_ying_bus);
546
547 reg = reg.register(Arc::new(SensorimotorScanTool::new(
549 store.clone(),
550 associations,
551 spiral_tracker,
552 bus,
553 reflex,
554 )));
555
556 reg = reg
558 .register(Arc::new(TransactionBeginTool::new(
559 store.clone(),
560 transaction_state.clone(),
561 )))
562 .register(Arc::new(TransactionCommitTool::new(
563 store.clone(),
564 transaction_state.clone(),
565 search.clone(),
566 )))
567 .register(Arc::new(TransactionRollbackTool::new(
568 store.clone(),
569 transaction_state,
570 search.clone(),
571 )));
572
573 reg = register_imagination(®, store);
575
576 reg = register_self_play(®, store, new_shared_loop());
578
579 reg = register_web(®);
581
582 reg = register_research(®, store, gan_ying_bus);
584
585 let telemetry_search = search.clone();
587 reg = register_session_ops(®, store, search);
588
589 if let (Some(queue), Some(gate)) = (escalation_queue, dharma_gate) {
591 reg = reg
592 .register(Arc::new(DharmaEscalateTool::new(
593 gate.clone(),
594 queue.clone(),
595 )))
596 .register(Arc::new(DharmaReviewQueueTool::new(queue.clone())))
597 .register(Arc::new(DharmaResolveReviewTool::new(queue.clone())));
598 }
599
600 reg = crate::expansion::sandbox::register_sandbox(®, resource_rules);
602
603 if let Some(fw) = firewall {
605 reg = crate::expansion::firewall::register_firewall(®, fw.clone());
606 }
607
608 if let Some(cg) = code_graph {
610 reg = crate::expansion::code::register_code(®, cg.clone());
611 }
612
613 reg = match registry_persistence {
617 RegistryPersistenceMode::Normal => {
618 crate::expansion::violet::register_violet_persistent(®, &store.path().join("violet"))
619 }
620 RegistryPersistenceMode::EvaluatorPreservation => {
621 crate::expansion::violet::register_violet(®)
622 }
623 };
624
625 reg = crate::expansion::security_breaker::register_security_breaker(®);
627
628 reg = crate::expansion::security_probe::register_security_probe(®);
630
631 let board_path = store.path().join("bounty_board.json");
634 match crate::expansion::bounty_connector::BountyBoard::open(board_path) {
635 Ok(board) => {
636 let mut connector =
637 crate::expansion::bounty_connector::BountyConnector::new(Arc::new(board));
638 if let Ok(fixture) = std::env::var("WM_BOUNTY_STATIC_JSON") {
639 connector = connector.with_platform(Arc::new(
640 crate::expansion::bounty_connector::StaticJsonPlatform::new(
641 "static",
642 std::path::PathBuf::from(fixture),
643 ),
644 ));
645 }
646 reg = crate::expansion::bounty_connector::register_bounty(®, Arc::new(connector));
647 }
648 Err(e) => tracing::warn!("bounty board unavailable: {e}"),
649 }
650
651 reg = crate::expansion::bounty_ledger::register_bounty_ledger(
653 ®,
654 store.path().join("bounty_ledger.jsonl"),
655 );
656
657 reg = crate::expansion::bounty_evidence::register_bounty_evidence(
659 ®,
660 store.path().join("evidence"),
661 );
662
663 reg = crate::expansion::oss_bounty::register_oss_bounty(®);
665
666 reg = crate::expansion::telemetry_tools::register_telemetry(®, store, telemetry_search);
668
669 let hermit = Arc::new(std::sync::RwLock::new(
671 wm_governance::HermitProtection::new(),
672 ));
673 reg = crate::expansion::governance_tools::register_governance_tools(®, hermit);
674
675 reg
676}