mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
* feat: add initial project structure and documentation - Introduced the GNU General Public License (GPL) v3 in LICENSE file. - Added MCP configuration in .claude/mcp.json for server integration. - Created architecture documentation in docs/ARCHITECTURE.md outlining the platform's design and components. - Defined MVP specifications in docs/MVP.md for the Telegram-based Agent Assistant. - Established API reference for team management in docs/teams-api-reference.md. - Set up basic HTML structure in public/index.html and added logo image in public/logo.png. * feat: add initial project documentation and HTML structure - Introduced CODE_OF_CONDUCT.md to establish community guidelines and standards for behavior. - Created CONTRIBUTING.md to outline contribution process, development setup, and project conventions. - Added SECURITY.md to define the security policy, supported versions, and reporting procedures for vulnerabilities. - Established basic HTML structure in index.html for the application interface. * chore: remove hello-python skill files - Deleted skill.json and skill.py files for the Hello Python example runtime skill, as they are no longer needed in the project. * feat: port tinyhuman agent runtime from ZeroClaw into Tauri backend Port daemon supervisor, health registry, security (policy, secrets, audit, pairing), agent traits, and config modules from ZeroClaw (MIT) into a new tinyhuman/ module under src-tauri/src/. The daemon auto-starts on desktop and shuts down gracefully on app exit via CancellationToken. - health: global HealthRegistry with component tracking and JSON snapshots - security/policy: SecurityPolicy with command validation, risk levels, rate limiting - security/secrets: ChaCha20-Poly1305 SecretStore with legacy XOR migration - security/audit: AuditLogger with JSON-line events and log rotation - security/pairing: PairingGuard with brute-force protection and SHA-256 hashing - security/traits: Sandbox trait + NoopSandbox - config: minimal DaemonConfig with autonomy, reliability, secrets, audit sub-configs - daemon: supervisor with health state writer emitting Tauri events - agent/traits: Provider, Tool, Memory, Observer, RuntimeAdapter traits + Noop impls - commands/tinyhuman: Tauri commands for health, security policy, encrypt/decrypt - 185 inline unit tests across all modules - README updated with custom inference/tunneling/memory positioning Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: update README to reflect AlphaHuman Mk1 branding and enhanced description - Changed project title to "AlphaHuman Mk1" for clarity. - Revised project description to emphasize user-friendly AI capabilities and the use of the Neocortex Mk1 model. - Removed outdated sections on custom inference, tunneling, and memory, streamlining the content for better readability. * update readme * Port zeroclaw runtime into tinyhuman * Replace CLI mentions with UI language * Split gateway module into smaller units * Split channels and config schema modules * Fix tinyhuman build, tests, and tunnel integration * feat(tinyhuman): add missing modules and ui-friendly services * refactor: rename tinyhuman to alphahuman * chore: remove bottom text from Welcome component * feat(settings): add tauri command console * feat(daemon): enhance daemon mode handling and integrate rustls with ring feature * feat(settings): implement comprehensive configuration management in TauriCommandsPanel * refactor(TauriCommandsPanel): streamline error handling and enhance async function usage * feat(settings): add skill management functionality to TauriCommandsPanel * style(TauriCommandsPanel): update input styles for improved readability and user experience * feat(settings): add Skills and Agent Chat panels with navigation and integration management * feat(settings): implement browser access management in SkillsPanel and enhance AgentChatPanel with local storage functionality --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
181 lines
5.0 KiB
Rust
181 lines
5.0 KiB
Rust
//! Storage provider and memory configuration.
|
|
|
|
use super::defaults;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
|
|
pub struct StorageConfig {
|
|
#[serde(default)]
|
|
pub provider: StorageProviderSection,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
|
|
pub struct StorageProviderSection {
|
|
#[serde(default)]
|
|
pub config: StorageProviderConfig,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
|
|
pub struct StorageProviderConfig {
|
|
#[serde(default)]
|
|
pub provider: String,
|
|
|
|
#[serde(
|
|
default,
|
|
alias = "dbURL",
|
|
alias = "database_url",
|
|
alias = "databaseUrl"
|
|
)]
|
|
pub db_url: Option<String>,
|
|
|
|
#[serde(default = "default_storage_schema")]
|
|
pub schema: String,
|
|
|
|
#[serde(default = "default_storage_table")]
|
|
pub table: String,
|
|
|
|
#[serde(default)]
|
|
pub connect_timeout_secs: Option<u64>,
|
|
}
|
|
|
|
fn default_storage_schema() -> String {
|
|
"public".into()
|
|
}
|
|
|
|
fn default_storage_table() -> String {
|
|
"memories".into()
|
|
}
|
|
|
|
impl Default for StorageProviderConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
provider: String::new(),
|
|
db_url: None,
|
|
schema: default_storage_schema(),
|
|
table: default_storage_table(),
|
|
connect_timeout_secs: None,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
|
|
#[allow(clippy::struct_excessive_bools)]
|
|
pub struct MemoryConfig {
|
|
pub backend: String,
|
|
pub auto_save: bool,
|
|
#[serde(default = "default_hygiene_enabled")]
|
|
pub hygiene_enabled: bool,
|
|
#[serde(default = "default_archive_after_days")]
|
|
pub archive_after_days: u32,
|
|
#[serde(default = "default_purge_after_days")]
|
|
pub purge_after_days: u32,
|
|
#[serde(default = "default_conversation_retention_days")]
|
|
pub conversation_retention_days: u32,
|
|
#[serde(default = "default_embedding_provider")]
|
|
pub embedding_provider: String,
|
|
#[serde(default = "default_embedding_model")]
|
|
pub embedding_model: String,
|
|
#[serde(default = "default_embedding_dims")]
|
|
pub embedding_dimensions: usize,
|
|
#[serde(default = "default_vector_weight")]
|
|
pub vector_weight: f64,
|
|
#[serde(default = "default_keyword_weight")]
|
|
pub keyword_weight: f64,
|
|
#[serde(default = "default_min_relevance_score")]
|
|
pub min_relevance_score: f64,
|
|
#[serde(default = "default_cache_size")]
|
|
pub embedding_cache_size: usize,
|
|
#[serde(default = "default_chunk_size")]
|
|
pub chunk_max_tokens: usize,
|
|
#[serde(default)]
|
|
pub response_cache_enabled: bool,
|
|
#[serde(default = "default_response_cache_ttl")]
|
|
pub response_cache_ttl_minutes: u32,
|
|
#[serde(default = "default_response_cache_max")]
|
|
pub response_cache_max_entries: usize,
|
|
#[serde(default)]
|
|
pub snapshot_enabled: bool,
|
|
#[serde(default)]
|
|
pub snapshot_on_hygiene: bool,
|
|
#[serde(default = "default_true")]
|
|
pub auto_hydrate: bool,
|
|
#[serde(default)]
|
|
pub sqlite_open_timeout_secs: Option<u64>,
|
|
}
|
|
|
|
fn default_true() -> bool {
|
|
defaults::default_true()
|
|
}
|
|
|
|
fn default_embedding_provider() -> String {
|
|
"none".into()
|
|
}
|
|
fn default_hygiene_enabled() -> bool {
|
|
true
|
|
}
|
|
fn default_archive_after_days() -> u32 {
|
|
7
|
|
}
|
|
fn default_purge_after_days() -> u32 {
|
|
30
|
|
}
|
|
fn default_conversation_retention_days() -> u32 {
|
|
30
|
|
}
|
|
fn default_embedding_model() -> String {
|
|
"text-embedding-3-small".into()
|
|
}
|
|
fn default_embedding_dims() -> usize {
|
|
1536
|
|
}
|
|
fn default_vector_weight() -> f64 {
|
|
0.7
|
|
}
|
|
fn default_keyword_weight() -> f64 {
|
|
0.3
|
|
}
|
|
fn default_min_relevance_score() -> f64 {
|
|
0.4
|
|
}
|
|
fn default_cache_size() -> usize {
|
|
10_000
|
|
}
|
|
fn default_chunk_size() -> usize {
|
|
512
|
|
}
|
|
fn default_response_cache_ttl() -> u32 {
|
|
60
|
|
}
|
|
fn default_response_cache_max() -> usize {
|
|
5_000
|
|
}
|
|
|
|
impl Default for MemoryConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
backend: "sqlite".into(),
|
|
auto_save: true,
|
|
hygiene_enabled: default_hygiene_enabled(),
|
|
archive_after_days: default_archive_after_days(),
|
|
purge_after_days: default_purge_after_days(),
|
|
conversation_retention_days: default_conversation_retention_days(),
|
|
embedding_provider: default_embedding_provider(),
|
|
embedding_model: default_embedding_model(),
|
|
embedding_dimensions: default_embedding_dims(),
|
|
vector_weight: default_vector_weight(),
|
|
keyword_weight: default_keyword_weight(),
|
|
min_relevance_score: default_min_relevance_score(),
|
|
embedding_cache_size: default_cache_size(),
|
|
chunk_max_tokens: default_chunk_size(),
|
|
response_cache_enabled: false,
|
|
response_cache_ttl_minutes: default_response_cache_ttl(),
|
|
response_cache_max_entries: default_response_cache_max(),
|
|
snapshot_enabled: false,
|
|
snapshot_on_hygiene: false,
|
|
auto_hydrate: true,
|
|
sqlite_open_timeout_secs: None,
|
|
}
|
|
}
|
|
}
|