# veinsurelee/auto-cx architecture

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

- Interactive diagram: https://gitdiagram.com/veinsurelee/auto-cx
- Repository: https://github.com/veinsurelee/auto-cx

## Overview

This is a Playwright-based Chaoxing learning assistant. Its main workflow logs in, discovers incomplete courses, reads lesson catalogs, then resumes each eligible lesson through assessment followed by natural video playback; it persists progress and reports outcomes. Separate entry points support read-only course progress and a visible video preview. The README documents additional quiz, concurrency, and recovery behavior beyond the sampled excerpts; those branches are included where paths are supported, while uncertain internal wiring is omitted.

Main entry points: [`src/learning/lesson.mjs`](https://github.com/veinsurelee/auto-cx/blob/main/src/learning/lesson.mjs) (Lesson workflow), [`src/login.mjs`](https://github.com/veinsurelee/auto-cx/blob/main/src/login.mjs) (Login workflow), [`src/learning/course-worker.mjs`](https://github.com/veinsurelee/auto-cx/blob/main/src/learning/course-worker.mjs) (Course worker), [`src/study-cli.mjs`](https://github.com/veinsurelee/auto-cx/blob/main/src/study-cli.mjs) (Study command)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry workflows"]
  node_login["Login workflow<br/>[login.mjs]"]
  node_preview["Video preview<br/>[preview.mjs]"]
  node_progresscli["Progress command<br/>[progress-cli.mjs]"]
  node_studycli["Study command<br/>[study-cli.mjs]"]
end

subgraph group_platform["Platform discovery"]
  node_courses["Course discovery<br/>[courses.mjs]"]
  node_navigation["Course navigation"]
  node_catalog["Lesson catalog<br/>[task-manifest.mjs]"]
  node_progressread["Progress reader"]
  node_taskstate["Task status"]
end

subgraph group_learning["Lesson execution"]
  node_worker["Course worker<br/>[course-worker.mjs]"]
  node_scheduler["Lesson scheduler<br/>[scheduler.mjs]"]
  node_lesson["Lesson workflow<br/>[lesson.mjs]"]
end

subgraph group_assessment["Assessment and media"]
  node_chapterquiz["Chapter assessment<br/>[chapter-quiz.mjs]"]
  node_answerer["Answer generation<br/>[answerer.mjs]"]
  node_videopopup["Video pop-up quiz<br/>[video-popup.mjs]"]
  node_videorunner["Video runner<br/>[runner.mjs]"]
  node_media["Media playback<br/>[media.mjs]"]
end

subgraph group_state["Progress and records"]
  node_memo[("Study memo<br/>[memo.mjs]")]
  node_report["Study reports<br/>[study-report.mjs]"]
  node_progressreport["Progress reports<br/>[report-builder.mjs]"]
end

node_user(("User"))
node_chaoxing(("Chaoxing platform"))
node_deepseek(("DeepSeek API"))
node_artifacts[("Local artifacts")]

node_user -->|"starts login"| node_login
node_login -->|"authenticates"| node_chaoxing
node_login -->|"discovers courses"| node_courses
node_courses -->|"reads courses"| node_chaoxing
node_login -->|"opens target"| node_navigation
node_navigation -->|"navigates"| node_chaoxing
node_login -->|"writes session and courses"| node_artifacts
node_user -->|"requests progress"| node_progresscli
node_progresscli -->|"reads catalogs"| node_progressread
node_progressread -->|"reads lesson state"| node_chaoxing
node_progresscli -->|"builds reports"| node_progressreport
node_progressreport -->|"writes progress"| node_artifacts
node_user -->|"starts study"| node_studycli
node_studycli -->|"runs courses"| node_worker
node_worker -->|"opens catalogs"| node_catalog
node_worker -->|"schedules lessons"| node_scheduler
node_worker -->|"refreshes catalog"| node_memo
node_worker -->|"processes lessons"| node_lesson
node_scheduler -->|"dispatches work"| node_lesson
node_lesson -->|"discovers tasks"| node_catalog
node_lesson -->|"handles assessment"| node_chapterquiz
node_chapterquiz -->|"requests answers"| node_answerer
node_answerer -.->|"requests completion"| node_deepseek
node_lesson -->|"runs video tasks"| node_videorunner
node_videorunner -->|"controls playback"| node_media
node_lesson -->|"reads task status"| node_taskstate
node_lesson -->|"updates lesson state"| node_memo
node_lesson -->|"handles embedded quizzes"| node_videopopup
node_studycli -->|"builds study report"| node_report
node_studycli -->|"loads and saves memo"| node_memo
node_memo -->|"persists memo"| node_artifacts
node_report -->|"writes study reports"| node_artifacts
node_user -->|"requests preview"| node_preview
node_preview -->|"plays lesson video"| node_chaoxing

click node_login "https://github.com/veinsurelee/auto-cx/blob/main/src/login.mjs"
click node_preview "https://github.com/veinsurelee/auto-cx/blob/main/src/video/preview.mjs"
click node_progresscli "https://github.com/veinsurelee/auto-cx/blob/main/src/progress-cli.mjs"
click node_studycli "https://github.com/veinsurelee/auto-cx/blob/main/src/study-cli.mjs"
click node_courses "https://github.com/veinsurelee/auto-cx/blob/main/src/platform/courses.mjs"
click node_navigation "https://github.com/veinsurelee/auto-cx/blob/main/src/platform/course-navigation.mjs"
click node_catalog "https://github.com/veinsurelee/auto-cx/blob/main/src/platform/task-manifest.mjs"
click node_progressread "https://github.com/veinsurelee/auto-cx/blob/main/src/platform/course-progress.mjs"
click node_taskstate "https://github.com/veinsurelee/auto-cx/blob/main/src/platform/task-point-status.mjs"
click node_worker "https://github.com/veinsurelee/auto-cx/blob/main/src/learning/course-worker.mjs"
click node_scheduler "https://github.com/veinsurelee/auto-cx/blob/main/src/learning/scheduler.mjs"
click node_lesson "https://github.com/veinsurelee/auto-cx/blob/main/src/learning/lesson.mjs"
click node_chapterquiz "https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/chapter-quiz.mjs"
click node_answerer "https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/answerer.mjs"
click node_videopopup "https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/video-popup.mjs"
click node_videorunner "https://github.com/veinsurelee/auto-cx/blob/main/src/video/runner.mjs"
click node_media "https://github.com/veinsurelee/auto-cx/blob/main/src/video/media.mjs"
click node_memo "https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/memo.mjs"
click node_report "https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/study-report.mjs"
click node_progressreport "https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/report-builder.mjs"

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_login,node_preview,node_progresscli,node_studycli,node_user toneBlue
class node_courses,node_navigation,node_catalog,node_progressread,node_taskstate,node_artifacts toneAmber
class node_worker,node_scheduler,node_lesson,node_deepseek toneMint
class node_chapterquiz,node_answerer,node_videopopup,node_videorunner,node_media toneRose
class node_memo,node_report,node_progressreport,node_chaoxing toneIndigo
```

## Components

### Entry workflows

- [Login workflow](https://github.com/veinsurelee/auto-cx/blob/main/src/login.mjs): `src/login.mjs`
- [Video preview](https://github.com/veinsurelee/auto-cx/blob/main/src/video/preview.mjs): `src/video/preview.mjs`
- [Progress command](https://github.com/veinsurelee/auto-cx/blob/main/src/progress-cli.mjs): `src/progress-cli.mjs`
- [Study command](https://github.com/veinsurelee/auto-cx/blob/main/src/study-cli.mjs): `src/study-cli.mjs`

### Platform discovery

- [Course discovery](https://github.com/veinsurelee/auto-cx/blob/main/src/platform/courses.mjs): `src/platform/courses.mjs`
- [Course navigation](https://github.com/veinsurelee/auto-cx/blob/main/src/platform/course-navigation.mjs): `src/platform/course-navigation.mjs`
- [Lesson catalog](https://github.com/veinsurelee/auto-cx/blob/main/src/platform/task-manifest.mjs): `src/platform/task-manifest.mjs`
- [Progress reader](https://github.com/veinsurelee/auto-cx/blob/main/src/platform/course-progress.mjs): `src/platform/course-progress.mjs`
- [Task status](https://github.com/veinsurelee/auto-cx/blob/main/src/platform/task-point-status.mjs): `src/platform/task-point-status.mjs`

### Lesson execution

- [Course worker](https://github.com/veinsurelee/auto-cx/blob/main/src/learning/course-worker.mjs): `src/learning/course-worker.mjs`
- [Lesson scheduler](https://github.com/veinsurelee/auto-cx/blob/main/src/learning/scheduler.mjs): `src/learning/scheduler.mjs`
- [Lesson workflow](https://github.com/veinsurelee/auto-cx/blob/main/src/learning/lesson.mjs): `src/learning/lesson.mjs`

### Assessment and media

- [Chapter assessment](https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/chapter-quiz.mjs): `src/assessment/chapter-quiz.mjs`
- [Answer generation](https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/answerer.mjs): `src/assessment/answerer.mjs`
- [Video pop-up quiz](https://github.com/veinsurelee/auto-cx/blob/main/src/assessment/video-popup.mjs): `src/assessment/video-popup.mjs`
- [Video runner](https://github.com/veinsurelee/auto-cx/blob/main/src/video/runner.mjs): `src/video/runner.mjs`
- [Media playback](https://github.com/veinsurelee/auto-cx/blob/main/src/video/media.mjs): `src/video/media.mjs`

### Progress and records

- [Study memo](https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/memo.mjs): `src/persistence/memo.mjs`
- [Study reports](https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/study-report.mjs): `src/persistence/study-report.mjs`
- [Progress reports](https://github.com/veinsurelee/auto-cx/blob/main/src/persistence/report-builder.mjs): `src/persistence/report-builder.mjs`

### Other components

- **User**
- **Chaoxing platform**
- **DeepSeek API**
- **Local artifacts**

## Connections

- User → Login workflow: starts login
- Login workflow → Chaoxing platform: authenticates
- Login workflow → Course discovery: discovers courses
- Course discovery → Chaoxing platform: reads courses
- Login workflow → Course navigation: opens target
- Course navigation → Chaoxing platform: navigates
- Login workflow → Local artifacts: writes session and courses
- User → Progress command: requests progress
- Progress command → Progress reader: reads catalogs
- Progress reader → Chaoxing platform: reads lesson state
- Progress command → Progress reports: builds reports
- Progress reports → Local artifacts: writes progress
- User → Study command: starts study
- Study command → Course worker: runs courses
- Course worker → Lesson catalog: opens catalogs
- Course worker → Lesson scheduler: schedules lessons
- Course worker → Study memo: refreshes catalog
- Course worker → Lesson workflow: processes lessons
- Lesson scheduler → Lesson workflow: dispatches work
- Lesson workflow → Lesson catalog: discovers tasks
- Lesson workflow → Chapter assessment: handles assessment
- Chapter assessment → Answer generation: requests answers
- Answer generation → DeepSeek API: requests completion
- Lesson workflow → Video runner: runs video tasks
- Video runner → Media playback: controls playback
- Lesson workflow → Task status: reads task status
- Lesson workflow → Study memo: updates lesson state
- Lesson workflow → Video pop-up quiz: handles embedded quizzes
- Study command → Study reports: builds study report
- Study command → Study memo: loads and saves memo
- Study memo → Local artifacts: persists memo
- Study reports → Local artifacts: writes study reports
- User → Video preview: requests preview
- Video preview → Chaoxing platform: plays lesson video
