Module-Database Graph
Complete data flow visualization for MonoTerm.Copy
╔═════════════════════════════════════════════════════════════════════╗
║ MONOLEX DATA FLOW GRAPH ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ DAEMON LAYER ║
║ ════════════ ║
║ ║
║ ┌─────────────────┐ Unix Socket ┌─────────────────┐ ║
║ │ PTY Daemon │────────────────────▶│ Rust Backend │ ║
║ │ (pty-daemon- │ │ (SessionActor) │ ║
║ │ rust) │ │ │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ rusqlite ┌─────────────────┐ ║
║ │ File Watcher │────────────────────▶│ niia-watcher.db │ ║
║ │ (niia-watcher) │ (direct) │ │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ RUST BACKEND ──▶ DATABASES ║
║ ═══════════════════════════ ║
║ ║
║ ┌─────────────────┐ rusqlite ┌─────────────────┐ ║
║ │ PTY Log │────────────────────▶│ atomic-term.db │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ rusqlite ┌─────────────────┐ ║
║ │ Session DB │────────────────────▶│ session.db │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ rusqlite ┌─────────────────┐ ║
║ │ OnIt │────────────────────▶│ onit.db │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ rusqlite ┌─────────────────┐ ║
║ │ Diff History │────────────────────▶│ work-wiki-diff │ ║
║ └─────────────────┘ │ .db │ ║
║ └─────────────────┘ ║
║ ║
║ CROSS-DB OPERATION ║
║ ══════════════════ ║
║ ║
║ ┌─────────────────┐ READ ┌─────────────────┐ ║
║ │ Auto-fix │◀────────────────────│ niia-watcher.db │ ║
║ │ │ └─────────────────┘ ║
║ │ │ UPDATE ┌─────────────────┐ ║
║ │ │────────────────────▶│ atomic-term.db │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ FRONTEND ──▶ TAURI COMMANDS ║
║ ════════════════════════════ ║
║ ║
║ ┌─────────────────┐ invoke() ┌─────────────────┐ ║
║ │ Worked Polling │────────────────────▶│ PTY Log │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ invoke() ┌─────────────────┐ ║
║ │ Watcher Tab │────────────────────▶│ NIIA (query) │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ invoke() ┌─────────────────┐ ║
║ │ OnIt Polling │────────────────────▶│ OnIt │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
║ ┌─────────────────┐ invoke() ┌─────────────────┐ ║
║ │ Diff Viewer │────────────────────▶│ Diff History │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Write Flow Summary
How data flows into databases.Copy
╔═════════════════════════════════════════════════════════════════════╗
║ WRITE PATTERNS ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ PATTERN A: DAEMON DIRECT (No IPC) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ File Watcher Daemon │ ║
║ │ │ │ ║
║ │ │ rusqlite (direct connection) │ ║
║ │ ▼ │ ║
║ │ niia-watcher.db:file_events │ ║
║ │ │ ║
║ │ Benefit: Maximum performance, no IPC overhead │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ PATTERN B: BACKEND REAL-TIME ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ PTY Stream ──▶ VTE Parser ──▶ PTY Log │ ║
║ │ │ │ ║
║ │ │ INSERT │ ║
║ │ ▼ │ ║
║ │ atomic-term.db │ ║
║ │ │ ║
║ │ Benefit: Real-time activity capture │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ PATTERN C: FRONTEND INVOKE ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ User Action ──▶ Frontend ──▶ Tauri invoke() │ ║
║ │ │ │ ║
║ │ │ Rust Command │ ║
║ │ ▼ │ ║
║ │ session.db │ ║
║ │ onit.db │ ║
║ │ work-wiki-diff.db │ ║
║ │ │ ║
║ │ Benefit: User-initiated operations │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ PATTERN D: BACKEND TIMER ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ Rust Backend (10-second interval) │ ║
║ │ │ │ ║
║ │ │ UPDATE last_heartbeat │ ║
║ │ ▼ │ ║
║ │ session.db:terminal_heartbeats │ ║
║ │ │ ║
║ │ Benefit: Session health monitoring │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Read Flow Summary
How data flows out of databases.Copy
╔═════════════════════════════════════════════════════════════════════╗
║ READ PATTERNS ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ PATTERN A: FRONTEND INVOKE (UI Display) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ Frontend │ ║
║ │ │ │ ║
║ │ │ invoke("get_data") │ ║
║ │ ▼ │ ║
║ │ Tauri Command ──▶ Rust Module ──▶ SELECT │ ║
║ │ │ │ ║
║ │ ▼ │ ║
║ │ JSON Response ──▶ UI Update │ ║
║ │ │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ PATTERN B: BACKEND INTERNAL (Recovery/Startup) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ App Startup │ ║
║ │ │ │ ║
║ │ │ recover_sessions() │ ║
║ │ ▼ │ ║
║ │ SELECT FROM session.db WHERE is_alive = 1 │ ║
║ │ │ │ ║
║ │ ▼ │ ║
║ │ Reconnect to PTY Daemon │ ║
║ │ │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ PATTERN C: CROSS-DB (Path Resolution) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ │ ║
║ │ Auto-fix Module │ ║
║ │ │ │ ║
║ │ │ SELECT FROM niia-watcher.db (find full path) │ ║
║ │ ▼ │ ║
║ │ UPDATE atomic-term.db (set resolved path) │ ║
║ │ │ ║
║ │ Benefit: Resolve truncated terminal paths │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Per-Database Module Mapping
Detailed ownership for each database.Copy
╔═════════════════════════════════════════════════════════════════════╗
║ DATABASE OWNERSHIP MATRIX ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ atomic-term.db ║
║ ┌──────────────┬────────┬────────────────────────────────────┐ ║
║ │ Operation │ Module │ Function │ ║
║ ├──────────────┼────────┼────────────────────────────────────┤ ║
║ │ Write │ PTY Log│ Insert parsed activities │ ║
║ │ Write │ Auto-fix│ Update resolved paths │ ║
║ │ Read │ PTY Log│ Get worked files list │ ║
║ └──────────────┴────────┴────────────────────────────────────┘ ║
║ ║
║ session.db ║
║ ┌──────────────┬────────┬────────────────────────────────────┐ ║
║ │ Operation │ Module │ Function │ ║
║ ├──────────────┼────────┼────────────────────────────────────┤ ║
║ │ Write │ Session│ Save terminal, heartbeat │ ║
║ │ Read │ Session│ Get alive terminals │ ║
║ └──────────────┴────────┴────────────────────────────────────┘ ║
║ ║
║ onit.db ║
║ ┌──────────────┬────────┬────────────────────────────────────┐ ║
║ │ Operation │ Module │ Function │ ║
║ ├──────────────┼────────┼────────────────────────────────────┤ ║
║ │ Write │ OnIt │ Insert activity, relations │ ║
║ │ Read │ OnIt │ Get recent, project folders │ ║
║ └──────────────┴────────┴────────────────────────────────────┘ ║
║ ║
║ niia-watcher.db ║
║ ┌──────────────┬────────┬────────────────────────────────────┐ ║
║ │ Operation │ Module │ Function │ ║
║ ├──────────────┼────────┼────────────────────────────────────┤ ║
║ │ Write │ DAEMON │ Insert file events (direct) │ ║
║ │ Read │ NIIA │ Query file events │ ║
║ │ Read │ Auto-fix│ Search by timestamp │ ║
║ └──────────────┴────────┴────────────────────────────────────┘ ║
║ ║
║ work-wiki-diff.db ║
║ ┌──────────────┬────────┬────────────────────────────────────┐ ║
║ │ Operation │ Module │ Function │ ║
║ ├──────────────┼────────┼────────────────────────────────────┤ ║
║ │ Write │ Diff │ Record diffs │ ║
║ │ Read │ Diff │ Get history │ ║
║ └──────────────┴────────┴────────────────────────────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Cross-Database Dependencies
How databases relate to each other.Copy
╔═════════════════════════════════════════════════════════════════════╗
║ CROSS-DATABASE DEPENDENCIES ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ Path Resolution ║
║ niia-watcher.db ────────────────────────────────▶ atomic-term.db ║
║ ║
║ Terminal ID Reference ║
║ atomic-term.db ────────────────────────────────▶ session.db ║
║ ║
║ Activity Logging ║
║ atomic-term.db ────────────────────────────────▶ onit.db ║
║ ║
║ File Event Correlation ║
║ niia-watcher.db ────────────────────────────────▶ onit.db ║
║ ║
║ Git Repository Reference ║
║ onit.db ────────────────────────────────▶ work-wiki-diff ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Design Principles Applied
Copy
╔═════════════════════════════════════════════════════════════════════╗
║ DESIGN PRINCIPLES ║
╠═════════════════════════════════════════════════════════════════════╣
║ ║
║ SIMPLICITY (SMPC) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ [x] Each Rust module owns ONE database │ ║
║ │ [x] Auto-fix is only cross-DB exception (clearly documented) │ ║
║ │ [x] Frontend only reads via invoke() │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
║ ORDER FROM CHAOS (OFAC) ║
║ ┌───────────────────────────────────────────────────────────────┐ ║
║ │ [x] Daemon writes directly (no IPC for performance) │ ║
║ │ [x] Timer-based heartbeat for reliability │ ║
║ │ [x] Clear module role separation │ ║
║ └───────────────────────────────────────────────────────────────┘ ║
║ ║
╚═════════════════════════════════════════════════════════════════════╝
Connection Summary Table
| # | Source | Target | Operation | Trigger |
|---|---|---|---|---|
| 1 | File Watcher Daemon | niia-watcher.db | INSERT | File system event |
| 2 | PTY Log | atomic-term.db | INSERT | PTY stream |
| 3 | Auto-fix | atomic-term.db | UPDATE | Post-INSERT hook |
| 4 | Auto-fix | niia-watcher.db | SELECT | Path lookup |
| 5 | Session DB | session.db | INSERT/UPDATE | Heartbeat/Startup |
| 6 | OnIt | onit.db | INSERT/SELECT | Frontend invoke |
| 7 | NIIA | niia-watcher.db | SELECT | Frontend invoke |
| 8 | Diff History | work-wiki-diff.db | INSERT/SELECT | File save |