feat: 完善听力口语辅助状态记录、练习分块与复习抽查间隔机制

This commit is contained in:
shen
2026-09-23 18:33:22 -07:00
parent 6b42b7abc3
commit d740a9e19c
106 changed files with 2933 additions and 845 deletions
+13 -2
View File
@@ -92,6 +92,8 @@ enum EvidenceKind {
pending,
}
enum ListeningSupport { none, slow, transcript }
/// Local dialogue matching is intentionally tri-state. A natural English
/// reply that does not match a strict taught-language rule is unknown, not
/// automatically wrong.
@@ -160,6 +162,10 @@ class AttemptEvidence {
this.originalTranscript,
this.transcriptConfirmed = false,
this.transcriptEdited = false,
this.listeningSupport,
this.firstTry,
this.attemptCount,
this.usedSentenceBuild = false,
});
final String id;
@@ -182,6 +188,10 @@ class AttemptEvidence {
final String? originalTranscript;
final bool transcriptConfirmed;
final bool transcriptEdited;
final ListeningSupport? listeningSupport;
final bool? firstTry;
final int? attemptCount;
final bool usedSentenceBuild;
}
enum AiProviderType { mock, gemini, openAi, compatible }
@@ -212,8 +222,9 @@ class DialogueAiResponse {
final String? feedback;
}
/// A bounded suggestion only. It never changes completion, mastery, or a
/// stage result; those decisions remain on-device and evidence-based.
/// A bounded evaluation input. Lesson free-response evidence requires both
/// local task matching and an accepted verdict; mastery and stage decisions
/// still remain on-device and derive from recorded attempts.
class WritingAiFeedback {
const WritingAiFeedback({
required this.verdict,