Skip to content

Commit d74fdc9

Browse files
committed
feat: v0.7.0 — 自定义标题栏、用户体系、邮箱验证、灵感 AI 整理与会话管理
自定义标题栏: - 新增 CustomTitlebar 组件,替代系统默认标题栏 - 窗口拖拽、最小化/最大化/关闭全自定义 - 关闭确认弹窗(CloseConfirmDialog) 用户体系与认证: - 用户资料设置页(ProfileSettings) - 邮箱验证页面(VerifyEmail) - 密码重置页面(ResetPassword) - AuthContext 认证上下文重构 - 会话过期管理(useSessionExpiry) - 登录页与引导页优化 灵感空间增强: - 后端新增灵感 AI 整理链(sort_inspiration_chain.py) - 新增灵感整理 API 路由(inspiration.py) - 灵感页面与状态管理优化 AI 系统优化: - AIPluginLoader / ElectronAIPlugin / RemoteAIPlugin 适配增强 - AI 类型系统扩展 - useAI Hook 优化 基础设施: - Electron 主进程扩展(aiHandlers、updater 优化) - 类型定义更新(electron.d.ts、models.ts) - 路由系统更新 - 数据库 Schema 调整 - Tailwind 配置优化 - README 全面更新至 v0.7.0
1 parent 60504e3 commit d74fdc9

43 files changed

