feat: integrate learning module
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:
inman
2026-08-16 20:52:16 +08:00
parent 26b52d76e3
commit 01bee3188b
107 changed files with 6318 additions and 12063 deletions

View File

@@ -18,6 +18,13 @@ import {
lockAdminSession,
verifyAdminPassword,
} from './admin-access';
import { createLearningCourseLibrary } from '../services/learning-course-library';
import { getLearningPlayerServer } from '../services/learning-player-server';
import { createLearningAgentClient, type LearningAgentRequest } from '../services/learning-agent-client';
import { createLearningSpeechClient, type LearningSpeechRequest } from '../services/learning-speech-client';
import { createLearningGenerationClient } from '../services/learning-generation-client';
import { createLearningRuntimeBridge } from '../services/learning-runtime-bridge';
import type { LearningGenerationUploadRequest, LearningRuntimeBridgeRequest } from '../../shared/learning';
type UnifiedRequest = {
id?: string;
@@ -245,6 +252,26 @@ export function registerIpcHandlers(
): void {
registerHostApiProxyHandlers();
registerTranscriptExportHandler(mainWindow);
const learningCourseLibrary = createLearningCourseLibrary({ rootDirectory: app.getPath('userData') });
const learningAgentClient = createLearningAgentClient();
const learningSpeechClient = createLearningSpeechClient();
const learningGenerationClient = createLearningGenerationClient();
const learningRuntimeBridge = createLearningRuntimeBridge();
ipcMain.handle('learning:startGeneration', (_event, request: LearningGenerationUploadRequest) => learningGenerationClient.start(request));
ipcMain.handle('learning:download', (_event, courseId: string) => learningCourseLibrary.download(courseId));
ipcMain.handle('learning:listInstalled', () => learningCourseLibrary.listInstalled());
ipcMain.handle('learning:readClassroom', (_event, courseId: string, moduleId?: string) => learningCourseLibrary.readClassroom(courseId, moduleId));
ipcMain.handle('learning:playerUrl', async () => (await getLearningPlayerServer()).url);
ipcMain.handle('learning:agentAsk', (_event, request: LearningAgentRequest) => learningAgentClient.ask(request));
ipcMain.handle('learning:agentReset', (_event, courseId?: string, contentHash?: string) => learningAgentClient.reset(courseId, contentHash));
ipcMain.handle('learning:transcribe', (_event, request: LearningSpeechRequest) => learningSpeechClient.transcribe(request));
ipcMain.handle('learning:runtimeRequest', (event, request: LearningRuntimeBridgeRequest) => learningRuntimeBridge.request(
request,
(payload) => {
if (!event.sender.isDestroyed()) event.sender.send('learning:runtime-event', payload);
},
));
ipcMain.handle('app:request', async (_event, request: UnifiedRequest) => (
handleUnifiedRequest(request, opencodeManager)