Component-Database Relations
Understanding how MonoTermβs components interact with databases.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COMPONENT-DATABASE OVERVIEW β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β DAEMON LAYER DATABASE LAYER β
β βββββββββββββββββββ βββββββββββββββββββ β
β β PTY Daemon βββββUnixββββββΆβ No direct DB β β
β β (pty-daemon- β Socket β Pure I/O only β β
β β rust) β βββββββββββββββββββ β
β βββββββββββββββββββ β
β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β File Watcher βββrusqliteββββΆβ niia-watcher.db β β
β β (niia-watcher) β direct β File events β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β
β RUST BACKEND β
β βββββββββββββββββββ βββββββββββββββββββ β
β β SessionActor βββrusqliteββββΆβ session.db β β
β β (lib.rs) β β Terminal state β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β PTY Log βββrusqliteββββΆβ atomic-term.db β β
β β (VTE Parser) β β Activity logs β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Write Access Matrix
Which components can write to which databases.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WRITE ACCESS MATRIX β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β β atomic- β session β onit β niia- β work-wiki β
β COMPONENT β term.db β .db β .db β watcher β -diff.db β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β PTY Daemon β - β - β - β - β - β
β (No DB access) β β β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β Rust Backend β Yes β Yes β Yes β - β Yes β
β (SessionActor) β β β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β File Watcher β - β - β - β Yes β - β
β (Daemon) β β β β direct β β
β β
β Legend: Yes = Write access, - = No access β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Terminal Input to Activity Log
How user input becomes a logged activity.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TERMINAL INPUT βββΆ ACTIVITY LOG β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β You Type Command β
β β β
β βΌ β
β βββββββββββββββββββ β
β β xterm.js β Frontend terminal display β
β βββββββββββββββββββ β
β β β
β β Tauri IPC β
β βΌ β
β βββββββββββββββββββ β
β β SessionActor β Rust backend β
β β (lib.rs) β Routes to PTY β
β βββββββββββββββββββ β
β β β
β β Unix Socket β
β βΌ β
β βββββββββββββββββββ β
β β PTY Daemon β Sends to shell β
β βββββββββββββββββββ β
β β β
β β Shell executes, returns output β
β βΌ β
β βββββββββββββββββββ βββββββββββββββββββ β
β β VTE Parser ββββββΆβ Activity Log β β
β β (Alacritty) β β (atomic-term.db)β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β β
β β ACK Handshake β
β βΌ β
β βββββββββββββββββββ β
β β xterm.js β Display updated β
β βββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
File Change to UI Update
How file system changes appear in the UI.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FILE CHANGE βββΆ UI UPDATE β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β File Created/Modified/Deleted β
β β β
β β OS Event (FSEvents/inotify) β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β File Watcher Daemon (Sidecar) β β
β β β β
β β Rust notify crate β β
β β β β β
β β β Debounce (100ms) β β
β β βΌ β β
β β Direct rusqlite write (NO IPC overhead) β β
β β β β β
β β βΌ β β
β β niia-watcher.db β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
β Async Polling (every 3-5s) β
β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β β
β β
β Frontend polls for new events β
β β β
β β Tauri invoke() β
β βΌ β
β SELECT * FROM file_events WHERE timestamp > last_check β
β β β
β βΌ β
β UI Updates with new file events β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Session Lifecycle
Four phases of a terminal session.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SESSION LIFECYCLE β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β PHASE 1: APP LAUNCH β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Read saved state from session.db β β
β β 2. Start PTY Daemon (3-retry pattern) β β
β β 3. Recover orphaned sessions (reconnect to alive PTYs) β β
β β 4. Restore document tabs β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PHASE 2: ACTIVE SESSION β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Terminal Activity: User Input βββΆ PTY βββΆ Activity Log β β
β β - Heartbeat (every 10s): UPDATE terminal_heartbeats β β
β β - Project Switch: Track project associations β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PHASE 3: TAB CLOSE β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Terminal: Mark session inactive (is_active=0) β β
β β - Clean up resources β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PHASE 4: APP CLOSE β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - Save state to session.db β β
β β - PTY Daemon: Stays running (detached, crash-resilient) β β
β β - File Watcher: Stays running (detached) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Cross-Database Sync Points
When data moves between databases.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CROSS-DATABASE SYNC β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β SYNC POINT SOURCE βββΆ TARGET TRIGGER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Terminal State Rust Backend Session β
β βββΆ create/destroyβ
β session.db β
β β
β Activity Logs atomic-term.db Activity β
β βββΆ detected β
β onit.db β
β β
β File Events niia-watcher.db Periodic β
β βββΆ (30s) β
β onit.db β
β β
β Path Resolution niia-watcher.db Relative β
β βββΆ path lookup β
β atomic-term.db β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Write Optimization Patterns
How writes are optimized for performance.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WRITE OPTIMIZATION PATTERNS β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β PATTERN A: Direct Write (Highest Performance) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Use Case: High-frequency events (file watcher) β β
β β Method: rusqlite direct connection β β
β β Example: File Watcher βββΆ niia-watcher.db β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PATTERN B: Batched Write (Balanced) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Use Case: Medium-frequency events (PTY log) β β
β β Method: Batch 10 items OR flush every 100ms β β
β β Example: PTY Log βββΆ atomic-term.db β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PATTERN C: Deferred Write (Debounced) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Use Case: Low-frequency events (window state) β β
β β Method: Debounce 500ms before write β β
β β Example: Window resize βββΆ session.db β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Design Principles Applied
Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DESIGN PRINCIPLES β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β
β SIMPLICITY (SMPC) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [x] PTY Daemon = No DB access (pure I/O passthrough) β β
β β [x] VTE Parser = Transform only (no persistence logic) β β
β β [x] Direct path: Event βββΆ Daemon βββΆ DB β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ORDER FROM CHAOS (OFAC) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [x] Daemons survive app crash (detached processes) β β
β β [x] 3-retry pattern for daemon startup β β
β β [x] WAL mode for concurrent access β β
β β [x] Separate DBs per domain (isolation) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Quick Reference
| Component | DB Access | Key Pattern |
|---|---|---|
| PTY Daemon | None | Pure I/O passthrough |
| VTE Parser | None | Transform only |
| PTY Log | 1 DB Write | atomic-term.db |
| File Watcher | 1 DB Write | Detached daemon |
| OnIt Sidebar | 4 DBs Read | Aggregation view |