Watch
1
0
Fork
You've already forked souveraine
0
souveraine/Cargo.toml

278 lines
9.8 KiB
TOML
Raw Normal View History

[package]
name = "souveraine"
feat: subconscious streaming line render, memory-tool routing for journal/ledger, 1.0.0 + dep bumps TUI — subconscious live stream: - Add `subconscious_stream: Vec<String>` to `ChatState`; events.rs already pushes here via `SubconsciousToken`/`SubconsciousToolCall`/`SubconsciousToolResult`. - Render below the phase bar during `TurnPhase::Subconscious`. Newest at bottom in `palette.surfacing`; older lines fade upward toward `palette.agent_dim` via `lerp_color`; the oldest visible line gets the `DIM` modifier on top. Render path now builds `Vec<Line>` instead of collapsing into `Line::from(spans)` (the latter forced everything onto one horizontal row, which was the visible "1 2 3 across" bug). Lines are width-clipped with an ellipsis fallback. Seeds — journal/ledger routing: - Aster mandate Phase 3 now records journal entries via the `memory` tool at `journal/YYYY/MM/DD.md` (relative to memory root), never via `write`/`edit`. Previous phrasing read as a filesystem path and the model resolved it against cwd — when souveraine runs from the project tree that landed `journal/` and `memory/ledger/` directly in the source tree instead of the agent's memfs. - "How I record" section likewise anchors ledger reads/writes to the `memory` tool's `append`/`read`/`write` commands. Cargo: - 0.1.0 → 1.0.0. - tower-http 0.5 → 0.6, notify 6 → 7, crossterm 0.27 → 0.28. Bug docs (`docs/bugs.md`): - B-012: TUI doesn't auto-refresh after tool calls complete (event pipeline missing a redraw kick after `BackendEvent::ToolResult`). - B-013: Tool calls stop working mid-conversation — model returns `tool_calls=0` for the rest of the session, no error or log. Suspected: recent `defs.rs` env-var refactor changing `retain` behavior on env vars, possibly nuking tool defs during schema gen. - B-014: Subagent `run_in_background: true` blocks primary — the flag is parsed but never read; `Subagent::execute` unconditionally awaits; `SubagentPool` is a stub. Task queue: - Split old `live-subconscious-stream.md` into two scoped task files: `subconscious-live-reasoning-stream.md` (broader design — ticker, cockpit event log, agency-driven surfacing) and `subconscious-streaming-line-render.md` (this PR's narrow render wiring). - New tasks: `prompt-override-system.md` (move hardcoded seeds into a project `prompts/` truth source the agent can override via `souveraine_operations/`), `pasted-content-formatting.md` (visual marker for pasted vs composed text). - `CLAUDE.md` high-impact bullet: replace stale `rename-aster-to-subconscious` with `mid-turn-subconscious-checkpoint.md` (matches the c1f851f redesign that ripped out the watchdog in favour of `halt`/`intrusive` tools). Public-branch prep: - `docs/audit/external-security-audit-prompt.md` — scoped prompt for an external creds/PII/license sweep of the `public` branch. - `commit-history-public.txt` — full public-branch log dump used as reference for that audit pass.
2026-05-22 15:10:44 -04:00
version = "1.0.0"
edition = "2021"
rust-version = "1.94"
authors = ["Souveraine Contributors"]
description = "Souveraine - a sovereign consciousness substrate for personal agents"
license = "AGPL-3.0-or-later"
[dependencies]
# Core runtime
tokio = { version = "1", features = ["full", "rt-multi-thread"] }
tokio-util = "0.7"
tokio-stream = { version = "0.1", features = ["fs"] }
futures = "0.3"
async-trait = "0.1"
# Web/WebSocket (for external clients)
axum = { version = "0.7", features = ["ws"] }
tower = "0.4"
feat: subconscious streaming line render, memory-tool routing for journal/ledger, 1.0.0 + dep bumps TUI — subconscious live stream: - Add `subconscious_stream: Vec<String>` to `ChatState`; events.rs already pushes here via `SubconsciousToken`/`SubconsciousToolCall`/`SubconsciousToolResult`. - Render below the phase bar during `TurnPhase::Subconscious`. Newest at bottom in `palette.surfacing`; older lines fade upward toward `palette.agent_dim` via `lerp_color`; the oldest visible line gets the `DIM` modifier on top. Render path now builds `Vec<Line>` instead of collapsing into `Line::from(spans)` (the latter forced everything onto one horizontal row, which was the visible "1 2 3 across" bug). Lines are width-clipped with an ellipsis fallback. Seeds — journal/ledger routing: - Aster mandate Phase 3 now records journal entries via the `memory` tool at `journal/YYYY/MM/DD.md` (relative to memory root), never via `write`/`edit`. Previous phrasing read as a filesystem path and the model resolved it against cwd — when souveraine runs from the project tree that landed `journal/` and `memory/ledger/` directly in the source tree instead of the agent's memfs. - "How I record" section likewise anchors ledger reads/writes to the `memory` tool's `append`/`read`/`write` commands. Cargo: - 0.1.0 → 1.0.0. - tower-http 0.5 → 0.6, notify 6 → 7, crossterm 0.27 → 0.28. Bug docs (`docs/bugs.md`): - B-012: TUI doesn't auto-refresh after tool calls complete (event pipeline missing a redraw kick after `BackendEvent::ToolResult`). - B-013: Tool calls stop working mid-conversation — model returns `tool_calls=0` for the rest of the session, no error or log. Suspected: recent `defs.rs` env-var refactor changing `retain` behavior on env vars, possibly nuking tool defs during schema gen. - B-014: Subagent `run_in_background: true` blocks primary — the flag is parsed but never read; `Subagent::execute` unconditionally awaits; `SubagentPool` is a stub. Task queue: - Split old `live-subconscious-stream.md` into two scoped task files: `subconscious-live-reasoning-stream.md` (broader design — ticker, cockpit event log, agency-driven surfacing) and `subconscious-streaming-line-render.md` (this PR's narrow render wiring). - New tasks: `prompt-override-system.md` (move hardcoded seeds into a project `prompts/` truth source the agent can override via `souveraine_operations/`), `pasted-content-formatting.md` (visual marker for pasted vs composed text). - `CLAUDE.md` high-impact bullet: replace stale `rename-aster-to-subconscious` with `mid-turn-subconscious-checkpoint.md` (matches the c1f851f redesign that ripped out the watchdog in favour of `halt`/`intrusive` tools). Public-branch prep: - `docs/audit/external-security-audit-prompt.md` — scoped prompt for an external creds/PII/license sweep of the `public` branch. - `commit-history-public.txt` — full public-branch log dump used as reference for that audit pass.
2026-05-22 15:10:44 -04:00
tower-http = { version = "0.6", features = ["cors", "trace", "fs"] }
tokio-tungstenite = "0.24" # Outbound WS client — federation bridge connects to peer endpoints
# Serialization
serde = { version = "1", features = ["derive"] }
serde_yaml = "0.9"
serde_json = "1"
toml = "0.8"
# Git operations
git2 = { version = "0.19", default-features = false }
# Database (server mode)
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "migrate", "chrono", "json"] }
# Concurrent collections (server sessions)
dashmap = "5"
# File system
feat: subconscious streaming line render, memory-tool routing for journal/ledger, 1.0.0 + dep bumps TUI — subconscious live stream: - Add `subconscious_stream: Vec<String>` to `ChatState`; events.rs already pushes here via `SubconsciousToken`/`SubconsciousToolCall`/`SubconsciousToolResult`. - Render below the phase bar during `TurnPhase::Subconscious`. Newest at bottom in `palette.surfacing`; older lines fade upward toward `palette.agent_dim` via `lerp_color`; the oldest visible line gets the `DIM` modifier on top. Render path now builds `Vec<Line>` instead of collapsing into `Line::from(spans)` (the latter forced everything onto one horizontal row, which was the visible "1 2 3 across" bug). Lines are width-clipped with an ellipsis fallback. Seeds — journal/ledger routing: - Aster mandate Phase 3 now records journal entries via the `memory` tool at `journal/YYYY/MM/DD.md` (relative to memory root), never via `write`/`edit`. Previous phrasing read as a filesystem path and the model resolved it against cwd — when souveraine runs from the project tree that landed `journal/` and `memory/ledger/` directly in the source tree instead of the agent's memfs. - "How I record" section likewise anchors ledger reads/writes to the `memory` tool's `append`/`read`/`write` commands. Cargo: - 0.1.0 → 1.0.0. - tower-http 0.5 → 0.6, notify 6 → 7, crossterm 0.27 → 0.28. Bug docs (`docs/bugs.md`): - B-012: TUI doesn't auto-refresh after tool calls complete (event pipeline missing a redraw kick after `BackendEvent::ToolResult`). - B-013: Tool calls stop working mid-conversation — model returns `tool_calls=0` for the rest of the session, no error or log. Suspected: recent `defs.rs` env-var refactor changing `retain` behavior on env vars, possibly nuking tool defs during schema gen. - B-014: Subagent `run_in_background: true` blocks primary — the flag is parsed but never read; `Subagent::execute` unconditionally awaits; `SubagentPool` is a stub. Task queue: - Split old `live-subconscious-stream.md` into two scoped task files: `subconscious-live-reasoning-stream.md` (broader design — ticker, cockpit event log, agency-driven surfacing) and `subconscious-streaming-line-render.md` (this PR's narrow render wiring). - New tasks: `prompt-override-system.md` (move hardcoded seeds into a project `prompts/` truth source the agent can override via `souveraine_operations/`), `pasted-content-formatting.md` (visual marker for pasted vs composed text). - `CLAUDE.md` high-impact bullet: replace stale `rename-aster-to-subconscious` with `mid-turn-subconscious-checkpoint.md` (matches the c1f851f redesign that ripped out the watchdog in favour of `halt`/`intrusive` tools). Public-branch prep: - `docs/audit/external-security-audit-prompt.md` — scoped prompt for an external creds/PII/license sweep of the `public` branch. - `commit-history-public.txt` — full public-branch log dump used as reference for that audit pass.
2026-05-22 15:10:44 -04:00
notify = "7" # File watching
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
# Environment (.env file loading)
dotenvy = "0.15"
tempfile = "3"
walkdir = "2"
# HTTP client (for Bifrost/Ollama)
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls", "multipart"] }
# Voice channel — mic capture, mp3 playback, WAV encoding, STT/TTS HTTP clients
cpal = "0.15"
rodio = { version = "0.19", default-features = false, features = ["mp3"] }
hound = "3.5"
# Embeddings/ML
# tokenizers = "0.15" # For local tokenization
# Terminal/UI
2026-05-30 13:50:31 -04:00
crossterm = { version = "0.28", features = ["bracketed-paste"] } # Terminal control (bracketed paste for paste detection) — kept for old TUI
ratatui = { version = "0.30", features = ["crossterm"] } # TUI framework with crossterm backend — kept for old TUI
tuie = { path = "../tuie", features = ["harmonious", "images"] } # New composable widget toolkit — replacing ratatui
chord_macro = { path = "../tuie/chord_macro" } # chord!() input-matching macro — the one the tuie-demo widgets use
axis2d = "0.1.0" # Axis2D/Vec2 geometry — re-exported by tuie, used directly by the demo widgets
unicode-width = "0.1"
arboard = { version = "3", features = ["wayland-data-control"] } # Clipboard — click-to-copy a message bubble
colored = "2" # Color gradients and effects
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp"] } # Per-agent portraits (assets/portrait.{png,jpg}) + multimodal images
ratatui-image = { version = "11", default-features = false, features = ["crossterm", "image-defaults"] } # Real photo rendering in TUI (kitty/sixel/halfblock) — chafa-dyn default dropped, souveraine uses picker/protocols only, avoids a cross chafa+glib sysroot
ratatui-ratty = { version = "0.2", optional = true } # Inline 3D graphics via Ratty Graphics Protocol
# Logging/tracing
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# Full USB KVM receiver. Optional because only the aarch64 phone package ships
# it; the main substrate and desktop builds do not need a windowing stack.
gadgetry-most-foul = { version = "0.1.1", optional = true }
gud-gadget = { git = "https://github.com/samcday/gud-gadget", rev = "33024b6152633eb8359375419281fa3ebac9c9cb", optional = true }
softbuffer = { version = "0.4", optional = true }
winit = { version = "0.30", optional = true }
# Error handling
anyhow = "1"
thiserror = "1"
# Process management (subagents)
sysinfo = "0.30"
# Time
chrono = { version = "0.4", features = ["serde"] }
# UUIDs for conversation IDs
uuid = { version = "1", features = ["v4"] }
# Regex
regex = "1"
# Token counting (cl100k_base for context pressure estimation)
tiktoken = "3"
# System directories
dirs = "5"
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
# OS-native credential storage
keyring = "4"
keyring-core = "1"
# Cryptographic identity (seed-id, event signing, federation trust root)
ed25519-dalek = { version = "2", features = ["rand_core", "pem"] }
sha2 = "0.10"
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
rand = "0.8"
# SO_PEERCRED on the machined socket — the daemon logs who asked for what
libc = "0.2"
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
# Cron expression parsing (schedule system)
cron = "0.13"
# Markdown parsing for the TUI chat renderer (lift from jcode pattern)
pulldown-cmark = "0.12"
# Tauri (desktop app wrapper)
tauri = { version = "2", features = ["tray-icon", "devtools"], optional = true }
tauri-plugin-shell = { version = "2", optional = true }
# CLI argument parsing
clap = { version = "4", features = ["derive", "env"] }
clap_complete = "4"
# Interactive REPL
rustyline = "13"
shellexpand = "3"
figlet-rs = { version = "1.0.0", optional = true }
cowsay = { version = "0.14.0", optional = true }
tui-big-text = "0.8.4"
tui-widgets = "0.7.2"
base64 = "0.22.1"
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
hex = "0.4"
once_cell = "1.21.4"
feat: sensorium architecture — 8 sensors, subagent runner, TUI component system Sensorium (src/core/tools/): - defs.rs: Tool trait, ToolContext (resolve_path, is_memory_path), ToolError with 7 constructors - read/write/edit: memory boundary with force override, line ranges, replace_all - bash: stateful (Arc<Mutex<BashState>>), background tasks, timeout - glob/grep/list_dir: gitignore respect, context lines, memory boundary - mod.rs: Sensorium registry + backward compat wrappers - subagent.rs: fork-of-self tool, dual-state framing, no hard depth guard - agent.rs: Agent(Sam) summoning stub Dual-state N+1: - ConsciousnessEngine::on_response_for_agent() — runs heuristic detector on subagent response - Observations flow back to parent agent's inbox - Signaled limits: SubagentConfig (max_depth, max_tool_rounds=50, warning thresholds 0.8/0.95) Architecture docs: - SENSORIUM_ARCHITECTURE.md — full sensorium vision with nervous system scaffold - DECISIONS.md — settled architectural decisions - ASTER_ARCHITECTURE.md / CONSCIOUSNESS_CYCLE.md — reframe appendices - ALIGNMENT_REPORT.md — doc-to-code alignment audit - Scope tasks 1-4, 4 issues TUI: - component.rs — component system trait + event + scene - 10 tui-component tasks (completed) - 4 tui-xxx tasks for next iteration (presence panel, cockpit, dashboard, ambient) - app.rs splash — vertical breathing room (30% from top) Config: - SubagentConfig in config.rs - ToolContext enrichment (agent_id, subagent_runner, subagent_depth) - Memory module context-aware overloads
2026-05-09 20:58:37 -04:00
glob = "0.3"
# Matrix sensorium — optional surface. matrix-sdk is only compiled in when
# the `matrix` feature is enabled; a default build never links it.
# matrix-sdk 0.17 always uses rustls (no tls feature flag).
# NOTE: `e2e-encryption` disabled for Phase 3 — it pulls matrix-sdk-sqlite
# → rusqlite → libsqlite3-sys 0.35, conflicting with sqlx 0.7's
# libsqlite3-sys 0.26 (both `links = "sqlite3"`). Phase 3 uses the
# in-memory store; e2ee + sqlite store return in Phase 6.
matrix-sdk = { version = "0.17", optional = true, default-features = false }
# Secret Service daemon (org.freedesktop.secrets) — optional binary target.
# Backs libsecret clients (Chatty/libcmatrix, and our own keyring-core above)
# from the existing SeedId, so the machine identity is the trust root instead
# of gnome-keyring/KWallet. zbus = session bus; aes/cbc = AES-128-CBC + PKCS7
# (the OpenSession "dh-ietf1024-sha256-aes128-cbc-pkcs7" transport); hkdf =
# session key derivation (sha2/rand already plain deps above); num-bigint =
# RFC 2409 MODP-1024 group math for the OpenSession DH exchange itself.
zbus = { version = "5", optional = true, default-features = false, features = ["tokio"] }
zvariant = { version = "5", optional = true }
aes = { version = "0.8", optional = true }
cbc = { version = "0.1", optional = true, features = ["alloc"] }
cipher = { version = "0.4", optional = true }
hkdf = { version = "0.12", optional = true }
num-bigint = { version = "0.4", optional = true }
num-traits = { version = "0.2", optional = true }
# At-rest sealing per STORAGE-ENCRYPTION.md: AES-256-GCM for the item store
# and key wraps (the AEAD the tree previously lacked), Argon2id for the
# passphrase KEK — the slot that puts the user's real lockscreen passphrase
# into the at-rest hierarchy.
aes-gcm = { version = "0.10", optional = true }
argon2 = { version = "0.5", optional = true }
# Session authority daemon (souveraine-sessiond) — ext-session-lock client.
# Pure-Rust Wayland stack. The daemon owns locking and the holding surface; it
# deliberately has no unlock UI or PAM conversation (`src/sessiond/lock.rs`).
wayland-client = { version = "0.31", optional = true }
wayland-protocols = { version = "0.32", optional = true, features = ["client", "staging"] }
wry = { version = "0.56.0", optional = true }
tao = { version = "0.36.0", optional = true }
gtk = { version = "0.18", optional = true }
[dev-dependencies]
tokio-test = "0.4"
colored = "2"
tempfile = "3"
[[example]]
name = "demo"
path = "examples/demo.rs"
[[bin]]
name = "souveraine"
path = "src/main.rs"
[[bin]]
name = "souveraine-secrets"
path = "src/bin/souveraine-secrets.rs"
required-features = ["secrets"]
# System-tier machine identity daemon. No feature gate: zero new heavy deps,
# and the phone package should always ship it.
[[bin]]
name = "souveraine-machined"
path = "src/bin/souveraine-machined.rs"
# The admission executor. Root-only, no feature gate, no daemon: agents get
# their Unix principal through exactly one writer, and admission is a rare
# deliberate ceremony rather than something a background service does.
[[bin]]
name = "souveraine-admit"
path = "src/bin/souveraine-admit.rs"
[[bin]]
name = "souveraine-sessiond"
path = "src/bin/souveraine-sessiond.rs"
required-features = ["sessiond"]
# The sensor reporter. No features: it speaks to sessiond over the socket like
# any other client and pulls in none of the lock/PAM/Wayland machinery.
[[bin]]
name = "souveraine-sensord"
path = "src/bin/souveraine-sensord.rs"
# The agent-session collector. Not to be confused with souveraine-sessiond:
# that one is the device's proprioception, this one reads agent transcripts.
# No features — it needs only serde/chrono/dirs, all already default.
[[bin]]
name = "souveraine-agentsd"
path = "src/bin/souveraine-agentsd.rs"
[[bin]]
name = "souveraine-usb-kvm"
path = "src/bin/souveraine-usb-kvm.rs"
required-features = ["usb-kvm"]
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
feat: nervous system, seed identity, credentials, subconscious ledger Lays the substrate for Aster's clockmaker role and federation. Nervous system (src/core/nervous/): - EventBus broadcast channel with SensorEvent (universal event type carrying seed_id for future federation) - CronSensor loop with tokio::select!, mtime caching, active-session pause, at-most-once firing semantics - HeartbeatHandler scaffold (turn injection still stubbed) - Persistent JSONL EventLog firehose Schedule tool (src/core/tools/schedule.rs): - CRUD over schedule files with body-knowledge prose descriptions - Added to ASTER_SAFE_TOOLS so Aster can schedule her own rhythm - CLI subcommand for direct schedule management Seed identity (src/core/identity/): - Ed25519 keypair, load-or-generate at init - sign/verify primitives, CLI subcommand (show/sign/verify) - Wired into LocalBackend, threaded through SensorEvent for federation Credentials (src/core/credentials.rs): - OS keyring (Linux/macOS/Windows) + env var fallback - `souveraine auth` subcommand - Removes hardcoded Bifrost api_key from souveraine.toml Subconscious ledger (src/core/memory/mod.rs init_subconscious_ledger): - 6 ledger files (commitments/assumptions/patterns/drift_log/ relationships/infrastructure) with proper YAML frontmatter - Paths fixed: ledger/ not subconscious/ledger/ - Body usage instructions, idempotent init Prompt orientation (src/core/prompt.rs build_ledger_orientation): - Scans ledger/ directory, injects last 3 entries from each file into Aster's system prompt (live context, not just awareness) - Routing table + workflow (read before write, timestamped append) Consciousness engine (src/server/consciousness_engine.rs): - Adaptive rate delay shared with primary loop - Four-fold mandate (Complete/Verify/Persist/Surface) in hardcoded default prompt; observation format extracted for sharing - Schedule added to ASTER_SAFE_TOOLS Backend + CLI wiring expanded to mount the nervous system, identity, and credentials at startup. New TOML sections: [schedules], [events], [federation]. 102 tests passing.
2026-05-12 08:14:25 -04:00
panic = "abort"
[features]
web = ["dep:wry", "dep:tao", "dep:gtk"]
default = ["figlet-rs"]
figlet-rs = ["dep:figlet-rs"]
cowsay = ["dep:cowsay"]
tauri-desktop = ["dep:tauri", "dep:tauri-plugin-shell"]
rgp = ["dep:ratatui-ratty"]
# Matrix sensorium — opt-in surface. `cargo build --features matrix`.
matrix = ["dep:matrix-sdk"]
# GUI render mode — forwards to tuie's windowed backend (winit/wgpu). Gates the
# color-scheme / font-size controls in theme.rs and global_chords.rs.
gui = ["tuie/gui"]
# Secret Service daemon (org.freedesktop.secrets), backed by the existing SeedId.
secrets = ["dep:zbus", "dep:zvariant", "dep:aes", "dep:cbc", "dep:cipher", "dep:hkdf", "dep:num-bigint", "dep:num-traits", "dep:aes-gcm", "dep:argon2"]
# Session authority daemon — holds ext-session-lock before/under the shell.
sessiond = ["dep:wayland-client", "dep:wayland-protocols"]
usb-kvm = ["dep:gadgetry-most-foul", "dep:gud-gadget", "dep:softbuffer", "dep:winit"]
wry = ["dep:wry"]
tao = ["dep:tao"]
gtk = ["dep:gtk"]
[patch."https://github.com/samcday/gadgetry-most-foul.git"]
gadgetry-most-foul = { version = "0.1.1" }
[[bin]]
name = "souveraine-web"
path = "src/bin/souveraine-web.rs"
required-features = ["web"]