synapto-interface 0.1.0-dev.2

Interface definitions for the Allusio AI framework
Documentation
## Persistent Storage with `CollectionStore`

### When to Use It

Use `CollectionStore` when your plugin needs to persist lists of data across reboots (e.g., historical conversation summaries, behavioral insights, or cached configurations).

### Storage Providers

The AI architecture defines storage capabilities as generic traits in `synapto_interface::storage`. The bundle initializing your plugin will inject a concrete storage provider at compile time.

There are currently two available providers:

1. **`storage-local` (`LocalStorageProvider`)**: A zero-dependency, human-readable file backend that writes JSON arrays directly to the plugin's namespace directory. Ideal for small, localized deployments or testing.
2. **`storage-surrealdb` (`SurrealStorage`)**: A full database backend for heavy, high-frequency logging or complex querying.

### How to Use It (Example)

Define your plugin with a generic type `S` bound to `CollectionStore + StorageConnection`, and inject it via the bundle's `main.rs`.

```rust,ignore
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use synapto_interface::storage::{CollectionStore, StorageConnection};
use std::sync::Arc;

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Insight {
    pub content: String,
}

pub struct MyMemoryPlugin<S: CollectionStore + StorageConnection> {
    store: Arc<S>,
}

impl<S: CollectionStore + StorageConnection> MyMemoryPlugin<S> {
    pub fn new(store: Arc<S>) -> Self {
        Self { store }
    }

    pub async fn add_insight(&self, insight: String) {
        let doc = Insight { content: insight };
        if let Err(e) = self.store.push("insights", doc).await {
            tracing::error!("Failed to save insight: {}", e);
        }
    }
}
```

In the bundle `main.rs`:

```rust,ignore
// Using the lightweight JSON file provider
use storage_local::LocalStorageProvider;

let storage = Arc::new(
    LocalStorageProvider::connect(registries.clone(), &data_dir, "my_plugin_namespace")
        .await
        .unwrap()
);

let my_plugin = MyMemoryPlugin::new(storage);
```