shenlei and Claude Opus 5
202bb64ece
feat: 调用 DeepSeek 时关闭思考模式
...
DeepSeek 默认开启思考,思考 token 按输出计费,且可能耗尽较小的
max_tokens 导致 JSON 截断。对 deepseek.com 地址:chat/completions
发送 thinking.type=disabled,Responses 发送 reasoning.effort=none;
其他服务商请求体保持不变。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-17 14:32:25 +09:00
shenlei
d72959df70
fix: 输入校验忽略多个连续空格与大小写;统一中英文引号与空白规范化
2026-09-16 17:55:08 +09:00
shenlei and Claude Opus 5
4d324903b4
fix: AI 复习变式请求字段与校验一致;转写后删除不保留的录音
...
- generateReviewVariant 的指令要求 stimulus/answer/acceptedAnswers 等字段,
而 decodeGeneratedReviewVariant 只接受 schemaVersion、variantId、
targetItemId、prompt、expectedAnswer 五个字段,导致 AI 变式始终校验失败。
现在指令只要求这五个字段,并补充了请求与解码一致性的测试。
- finishVoiceInput(keepAudio: false) 转写完成(或页面已关闭)后删除音频,
补练页和测评页的语音输入不再在本机残留录音文件。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:29:56 +09:00
shenlei and Claude Opus 5
29b1738162
refactor: 拆分对话页 build,抽出消息气泡组件
...
- _TurnBubble:单条对话气泡(翻译、播放/翻译/句型解析操作)
- _TurnAction:气泡下方的图标文字按钮,替代三段重复布局
- 提示按钮逻辑移到 _showHint()
_DialoguePageState.build 从约 320 行降到约 170 行,无用户可见变化。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:24:29 +09:00
shenlei and Claude Opus 5
f79ba6327e
refactor: 将课程各步骤拆分到 features/lesson/steps/
...
lesson_flow.dart 保留流程状态、公共脚手架与小组件,预习/听/说/读/写/独立表达
六个步骤各自成为 part 文件。代码仅搬移并经 dart format 格式化,无用户可见变化。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:23:26 +09:00
shenlei and Claude Opus 5
9b0f9d64cb
refactor: 按领域将 AppState 拆分为 mixin
...
- app_state.dart 只保留持久化字段(_AppStateData)、加载/存档、设置项和清空进度
- app_state_review.dart:复习队列与掌握度
- app_state_lesson.dart:课程解锁、分段与课内步骤流程
- app_state_assessment.dart:阶段测评
- app_state_ai_content.dart:临时释义、句子分析缓存与补练课
- 后台同步调用统一为 _syncInBackground()
纯搬移,方法体未改,无用户可见变化。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:22:19 +09:00
shenlei and Claude Opus 5
6c0aeec628
refactor: 抽出语音作答与录音回听的公共逻辑
...
对话页、AI 补练页、课程跟读步骤、独立表达步骤和评估页各自复制了一套
"录音 → AI 转写 → 填入答案"的流程,其中 3 页还复制了"录音回听/播放/删除"
的按钮和方法。现在统一到 lib/widgets/voice_answer.dart:
- VoiceAnswerMixin:startVoiceInput / finishVoiceInput / toggleRecording /
playRecording / deleteRecording / disposeVoiceAnswer,状态字段名沿用各页原名,
页面的 build 代码基本不动;
- RecordingControls:录音回听按钮行。
用户可见的变化:
- "未识别到语音"提示统一为「未识别到清晰语音,请再试一次或直接输入文字。」
(对话页、补练页、独立表达步骤、评估页原本各有不同说法;跟读步骤保留
原来提示"播放示范音"的文案)。麦克风不可用、开始录音的提示保持各页原样。
- 对话页的录音回听按钮与播放按钮之间增加 8px 间距,与其他页面一致。
- 删除录音时先停止正在播放的录音(原来只有跟读步骤这样做)。
- 离开页面时,如果还在录音或设备识别中,会先停止;不保留录音时一并删除
这段录音文件。原来课程两个步骤离开时不停止录音,各页离开时也不停止
"录音回听"的录音。
flutter analyze 无问题,flutter test 142 个测试通过;现有测试未覆盖麦克风流程。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:18:45 +09:00
shenlei and Claude Opus 5
70f7be9b88
refactor: 合并 AiService 各文本接口重复的请求流程
...
8 个文本接口原本各自重复一套:取 API Key、校验模型与地址、按服务商拼请求头和请求体、
超时、判断 2xx、提取回复内容。现在统一到 _requestContent / _requestPrompt,
底层发送逻辑为 _postJson,请求体由 _buildTextPayload 构造(testConnection 和
transcribeAudio 也改用它们)。各接口只保留提示词和结果解析。
纯重构,不改变行为。已用临时测试录下 3 种服务商、4 种响应(成功、500、401、
网络异常)以及配置无效时的全部请求:共 134 个请求的地址、请求头、请求体和
所有返回值,重构前后逐字节一致。ai_service.dart 从 1291 行减为 1051 行。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:14:32 +09:00
shenlei and Claude Opus 5
a69d221ab6
refactor: 将 AppState 本地存档序列化拆分到 app_state_snapshot.dart
...
纯代码搬移,不改行为:_restore、快照 JSON 构建及相关解析函数移入 part 文件。
已用覆盖全部存档字段的快照比对验证,重构前后写出的存档逐字节一致。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:07:23 +09:00
shenlei and Claude Opus 5
2795987c3a
fix: 登录同步后首页恢复课程位置与复习卡片
...
- 拉取合并时还原当前课程与分段位置,位置只前进不后退,跳过其他设备已完成的课
- 由云端掌握项重建复习卡片,并纠正旧客户端写坏的首次复习到期时间
- 同 checkpoint 时以证据更多的一方为准;推送缺卡片项时不再用当前时间作到期时间
- 登录/注册及合并逻辑升级后强制全量拉取一次
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 17:05:15 +09:00
shenlei and Claude Opus 5
c2361c5c3a
chore: 联网测试端点变量接受完整地址
...
应用里配置的地址本身就带 /v1/responses,直接当基址拼接会变成
.../v1/responses/v1/responses。改用 KOUYU_AI_ENDPOINT,填完整端点或
基址都可以,内部归一化后再拼出待测的两个端点,并补一条不联网的归一化测试。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 16:42:58 +09:00
shenlei and Claude Opus 5
3124bee288
chore: 联网测试密钥改从环境变量读取
...
live_endpoint_test.dart 里硬编码了一个真实 API key。改为读取
KOUYU_AI_API_KEY(可选 KOUYU_AI_BASE_URL、KOUYU_AI_MODEL),未设置时
整组测试跳过,不再把缺少凭据的联网测试当成通过。
注意:旧 key 仍留在提交历史中,需要在服务端作废并重新签发。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 16:40:54 +09:00
shenlei and Claude Opus 5
7e29c5449f
feat: 重做阅读找答案题与 AI 情境对话,并归拢本地识别、查词等既有改动
...
阅读"在对话里找到答案":
- 16 道题全部重写,干扰项真实出现在对话里,靠说话人归属或否定句才能作答
- 选项按题目内容确定性打乱,答案不再固定排第一;听力环节同样处理
- 去掉超纲干扰项、重复题干,收紧自由作答匹配(过去单个字母也能判对)
AI 情境对话:
- 提示词区分"AI 这一句要做什么"与"学习者随后要完成什么",并下发已教词句清单
- JSON 只强制 reply,translation/feedback 可选;不再索要用不上的 slots/evidence
- AI 不可用时页面明确提示当前回复来自内置示范脚本
- 删掉按 stage 下标猜中文翻译的兜底,避免译文与英文对不上
- 整课对话改用逐轮必需表达校验,替换"关键词沾边就算过";修正自由场景正则误伤
- 总结的"完成任务"按实际通过的轮次生成;模型点评只在结束页呈现一次
- 自由场景支持草稿续练(独立存储槽);修正回答轮数文案与永不解锁的场景标注
同时提交此前工作区中累积的改动:SenseVoice 本地识别、查词/句型解析卡、
复习与测评页调整等,并补充对话校验、选项分布和句子解析的测试。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-16 16:38:23 +09:00
shenlei
ef2fce207a
feat: install_app.sh 脚本支持打包安装 macOS 桌面版
2026-09-16 10:36:57 +09:00
shenand shen
14f934aa45
feat: 完善芽说英语品牌Logo与图标配置,完成跨平台云端同步服务开发与自动化部署
2026-09-16 09:15:53 +08:00
shenand shen
11929d6a03
feat: save repeat audio on mic record and rename button to play repeat
2026-09-15 22:52:49 +08:00
shenand shen
2a2668829d
feat: upgrade local speech recognition engine to SenseVoice-Small with hardware audio enhancements
2026-09-15 22:36:10 +08:00
shenand shen
9215931b13
feat: integrate Sherpa-ONNX local offline speech recognition engine
2026-09-15 22:22:32 +08:00
shenand shen
82b1ecdf84
feat: set default reasoning effort to low for all AI requests
2026-09-15 22:06:52 +08:00
shenand shen
35b493e652
feat: add AI voice transcription fallback for domestic Android ROMs
2026-09-15 22:02:26 +08:00
shenand shen
670260f8e2
config: 将默认AI配置端点切换为 /v1/responses
2026-09-15 21:33:18 +08:00
shenand shen
4f22e974af
fix: 支持明文网络请求,增强安装脚本自动卸载冲突签名,优化设置页AI配置响应
2026-09-15 21:30:56 +08:00
shenand shen
6fcffc968f
feat: 原生支持 /v1/responses 接口与 Chat Completions 双协议自适应,增加端到端联调测试
2026-09-15 20:44:27 +08:00
shenlei
4341726162
feat: 增加AI配置文件与TTS自动朗读,修复二级页面返回按钮与音频播放
2026-09-15 19:11:39 +09:00
shenand shen
37c86f7ecb
feat: complete kouyu_english app codebase, A0 specifications and .gitignore
2026-09-15 15:58:33 +08:00
shenand shen
b8072673d8
first commit
2026-09-15 15:52:20 +08:00