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:
@@ -15,7 +15,7 @@ export default function Navbar() {
|
||||
const { data: session, status } = useSession()
|
||||
const t = useTranslations('nav')
|
||||
const tc = useTranslations('common')
|
||||
const { currentVersion, update, shouldPulse, showModal, isChecking, openModal, dismissCurrentUpdate, checkNow } = useGithubReleaseUpdate()
|
||||
const { currentVersion, update, shouldPulse, showModal, openModal, dismissCurrentUpdate, checkNow } = useGithubReleaseUpdate()
|
||||
const [checkMsg, setCheckMsg] = useState<string | null>(null)
|
||||
const [checkMsgFading, setCheckMsgFading] = useState(false)
|
||||
const [manualChecking, setManualChecking] = useState(false)
|
||||
@@ -101,15 +101,6 @@ export default function Navbar() {
|
||||
</div>
|
||||
) : session ? (
|
||||
<>
|
||||
<a
|
||||
href="https://www.waoowaoo.com/community.html"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-xs sm:text-sm text-[var(--glass-text-secondary)] hover:text-[var(--glass-text-primary)] font-medium transition-colors flex items-center gap-1"
|
||||
>
|
||||
<AppIcon name="usersRound" className="w-4 h-4" />
|
||||
{t('feedback')}
|
||||
</a>
|
||||
<Link
|
||||
href={{ pathname: '/workspace' }}
|
||||
className="text-sm text-[var(--glass-text-secondary)] hover:text-[var(--glass-text-primary)] font-medium transition-colors flex items-center gap-1"
|
||||
@@ -133,6 +124,15 @@ export default function Navbar() {
|
||||
{t('profile')}
|
||||
</Link>
|
||||
<LanguageSwitcher />
|
||||
<a
|
||||
href="/api/admin/download-logs"
|
||||
download
|
||||
className="text-sm text-[var(--glass-text-secondary)] hover:text-[var(--glass-text-primary)] font-medium transition-colors flex items-center gap-1"
|
||||
title={t('downloadLogs')}
|
||||
>
|
||||
<AppIcon name="download" className="w-4 h-4" />
|
||||
{t('downloadLogs')}
|
||||
</a>
|
||||
</>
|
||||
|
||||
) : (
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
'use client'
|
||||
|
||||
import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'
|
||||
import { useTranslations, useLocale } from 'next-intl'
|
||||
import { USER_FEEDBACK_FORM_URL } from '@/lib/feedback'
|
||||
import { buildFeedbackLog, type FeedbackContextStage } from '@/lib/feedback-log'
|
||||
import { useTranslations } from 'next-intl'
|
||||
|
||||
export type LLMStageViewStatus =
|
||||
| 'pending'
|
||||
@@ -41,9 +39,6 @@ export type LLMStageStreamCardProps = {
|
||||
smoothStreaming?: boolean
|
||||
errorMessage?: string
|
||||
topRightAction?: ReactNode
|
||||
feedbackStage?: FeedbackContextStage
|
||||
projectId?: string
|
||||
episodeId?: string | null
|
||||
}
|
||||
|
||||
const PROGRESS_KEY_PREFIX = 'progress.'
|
||||
@@ -187,13 +182,8 @@ export default function LLMStageStreamCard({
|
||||
smoothStreaming = true,
|
||||
errorMessage,
|
||||
topRightAction,
|
||||
feedbackStage,
|
||||
projectId,
|
||||
episodeId,
|
||||
}: LLMStageStreamCardProps) {
|
||||
const t = useTranslations('progress')
|
||||
const locale = useLocale()
|
||||
const feedbackLocale: 'zh' | 'en' = locale === 'en' ? 'en' : 'zh'
|
||||
|
||||
const resolveProgressText = useCallback((value: string | undefined, fallbackKey: string): string => {
|
||||
const raw = typeof value === 'string' ? value.trim() : ''
|
||||
@@ -398,34 +388,6 @@ export default function LLMStageStreamCard({
|
||||
<span className="text-base">⚠️</span>
|
||||
<span className="text-sm font-medium">{errorMessage}</span>
|
||||
</div>
|
||||
{feedbackStage && projectId && (
|
||||
<div className="flex flex-wrap items-center gap-2 text-xs text-[var(--glass-text-secondary)]">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const log = buildFeedbackLog({
|
||||
locale: feedbackLocale,
|
||||
projectId,
|
||||
episodeId: episodeId ?? undefined,
|
||||
stage: feedbackStage,
|
||||
errorMessage,
|
||||
})
|
||||
void navigator.clipboard.writeText(log)
|
||||
}}
|
||||
className="glass-btn-base glass-btn-secondary rounded-md px-2 py-1 text-[11px]"
|
||||
>
|
||||
{t('runConsole.copyErrorDetail')}
|
||||
</button>
|
||||
<a
|
||||
href={USER_FEEDBACK_FORM_URL}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="glass-btn-base glass-btn-primary rounded-md px-2 py-1 text-[11px]"
|
||||
>
|
||||
{t('runConsole.openFeedbackForm')}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</header>
|
||||
|
||||
Reference in New Issue
Block a user