Merge remote main preserving project chats and reply recovery
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

This commit is contained in:
2026-09-28 20:51:33 +08:00
54 changed files with 3189 additions and 1713 deletions

View File

@@ -1,4 +1,3 @@
import type { TeacherDiscussion, TeacherDiscussionContent } from './teacher-discussion';
import type { PublicUsage } from './coding-conversation-contracts';
/** Only retained for locating conversations created by older clients. */
@@ -67,19 +66,6 @@ export type TeacherRequestStatus =
| 'failed'
| 'cancelled'
| 'interrupted';
export interface TeacherDiscussionContext {
toolId: string;
revision: number;
focusId?: string;
transition?: 'structure';
}
export interface TeacherDiscussionAction {
projectId?: string;
toolId: string;
revision: number;
action: 'enter' | 'pause' | 'finish' | 'resume' | 'keep-idea' | 'aside-idea' | 'first-idea' | 'back-ideas';
itemId?: string;
}
export interface TeacherRequest {
/** Frozen when this turn is accepted; history can span projects and releases. */
projectId?: string;
@@ -87,11 +73,18 @@ export interface TeacherRequest {
teacherVersion?: number;
runtimeThreadId?: string;
origin?: { projectId: string; topicId: string; requestId: string };
presentation?: 'discussion-v1';
discussionContext?: TeacherDiscussionContext;
discussionSnapshot?: TeacherDiscussionContent;
/** discussion-v1 is retained only to identify historical replies. */
presentation?: 'reply-v1' | 'discussion-v1';
/** Archived legacy data; never parsed into interactive component state. */
discussionContext?: unknown;
discussionSnapshot?: unknown;
discussionError?: string;
/** Original answer retained when discussion parsing fails; never fed back as context. */
replyParseError?: string;
/** No trustworthy complete reply could be recovered from the received text. */
replyIncomplete?: boolean;
/** New-output shortcut rejection survives later historical prose repair. */
replyQuickRepliesRejected?: boolean;
/** Original answer retained for failed or repaired parsing; never fed back as context. */
unparsedResponse?: string;
toolActivity?: TeacherToolActivity[];
@@ -127,10 +120,12 @@ export interface TeacherTopic {
agentId: string;
runtimeThreadId?: string;
segmentTurns: number;
discussions: Record<string, TeacherDiscussion>;
/** Archived per-project component data; never selected or updated by new turns. */
discussions?: Record<string, unknown>;
seenThrough?: string;
};
discussion?: TeacherDiscussion;
/** Archived legacy data; new requests do not create or update it. */
discussion?: unknown;
role?: LegacyConsultationRole;
revision: number;
schemaVersion: 1;
@@ -152,8 +147,6 @@ export interface TeacherTopicList {
}
export interface TeacherSend {
projectId?: string;
presentation?: 'discussion-v1';
discussion?: TeacherDiscussionContext;
intent?: TeacherRequestIntent;
sourceConversationId?: string;
requestId: string;