Skip to main content

agentic_codebase/collective/
mod.rs

1//! Collective intelligence layer.
2//!
3//! Delta sync, pattern aggregation, privacy-preserving extraction.
4//! Network-optional — works fully offline.
5
6pub mod delta;
7pub mod patterns;
8pub mod privacy;
9pub mod registry;
10
11pub use delta::{CollectiveDelta, DeltaPattern, MistakeCategory, MistakeReport};
12pub use patterns::{
13    ComplexityBucket, PatternCategory, PatternExtractor, PatternQuality, PatternSignature,
14    UsagePattern,
15};
16pub use privacy::{filter_shareable, is_shareable, NonShareable, Shareable, ShareableCheck};
17pub use registry::{CollectiveCache, RegistryClient, RegistryMode};
18
19/// High-level manager for collective intelligence operations.
20///
21/// Coordinates pattern extraction, privacy filtering, delta creation,
22/// and registry communication. Supports both online and offline modes.
23#[derive(Debug)]
24pub struct CollectiveManager {
25    /// The registry client for syncing data.
26    registry: RegistryClient,
27    /// The pattern extractor.
28    extractor: PatternExtractor,
29}
30
31impl CollectiveManager {
32    /// Create a new collective manager in offline mode.
33    pub fn offline() -> Self {
34        Self {
35            registry: RegistryClient::offline(),
36            extractor: PatternExtractor::new(),
37        }
38    }
39
40    /// Create a new collective manager in online mode (stub).
41    pub fn online(endpoint: String) -> Self {
42        Self {
43            registry: RegistryClient::online(endpoint),
44            extractor: PatternExtractor::new(),
45        }
46    }
47
48    /// Get the current operating mode.
49    pub fn mode(&self) -> &RegistryMode {
50        self.registry.mode()
51    }
52
53    /// Check if the manager is in offline mode.
54    pub fn is_offline(&self) -> bool {
55        *self.registry.mode() == RegistryMode::Offline
56    }
57
58    /// Extract patterns from a code graph.
59    pub fn extract_patterns(&self, graph: &crate::graph::CodeGraph) -> Vec<UsagePattern> {
60        self.extractor.extract(graph)
61    }
62
63    /// Query the registry for patterns.
64    pub fn query_patterns(&mut self, language: &str, category: &str) -> Vec<UsagePattern> {
65        self.registry.query_patterns(language, category)
66    }
67
68    /// Publish a delta to the registry.
69    pub fn publish_delta(&mut self, delta: &CollectiveDelta) -> bool {
70        self.registry.publish_delta(delta)
71    }
72
73    /// Access the registry client.
74    pub fn registry(&self) -> &RegistryClient {
75        &self.registry
76    }
77
78    /// Access the registry client mutably.
79    pub fn registry_mut(&mut self) -> &mut RegistryClient {
80        &mut self.registry
81    }
82}