49ad953add
fix(card): improve SM-2 algorithm compatibility with Anki
...
- Fix scheduleNewCard ease===3 (Good) to use steps[1] or graduate
- Fix scheduleLearningCard ease===2 (Hard) to repeat current step
- Ensure graduating cards get DEFAULT_FACTOR
- Fix interval calculations for learning card graduation
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-13 15:09:54 +08:00
f1eafa8015
i18n: add card type labels for memorize feature
...
Add translations for cardTypeNew, cardTypeLearning, cardTypeReview,
cardTypeRelearning in all 8 supported languages (en-US, zh-CN, ja-JP,
ko-KR, de-DE, fr-FR, it-IT, ug-CN).
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-13 15:08:02 +08:00
12e502313b
feat(memorize): enhance review UI with dynamic intervals and keyboard shortcuts
...
- Add keyboard shortcuts: Space/Enter to show answer, 1-4 for responses
- Display dynamic preview intervals on answer buttons (1m, 6m, 4d, etc.)
- Add card type indicator (New/Learning/Review/Relearning) with color badges
- Highlight Good button as recommended option with ring and icon
- Show keyboard hint on Show Answer button
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-13 15:07:49 +08:00
13e8f51ada
feat(memorize): add interval preview calculation utility
...
- Add calculatePreviewIntervals for Again/Hard/Good/Easy buttons
- Support NEW, LEARNING, RELEARNING, and REVIEW card types
- Use SM2_CONFIG constants for accurate interval calculation
- All intervals returned in minutes for consistent formatting
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-03-13 15:07:32 +08:00
7ba31a37bd
feat: 添加 Anki APKG 导入/导出功能
...
- 添加 APKG 解析器 (src/lib/anki/apkg-parser.ts)
- 添加 APKG 导出器 (src/lib/anki/apkg-exporter.ts)
- 添加导入/导出 Server Actions
- 添加导入/导出 UI 组件
- 集成到牌组页面
- 添加 i18n 翻译
同时修复断链:
- /folders → /decks (Navbar, signup, profile)
2026-03-11 10:37:23 +08:00
4d4062985d
fix: 修复 React Compiler 严格模式下的 lint 错误
...
- Memorize: 将 loadCards 内联到 useEffect 中避免变量提升问题
- DecksClient: 修复 effect 中异步加载,创建 deck 后使用 actionGetDeckById
- LanguageSettings: 使用 effect 设置 cookie 避免 render 期间修改
- theme-provider: 修复 hydration 逻辑避免 render 期间访问 ref
2026-03-11 09:51:25 +08:00
804c28ada9
refactor: 修复 modules 三层架构违规
...
- auth: actionDeleteAccount 改用 service+repo,forgot-password 完整三层实现
- card: serviceCheckCardOwnership 替代直接调用 repository
- deck: 移除 service 层的 use server 指令
- dictionary: 数据转换逻辑从 repository 移到 service
- ocr: 认证移到 action 层,跨模块调用改用 service
- translator: genIPA/genLanguage 改用 service 层
2026-03-11 09:40:53 +08:00
e68e24a9fb
style: 降低注销按钮的视觉显著性
...
- 改用 ghost 样式替代 error 样式
- 使用小尺寸
2026-03-10 20:21:38 +08:00
8099320e00
feat: 添加注销账号功能
...
- 在个人资料页面添加注销账号按钮
- 需要输入用户名确认才能删除
- 删除所有用户数据:牌组、卡片、笔记、关注等
- 添加 8 种语言翻译
2026-03-10 19:54:19 +08:00
db0b0ff348
fix: 强制 username 登录也需要邮箱验证
...
- 添加 sendOnSignIn: true 配置
- 在 hook 中拦截 /sign-in/username 请求
- 检查用户邮箱是否已验证,未验证返回 403
2026-03-10 19:41:30 +08:00
6f4b123a84
fix: 添加邮箱验证重发功能
...
- 登录时检测 403 错误(邮箱未验证)
- 显示重发验证邮件按钮
- 修复邮件发送失败时静默忽略的问题
- 添加 8 种语言的验证相关翻译
2026-03-10 19:38:54 +08:00
57ad1b8699
refactor: 完全重构为 Anki 兼容数据结构
...
- 用 Deck 替换 Folder
- 用 Note + Card 替换 Pair (双向复习)
- 添加 NoteType (卡片模板)
- 添加 Revlog (复习历史)
- 实现 SM-2 间隔重复算法
- 更新所有前端页面
- 添加数据库迁移
2026-03-10 19:20:46 +08:00
9b78fd5215
feat: 添加 OCR 词汇提取功能
...
新增 OCR 页面,用户可上传教材词汇表截图,使用 GLM-4.6V 视觉模型
提取单词-释义对并保存到指定文件夹。
- AI 管道: src/lib/bigmodel/ocr/ (orchestrator, types)
- 后端模块: src/modules/ocr/ (action-service-repository 架构)
- 前端页面: src/app/(features)/ocr/ (拖拽上传、folder 选择)
- i18n: 8 种语言翻译支持
2026-03-10 15:21:45 +08:00
683a4104ec
feat: 添加用户关注功能
...
- 新增 Follow 表和 User.bio 字段 (Prisma schema)
- 创建 follow 模块 (action-service-repository)
- 新增 FollowButton/FollowStats/UserList 组件
- 用户页面显示 bio、粉丝/关注数、关注按钮
- 新增 /users/[username]/followers 和 following 页面
- 添加 en-US/zh-CN i18n 翻译
⚠️ 需要运行: prisma migrate dev --name add_follow_and_bio
2026-03-10 14:58:43 +08:00
abcae1b8d1
feat: 添加移动端下拉菜单和主题色设置
...
- 新增 MobileMenu 组件,小屏幕使用汉堡菜单替代多个按钮
- 重构 LanguageSettings 为统一下拉框样式
- 新增设置页面,支持主题色切换
- 翻译页添加源语言选择器
- 更新 8 种语言的 i18n 翻译
2026-03-10 13:44:52 +08:00
6b9fba254d
refactor: 使用 openai SDK 替换 fetch 调用 LLM
...
continuous-integration/drone/push Build is passing
- 安装 openai 包
- 重命名 zhipu.ts -> llm.ts
- 使用 OpenAI SDK 替代原生 fetch 实现
- 更新所有导入路径
2026-03-10 11:58:27 +08:00
0cb240791b
feat(auth): 强制要求用户名,- 添加 hooks 验证注册时 username 必填
...
continuous-integration/drone/push Build is passing
- 修改数据库 schema: username 设为 NOT NULL
- 重置并重新初始化本地和生产数据库
- 更新 .env.example 添加 Resend SMTP 配置说明
2026-03-10 09:45:55 +08:00
d9fd09c13d
feat(auth): 强制要求 username 并- 添加 hooks 验证 username 必填
...
- 修改 schema: username 改为 NOT NULL
- 重置本地和生产数据库
2026-03-10 09:45:15 +08:00
5406543cbe
feat(auth): 添加忘记密码功能
...
- 添加忘记密码页面,支持通过邮箱重置密码
- 添加重置密码页面
- 登录页面添加忘记密码链接
- 添加邮件发送功能
- 完善所有8种语言的翻译 (en-US, zh-CN, ja-JP, ko-KR, de-DE, fr-FR, it-IT, ug-CN)
2026-03-09 20:45:18 +08:00
d2a3d32376
chore: 添加 CI 并发控制,更新 Node.js 版本要求
2026-03-09 20:00:01 +08:00
436d58be52
fix(auth): 修复登录注册失败无错误提示的问题
...
continuous-integration/drone/push Build is passing
better-auth 客户端不抛出异常,而是返回 { data, error } 对象
修改错误处理逻辑检查 error 对象而非 try-catch
2026-03-09 19:52:41 +08:00
11a265d52e
i18n: 完整翻译所有语言文件
...
- de-DE: 德语完整翻译
- fr-FR: 法语完整翻译
- it-IT: 意大利语完整翻译
- ja-JP: 日语完整翻译
- ko-KR: 韩语完整翻译
- ug-CN: 维吾尔语完整翻译
所有翻译保持与 en-US.json 结构一致,保留插值变量
2026-03-09 19:49:34 +08:00
fb4346377a
feat(explore): 添加文件夹详情页面
...
- 修复 folder-aciton.ts 文件名拼写错误为 folder-action.ts
- 修复所有导入路径中的拼写错误
- 添加 repoGetPublicFolderById 和 actionGetPublicFolderById
- 创建 ExploreDetailClient 详情页组件
- /explore/[id] 现在显示文件夹详情和链接到 /folders/[id]
- 添加 exploreDetail 中英文翻译
2026-03-09 19:39:03 +08:00
c83aefabfa
fix: 修复代码审查发现的所有 bug
...
Critical 级别:
- zhipu.ts: 添加 API 响应边界检查
- DictionaryClient.tsx: 添加 entries 数组边界检查
- subtitleParser.ts: 修复 getNearestIndex 逻辑错误
High 级别:
- text-speaker/page.tsx: 修复非空断言和 ref 检查
- folder-repository.ts: 添加 user 关系 null 检查
Medium 级别:
- InFolder.tsx: 修复 throw result.message 为 throw new Error()
- localStorageOperators.ts: 返回类型改为 T | null,添加 schema 验证
- SaveList.tsx: 处理 data 可能为 null 的情况
2026-03-09 19:11:49 +08:00
020744b353
fix(i18n): 补充页面缺失的中英文翻译并修复登录重定向循环
...
- 补充 login/signup/dictionary/srt-player/alphabet 页面的翻译
- 修复登录页面邮箱登录时 password 参数错误
- 修复登录/注册页面的无限重定向循环问题
- 调整登录/注册卡片宽度为 w-96
2026-03-09 18:41:41 +08:00
719aef5a7f
fix(dictionary): 修复语义映射和错误日志
...
- 修复语义映射:强制将输入转换为查询语言的对应词
- 移除拼写自动纠正,避免错误纠正(如 franch→franchise)
- 修复 winston 日志 Error 对象序列化问题
2026-03-09 18:14:14 +08:00
6c811a77db
perf(dictionary): 优化 AI 编排性能,4 次 LLM 调用减少到 2 次
...
- 合并 Stage 1+2+3 为单次 preprocessInput 调用
- 精简 Stage 4 词条生成 prompt
- 删除旧的 stage 文件
- 预期性能提升 60%+ (33s → ~8-13s)
2026-03-09 18:04:12 +08:00
3652e350e6
fix(dictionary): 修复 AI 编排系统的错误处理和超时控制
...
- 修复 orchestrator 中 throw 字符串的问题,改为 throw LookUpError
- 为 zhipu.ts 添加 30 秒超时控制,防止 LLM 调用卡死
- stage1 添加 isEmpty 和 isNaturalLanguage 字段验证
- stage2 改为降级处理而非直接失败,提升用户体验
- types.ts 添加 canMap 字段
- AGENTS.md 添加禁止擅自运行 pnpm dev 的说明
2026-03-09 17:19:12 +08:00
6ba5ae993a
fix: language selector mutual exclusion with preset buttons
...
- When "Other" is selected, preset language buttons are deselected
- Only one option can be selected at a time
- Refactor dictionary page with zustand store
- Add custom language input option to dictionary
- Fix multiple issues in dictionary bigmodel pipeline
2026-03-08 16:10:41 +08:00
b643205f72
refactor(folders): 优化刷新逻辑,只更新特定文件夹而非全量刷新
...
- FoldersClient: 使用 onUpdateFolder/onDeleteFolder 回调局部更新
- ExploreClient: 使用 onUpdateFavorite 只更新收藏数
- FavoritesClient: 使用 onRemoveFavorite 从列表移除,避免重新请求
2026-03-08 15:07:05 +08:00
c6878ed1e5
style(explore): 将公开文件夹改为网格布局展示
...
- 移除 CardList 组件,改用 CSS Grid
- 响应式网格: 1/2/3/4 列 (sm/lg/xl)
- 重新设计卡片样式:圆角边框、hover 效果
- 文件夹图标移至左上角,收藏按钮移至右上角
2026-03-08 15:03:35 +08:00
e74cd80fac
style(explore): 移动收藏数到文件夹名左侧
2026-03-08 15:01:29 +08:00
c01c94abd0
refactor: 替换服务端 console.log/error 为 winston logger
...
- folder-action.ts: 18处 console.log -> log.error
- auth-action.ts: 4处 console.error -> log.error
- dictionary-action/service.ts: 3处 -> log.error
- translator-action/service.ts: 3处 -> log.error
- bigmodel/translator/orchestrator.ts: console -> log.debug/info/error
- bigmodel/tts.ts: console -> log.error/warn
- bigmodel/dictionary/*.ts: console -> log.error/debug/info
客户端代码(browser、page.tsx)保留 console.error
2026-03-08 14:58:43 +08:00
0881846717
feat(logger): 添加 winston 日志系统
...
- 新增 src/lib/logger/ 模块
- 支持 dev/prod 环境不同输出格式
- createLogger() 创建带上下文的 logger
- 更新 AGENTS.md 添加日志使用约定
2026-03-08 14:52:24 +08:00
d7149366e9
feat(folders): 完善公开文件夹功能 - 添加 /explore 和 /favorites 页面
...
- 新增 /explore 页面:浏览和搜索公开文件夹
- 新增 /explore/[id] 页面:以只读模式查看公开文件夹
- 新增 /favorites 页面:管理收藏的文件夹
- 重构 /folders 页面:仅显示当前用户的文件夹
- 更新导航栏:添加 Explore 和 Favorites 链接
- 添加 i18n 翻译:explore 和 favorites 相关文本
- 更新 AGENTS.md:添加数据库迁移规范(必须使用 migrate dev)
2026-03-08 14:47:35 +08:00
b0fa1a4201
feat(folders): 添加公开文件夹和收藏功能
...
- 新增文件夹可见性控制(公开/私有)
- 添加公开文件夹浏览和搜索
- 实现文件夹收藏功能
- 新增 FolderFavorite 数据模型
- 更新 Prisma 至 7.4.2
- 添加相关 i18n 翻译
2026-03-08 14:20:12 +08:00
b407783d61
feat(i18n): 添加用户名相关翻译并修复多处翻译错误
...
- 为 6 种语言添加 username, emailOrUsername 等字段的翻译
- 修复德语 Steve Jobs 名言中的拼写错误 (bleiv -> bleib)
- 改进维吾尔语翻译质量和术语一致性
- 修复维吾尔语中 'ئىلمىيى' -> 'ئىزاھات' 等表述问题
2026-03-08 13:32:06 +08:00
ca33d4353f
refactor: 优化文件夹列表 UI 样式和布局
2026-03-08 13:05:48 +08:00
ff57f5e0a5
docs: 更新 AGENTS.md 知识库,新增模块/管道/设计系统文档
2026-03-08 11:32:31 +08:00
91c59c3ad9
update AGENTS.md
2026-03-08 10:24:31 +08:00
1df184d1ad
update AGENTS.md
2026-03-08 09:51:05 +08:00
f6e21aa2fe
move email above joined date in user profile
2026-03-08 09:48:07 +08:00
67ac0bf7b6
Sun Mar 8 09:35:08 AM CST 2026
2026-03-08 09:35:08 +08:00
dd1c6a7b52
Sun Mar 8 09:25:22 AM CST 2026
2026-03-08 09:25:22 +08:00
e2d8e17f62
Sun Mar 8 08:27:26 AM CST 2026
2026-03-08 08:27:26 +08:00
63486757b9
从claude code迁移到opencode
2026-03-06 09:29:08 +08:00
45ffe5733b
从claude code迁移到opencode
2026-03-06 09:28:27 +08:00
613df6824b
Wed Mar 4 09:32:00 AM CST 2026
2026-03-04 09:32:00 +08:00
bf80e17514
eslint
2026-02-24 21:22:14 +08:00
d71c79c87a
srt
2026-02-24 21:18:30 +08:00