* refactor: optimize page loading and data fetching * fix: resolve recurring production runtime errors * feat: add MCP company and customer updates * fix: handle year-end tax adjustments * feat: harden annual report compliance * fix: expand invoice logo and font support * fix: sanitize API route error responses * fix: sanitize user-facing error messages * feat: persist onboarding and tax assessment notices * fix: reduce cloud backup audit churn * feat: refine invoice editor layout * fix: show saved tax adjustments in INK2 * fix: complete annual report API mappings * docs: record operational safeguards and decisions * fix: harden annual report review findings * fix: adjust column span for description based on VAT registration * New css class name
24 lines
920 B
TypeScript
24 lines
920 B
TypeScript
import { redirect } from 'next/navigation'
|
|
import ChatIntakeStarter from '@/components/agent/ChatIntakeStarter'
|
|
import { getDashboardAuthContext, getDashboardCompanyId } from '../../request-context'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
// /chat/intake: Phase C bootstrap surface. ReviewCard navigates here after
|
|
// Phase B "kör" succeeds. The client component mounts AgentChat with
|
|
// intent='onboarding.intake' in fresh-start mode; AgentChat auto-fires the
|
|
// first invoke which creates the conversation row, and we swap the URL to
|
|
// /chat/[id] when the new id streams back.
|
|
//
|
|
// Plan ref: dev_docs/specialized-agent-plan.md §7 Phase C.
|
|
export default async function ChatIntakePage() {
|
|
const [{ user }, companyId] = await Promise.all([
|
|
getDashboardAuthContext(),
|
|
getDashboardCompanyId(),
|
|
])
|
|
if (!user) redirect('/login')
|
|
if (!companyId) redirect('/onboarding')
|
|
|
|
return <ChatIntakeStarter />
|
|
}
|