尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證遇事不决读毛选
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Don't worry, be fighting. 遇事不决读毛选,把问题带回事实、调查、矛盾分析、行动和复盘。
Red Wisdom 是一个以《毛泽东选集》为核心内容和方法论来源的学习与实践工具网站。
当前版本已经围绕“问题案例”打通抽卡、阅读、问道、行动和复盘。首页保持简洁抽卡体验;用户可以把长期现实困难记录到「我的问题」,在同一条时间线中积累事实、问答、笔记、行动和结果。核心页面支持移动端导航与 PWA 安装。账户系统使用 Supabase Google 登录;配置完成后会在首次登录时合并本机档案,并持续同步,未配置时自动保持本机私密模式。
🌐 在线访问: redwisdom.xyz
reading.html?concept=概念 可直达。问道时提到这些概念,AI 会拿到对应释义和原文出处。概念源数据在 data/concepts.source.json,修改后运行 npm run build:concepts。timeline.html 默认打开「沙盘地图」:在全国立体地图上,用一条可拖动的时间轴浏览 1919 年五四运动到 1949 年新中国成立的 53 件大事(之后的大事在「时间线」列表中)。时间轴按事件排列,标出建党与大革命、土地革命、全民族抗战、解放战争四个阶段和重大节点。js/timeline-data.js 的 place(可多个)和 PLACES 坐标表中;全国性或图外的事件用 placeNote 说明,只出现在时间轴上。major: true 标记重大节点。tests/timeline-map.test.js 校验日期解析、事件排序、每条事件都有地点或说明、坐标都在地图范围内。campaign.html 默认打开「长征全图」:在整幅中国地形图上推演中央红军从瑞金到陕北的全程(附南海诸岛附图),图上的战役标记和简报中的按钮可直接进入各战役沙盘。js/campaign-data.js,新增战役只需按同一格式补充地理、部队关键帧、章节和复盘;tests/campaign-data.test.js 会校验坐标范围、时间顺序、派系引用和毛选引文锚点。docs/content/history-case-editorial-policy.md。scripts/build-map-data.py 预先生成并提交到仓库:data/terrain/*.bin(Int16 高程栅格)和 data/map/*.json(矢量图层)。来源与许可:
campaigns.json,再运行 python3 scripts/build-map-data.py --dem gebco_2024_China.tif --vege vege_1km_projected.tif --ne natural-earth-vector/geojson --campaigns campaigns.json --out .。docs/database/migrations/2026-10-04-practice-loop.sql,未执行前这两项只保存在本机,其他字段照常同步。首页、阅读毛选、问道毛选三个页面右上角有「中 / EN」切换,选择会记在本机;链接上加 ?lang=en 或 ?lang=zh 也可以直接指定。英文模式下导航只保留这三项。
重新生成英文数据(需要能访问 marxists.org):
python3 scripts/build-english-edition.py --cache /tmp/mia-cache --out .
node scripts/build-search-index.mjs --edition en
| 类型 | 技术 |
|---|---|
| 前端 | HTML5 + Tailwind CSS + Vanilla JS |
| AI 对话 | DeepSeek API V4 Pro(OpenRouter 作为回退) |
| API 代理 | Cloudflare Worker(worker/index.mjs);迁移完成前 Vercel Serverless Function 并行 |
| 账户系统 | Supabase Auth (Google OAuth,配置后启用) |
| 数据库 | Supabase Postgres + Row Level Security |
| 部署平台 | Cloudflare Workers(静态资源 + Worker),迁移步骤见 docs/deploy/cloudflare.md |
| 数据格式 | JSON + Markdown |
| 离线能力 | Web App Manifest + Service Worker |
| 测试 | Node.js built-in test runner |
git clone https://github.com/kirinzhang/redwisdom.git
cd redwisdom
npm run dev
# 访问 http://127.0.0.1:4173
本地开发服务器会读取仓库根目录的 .env,并提供与线上一致的 /api/chat 路由。也可以用 npm install && npm run cf:dev 以 Cloudflare Workers 方式本地运行(机密写在 .dev.vars)。本地不会注册 PWA Service Worker,避免开发服务器停止后仍显示缓存页面。
AI 对话优先直连 DeepSeek V4 Pro:
DEEPSEEK_API_KEY=你的 DeepSeek API Key
未配置 DeepSeek Key 时,可以使用 OPENROUTER_API_KEY 回退到 OpenRouter 上的 deepseek/deepseek-v4-pro。部署到 Cloudflare 时,在 Worker 的「变量和机密」中配置密钥(Vercel 同理);本机 .env 不会上传。
问道接口的限流与来源限制(均为可选环境变量):
CHAT_LIMIT_PER_MINUTE=6 # 每个 IP 每分钟提问次数,默认 6
CHAT_LIMIT_PER_DAY=60 # 每个 IP 每天提问次数,默认 60
CHAT_GLOBAL_LIMIT_PER_DAY=0 # 全站每日总量上限,0 表示不限
UPSTASH_REDIS_REST_URL=... # 配置后跨函数实例共享计数(推荐生产环境使用)
UPSTASH_REDIS_REST_TOKEN=...
CHAT_ALLOWED_ORIGINS=https://redwisdom.xyz # 额外允许的来源,本站域名默认允许
未配置 Upstash 时,计数只保存在单个函数实例的内存里,只能挡住连续刷接口;正式环境建议接入 Upstash Redis(Cloudflare 与 Vercel 均可,通过 REST 访问)。
页面样式使用预先生成的 assets/tailwind.css。修改页面里的 Tailwind 类名后运行:
npm run build:css
账户系统需要在 config.js 中填写 Supabase 项目配置:
SUPABASE_URL: 'https://your-project.supabase.co',
SUPABASE_ANON_KEY: 'your-anon-key'
生产环境(Cloudflare Worker 或 Vercel)推荐直接配置以下公开环境变量,前端会通过 /api/public-config 在运行时读取,无需把值写入仓库:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-publishable-key
SUPABASE_GOOGLE_AUTH_ENABLED=false
只允许公开的 Supabase URL、Publishable Key 和 Provider 状态通过该接口返回;DeepSeek、OpenRouter 等服务端密钥不会暴露。Google Provider 配置完成后,把 SUPABASE_GOOGLE_AUTH_ENABLED 改为 true,并重新部署。
还需要在 Supabase Authentication 中启用 Google Provider。Google Cloud OAuth 客户端的 Authorized redirect URI 是 Supabase Auth 回调:
https://你的项目引用.supabase.co/auth/v1/callback
同时在 Supabase URL Configuration 的 Redirect URLs 中加入网站登录页:
https://你的域名/login.html
https://redwisdom.xyz/login.html
http://127.0.0.1:4173/login.html
数据库表和 RLS 策略见 docs/database/supabase-schema.sql。
node --test tests/*.test.js tests/*.test.mjs
node --check script.js
node --check js/analysis-guide.js
node --check js/auth-utils.js
node --check js/cloud-sync.js
node --check js/conversation-store.js
node --check js/quote-utils.js
node --check js/ai-methodology.js
node --check js/reading-notes-store.js
node --check js/reading-progress-store.js
node --check js/reading-guides.js
node --check js/saved-quotes-store.js
node --check js/saved-answers-store.js
node --check js/practice-store.js
node --check js/practice-review-prompts.js
node --check js/campaign-engine.js
node --check js/campaign.js
node --check api/openrouter-guard.mjs
node --check api/chat.js
redwisdom/
├── index.html # 首页 - 智慧卡片
├── chat.html # 问道毛选 - AI 实践教练
├── reading.html # 毛选阅读页
├── timeline.html # 党史时间线与大事汇总
├── campaign.html # 长征沙盘:战役立体推演
├── modern.html # 毛选思维 · 现代问题栏目
├── problems.html # 现实问题工作台与时间线
├── practice.html # 实践任务与复盘
├── me.html # 个人学习档案预览
├── login.html # 登录与账户状态
├── config.js # 前端 API 配置
├── script.js # 卡片交互逻辑
├── style.css # 首页卡片样式
├── js/
│ ├── ai-methodology.js # AI 方法论 prompt 和 payload
│ ├── analysis-guide.js # 毛选方法分析向导
│ ├── ai-context.js # 本地毛选语录/导读上下文检索
│ ├── auth-utils.js # Supabase 登录状态工具
│ ├── cloud-sync.js # 学习档案云同步、拉取和合并
│ ├── auto-sync.js # 首次迁移与持续同步调度
│ ├── conversation-store.js # 本机私密问答历史
│ ├── problem-case-store.js # 问题案例与复盘时间线
│ ├── guided-coach.js # 逐步分析状态机
│ ├── full-text-search.js # 原文全文检索
│ ├── history-case-retrieval.js # 历史案例检索与边界提示
│ ├── practice-store.js # 本机私密实践存储
│ ├── practice-review-prompts.js # 实践复盘提示生成器
│ ├── quote-utils.js # 语录归一化和展示规则
│ ├── reading-notes-store.js # 本机私密阅读笔记
│ ├── reading-progress-store.js # 本机阅读进度、收藏和摘录
│ ├── saved-quotes-store.js # 本机私密语录收藏
│ ├── saved-answers-store.js # 本机私密 AI 回答收藏
│ ├── timeline-data.js # 党史时间线数据(事件、决策点、党代会)
│ ├── timeline.js # 党史时间线页渲染与筛选
│ ├── timeline-map.js # 党史沙盘地图:时间轴与事件标注
│ ├── campaign-data.js # 长征战役沙盘数据(地理、部队、章节、复盘)
│ ├── campaign-engine.js # WebGL2 立体沙盘渲染器(Albers 投影、真实高程、小地图)
│ ├── campaign.js # 长征沙盘页面控制
│ ├── modern-cases.js # 现代问题案例数据(场景、原文依据、行动清单)
│ ├── modern.js # 现代问题栏目渲染与筛选
│ └── reading-guides.js # 阅读导读和主题路径
├── worker/
│ └── index.mjs # Cloudflare Worker:/api/chat、/api/public-config,其余交给静态资源
├── api/
│ ├── chat.js # Vercel API 代理(迁移完成后可删除)
│ ├── chat-context-core.mjs # 问道提示词与检索(与平台无关)
│ ├── chat-provider.mjs # DeepSeek/OpenRouter 服务选择
│ └── openrouter-guard.mjs # AI 请求白名单和长度守卫
├── data/
│ ├── quotes.json # 精选语录
│ ├── catalog.json # 文章目录
│ ├── search-index.json # 带段落锚点的全文检索索引
│ ├── history-cases.json # 历史问题案例库
│ ├── text-edition.json # 文本版本与来源说明
│ ├── terrain/ # 长征沙盘高程栅格(GEBCO 2024)与植被类型 PNG
│ ├── map/ # 长征沙盘矢量图层(Natural Earth)
│ └── articles/ # 毛选文章 Markdown
├── tests/ # Node 测试
├── docs/database/
│ └── supabase-schema.sql # Supabase 表结构与 RLS
├── docs/product/
│ └── redwisdom-requirements.md
└── assets/ # 图片资源
profiles / practices / conversations / messages / reading_notes / reading_progress / highlights / saved_quotes / saved_answers RLS schema。完整产品需求见:
docs/product/redwisdom-requirements.md
Powered by Cloudflare & DeepSeek