# sssssjw11/touxian architecture

> Architecture diagram of the GitHub repository sssssjw11/touxian, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sssssjw11/touxian
- Repository: https://github.com/sssssjw11/touxian

## Overview

偷闲 is a local-first product with two independent clients: Android captures only the user-visible WeChat conversation, analyzes and tracks actionable events, and supports confirmed calendar writes; Attention Desk imports chat records and monitors campus notices for triage. The README documents both workflows and their capabilities. Edges cite the README or shown/import-index evidence; unsampled internals are represented only where the README establishes their role.

Main entry points: [`android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt) (Visible chat capture), [`desktop/attention-desk/server/main.py`](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/main.py) (Desktop API), [`desktop/attention-desk/src/App.jsx`](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/src/App.jsx) (Attention Desk), [`android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt`](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt) (Relationship reports)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android_capture["Android capture"]
  node_capture_service["Visible chat capture"]
  node_wechat_adapter["WeChat adapter<br/>[WeChatAdapter.kt]"]
  node_ocr["On-device OCR<br/>[OnDeviceChatOcr.kt]"]
  node_recording[("Session recording<br/>[ChatRecording.kt]")]
  node_archive[("Message archive<br/>[MessageArchive.kt]")]
end

subgraph group_android_analysis["Android analysis"]
  node_scope["Conversation scope"]
  node_attention_engine["Event analysis<br/>[AttentionEngine.kt]"]
  node_jev["Intent analysis<br/>[JevIntentEngine.kt]"]
  node_deepseek["Optional DeepSeek"]
  node_keyword_rules["Message keyword rules"]
  node_relationship_analysis["Relationship analysis"]
end

subgraph group_android_product["Android workspace"]
  node_main_activity["Event notebook<br/>[MainActivity.kt]"]
  node_event_store[("Event notebook store<br/>[EventStore.kt]")]
  node_overlay["Floating overlay"]
  node_calendar["Confirmed calendar write<br/>[CalendarWriter.kt]"]
  node_analysis_activity["Relationship reports"]
end

subgraph group_desktop_ingest["Desktop intake"]
  node_chat_intake[("Chat import and archive<br/>[chat_archive.py]")]
  node_wechat_bridge["Local WeChat bridge<br/>[wechat_bridge.py]"]
  node_inbox["Forwarded inbox<br/>[inbox.py]"]
end

subgraph group_desktop_triage["Desktop triage"]
  node_triage["Message triage<br/>[main.py]"]
  node_common["Date and request utilities<br/>[_common.py]"]
  node_monitor["Official notice monitor"]
end

subgraph group_desktop_workspace["Desktop workspace"]
  node_desktop_ui["Attention Desk<br/>[App.jsx]"]
  node_api["Desktop API<br/>[main.py]"]
  node_completion[("Completion state")]
  node_mail_digest["Email digest<br/>[mail_digest.py]"]
end

node_user(("User"))
node_wechat["WeChat screen"]
node_desktop_user(("Desktop user"))
node_chat_sources["Chat files / exports"]
node_campus_sources["Campus websites"]

node_user -->|"opens conversation"| node_wechat
node_wechat -->|"exposes visible content"| node_capture_service
node_capture_service -.->|"reads screen"| node_wechat_adapter
node_capture_service -.->|"optionally extracts text"| node_ocr
node_capture_service -->|"checks conversation"| node_scope
node_capture_service -->|"analyzes messages"| node_attention_engine
node_capture_service -->|"analyzes intent"| node_jev
node_attention_engine -->|"applies rules"| node_keyword_rules
node_capture_service -.->|"requests enhancement"| node_deepseek
node_capture_service -->|"stores events"| node_event_store
node_capture_service -->|"records session"| node_recording
node_recording -->|"persists messages"| node_archive
node_capture_service -->|"updates display"| node_overlay
node_user -->|"reviews and manages"| node_main_activity
node_main_activity -->|"loads events"| node_event_store
node_user -->|"confirms calendar entry"| node_calendar
node_user -->|"requests report"| node_analysis_activity
node_analysis_activity -->|"loads recordings"| node_archive
node_analysis_activity -->|"builds local report"| node_relationship_analysis
node_analysis_activity -.->|"optionally deepens"| node_deepseek
node_desktop_user -->|"uses workbench"| node_desktop_ui
node_chat_sources -->|"provides chat data"| node_desktop_ui
node_desktop_ui -->|"requests operations"| node_api
node_api -->|"routes imports"| node_chat_intake
node_api -->|"routes local export"| node_wechat_bridge
node_api -->|"scans forwarded files"| node_inbox
node_api -->|"classifies messages"| node_triage
node_triage -->|"uses date parsing"| node_common
node_campus_sources -->|"supplies notices"| node_monitor
node_desktop_ui -->|"browses notices"| node_monitor
node_api -->|"routes monitoring"| node_monitor
node_desktop_ui -->|"updates completion"| node_completion
node_desktop_ui -->|"requests digest"| node_mail_digest

click node_main_activity "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/MainActivity.kt"
click node_capture_service "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt"
click node_wechat_adapter "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/WeChatAdapter.kt"
click node_ocr "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/OnDeviceChatOcr.kt"
click node_scope "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/ConversationScope.kt"
click node_attention_engine "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/AttentionEngine.kt"
click node_jev "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/JevIntentEngine.kt"
click node_deepseek "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/ai/DeepSeekAttentionClient.kt"
click node_keyword_rules "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/MessageKeywordRule.kt"
click node_event_store "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/EventStore.kt"
click node_overlay "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/overlay/AttentionOverlayController.kt"
click node_calendar "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/calendar/CalendarWriter.kt"
click node_recording "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/ChatRecording.kt"
click node_archive "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/MessageArchive.kt"
click node_analysis_activity "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt"
click node_relationship_analysis "https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/RelationshipAnalysis.kt"
click node_desktop_ui "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/src/App.jsx"
click node_api "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/main.py"
click node_chat_intake "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/chat_archive.py"
click node_wechat_bridge "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/wechat_bridge.py"
click node_inbox "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/inbox.py"
click node_triage "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/main.py"
click node_common "https://github.com/sssssjw11/touxian/blob/main/desktop/_common.py"
click node_monitor "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/official_monitor.py"
click node_completion "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/completion_store.py"
click node_mail_digest "https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/mail_digest.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_capture_service,node_wechat_adapter,node_ocr,node_recording,node_archive,node_user,node_wechat,node_desktop_user toneBlue
class node_scope,node_attention_engine,node_jev,node_deepseek,node_keyword_rules,node_relationship_analysis toneAmber
class node_main_activity,node_event_store,node_overlay,node_calendar,node_analysis_activity toneMint
class node_chat_intake,node_wechat_bridge,node_inbox toneRose
class node_triage,node_common,node_monitor,node_chat_sources,node_campus_sources toneIndigo
class node_desktop_ui,node_api,node_completion,node_mail_digest toneTeal
```

## Components

### Android capture

- [Visible chat capture](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt): `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`
- [WeChat adapter](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/WeChatAdapter.kt): `android/app/src/main/java/com/attentionguard/app/capture/WeChatAdapter.kt`
- [On-device OCR](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/capture/OnDeviceChatOcr.kt): `android/app/src/main/java/com/attentionguard/app/capture/OnDeviceChatOcr.kt`
- [Session recording](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/ChatRecording.kt): `android/app/src/main/java/com/attentionguard/app/core/ChatRecording.kt`
- [Message archive](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/MessageArchive.kt): `android/app/src/main/java/com/attentionguard/app/core/MessageArchive.kt`

### Android analysis

- [Conversation scope](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/ConversationScope.kt): `android/app/src/main/java/com/attentionguard/app/core/ConversationScope.kt`
- [Event analysis](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/AttentionEngine.kt): `android/app/src/main/java/com/attentionguard/app/core/AttentionEngine.kt`
- [Intent analysis](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/JevIntentEngine.kt): `android/app/src/main/java/com/attentionguard/app/core/JevIntentEngine.kt`
- [Optional DeepSeek](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/ai/DeepSeekAttentionClient.kt): `android/app/src/main/java/com/attentionguard/app/ai/DeepSeekAttentionClient.kt`
- [Message keyword rules](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/MessageKeywordRule.kt): `android/app/src/main/java/com/attentionguard/app/core/MessageKeywordRule.kt`
- [Relationship analysis](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/RelationshipAnalysis.kt): `android/app/src/main/java/com/attentionguard/app/core/RelationshipAnalysis.kt`

### Android workspace

- [Event notebook](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/MainActivity.kt): `android/app/src/main/java/com/attentionguard/app/MainActivity.kt`
- [Event notebook store](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/core/EventStore.kt): `android/app/src/main/java/com/attentionguard/app/core/EventStore.kt`
- [Floating overlay](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/overlay/AttentionOverlayController.kt): `android/app/src/main/java/com/attentionguard/app/overlay/AttentionOverlayController.kt`
- [Confirmed calendar write](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/calendar/CalendarWriter.kt): `android/app/src/main/java/com/attentionguard/app/calendar/CalendarWriter.kt`
- [Relationship reports](https://github.com/sssssjw11/touxian/blob/main/android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt): `android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt`

### Desktop intake

- [Chat import and archive](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/chat_archive.py): `desktop/attention-desk/server/chat_archive.py`
- [Local WeChat bridge](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/wechat_bridge.py): `desktop/attention-desk/server/wechat_bridge.py`
- [Forwarded inbox](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/inbox.py): `desktop/attention-desk/server/inbox.py`

### Desktop triage

- [Message triage](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/main.py): `desktop/attention-desk/server/main.py`
- [Date and request utilities](https://github.com/sssssjw11/touxian/blob/main/desktop/_common.py): `desktop/_common.py`
- [Official notice monitor](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/official_monitor.py): `desktop/attention-desk/server/official_monitor.py`

### Desktop workspace

- [Attention Desk](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/src/App.jsx): `desktop/attention-desk/src/App.jsx`
- [Desktop API](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/main.py): `desktop/attention-desk/server/main.py`
- [Completion state](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/completion_store.py): `desktop/attention-desk/server/completion_store.py`
- [Email digest](https://github.com/sssssjw11/touxian/blob/main/desktop/attention-desk/server/mail_digest.py): `desktop/attention-desk/server/mail_digest.py`

### Other components

- **User**
- **WeChat screen**
- **Desktop user**
- **Chat files / exports**
- **Campus websites**

## Connections

- User → WeChat screen: opens conversation
- WeChat screen → Visible chat capture: exposes visible content
- Visible chat capture → WeChat adapter: reads screen (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → On-device OCR: optionally extracts text (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → Conversation scope: checks conversation
- Visible chat capture → Event analysis: analyzes messages (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → Intent analysis: analyzes intent (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Event analysis → Message keyword rules: applies rules (evidence: `android/app/src/main/java/com/attentionguard/app/core/AttentionEngine.kt`)
- Visible chat capture → Optional DeepSeek: requests enhancement (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → Event notebook store: stores events (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → Session recording: records session (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Session recording → Message archive: persists messages (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- Visible chat capture → Floating overlay: updates display (evidence: `android/app/src/main/java/com/attentionguard/app/capture/ChatCaptureService.kt`)
- User → Event notebook: reviews and manages
- Event notebook → Event notebook store: loads events (evidence: `android/app/src/main/java/com/attentionguard/app/MainActivity.kt`)
- User → Confirmed calendar write: confirms calendar entry
- User → Relationship reports: requests report
- Relationship reports → Message archive: loads recordings (evidence: `android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt`)
- Relationship reports → Relationship analysis: builds local report (evidence: `android/app/src/main/java/com/attentionguard/app/ConversationAnalysisActivity.kt`)
- Relationship reports → Optional DeepSeek: optionally deepens
- Desktop user → Attention Desk: uses workbench
- Chat files / exports → Attention Desk: provides chat data
- Attention Desk → Desktop API: requests operations (evidence: `desktop/attention-desk/src/App.jsx`)
- Desktop API → Chat import and archive: routes imports (evidence: `desktop/attention-desk/server/main.py`)
- Desktop API → Local WeChat bridge: routes local export (evidence: `desktop/attention-desk/server/main.py`)
- Desktop API → Forwarded inbox: scans forwarded files (evidence: `desktop/attention-desk/server/main.py`)
- Desktop API → Message triage: classifies messages (evidence: `desktop/attention-desk/server/main.py`)
- Message triage → Date and request utilities: uses date parsing (evidence: `desktop/_common.py`)
- Campus websites → Official notice monitor: supplies notices
- Attention Desk → Official notice monitor: browses notices (evidence: `desktop/attention-desk/src/App.jsx`)
- Desktop API → Official notice monitor: routes monitoring (evidence: `desktop/attention-desk/server/main.py`)
- Attention Desk → Completion state: updates completion
- Attention Desk → Email digest: requests digest
