Files
buzz/desktop/src-tauri/Cargo.toml
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 3c6cd9c3f0 feat(desktop): add persona event kind with client publish/read/retain
Implements the foundation for personas-as-events architecture:

- Define KIND_PERSONA (30175) as NIP-33 parameterized replaceable,
  keyed by (pubkey, kind, d_tag) where d_tag is the plaintext persona
  slug. Relay allowlists the kind under UsersWrite scope and marks it
  global-only (never channel-scoped).

- Client-side serialization: PersonaRecord ↔ kind:30175 event with
  JSON content body. Publish and fetch functions via relay HTTP API.

- SQLite retention store: local durable storage for persona events
  enabling offline boot. INSERT OR REPLACE on (kind, pubkey, d_tag)
  for NIP-33 latest-wins semantics. Pending-sync queue for deferred
  relay publish.

- Migration: on first launch after upgrade, non-builtin personas from
  personas.json are serialized as events and written to the retention
  store with pending_sync=1. Idempotent via sentinel file. Runs after
  the packs→teams migration.

The existing load_personas path is unchanged — retention-based loading
is wired up as a helper for PR 2 (instantiation flow) to activate.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 00:17:51 -04:00

91 lines
3.0 KiB
TOML

[workspace]
[package]
name = "sprout-desktop"
version = "0.3.15"
description = "Sprout desktop app"
authors = ["you"]
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
# The `_lib` suffix may seem redundant but it is necessary
# to make the lib name unique and wouldn't conflict with the bin name.
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
name = "sprout_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[features]
default = []
mesh-llm = ["dep:mesh-llm-sdk", "dep:mesh-llm-host-runtime"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[target.'cfg(unix)'.dependencies]
libc = "0.2"
ctrlc = { version = "3", features = ["termination"] }
[target.'cfg(target_os = "macos")'.dependencies]
objc2-app-kit = { version = "0.3.2", default-features = false, features = ["NSHapticFeedback"] }
[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.61", features = ["Win32_Storage_FileSystem"] }
[dependencies]
atomic-write-file = "0.3"
anyhow = "1"
dirs = "6"
tauri = { version = "2", features = [] }
tauri-plugin-deep-link = "2"
tauri-plugin-opener = "2"
tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
tauri-plugin-window-state = "2"
tauri-plugin-websocket = "2"
tauri-plugin-dialog = "2"
tauri-plugin-updater = "2"
tauri-plugin-process = "2"
infer = "0.19"
hex = "0.4"
tokio = { version = "1", features = ["fs", "sync", "rt", "macros", "time"] }
tokio-tungstenite = { version = "0.29", features = ["rustls-tls-webpki-roots"] }
tokio-util = { version = "0.7", features = ["rt"] }
futures-util = "0.3"
opus = "0.3"
neteq = { version = "0.8", default-features = false }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_yaml = "0.9"
nostr = { version = "0.44", features = ["nip44"] }
zeroize = "1"
reqwest = { version = "0.13", features = ["json", "query", "stream"] }
rusqlite = { version = "0.35", features = ["bundled"] }
url = "2"
sprout-core = { path = "../../crates/sprout-core" }
sprout-persona = { path = "../../crates/sprout-persona" }
sprout-sdk = { path = "../../crates/sprout-sdk" }
mesh-llm-sdk = { git = "https://github.com/Mesh-LLM/mesh-llm.git", rev = "ebc3ab4c4b5f4a45d5bc942c66c18583800c3f82", package = "mesh-llm-sdk", default-features = false, features = ["client", "serving"], optional = true }
mesh-llm-host-runtime = { git = "https://github.com/Mesh-LLM/mesh-llm.git", rev = "ebc3ab4c4b5f4a45d5bc942c66c18583800c3f82", package = "mesh-llm-host-runtime", default-features = false, features = ["dynamic-native-runtime"], optional = true }
base64 = "0.22"
sha2 = "0.11"
tar = "0.4"
bzip2 = "0.6"
chrono = { version = "0.4", features = ["serde"] }
tauri-plugin-global-shortcut = "2"
tauri-plugin-notification = "2.3.3"
uuid = { version = "1", features = ["v4"] }
png = "0.18"
zip = "8"
sherpa-onnx = "1.12"
regex = "1"
axum = "0.8"
rodio = "0.22"
earshot = "1.0"
rubato = "3.0"
audioadapter-buffers = "3.0"
tempfile = "3"
strip-ansi-escapes = "0.2"
[dev-dependencies]