Lines changed: 2777 additions & 132 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎README.md‎

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,242 @@
1+
<p align="center">
2+
<h1 align="center">📚 课伴 KeBan</h1>
3+
<p align="center"><strong>你的 AI 智能学习伙伴 — 让每一分钟学习都高效有价值</strong></p>
4+
<p align="center">
5+
<img src="https://img.shields.io/badge/status-beta-green.svg" alt="Status" />
6+
<img src="https://img.shields.io/badge/version-v0.7.0-blue.svg" alt="Version" />
7+
<img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="License" />
8+
</p>
9+
</p>
10+
11+
---
12+
13+
## 📝 关于课伴
14+
15+
**课伴(KeBan)** 是一款面向学生和终身学习者的高效学习桌面应用。它围绕全场景学习需求,基于费曼学习法、间隔重复等科学方法论,将时间管理、笔记记录、记忆巩固和深度理解整合在一个工具中,帮助你建立科学的学习闭环。
16+
17+
**解决的核心痛点:**
18+
19+
| 痛点 | 课伴方案 |
20+
|------|----------|
21+
| 学习时容易走神、效率低 | 沉浸式番茄钟 + 滑动退出 + 后台不中断计时 |
22+
| 网课内容记不下来 | 网课笔记提取:自动截屏 + AI 视觉识别 + ASR 语音转写 |
23+
| 笔记零散、复习时找不到重点 | 结构化模板 + 标签系统 + 全文搜索 |
24+
| 学完就忘、缺少科学复习节奏 | 间隔重复算法自动安排复习时间 |
25+
| 以为懂了但说不清楚 | 费曼学习法四步引导 + AI 评估反馈 |
26+
| 灵感转瞬即逝 | 灵感空间随时捕捉 + AI 智能整理 |
27+
28+
> 💡 **核心理念:本地优先 + AI 增强可选**
29+
>
30+
> 所有核心功能 **离线完整可用**,无需任何网络依赖;联网时可按需开启 AI 辅助,作为增值能力叠加。你的学习数据,始终掌握在自己手中。
31+
32+
---
33+
34+
## ✨ 核心功能
35+
36+
课伴围绕 **"学 → 记 → 练 → 悟 → 思"** 学习闭环,提供六大模块:
37+
38+
### 🍅 番茄钟 — 时间管理
39+
40+
- **三段式计时**:工作 / 短休息 / 长休息自动轮转
41+
- **双模式切换**:上课模式(45 分钟)与自习模式(25/5 标准节奏)
42+
- **沉浸式计时器**:全屏沉浸式专注体验
43+
- **后台不中断**:切换页面计时继续运行
44+
- **数据洞察**:专注时长统计与趋势分析,量化学习投入
45+
- **目标设定**:为每次专注设定学习目标,追踪完成情况
46+
47+
### 📝 智能笔记 — 知识沉淀
48+
49+
- 专业富文本编辑体验,支持多种排版与格式化
50+
- 多种模板:大纲式、康奈尔笔记法、自由画布等
51+
- 3 级嵌套文件夹 + 自由标签系统,灵活组织笔记
52+
- 本地全文搜索,自动保存,数据不丢失
53+
- 右键菜单 2.0:声明式注册,支持自定义上下文操作
54+
55+
### 📹 网课笔记提取 — 智能记录
56+
57+
- **屏幕捕获**:自动截取网课窗口关键帧
58+
- **语音转写**:系统音频采集 + ASR 语音识别
59+
- **AI 视觉提取**:多模态大模型识别画面中的关键知识点
60+
- **智能路由**:根据环境自动选择最优提取策略,支持降级方案
61+
- **异步流水线**:事件驱动架构,不阻塞主界面操作
62+
63+
### 🃏 闪卡 — 记忆巩固
64+
65+
- 基于间隔重复算法的科学记忆系统(Again / Hard / Good / Easy 四档评分)
66+
- 3 级嵌套牌组:科目 → 章节 → 知识点
67+
- 复习统计与遗忘曲线可视化
68+
- 支持 CSV / JSON 批量导入导出
69+
- 牌组详情与学习会话完整记录
70+
71+
### 🧠 费曼学习法 — 深度理解
72+
73+
- 四步引导:选概念 → 用自己的话解释 → 识别薄弱点 → 简化重述
74+
- 自动标记与汇总薄弱知识点
75+
- 1–5 星理解度评估,直观衡量掌握程度
76+
- 学习测试与知识巩固追踪
77+
78+
### 💡 灵感空间 — 思维捕捉
79+
80+
- 随时记录学习中的灵感与想法
81+
- AI 智能整理与分类,让碎片化思维有序化
82+
- 与笔记、闪卡等模块联动,形成知识网络
83+
84+
### 🤖 AI 增强(联网可选)
85+
86+
| 能力 | 说明 |
87+
|------|------|
88+
| 笔记智能摘要 | 一键生成课堂笔记摘要与续写润色 |
89+
| AI 自动生成闪卡 | 从笔记内容智能生成记忆卡片 |
90+
| 费曼学习评估 | AI 评估解释质量,给出改进建议 |
91+
| 智能时长推荐 | 根据学习数据推荐最佳番茄钟时长 |
92+
| AI 视觉提取 | 多模态模型识别网课画面中的关键信息 |
93+
| 语音转写 | ASR 自动识别网课语音内容 |
94+
| 灵感 AI 整理 | 智能分类与归纳碎片化灵感 |
95+
| API Key 自配置 | 用户可在设置中自行配置 AI 服务商密钥 |
96+
97+
> 基于国产大模型:**通义千问(Qwen)** / **DeepSeek** / **智谱 GLM**,按需选择,灵活切换。
98+
99+
### 📊 仪表盘与成就系统
100+
101+
- 学习数据概览:专注时长、笔记数量、闪卡复习进度等核心指标
102+
- 效率分析图表:多维度可视化学习投入与产出
103+
- 成就解锁:完成学习里程碑,获得成就徽章激励
104+
- 每日打卡:学习打卡追踪,培养持续学习习惯
105+
106+
---
107+
108+
## 🚀 快速开始
109+
110+
### 环境要求
111+
112+
- **Node.js** 18+ & **npm** 9+
113+
114+
### 安装与运行
115+
116+
```bash
117+
# 克隆仓库
118+
git clone https://github.com/Aparencia/KeBan.git
119+
cd KeBan/client
120+
121+
# 安装依赖并启动开发服务器
122+
npm install
123+
npm run dev
124+
```
125+
126+
开发服务器启动后,在浏览器中访问 `http://localhost:5173` 即可预览。
127+
128+
### 构建桌面安装包
129+
130+
```bash
131+
cd client
132+
npm run electron:build
133+
```
134+
135+
构建产物位于 `client/release/` 目录,格式为 Windows NSIS(`.exe`),支持当前用户安装,无需管理员权限。应用内置自动更新功能。
136+
137+
也可以从 [GitHub Releases](https://github.com/Aparencia/KeBan/releases) 页面直接下载最新安装包。
138+
139+
---
140+
141+
## 📁 项目结构
142+
143+
```
144+
KeBan/
145+
├── client/ # 前端客户端(React + Electron 桌面应用)
146+
│ ├── src/features/ # 业务功能模块(番茄钟、笔记、闪卡、费曼、灵感、仪表盘)
147+
│ ├── src/lib/ # 核心库(AI、存储、同步、加密、网络、捕获、音效等)
148+
│ ├── src/components/ # 共享 UI 组件(基础组件、布局、主题、自定义标题栏)
149+
│ ├── src/hooks/ # 自定义 React Hooks
150+
│ └── electron/ # Electron 主进程(含屏幕/音频捕获、自动更新、日志)
151+
├── server/ # 后端服务(AI 网关 + 数据同步)
152+
│ ├── ai-gateway/ # Python AI 增强网关(视觉提取、语音转写、灵感整理)
153+
│ └── sync-service/ # Go 数据同步服务
154+
├── docs/ # 项目文档(phase0 ~ phase6 + 版本迭代文档)
155+
├── scripts/ # 脚本工具
156+
├── .env.example # 环境变量模板
157+
└── README.md
158+
```
159+
160+
| 目录 | 说明 |
161+
|------|------|
162+
| `client/` | 前端应用与 Electron 桌面端,包含所有 UI 和业务逻辑 |
163+
| `server/` | 后端微服务,包括 AI 增强网关和数据同步服务 |
164+
| `docs/` | 按项目生命周期组织的开发文档及版本迭代文档 |
165+
| `scripts/` | 构建、部署等辅助脚本 |
166+
167+
---
168+
169+
## 🗺️ 路线图
170+
171+
| 阶段 | 状态 | 核心交付 |
172+
|------|------|----------|
173+
| **MVP-1 Alpha** | ✅ 已完成 | 纯本地核心版 — 四大模块 + 离线支持 + 本地存储 |
174+
| **MVP-2 Alpha** | ✅ 已完成 | AI 增强 + 云同步 + Electron 桌面端 + 用户认证 |
175+
| **v0.4.0** | ✅ 已完成 | 网课笔记提取 + ContextMenu 2.0 + AuthGuard + 动效系统 + 反馈面板 |
176+
| **v0.5.0** | ✅ 已完成 | 安全加固 + 效率分析 + 全局命令面板 + 灵感空间 + 上云部署 |
177+
| **v0.6.0** | ✅ 已完成 | 沉浸式计时 + 自动更新 + 音效系统 + 隐私政策 + 品牌视觉升级 |
178+
| **v0.7.0** | ✅ 已完成 | 自定义标题栏 + 用户体系 + 邮箱验证 + 灵感 AI 整理 + 会话管理 |
179+
| **正式上线** | 🎯 规划中 | 生产就绪版 |
180+
181+
### 🔮 未来方向
182+
183+
- **社交协作**:学习小组、闪卡共享、专注排行榜
184+
- **跨端生态**:移动端 App、浏览器插件
185+
- **AI 深度增强**:个性化学习路径、知识图谱、智能复习规划
186+
- **开放平台**:插件系统、第三方模板市场
187+
188+
---
189+
190+
## 📦 版本管理
191+
192+
项目遵循 **SemVer**(语义化版本)规范,格式为 `v{MAJOR}.{MINOR}.{PATCH}`:
193+
194+
| 组成部分 | 含义 | 示例 |
195+
|----------|------|------|
196+
| `MAJOR` | 不兼容的 API 变更 | `1.0.0` |
197+
| `MINOR` | 向后兼容的功能新增 | `0.7.0` |
198+
| `PATCH` | 向后兼容的缺陷修复 | `0.7.1` |
199+
200+
发布 Tag 前请确保:`npm run lint` / `npm run test` / `npm run build` 全部通过。
201+
202+
---
203+
204+
## 👥 贡献指南
205+
206+
### 提交规范
207+
208+
项目使用 **Conventional Commits** 规范,格式为 `<type>(<scope>): <description>`:
209+
210+
| 类型 | 说明 | 类型 | 说明 |
211+
|------|------|------|------|
212+
| `feat` | 新功能 | `docs` | 文档变更 |
213+
| `fix` | 缺陷修复 | `style` | 代码格式调整 |
214+
| `refactor` | 重构 | `test` | 测试相关 |
215+
| `perf` | 性能优化 | `chore` | 构建或工具变更 |
216+
217+
**示例:**
218+
219+
```
220+
feat(notes): 添加康奈尔笔记模板
221+
fix(pomodoro): 修复切换标签页后计时器暂停的问题
222+
docs: 更新 README 快速开始章节
223+
```
224+
225+
### 代码质量
226+
227+
提交前请确保以下检查全部通过:
228+
229+
```bash
230+
npm run lint # 代码检查(Oxlint)
231+
npm run test # 单元测试(Vitest)
232+
npm run build # 构建验证(TypeScript)
233+
```
234+
235+
---
236+
237+
## 📄 许可证
238+
239+
本项目基于 [Apache License 2.0](./LICENSE) 开源协议发布。
1240
<p align="center">
2241
<h1 align="center">📚 课伴 KeBan</h1>
3242
<p align="center"><strong>你的 AI 智能学习伙伴 — 让每一分钟网课都高效有价值</strong></p>

‎client/.gitignore‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# Environment variables
2+
.env
3+
.env.local
4+
.env.*.local
5+
16
# Logs
27
logs
38
*.log

‎client/electron/aiHandlers.ts‎

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,4 +430,103 @@ export function registerAIHandlers(): void {
430430
};
431431
},
432432
);
433+
434+
/**
435+
* ai_tag_content — POST /api/v1/ai/tag-content
436+
*/
437+
safeHandle(
438+
'ai_tag_content',
439+
async (
440+
_event,
441+
args: {
442+
content: string;
443+
authToken?: string;
444+
},
445+
) => {
446+
const startMs = Date.now();
447+
logger.info(`[IPC] ai_tag_content start, content_length=${args.content.length}`);
448+
const reqBody = { content: args.content };
449+
450+
interface TagContentResp {
451+
content_nature: string;
452+
cognitive_depth: string;
453+
subject: string;
454+
model: string;
455+
tokens_used: number;
456+
latency_ms: number;
457+
}
458+
459+
const { data: resp, requestId } = await postJson<typeof reqBody, TagContentResp>(
460+
'/api/v1/ai/tag-content',
461+
reqBody,
462+
args.authToken,
463+
);
464+
465+
logger.info(`[IPC] Request ID: ${requestId ?? 'N/A'}`);
466+
logger.info(`[IPC] ai_tag_content end, nature=${resp.content_nature}`);
467+
return {
468+
contentNature: resp.content_nature,
469+
cognitiveDepth: resp.cognitive_depth,
470+
subject: resp.subject,
471+
model: resp.model,
472+
tokensUsed: resp.tokens_used,
473+
latencyMs: resp.latency_ms,
474+
requestId,
475+
};
476+
},
477+
);
478+
479+
/**
480+
* ai_sort_inspiration — POST /api/v1/ai/sort-inspiration
481+
*/
482+
safeHandle(
483+
'ai_sort_inspiration',
484+
async (
485+
_event,
486+
args: {
487+
content: string;
488+
existingTags?: Record<string, string>;
489+
authToken?: string;
490+
},
491+
) => {
492+
const startMs = Date.now();
493+
logger.info(`[IPC] ai_sort_inspiration start, content_length=${args.content.length}`);
494+
const reqBody = {
495+
content: args.content,
496+
existing_tags: args.existingTags,
497+
};
498+
499+
interface SortSuggestionResp {
500+
type: string;
501+
reason: string;
502+
confidence: number;
503+
}
504+
interface SortInspirationResp {
505+
suggestions: SortSuggestionResp[];
506+
model: string;
507+
tokens_used: number;
508+
latency_ms: number;
509+
}
510+
511+
const { data: resp, requestId } = await postJson<typeof reqBody, SortInspirationResp>(
512+
'/api/v1/ai/sort-inspiration',
513+
reqBody,
514+
args.authToken,
515+
);
516+
517+
logger.info(`[IPC] Request ID: ${requestId ?? 'N/A'}`);
518+
logger.info(`[IPC] ai_sort_inspiration end, suggestions_count=${resp.suggestions.length}`);
519+
return {
520+
suggestions: resp.suggestions.map((s) => ({
521+
type: s.type,
522+
reason: s.reason,
523+
confidence: s.confidence,
524+
})),
525+
model: resp.model,
526+
tokensUsed: resp.tokens_used,
527+
latencyMs: resp.latency_ms,
528+
requestId,
529+
};
530+
},
531+
);
433532
}

0 commit comments

Comments
 (0)