feat: add Husky hooks and fix provider tutorial UI/logic

- Add Husky pre-commit and pre-push hooks for linting, type checking, and build validation
- Fix visual hierarchy bug in the provider onboarding tutorial
- Remove feedback modal
- Move MinIO bucket creation logic to before app startup
- Wire MiniMax audio through voice generation pipeline
- Fix scene insertion issues
- Fix portal tutorial modal and harden panel variant task flow
This commit is contained in:
saturn
2026-03-09 02:42:35 +08:00
parent 881ed44996
commit fba480ae6e
34 changed files with 721 additions and 247 deletions

View File

@@ -23,6 +23,7 @@ type DirectRouteCase = {
expectedTaskType: TaskType
expectedTargetType: string
expectedProjectId: string
expectedPayloadSubset?: Record<string, unknown>
}
const authState = vi.hoisted<AuthState>(() => ({
@@ -315,6 +316,11 @@ const DIRECT_CASES: ReadonlyArray<DirectRouteCase> = [
expectedTaskType: TASK_TYPE.INSERT_PANEL,
expectedTargetType: 'NovelPromotionStoryboard',
expectedProjectId: 'project-1',
expectedPayloadSubset: {
storyboardId: 'storyboard-1',
insertAfterPanelId: 'panel-ins',
userInput: '请根据前后镜头自动分析并插入一个自然衔接的新分镜。',
},
},
{
routeFile: 'src/app/api/novel-promotion/[projectId]/lip-sync/route.ts',
@@ -471,6 +477,9 @@ describe('api contract - direct submit routes (behavior)', () => {
expect(submitArg?.targetType).toBe(routeCase.expectedTargetType)
expect(submitArg?.projectId).toBe(routeCase.expectedProjectId)
expect(submitArg?.userId).toBe('user-1')
if (routeCase.expectedPayloadSubset) {
expect(submitArg?.payload).toEqual(expect.objectContaining(routeCase.expectedPayloadSubset))
}
const json = await res.json() as Record<string, unknown>
const isVoiceGenerateRoute = routeCase.routeFile.endsWith('/voice-generate/route.ts')