Skip to main content

Module-Database Graph

Complete data flow visualization for MonoTerm.
╔═════════════════════════════════════════════════════════════════════╗
║                     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.
╔═════════════════════════════════════════════════════════════════════╗
║                       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.
╔═════════════════════════════════════════════════════════════════════╗
║                        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.
╔═════════════════════════════════════════════════════════════════════╗
║                   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.
╔═════════════════════════════════════════════════════════════════════╗
║                  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

╔═════════════════════════════════════════════════════════════════════╗
║                     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

#SourceTargetOperationTrigger
1File Watcher Daemonniia-watcher.dbINSERTFile system event
2PTY Logatomic-term.dbINSERTPTY stream
3Auto-fixatomic-term.dbUPDATEPost-INSERT hook
4Auto-fixniia-watcher.dbSELECTPath lookup
5Session DBsession.dbINSERT/UPDATEHeartbeat/Startup
6OnItonit.dbINSERT/SELECTFrontend invoke
7NIIAniia-watcher.dbSELECTFrontend invoke
8Diff Historywork-wiki-diff.dbINSERT/SELECTFile save
Total: 8 Primary Connections (+ Frontend reads via invoke)