wrong-notebook 0.0.0-stage → 2026.10.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +81 -0
- package/.next/build-manifest.json +24 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +104 -0
- package/.next/required-server-files.json +358 -0
- package/.next/routes-manifest.json +579 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +20 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +9 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +30 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +20 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +20 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/admin/page/app-paths-manifest.json +3 -0
- package/.next/server/app/admin/page/build-manifest.json +20 -0
- package/.next/server/app/admin/page/next-font-manifest.json +11 -0
- package/.next/server/app/admin/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/admin/page/server-reference-manifest.json +4 -0
- package/.next/server/app/admin/page.js +14 -0
- package/.next/server/app/admin/page.js.map +5 -0
- package/.next/server/app/admin/page.js.nft.json +1 -0
- package/.next/server/app/admin/page_client-reference-manifest.js +3 -0
- package/.next/server/app/admin/user/[id]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/admin/user/[id]/page/build-manifest.json +20 -0
- package/.next/server/app/admin/user/[id]/page/next-font-manifest.json +11 -0
- package/.next/server/app/admin/user/[id]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/admin/user/[id]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/admin/user/[id]/page.js +14 -0
- package/.next/server/app/admin/user/[id]/page.js.map +5 -0
- package/.next/server/app/admin/user/[id]/page.js.nft.json +1 -0
- package/.next/server/app/admin/user/[id]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/dashboard/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/dashboard/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/dashboard/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/dashboard/route.js +10 -0
- package/.next/server/app/api/admin/dashboard/route.js.map +5 -0
- package/.next/server/app/api/admin/dashboard/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/dashboard/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/migrate-tags/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/migrate-tags/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/migrate-tags/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/migrate-tags/route.js +9 -0
- package/.next/server/app/api/admin/migrate-tags/route.js.map +5 -0
- package/.next/server/app/api/admin/migrate-tags/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/migrate-tags/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/system-reset/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/system-reset/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/system-reset/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/system-reset/route.js +8 -0
- package/.next/server/app/api/admin/system-reset/route.js.map +5 -0
- package/.next/server/app/api/admin/system-reset/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/system-reset/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/users/[id]/detail/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/users/[id]/detail/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/users/[id]/detail/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/users/[id]/detail/route.js +9 -0
- package/.next/server/app/api/admin/users/[id]/detail/route.js.map +5 -0
- package/.next/server/app/api/admin/users/[id]/detail/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/users/[id]/detail/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/users/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/users/[id]/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/users/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/users/[id]/route.js +8 -0
- package/.next/server/app/api/admin/users/[id]/route.js.map +5 -0
- package/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/users/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/admin/users/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/admin/users/route/build-manifest.json +12 -0
- package/.next/server/app/api/admin/users/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/admin/users/route.js +8 -0
- package/.next/server/app/api/admin/users/route.js.map +5 -0
- package/.next/server/app/api/admin/users/route.js.nft.json +1 -0
- package/.next/server/app/api/admin/users/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/ai/models/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/ai/models/route/build-manifest.json +12 -0
- package/.next/server/app/api/ai/models/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/ai/models/route.js +14 -0
- package/.next/server/app/api/ai/models/route.js.map +5 -0
- package/.next/server/app/api/ai/models/route.js.nft.json +1 -0
- package/.next/server/app/api/ai/models/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/ai/test/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/ai/test/route/build-manifest.json +12 -0
- package/.next/server/app/api/ai/test/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/ai/test/route.js +15 -0
- package/.next/server/app/api/ai/test/route.js.map +5 -0
- package/.next/server/app/api/ai/test/route.js.nft.json +1 -0
- package/.next/server/app/api/ai/test/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/analytics/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/analytics/route/build-manifest.json +12 -0
- package/.next/server/app/api/analytics/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/analytics/route.js +9 -0
- package/.next/server/app/api/analytics/route.js.map +5 -0
- package/.next/server/app/api/analytics/route.js.nft.json +1 -0
- package/.next/server/app/api/analytics/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/analyze/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/analyze/route/build-manifest.json +12 -0
- package/.next/server/app/api/analyze/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/analyze/route.js +16 -0
- package/.next/server/app/api/analyze/route.js.map +5 -0
- package/.next/server/app/api/analyze/route.js.nft.json +1 -0
- package/.next/server/app/api/analyze/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/auth/[...nextauth]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/auth/[...nextauth]/route/build-manifest.json +12 -0
- package/.next/server/app/api/auth/[...nextauth]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/auth/[...nextauth]/route.js +7 -0
- package/.next/server/app/api/auth/[...nextauth]/route.js.map +5 -0
- package/.next/server/app/api/auth/[...nextauth]/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/[...nextauth]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/delete/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/delete/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/delete/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/delete/route.js +8 -0
- package/.next/server/app/api/error-items/[id]/delete/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/delete/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/delete/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/figure/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/figure/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/figure/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/figure/route.js +15 -0
- package/.next/server/app/api/error-items/[id]/figure/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/figure/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/figure/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route.js +16 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/fix-latex/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route.js +15 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/geogebra/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/image/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/image/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/image/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/image/route.js +9 -0
- package/.next/server/app/api/error-items/[id]/image/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/image/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/image/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/mastery/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/mastery/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/mastery/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/mastery/route.js +8 -0
- package/.next/server/app/api/error-items/[id]/mastery/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/mastery/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/mastery/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/notes/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/notes/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/notes/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/notes/route.js +8 -0
- package/.next/server/app/api/error-items/[id]/notes/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/notes/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/notes/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route.js +8 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/practice-records/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route.js +15 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/reanswer/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/retag/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/retag/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/retag/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/retag/route.js +16 -0
- package/.next/server/app/api/error-items/[id]/retag/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/retag/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/retag/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/route.js +9 -0
- package/.next/server/app/api/error-items/[id]/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route.js +16 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route.js.map +5 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/[id]/svg-animation/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/batch-delete/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/batch-delete/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/batch-delete/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/batch-delete/route.js +8 -0
- package/.next/server/app/api/error-items/batch-delete/route.js.map +5 -0
- package/.next/server/app/api/error-items/batch-delete/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/batch-delete/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/clear/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/clear/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/clear/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/clear/route.js +8 -0
- package/.next/server/app/api/error-items/clear/route.js.map +5 -0
- package/.next/server/app/api/error-items/clear/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/clear/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/list/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/list/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/list/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/list/route.js +10 -0
- package/.next/server/app/api/error-items/list/route.js.map +5 -0
- package/.next/server/app/api/error-items/list/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/list/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/route.js +17 -0
- package/.next/server/app/api/error-items/route.js.map +5 -0
- package/.next/server/app/api/error-items/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/short/[shortId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/short/[shortId]/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/short/[shortId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/short/[shortId]/route.js +8 -0
- package/.next/server/app/api/error-items/short/[shortId]/route.js.map +5 -0
- package/.next/server/app/api/error-items/short/[shortId]/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/short/[shortId]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/error-items/similarity/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/error-items/similarity/route/build-manifest.json +12 -0
- package/.next/server/app/api/error-items/similarity/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/error-items/similarity/route.js +9 -0
- package/.next/server/app/api/error-items/similarity/route.js.map +5 -0
- package/.next/server/app/api/error-items/similarity/route.js.nft.json +1 -0
- package/.next/server/app/api/error-items/similarity/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route/build-manifest.json +12 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route.js +16 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route.js.map +5 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route.js.nft.json +1 -0
- package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/exams/[id]/results/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/exams/[id]/results/route/build-manifest.json +12 -0
- package/.next/server/app/api/exams/[id]/results/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/exams/[id]/results/route.js +16 -0
- package/.next/server/app/api/exams/[id]/results/route.js.map +5 -0
- package/.next/server/app/api/exams/[id]/results/route.js.nft.json +1 -0
- package/.next/server/app/api/exams/[id]/results/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/exams/[id]/retry/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/exams/[id]/retry/route/build-manifest.json +12 -0
- package/.next/server/app/api/exams/[id]/retry/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/exams/[id]/retry/route.js +16 -0
- package/.next/server/app/api/exams/[id]/retry/route.js.map +5 -0
- package/.next/server/app/api/exams/[id]/retry/route.js.nft.json +1 -0
- package/.next/server/app/api/exams/[id]/retry/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/exams/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/exams/[id]/route/build-manifest.json +12 -0
- package/.next/server/app/api/exams/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/exams/[id]/route.js +16 -0
- package/.next/server/app/api/exams/[id]/route.js.map +5 -0
- package/.next/server/app/api/exams/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/exams/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/exams/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/exams/route/build-manifest.json +12 -0
- package/.next/server/app/api/exams/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/exams/route.js +16 -0
- package/.next/server/app/api/exams/route.js.map +5 -0
- package/.next/server/app/api/exams/route.js.nft.json +1 -0
- package/.next/server/app/api/exams/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/export/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/export/route/build-manifest.json +12 -0
- package/.next/server/app/api/export/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/export/route.js +10 -0
- package/.next/server/app/api/export/route.js.map +5 -0
- package/.next/server/app/api/export/route.js.nft.json +1 -0
- package/.next/server/app/api/export/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/geogebra-analyze/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/geogebra-analyze/route/build-manifest.json +12 -0
- package/.next/server/app/api/geogebra-analyze/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/geogebra-analyze/route.js +15 -0
- package/.next/server/app/api/geogebra-analyze/route.js.map +5 -0
- package/.next/server/app/api/geogebra-analyze/route.js.nft.json +1 -0
- package/.next/server/app/api/geogebra-analyze/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/health/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/health/route/build-manifest.json +12 -0
- package/.next/server/app/api/health/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/health/route.js +7 -0
- package/.next/server/app/api/health/route.js.map +5 -0
- package/.next/server/app/api/health/route.js.nft.json +1 -0
- package/.next/server/app/api/health/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/import/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/import/route/build-manifest.json +12 -0
- package/.next/server/app/api/import/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/import/route.js +17 -0
- package/.next/server/app/api/import/route.js.map +5 -0
- package/.next/server/app/api/import/route.js.nft.json +1 -0
- package/.next/server/app/api/import/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/logs/frontend/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/logs/frontend/route/build-manifest.json +12 -0
- package/.next/server/app/api/logs/frontend/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/logs/frontend/route.js +8 -0
- package/.next/server/app/api/logs/frontend/route.js.map +5 -0
- package/.next/server/app/api/logs/frontend/route.js.nft.json +1 -0
- package/.next/server/app/api/logs/frontend/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/notebooks/[id]/retag/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notebooks/[id]/retag/route/build-manifest.json +12 -0
- package/.next/server/app/api/notebooks/[id]/retag/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notebooks/[id]/retag/route.js +16 -0
- package/.next/server/app/api/notebooks/[id]/retag/route.js.map +5 -0
- package/.next/server/app/api/notebooks/[id]/retag/route.js.nft.json +1 -0
- package/.next/server/app/api/notebooks/[id]/retag/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/notebooks/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notebooks/[id]/route/build-manifest.json +12 -0
- package/.next/server/app/api/notebooks/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notebooks/[id]/route.js +9 -0
- package/.next/server/app/api/notebooks/[id]/route.js.map +5 -0
- package/.next/server/app/api/notebooks/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/notebooks/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/notebooks/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notebooks/route/build-manifest.json +12 -0
- package/.next/server/app/api/notebooks/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notebooks/route.js +10 -0
- package/.next/server/app/api/notebooks/route.js.map +5 -0
- package/.next/server/app/api/notebooks/route.js.nft.json +1 -0
- package/.next/server/app/api/notebooks/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/openclaw/batch-upload/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/openclaw/batch-upload/route/build-manifest.json +12 -0
- package/.next/server/app/api/openclaw/batch-upload/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/openclaw/batch-upload/route.js +15 -0
- package/.next/server/app/api/openclaw/batch-upload/route.js.map +5 -0
- package/.next/server/app/api/openclaw/batch-upload/route.js.nft.json +1 -0
- package/.next/server/app/api/openclaw/batch-upload/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/practice/generate/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/practice/generate/route/build-manifest.json +12 -0
- package/.next/server/app/api/practice/generate/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/practice/generate/route.js +15 -0
- package/.next/server/app/api/practice/generate/route.js.map +5 -0
- package/.next/server/app/api/practice/generate/route.js.nft.json +1 -0
- package/.next/server/app/api/practice/generate/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/practice/record/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/practice/record/[id]/route/build-manifest.json +12 -0
- package/.next/server/app/api/practice/record/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/practice/record/[id]/route.js +15 -0
- package/.next/server/app/api/practice/record/[id]/route.js.map +5 -0
- package/.next/server/app/api/practice/record/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/practice/record/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/practice/record/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/practice/record/route/build-manifest.json +12 -0
- package/.next/server/app/api/practice/record/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/practice/record/route.js +15 -0
- package/.next/server/app/api/practice/record/route.js.map +5 -0
- package/.next/server/app/api/practice/record/route.js.nft.json +1 -0
- package/.next/server/app/api/practice/record/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/reanswer/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/reanswer/route/build-manifest.json +12 -0
- package/.next/server/app/api/reanswer/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/reanswer/route.js +15 -0
- package/.next/server/app/api/reanswer/route.js.map +5 -0
- package/.next/server/app/api/reanswer/route.js.nft.json +1 -0
- package/.next/server/app/api/reanswer/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/register/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/register/route/build-manifest.json +12 -0
- package/.next/server/app/api/register/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/register/route.js +9 -0
- package/.next/server/app/api/register/route.js.map +5 -0
- package/.next/server/app/api/register/route.js.nft.json +1 -0
- package/.next/server/app/api/register/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/register/status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/register/status/route/build-manifest.json +12 -0
- package/.next/server/app/api/register/status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/register/status/route.js +8 -0
- package/.next/server/app/api/register/status/route.js.map +5 -0
- package/.next/server/app/api/register/status/route.js.nft.json +1 -0
- package/.next/server/app/api/register/status/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/build-manifest.json +12 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +9 -0
- package/.next/server/app/api/settings/route.js.map +5 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/stats/practice/clear/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/stats/practice/clear/route/build-manifest.json +12 -0
- package/.next/server/app/api/stats/practice/clear/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/stats/practice/clear/route.js +8 -0
- package/.next/server/app/api/stats/practice/clear/route.js.map +5 -0
- package/.next/server/app/api/stats/practice/clear/route.js.nft.json +1 -0
- package/.next/server/app/api/stats/practice/clear/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/stats/practice/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/stats/practice/route/build-manifest.json +12 -0
- package/.next/server/app/api/stats/practice/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/stats/practice/route.js +9 -0
- package/.next/server/app/api/stats/practice/route.js.map +5 -0
- package/.next/server/app/api/stats/practice/route.js.nft.json +1 -0
- package/.next/server/app/api/stats/practice/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tags/route/build-manifest.json +12 -0
- package/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tags/route.js +9 -0
- package/.next/server/app/api/tags/route.js.map +5 -0
- package/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/.next/server/app/api/tags/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tags/stats/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tags/stats/route/build-manifest.json +12 -0
- package/.next/server/app/api/tags/stats/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tags/stats/route.js +8 -0
- package/.next/server/app/api/tags/stats/route.js.map +5 -0
- package/.next/server/app/api/tags/stats/route.js.nft.json +1 -0
- package/.next/server/app/api/tags/stats/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tags/suggestions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tags/suggestions/route/build-manifest.json +12 -0
- package/.next/server/app/api/tags/suggestions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tags/suggestions/route.js +8 -0
- package/.next/server/app/api/tags/suggestions/route.js.map +5 -0
- package/.next/server/app/api/tags/suggestions/route.js.nft.json +1 -0
- package/.next/server/app/api/tags/suggestions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tasks/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tasks/route/build-manifest.json +12 -0
- package/.next/server/app/api/tasks/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tasks/route.js +8 -0
- package/.next/server/app/api/tasks/route.js.map +5 -0
- package/.next/server/app/api/tasks/route.js.nft.json +1 -0
- package/.next/server/app/api/tasks/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/user/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/user/route/build-manifest.json +12 -0
- package/.next/server/app/api/user/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/user/route.js +10 -0
- package/.next/server/app/api/user/route.js.map +5 -0
- package/.next/server/app/api/user/route.js.nft.json +1 -0
- package/.next/server/app/api/user/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/version/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/version/route/build-manifest.json +12 -0
- package/.next/server/app/api/version/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/version/route.js +7 -0
- package/.next/server/app/api/version/route.js.map +5 -0
- package/.next/server/app/api/version/route.js.nft.json +1 -0
- package/.next/server/app/api/version/route_client-reference-manifest.js +3 -0
- package/.next/server/app/error-items/[id]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/error-items/[id]/page/build-manifest.json +20 -0
- package/.next/server/app/error-items/[id]/page/next-font-manifest.json +11 -0
- package/.next/server/app/error-items/[id]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/error-items/[id]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/error-items/[id]/page.js +14 -0
- package/.next/server/app/error-items/[id]/page.js.map +5 -0
- package/.next/server/app/error-items/[id]/page.js.nft.json +1 -0
- package/.next/server/app/error-items/[id]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/exams/[id]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/exams/[id]/page/build-manifest.json +20 -0
- package/.next/server/app/exams/[id]/page/next-font-manifest.json +11 -0
- package/.next/server/app/exams/[id]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/exams/[id]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/exams/[id]/page.js +14 -0
- package/.next/server/app/exams/[id]/page.js.map +5 -0
- package/.next/server/app/exams/[id]/page.js.nft.json +1 -0
- package/.next/server/app/exams/[id]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/exams/[id]/print/page/app-paths-manifest.json +3 -0
- package/.next/server/app/exams/[id]/print/page/build-manifest.json +20 -0
- package/.next/server/app/exams/[id]/print/page/next-font-manifest.json +11 -0
- package/.next/server/app/exams/[id]/print/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/exams/[id]/print/page/server-reference-manifest.json +4 -0
- package/.next/server/app/exams/[id]/print/page.js +14 -0
- package/.next/server/app/exams/[id]/print/page.js.map +5 -0
- package/.next/server/app/exams/[id]/print/page.js.nft.json +1 -0
- package/.next/server/app/exams/[id]/print/page_client-reference-manifest.js +3 -0
- package/.next/server/app/exams/page/app-paths-manifest.json +3 -0
- package/.next/server/app/exams/page/build-manifest.json +20 -0
- package/.next/server/app/exams/page/next-font-manifest.json +11 -0
- package/.next/server/app/exams/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/exams/page/server-reference-manifest.json +4 -0
- package/.next/server/app/exams/page.js +14 -0
- package/.next/server/app/exams/page.js.map +5 -0
- package/.next/server/app/exams/page.js.nft.json +1 -0
- package/.next/server/app/exams/page_client-reference-manifest.js +3 -0
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/.next/server/app/favicon.ico/route/build-manifest.json +12 -0
- package/.next/server/app/favicon.ico/route.js +8 -0
- package/.next/server/app/favicon.ico/route.js.map +5 -0
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +1 -0
- package/.next/server/app/latex-test/page/app-paths-manifest.json +3 -0
- package/.next/server/app/latex-test/page/build-manifest.json +20 -0
- package/.next/server/app/latex-test/page/next-font-manifest.json +11 -0
- package/.next/server/app/latex-test/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/latex-test/page/server-reference-manifest.json +4 -0
- package/.next/server/app/latex-test/page.js +14 -0
- package/.next/server/app/latex-test/page.js.map +5 -0
- package/.next/server/app/latex-test/page.js.nft.json +1 -0
- package/.next/server/app/latex-test/page_client-reference-manifest.js +3 -0
- package/.next/server/app/login/page/app-paths-manifest.json +3 -0
- package/.next/server/app/login/page/build-manifest.json +20 -0
- package/.next/server/app/login/page/next-font-manifest.json +11 -0
- package/.next/server/app/login/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/login/page/server-reference-manifest.json +4 -0
- package/.next/server/app/login/page.js +14 -0
- package/.next/server/app/login/page.js.map +5 -0
- package/.next/server/app/login/page.js.nft.json +1 -0
- package/.next/server/app/login/page_client-reference-manifest.js +3 -0
- package/.next/server/app/manifest.webmanifest/route/app-paths-manifest.json +3 -0
- package/.next/server/app/manifest.webmanifest/route/build-manifest.json +12 -0
- package/.next/server/app/manifest.webmanifest/route/server-reference-manifest.json +4 -0
- package/.next/server/app/manifest.webmanifest/route.js +8 -0
- package/.next/server/app/manifest.webmanifest/route.js.map +5 -0
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +3 -0
- package/.next/server/app/manifest.webmanifest.body +1 -0
- package/.next/server/app/manifest.webmanifest.meta +1 -0
- package/.next/server/app/notebooks/[id]/add/page/app-paths-manifest.json +3 -0
- package/.next/server/app/notebooks/[id]/add/page/build-manifest.json +20 -0
- package/.next/server/app/notebooks/[id]/add/page/next-font-manifest.json +11 -0
- package/.next/server/app/notebooks/[id]/add/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/notebooks/[id]/add/page/server-reference-manifest.json +4 -0
- package/.next/server/app/notebooks/[id]/add/page.js +14 -0
- package/.next/server/app/notebooks/[id]/add/page.js.map +5 -0
- package/.next/server/app/notebooks/[id]/add/page.js.nft.json +1 -0
- package/.next/server/app/notebooks/[id]/add/page_client-reference-manifest.js +3 -0
- package/.next/server/app/notebooks/[id]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/notebooks/[id]/page/build-manifest.json +20 -0
- package/.next/server/app/notebooks/[id]/page/next-font-manifest.json +11 -0
- package/.next/server/app/notebooks/[id]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/notebooks/[id]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/notebooks/[id]/page.js +14 -0
- package/.next/server/app/notebooks/[id]/page.js.map +5 -0
- package/.next/server/app/notebooks/[id]/page.js.nft.json +1 -0
- package/.next/server/app/notebooks/[id]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/notebooks/page/app-paths-manifest.json +3 -0
- package/.next/server/app/notebooks/page/build-manifest.json +20 -0
- package/.next/server/app/notebooks/page/next-font-manifest.json +11 -0
- package/.next/server/app/notebooks/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/notebooks/page/server-reference-manifest.json +4 -0
- package/.next/server/app/notebooks/page.js +14 -0
- package/.next/server/app/notebooks/page.js.map +5 -0
- package/.next/server/app/notebooks/page.js.nft.json +1 -0
- package/.next/server/app/notebooks/page_client-reference-manifest.js +3 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +20 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +14 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/practice/page/app-paths-manifest.json +3 -0
- package/.next/server/app/practice/page/build-manifest.json +20 -0
- package/.next/server/app/practice/page/next-font-manifest.json +11 -0
- package/.next/server/app/practice/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/practice/page/server-reference-manifest.json +4 -0
- package/.next/server/app/practice/page.js +14 -0
- package/.next/server/app/practice/page.js.map +5 -0
- package/.next/server/app/practice/page.js.nft.json +1 -0
- package/.next/server/app/practice/page_client-reference-manifest.js +3 -0
- package/.next/server/app/print-preview/page/app-paths-manifest.json +3 -0
- package/.next/server/app/print-preview/page/build-manifest.json +20 -0
- package/.next/server/app/print-preview/page/next-font-manifest.json +11 -0
- package/.next/server/app/print-preview/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/print-preview/page/server-reference-manifest.json +4 -0
- package/.next/server/app/print-preview/page.js +14 -0
- package/.next/server/app/print-preview/page.js.map +5 -0
- package/.next/server/app/print-preview/page.js.nft.json +1 -0
- package/.next/server/app/print-preview/page_client-reference-manifest.js +3 -0
- package/.next/server/app/register/page/app-paths-manifest.json +3 -0
- package/.next/server/app/register/page/build-manifest.json +20 -0
- package/.next/server/app/register/page/next-font-manifest.json +11 -0
- package/.next/server/app/register/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/register/page/server-reference-manifest.json +4 -0
- package/.next/server/app/register/page.js +14 -0
- package/.next/server/app/register/page.js.map +5 -0
- package/.next/server/app/register/page.js.nft.json +1 -0
- package/.next/server/app/register/page_client-reference-manifest.js +3 -0
- package/.next/server/app/stats/page/app-paths-manifest.json +3 -0
- package/.next/server/app/stats/page/build-manifest.json +20 -0
- package/.next/server/app/stats/page/next-font-manifest.json +11 -0
- package/.next/server/app/stats/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/stats/page/server-reference-manifest.json +4 -0
- package/.next/server/app/stats/page.js +14 -0
- package/.next/server/app/stats/page.js.map +5 -0
- package/.next/server/app/stats/page.js.nft.json +1 -0
- package/.next/server/app/stats/page_client-reference-manifest.js +3 -0
- package/.next/server/app/tags/page/app-paths-manifest.json +3 -0
- package/.next/server/app/tags/page/build-manifest.json +20 -0
- package/.next/server/app/tags/page/next-font-manifest.json +11 -0
- package/.next/server/app/tags/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/tags/page/server-reference-manifest.json +4 -0
- package/.next/server/app/tags/page.js +14 -0
- package/.next/server/app/tags/page.js.map +5 -0
- package/.next/server/app/tags/page.js.nft.json +1 -0
- package/.next/server/app/tags/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +81 -0
- package/.next/server/chunks/1jng_app_api_exams_[id]_questions_[questionId]_regenerate_route_actions_1ggead3.js +3 -0
- package/.next/server/chunks/1oeh_server_app_api_error-items_[id]_practice-records_route_actions_0z2zuf1.js +3 -0
- package/.next/server/chunks/1oeh_server_app_api_error-items_[id]_svg-animation_route_actions_17gckf3.js +3 -0
- package/.next/server/chunks/[externals]__04n7qbr._.js +3 -0
- package/.next/server/chunks/[externals]__0pot68n._.js +3 -0
- package/.next/server/chunks/[externals]__1735khz._.js +3 -0
- package/.next/server/chunks/[externals]_assert_1pwe1ri._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-8hf14._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__00_hq9v._.js +153 -0
- package/.next/server/chunks/[root-of-the-server]__00m7v48._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01bzczj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__01m28mx._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04mu6-m._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04tyyvs._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05no8nw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05s4wut._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__06h5afw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07jl92a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07nvz1d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08gak8r._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08zi-xg._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0994h9l._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0_t7bbz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0akadps._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0b3nww4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0bs5unr._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0c59gc3._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dfbwm3._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0e22a4y._.js +122 -0
- package/.next/server/chunks/[root-of-the-server]__0els3c1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gp88gz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gpohuv._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0grkic-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0hj9oe2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0inxsnu._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0j-gv3-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0jaawra._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0je3zje._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0m8p-6f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0m_f8ct._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0na-z2m._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0nqbham._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ns_tws._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0p3hkz7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0pli74s._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0qaih8c._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ra48rd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0rk_yxy._.js +9 -0
- package/.next/server/chunks/[root-of-the-server]__0sh6-yu._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ssagl1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0u58zap._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ws6c0v._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0yc8r2x._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ydrrdj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0yds0ae._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ynfeq-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0z-sjqh._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0zp1e41._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__108ydjw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10yghm_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__11-sf2-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__11wobg2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__122xu-0._.js +32 -0
- package/.next/server/chunks/[root-of-the-server]__13_c7nc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__13ebiit._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1413v0e._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__14pcopd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__150ei9u._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__15g7yjy._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__15tkoe6._.js +10 -0
- package/.next/server/chunks/[root-of-the-server]__19nm3y_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__19vj8qy._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1_gkx5x._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1a4i9sz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1cn6rlb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1csfdxc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1e3crdc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1ezwxao._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1g-xe1f._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1g1wi9i._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1g3usdn._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1gmc_uw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1hmv25w._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1hpwwxw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1hq73__._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1jtd2ar._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__1kqv61m._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1m4-ab6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1nmtv65._.js +10 -0
- package/.next/server/chunks/[root-of-the-server]__1oup682._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1ouzjax._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1pcgq22._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1pplzr1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1q5nt5y._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1qt6_3b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1sdtn83._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1utxo11._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1v1dgs2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1v9b8go._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1vw740y._.js +32 -0
- package/.next/server/chunks/[root-of-the-server]__1vzxn91._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wgn76g._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wkh9sj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1xcmja4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1y6fx9-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1zos_p4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1zp0oig._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__203q6el._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__20bun16._.js +3 -0
- package/.next/server/chunks/[turbopack]_runtime.js +939 -0
- package/.next/server/chunks/_008zx49._.js +3 -0
- package/.next/server/chunks/_011-ll5._.js +3 -0
- package/.next/server/chunks/_0431fxn._.js +3 -0
- package/.next/server/chunks/_0ae3z2e._.js +3 -0
- package/.next/server/chunks/_0c5hvv3._.js +11 -0
- package/.next/server/chunks/_0ekrwj-._.js +36 -0
- package/.next/server/chunks/_0frix22._.js +11 -0
- package/.next/server/chunks/_0gxi3zr._.js +3 -0
- package/.next/server/chunks/_0lz3t4l._.js +19 -0
- package/.next/server/chunks/_0o1p57f._.js +3 -0
- package/.next/server/chunks/_0t6g4yt._.js +3 -0
- package/.next/server/chunks/_0uxp3uh._.js +3 -0
- package/.next/server/chunks/_0x3ltk0._.js +36 -0
- package/.next/server/chunks/_12w5k19._.js +3 -0
- package/.next/server/chunks/_13ffmxv._.js +3 -0
- package/.next/server/chunks/_14tz_k9._.js +3 -0
- package/.next/server/chunks/_16jdov0._.js +3 -0
- package/.next/server/chunks/_18amra5._.js +3 -0
- package/.next/server/chunks/_19fidvw._.js +3 -0
- package/.next/server/chunks/_1_ns7o3._.js +3 -0
- package/.next/server/chunks/_1a1aqmi._.js +3 -0
- package/.next/server/chunks/_1a1udq0._.js +3 -0
- package/.next/server/chunks/_1b0269x._.js +3 -0
- package/.next/server/chunks/_1b7qjlv._.js +3 -0
- package/.next/server/chunks/_1be-y66._.js +3 -0
- package/.next/server/chunks/_1ex6ovo._.js +3 -0
- package/.next/server/chunks/_1fgb9ve._.js +3 -0
- package/.next/server/chunks/_1m-yyz-._.js +3 -0
- package/.next/server/chunks/_1oj6gy_._.js +3 -0
- package/.next/server/chunks/_1oqpwh8._.js +3 -0
- package/.next/server/chunks/_1q5w9fc._.js +3 -0
- package/.next/server/chunks/_1ve0z0w._.js +3 -0
- package/.next/server/chunks/_1z_ujac._.js +3 -0
- package/.next/server/chunks/_211va-d._.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_dashboard_route_actions_1ispso-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_migrate-tags_route_actions_1ztwxhx.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_system-reset_route_actions_15aselt.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_users_[id]_detail_route_actions_0oe_wkt.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_users_[id]_route_actions_1hhpuc4.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_admin_users_route_actions_0q-rtz1.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_ai_models_route_actions_0w7iwv-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_ai_test_route_actions_1p0n1q8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_analytics_route_actions_1e0ou17.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_auth_[___nextauth]_route_actions_08nexdk.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_delete_route_actions_1w26boq.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_figure_route_actions_0adlts0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_fix-latex_route_actions_0hc7dhx.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_geogebra_route_actions_1-ks4uv.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_image_route_actions_1k9n5yl.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_mastery_route_actions_1l5uan6.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_notes_route_actions_1cjux7z.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_reanswer_route_actions_1-sw0j2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_retag_route_actions_0ckki4n.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_route_actions_1kbs4ux.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_batch-delete_route_actions_0hiq_1k.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_clear_route_actions_14t_6i-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_list_route_actions_032x4ue.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_route_actions_1zdvz0p.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_short_[shortId]_route_actions_02976v-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_error-items_similarity_route_actions_1i26if9.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_exams_[id]_results_route_actions_1v3vhi4.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_exams_[id]_retry_route_actions_1fdi39f.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_exams_[id]_route_actions_1wuidrq.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_exams_route_actions_1c_zhtj.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_export_route_actions_0lpcnjc.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_geogebra-analyze_route_actions_1xng0_c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_health_route_actions_1ryftkb.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_import_route_actions_20ko04x.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_logs_frontend_route_actions_0nxepty.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notebooks_[id]_retag_route_actions_00su_t8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notebooks_[id]_route_actions_11j3vxg.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notebooks_route_actions_02cy45r.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_openclaw_batch-upload_route_actions_1zz3oen.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_practice_generate_route_actions_1krr9n_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_practice_record_[id]_route_actions_0zreiom.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_practice_record_route_actions_0py9z__.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_reanswer_route_actions_04xweh_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_register_route_actions_0vlzh_c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_register_status_route_actions_0b52_sj.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_stats_practice_clear_route_actions_1iz6iz0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_stats_practice_route_actions_1tfoxx-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tags_route_actions_1nb9ma2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tags_stats_route_actions_0fmeadc.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tags_suggestions_route_actions_1xpolyv.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tasks_route_actions_123tq1_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_user_route_actions_1k-4clg.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_version_route_actions_0kbx30h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_08hcpz0.js +3 -0
- package/.next/server/chunks/node_modules_next_1zdbrne._.js +10 -0
- package/.next/server/chunks/node_modules_zod_v4_classic_external_1-pw2v2.js +22 -0
- package/.next/server/chunks/src_0tzpy5j._.js +3 -0
- package/.next/server/chunks/src_lib_ai_prompts_ts_0z36zms._.js +554 -0
- package/.next/server/chunks/src_lib_date-time_ts_14chb27._.js +3 -0
- package/.next/server/chunks/src_lib_question-deduplication_ts_1p1bik-._.js +3 -0
- package/.next/server/chunks/ssr/[externals]_fs_0pplqgc._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00gewu3._.js +35 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05f8wbh._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a0nty7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ax9dog._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0b8kewv._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bvtza7._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0g_-bym._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0gwwr7e._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hzktoi._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0icjezr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0koj8h0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0s87xha._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0snpjfe._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0y_e9do._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ybs_4c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__14l7peq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1507q8a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__15ppb9j._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__191jn5n._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1f2jx51._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1gth76-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1ko_dw5._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1l84pks._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1m7qw-2._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1ma2oml._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1o8jotz._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1o__w27._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1p7f0va._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1sg9eoj._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1u74hyi._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1xsovpr._.js +3 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +939 -0
- package/.next/server/chunks/ssr/_054yhx9._.js +3 -0
- package/.next/server/chunks/ssr/_07ls0n_._.js +3 -0
- package/.next/server/chunks/ssr/_0i9hwpv._.js +3 -0
- package/.next/server/chunks/ssr/_0iqp5hs._.js +3 -0
- package/.next/server/chunks/ssr/_0m1-rq-._.js +3 -0
- package/.next/server/chunks/ssr/_0mgbe2b._.js +3 -0
- package/.next/server/chunks/ssr/_0nv22wt._.js +3 -0
- package/.next/server/chunks/ssr/_0rz2_qb._.js +151 -0
- package/.next/server/chunks/ssr/_0sbbx9z._.js +7 -0
- package/.next/server/chunks/ssr/_0sf1gd9._.js +3 -0
- package/.next/server/chunks/ssr/_0uemk57._.js +3 -0
- package/.next/server/chunks/ssr/_0zj7dlu._.js +3 -0
- package/.next/server/chunks/ssr/_12c20v5._.js +3 -0
- package/.next/server/chunks/ssr/_17igtpd._.js +3 -0
- package/.next/server/chunks/ssr/_1filpif._.js +3 -0
- package/.next/server/chunks/ssr/_1gu1rou._.js +3 -0
- package/.next/server/chunks/ssr/_1jniqsj._.js +3 -0
- package/.next/server/chunks/ssr/_1kgnhmo._.js +8 -0
- package/.next/server/chunks/ssr/_1lt1lhz._.js +8 -0
- package/.next/server/chunks/ssr/_1yeu09q._.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_admin_page_actions_1mcickz.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_admin_user_[id]_page_actions_0baj8gs.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_error-items_[id]_page_actions_0qla9ak.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_exams_[id]_page_actions_1kushg5.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_exams_[id]_print_page_actions_0pxdgxq.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_exams_page_actions_0av69f-.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_latex-test_page_actions_19v7ka0.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_login_page_actions_04fnjo0.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_[id]_add_page_actions_0275ft2.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_[id]_page_actions_1qj0i-7.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_page_actions_06x1kdz.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_practice_page_actions_0cy-h5n.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_print-preview_page_actions_1jhaaln.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_register_page_actions_1op-s-x.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_stats_page_actions_1olf1_a.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_tags_page_actions_20v_n--.js +3 -0
- package/.next/server/chunks/ssr/node_modules_0o2aki7._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_1y5ym6h._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_1lnqo1a._.js +5 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_077yo5w._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_1_c-t1n._.js +14 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_1v8aef8._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0bew68i._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
- package/.next/server/chunks/ssr/src_1biegcg._.js +3 -0
- package/.next/server/chunks/ssr/src_1gayunq._.js +3 -0
- package/.next/server/chunks/ssr/src_1o363ao._.js +3 -0
- package/.next/server/chunks/ssr/src_app_admin_page_tsx_0ublbd0._.js +3 -0
- package/.next/server/chunks/ssr/src_app_error-items_[id]_page_tsx_04xwwdm._.js +3 -0
- package/.next/server/chunks/ssr/src_app_notebooks_[id]_page_tsx_08njm-5._.js +3 -0
- package/.next/server/chunks/ssr/src_app_notebooks_page_tsx_1p9src5._.js +3 -0
- package/.next/server/chunks/ssr/src_app_page_tsx_1chiuah._.js +3 -0
- package/.next/server/chunks/ssr/src_app_practice_page_tsx_10gnx53._.js +3 -0
- package/.next/server/chunks/ssr/src_app_tags_page_tsx_1h2vkk4._.js +3 -0
- package/.next/server/chunks/ssr/src_components_providers_tsx_09kw-mv._.js +193 -0
- package/.next/server/chunks/ssr/src_lib_date-time_ts_0oyqctn._.js +3 -0
- package/.next/server/edge/chunks/[root-of-the-server]__1osrt2u._.js +3 -0
- package/.next/server/edge/chunks/_1s0wgnu._.js +3 -0
- package/.next/server/edge/chunks/node_modules_0g4gi6f._.js +13 -0
- package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_1iafar9.js +3 -0
- package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_1x1n1fx.js +3 -0
- package/.next/server/functions-config-manifest.json +6 -0
- package/.next/server/instrumentation.js +4 -0
- package/.next/server/middleware-build-manifest.js +24 -0
- package/.next/server/middleware-manifest.json +36 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +79 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +3 -0
- package/.next/server/prefetch-hints.json +11 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +5 -0
- package/.next/static/OpwRvHtdhPgxve2rKkWkK/_buildManifest.js +11 -0
- package/.next/static/OpwRvHtdhPgxve2rKkWkK/_clientMiddlewareManifest.js +6 -0
- package/.next/static/OpwRvHtdhPgxve2rKkWkK/_ssgManifest.js +1 -0
- package/.next/static/chunks/00pn0o7lymln6.js +1 -0
- package/.next/static/chunks/02521degnqmf0.js +1 -0
- package/.next/static/chunks/05q4yafxnvtzs.js +1 -0
- package/.next/static/chunks/0_w084ms_lq25.js +22 -0
- package/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
- package/.next/static/chunks/0dzfsm6h13fyr.js +1 -0
- package/.next/static/chunks/0ehjiuuxbbhq9.js +1 -0
- package/.next/static/chunks/0iq53qkw5hvrs.js +1 -0
- package/.next/static/chunks/0lxsaj3bivcgo.css +1 -0
- package/.next/static/chunks/0m81l71kojx8j.js +1 -0
- package/.next/static/chunks/0nckb2-62ooyq.js +1 -0
- package/.next/static/chunks/0snej-v5yglxr.js +1 -0
- package/.next/static/chunks/1-7k9gbbjkcml.js +1 -0
- package/.next/static/chunks/1ad3ir88_e_v6.css +3 -0
- package/.next/static/chunks/1cd32rtomdngh.js +1 -0
- package/.next/static/chunks/1io3-cth_2-cd.js +1 -0
- package/.next/static/chunks/1oiuiyv1cv06v.js +31 -0
- package/.next/static/chunks/1t4-pobw0y5cf.js +1 -0
- package/.next/static/chunks/1xg811762s1p1.js +1 -0
- package/.next/static/chunks/1z_5sj1wqi06v.js +1 -0
- package/.next/static/chunks/29erttsjondpe.js +1 -0
- package/.next/static/chunks/2dlme2fdlkms6.js +1 -0
- package/.next/static/chunks/2h-exsnhkfnb8.js +1 -0
- package/.next/static/chunks/2pmzqbg-qabof.js +1 -0
- package/.next/static/chunks/2rmhba08h4qqo.js +33 -0
- package/.next/static/chunks/2s07soqug65hc.js +1 -0
- package/.next/static/chunks/2w2uo9jjxt-re.js +1 -0
- package/.next/static/chunks/2yl8a-gxngbuq.js +1 -0
- package/.next/static/chunks/31rxdwy0u_t29.js +1 -0
- package/.next/static/chunks/32bl-oqw9oso0.js +1 -0
- package/.next/static/chunks/35cov9g4cgt-v.js +1 -0
- package/.next/static/chunks/37g3bsrs22xg7.js +191 -0
- package/.next/static/chunks/3b-g5_r9nto3s.js +6 -0
- package/.next/static/chunks/3c4-ozf1dxam2.css +1 -0
- package/.next/static/chunks/3g1rm2suowncy.js +3 -0
- package/.next/static/chunks/3helovsg02qr4.js +1 -0
- package/.next/static/chunks/3jta6jrk-jubq.js +1 -0
- package/.next/static/chunks/3yhf6xyypekz6.js +1 -0
- package/.next/static/chunks/3z9gc_02gl8n9.js +1 -0
- package/.next/static/chunks/427wg73nuzpiz.js +5 -0
- package/.next/static/chunks/turbopack-1-0r7_puvz3eq.js +1 -0
- package/.next/static/media/GeistMono_Variable-s.p.0iy569vnmknd-.woff2 +0 -0
- package/.next/static/media/Geist_Variable-s.p.03oqkqkevsckn.woff2 +0 -0
- package/.next/static/media/KaTeX_AMS-Regular.10y3kupq4t663.woff +0 -0
- package/.next/static/media/KaTeX_AMS-Regular.25ieegmnh38ts.woff2 +0 -0
- package/.next/static/media/KaTeX_AMS-Regular.418dr7cz3fo2x.ttf +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Bold.06b-ya9t43ioz.woff2 +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Bold.2vmk2hva4ctha.woff +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Bold.40ltxhe834pns.ttf +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Regular.07-7u27-nhn_r.ttf +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Regular.2eph4dlhid_m9.woff2 +0 -0
- package/.next/static/media/KaTeX_Caligraphic-Regular.3gxeetazf831f.woff +0 -0
- package/.next/static/media/KaTeX_Fraktur-Bold.19yqa_tc9d_gx.ttf +0 -0
- package/.next/static/media/KaTeX_Fraktur-Bold.1alcy76__wdj2.woff +0 -0
- package/.next/static/media/KaTeX_Fraktur-Bold.2sasz-d-jtw8y.woff2 +0 -0
- package/.next/static/media/KaTeX_Fraktur-Regular.110oo81prr9n5.woff +0 -0
- package/.next/static/media/KaTeX_Fraktur-Regular.2d10y4xmjvzlf.woff2 +0 -0
- package/.next/static/media/KaTeX_Fraktur-Regular.2qhy34r6a05dn.ttf +0 -0
- package/.next/static/media/KaTeX_Main-Bold.0us_n0tnxlxu7.ttf +0 -0
- package/.next/static/media/KaTeX_Main-Bold.0v1esh257kqpe.woff +0 -0
- package/.next/static/media/KaTeX_Main-Bold.3-rowy8o6_4ky.woff2 +0 -0
- package/.next/static/media/KaTeX_Main-BoldItalic.13355ck5zr48q.woff +0 -0
- package/.next/static/media/KaTeX_Main-BoldItalic.14r2naom8mrec.woff2 +0 -0
- package/.next/static/media/KaTeX_Main-BoldItalic.3x_u9cepaced0.ttf +0 -0
- package/.next/static/media/KaTeX_Main-Italic.0afv392dj4w59.woff +0 -0
- package/.next/static/media/KaTeX_Main-Italic.0lig0v9j0700p.woff2 +0 -0
- package/.next/static/media/KaTeX_Main-Italic.2hkw3230mfwcv.ttf +0 -0
- package/.next/static/media/KaTeX_Main-Regular.0symfa7dqj6jd.ttf +0 -0
- package/.next/static/media/KaTeX_Main-Regular.15u8r3b2y7fv4.woff +0 -0
- package/.next/static/media/KaTeX_Main-Regular.1ryvsdzh2w1_e.woff2 +0 -0
- package/.next/static/media/KaTeX_Math-BoldItalic.0y5w36a5aq__2.ttf +0 -0
- package/.next/static/media/KaTeX_Math-BoldItalic.12pl58orkw9rg.woff +0 -0
- package/.next/static/media/KaTeX_Math-BoldItalic.1oopuu636h4il.woff2 +0 -0
- package/.next/static/media/KaTeX_Math-Italic.0w0b1ugh62cfr.woff +0 -0
- package/.next/static/media/KaTeX_Math-Italic.2vkekfblmz5nb.ttf +0 -0
- package/.next/static/media/KaTeX_Math-Italic.32405s1aq8vas.woff2 +0 -0
- package/.next/static/media/KaTeX_SansSerif-Bold.0h3wi2z_eouyg.woff2 +0 -0
- package/.next/static/media/KaTeX_SansSerif-Bold.1ovw5p-yjp56g.woff +0 -0
- package/.next/static/media/KaTeX_SansSerif-Bold.2d03q85pwxpti.ttf +0 -0
- package/.next/static/media/KaTeX_SansSerif-Italic.0wkjc4dm2kcit.woff2 +0 -0
- package/.next/static/media/KaTeX_SansSerif-Italic.1qavw__2zz8gk.woff +0 -0
- package/.next/static/media/KaTeX_SansSerif-Italic.3i-q087b23-m8.ttf +0 -0
- package/.next/static/media/KaTeX_SansSerif-Regular.1i4afx8nk8n4r.woff +0 -0
- package/.next/static/media/KaTeX_SansSerif-Regular.2peiewu59z3d-.woff2 +0 -0
- package/.next/static/media/KaTeX_SansSerif-Regular.31pbu25feko_c.ttf +0 -0
- package/.next/static/media/KaTeX_Script-Regular.11h14300o9pd0.woff2 +0 -0
- package/.next/static/media/KaTeX_Script-Regular.28p_x7iz71ofe.ttf +0 -0
- package/.next/static/media/KaTeX_Script-Regular.3110jb9c-bxna.woff +0 -0
- package/.next/static/media/KaTeX_Size1-Regular.03lhvx36ekcou.woff2 +0 -0
- package/.next/static/media/KaTeX_Size1-Regular.1slf4bh0hc6vm.woff +0 -0
- package/.next/static/media/KaTeX_Size1-Regular.1y57-ck23ey8c.ttf +0 -0
- package/.next/static/media/KaTeX_Size2-Regular.0-kwyvx03omo8.woff +0 -0
- package/.next/static/media/KaTeX_Size2-Regular.14s5gg-puz6h-.woff2 +0 -0
- package/.next/static/media/KaTeX_Size2-Regular.2u0s-b07k2o9m.ttf +0 -0
- package/.next/static/media/KaTeX_Size3-Regular.04o9a_02gu_e8.woff +0 -0
- package/.next/static/media/KaTeX_Size3-Regular.1n1rgzz84z8r9.woff2 +0 -0
- package/.next/static/media/KaTeX_Size3-Regular.1pkn-dge4q0fv.ttf +0 -0
- package/.next/static/media/KaTeX_Size4-Regular.2sgotkdv3dcyv.woff2 +0 -0
- package/.next/static/media/KaTeX_Size4-Regular.2uelkfk2yna5e.ttf +0 -0
- package/.next/static/media/KaTeX_Size4-Regular.3p2r1l7xmebxv.woff +0 -0
- package/.next/static/media/KaTeX_Typewriter-Regular.11gr2d2wuwz77.woff2 +0 -0
- package/.next/static/media/KaTeX_Typewriter-Regular.12f8myjij3617.woff +0 -0
- package/.next/static/media/KaTeX_Typewriter-Regular.3nee9kjfy6nm8.ttf +0 -0
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- package/README.md +35 -2
- package/bin/wrong-notebook.js +60 -0
- package/launcher.js +177 -0
- package/package.json +44 -4
- package/prisma/migrations/20251127143435_init/migration.sql +62 -0
- package/prisma/migrations/20251129152530_init/migration.sql +40 -0
- package/prisma/migrations/20251130150624_add_education_info/migration.sql +6 -0
- package/prisma/migrations/20251130161659_init/migration.sql +2 -0
- package/prisma/migrations/20251201050917_add_admin_role/migration.sql +21 -0
- package/prisma/migrations/20251203155126_cascade_delete_subject_error_items/migration.sql +29 -0
- package/prisma/migrations/20251213132347_add_knowledge_tag_model/migration.sql +38 -0
- package/prisma/migrations/20251219014445_fix_tag_constraints/migration.sql +11 -0
- package/prisma/migrations/20260427090000_add_mistake_analysis_fields/migration.sql +4 -0
- package/prisma/migrations/20260608000000_add_geogebra_commands/migration.sql +2 -0
- package/prisma/migrations/20261018120000_add_practice_mastery_exam/migration.sql +103 -0
- package/prisma/migrations/20261018133653_add_duplicate_import_details/migration.sql +4 -0
- package/prisma/migrations/20261018134606_add_question_duplicate_threshold/migration.sql +2 -0
- package/prisma/migrations/20261019090000_add_user_enable_geogebra/migration.sql +2 -0
- package/prisma/migrations/20261019120000_lower_question_duplicate_threshold_default/migration.sql +27 -0
- package/prisma/migrations/20261019150000_add_error_item_difficulty_stars/migration.sql +2 -0
- package/prisma/migrations/20261019170000_add_notebook_stage_subject/migration.sql +17 -0
- package/prisma/migrations/20261019190000_add_question_figure_svg/migration.sql +6 -0
- package/prisma/migrations/20261019210000_add_svg_animation/migration.sql +3 -0
- package/prisma/migrations/20261019230000_exam_question_multiple_results/migration.sql +40 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +222 -0
- package/prisma/seed.db +0 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/icons/icon.png +0 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/server.js +38 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* wrong-notebook 命令行入口(npm 全局安装)
|
|
4
|
+
* wrong-notebook [start] [--port 3000] [--host 0.0.0.0] [--data-dir ~/.wrong-notebook]
|
|
5
|
+
* wrong-notebook prepare-client 生成本机 Prisma Client(postinstall 自动执行)
|
|
6
|
+
* wrong-notebook version | help
|
|
7
|
+
*/
|
|
8
|
+
const path = require('node:path');
|
|
9
|
+
const { spawnSync } = require('node:child_process');
|
|
10
|
+
|
|
11
|
+
const launcher = require('../launcher.js');
|
|
12
|
+
const pkg = require('../package.json');
|
|
13
|
+
|
|
14
|
+
const HELP = `错题本 wrong-notebook v${pkg.version}
|
|
15
|
+
|
|
16
|
+
用法:
|
|
17
|
+
wrong-notebook [start] [选项] 启动服务(默认监听 0.0.0.0:3000)
|
|
18
|
+
wrong-notebook version 显示版本
|
|
19
|
+
wrong-notebook help 显示帮助
|
|
20
|
+
|
|
21
|
+
选项:
|
|
22
|
+
-p, --port <端口> 监听端口,默认 3000(也可用环境变量 PORT)
|
|
23
|
+
-H, --host <地址> 监听地址,默认 0.0.0.0;仅本机访问可设为 127.0.0.1
|
|
24
|
+
-d, --data-dir <目录> 数据目录,默认 ~/.wrong-notebook(也可用环境变量 WRONG_NOTEBOOK_HOME)
|
|
25
|
+
|
|
26
|
+
数据库、配置文件(config/app-config.json)和会话密钥都保存在数据目录中,升级不会丢失数据。
|
|
27
|
+
首次启动的默认管理员:admin@localhost / 123456,登录后请立即修改密码。`;
|
|
28
|
+
|
|
29
|
+
const ALIASES = { '-h': 'help', '--help': 'help', '-v': 'version', '--version': 'version' };
|
|
30
|
+
const [first, ...rest] = process.argv.slice(2);
|
|
31
|
+
const command = ALIASES[first] || (!first || first.startsWith('-') ? 'start' : first);
|
|
32
|
+
const args = command === 'start' && first !== 'start' ? process.argv.slice(2) : rest;
|
|
33
|
+
|
|
34
|
+
switch (command) {
|
|
35
|
+
case 'start':
|
|
36
|
+
try {
|
|
37
|
+
launcher.start(launcher.parseArgs(args));
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error(`[wrong-notebook] 启动失败:${error.message}`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
case 'prepare-client': {
|
|
44
|
+
// 安装时生成 Prisma Client;失败不阻断安装,首次启动时会再尝试
|
|
45
|
+
const cli = require.resolve('prisma/build/index.js', { paths: [path.join(__dirname, '..')] });
|
|
46
|
+
const schema = path.join(__dirname, '..', 'prisma', 'schema.prisma');
|
|
47
|
+
const result = spawnSync(process.execPath, [cli, 'generate', '--schema', schema], { stdio: 'inherit' });
|
|
48
|
+
if (result.status !== 0) console.warn('[wrong-notebook] Prisma Client 生成失败,首次启动时将重试');
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'version':
|
|
52
|
+
console.log(pkg.version);
|
|
53
|
+
break;
|
|
54
|
+
case 'help':
|
|
55
|
+
console.log(HELP);
|
|
56
|
+
break;
|
|
57
|
+
default:
|
|
58
|
+
console.error(`未知命令:${command}\n\n${HELP}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
package/launcher.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* wrong-notebook 安装包通用启动器(npm、桌面端、飞牛OS 共用)
|
|
4
|
+
*
|
|
5
|
+
* 与 docker-entrypoint.sh 的行为保持一致:
|
|
6
|
+
* 1. 准备数据目录:数据库、配置文件、NextAuth 密钥都放在数据目录,安装目录可以只读
|
|
7
|
+
* 2. 首次运行时复制打包时预置的数据库(含管理员账号和系统标签)
|
|
8
|
+
* 3. 每次启动执行 prisma migrate deploy,只做增量迁移,保留已有数据
|
|
9
|
+
* 4. 在当前进程内启动 Next.js standalone 服务
|
|
10
|
+
*
|
|
11
|
+
* 用法:node launcher.js [--port 3000] [--host 0.0.0.0] [--data-dir 目录]
|
|
12
|
+
* 也可用环境变量 PORT、HOSTNAME、WRONG_NOTEBOOK_HOME 指定。
|
|
13
|
+
*/
|
|
14
|
+
const fs = require('node:fs');
|
|
15
|
+
const os = require('node:os');
|
|
16
|
+
const path = require('node:path');
|
|
17
|
+
const crypto = require('node:crypto');
|
|
18
|
+
const { spawnSync } = require('node:child_process');
|
|
19
|
+
|
|
20
|
+
const APP_DIR = __dirname;
|
|
21
|
+
const DEFAULT_PORT = 3000;
|
|
22
|
+
|
|
23
|
+
function parseArgs(argv) {
|
|
24
|
+
const opts = {};
|
|
25
|
+
for (let i = 0; i < argv.length; i++) {
|
|
26
|
+
const arg = argv[i];
|
|
27
|
+
const [key, inline] = arg.split('=', 2);
|
|
28
|
+
const next = () => (inline !== undefined ? inline : argv[++i]);
|
|
29
|
+
if (key === '--port' || key === '-p') opts.port = next();
|
|
30
|
+
else if (key === '--host' || key === '-H') opts.host = next();
|
|
31
|
+
else if (key === '--data-dir' || key === '-d') opts.dataDir = next();
|
|
32
|
+
}
|
|
33
|
+
return opts;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function defaultDataDir() {
|
|
37
|
+
if (process.env.WRONG_NOTEBOOK_HOME) return process.env.WRONG_NOTEBOOK_HOME;
|
|
38
|
+
return path.join(os.homedir(), '.wrong-notebook');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function appVersion() {
|
|
42
|
+
try {
|
|
43
|
+
return JSON.parse(fs.readFileSync(path.join(APP_DIR, 'package.json'), 'utf8')).version || 'unknown';
|
|
44
|
+
} catch {
|
|
45
|
+
return 'unknown';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** NextAuth 会话密钥:首次运行随机生成并保存,之后保持不变,避免重启后登录失效 */
|
|
50
|
+
function ensureSecret(dataDir) {
|
|
51
|
+
const file = path.join(dataDir, '.nextauth_secret');
|
|
52
|
+
if (fs.existsSync(file)) {
|
|
53
|
+
const saved = fs.readFileSync(file, 'utf8').trim();
|
|
54
|
+
if (saved) return saved;
|
|
55
|
+
}
|
|
56
|
+
const secret = crypto.randomBytes(32).toString('base64');
|
|
57
|
+
fs.writeFileSync(file, secret, { mode: 0o600 });
|
|
58
|
+
return secret;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Prisma 的 SQLite 地址统一使用正斜杠,Windows 盘符路径也可用 */
|
|
62
|
+
function sqliteUrl(file) {
|
|
63
|
+
return `file:${file.split(path.sep).join('/')}`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function runPrisma(args, env) {
|
|
67
|
+
const cli = require.resolve('prisma/build/index.js', { paths: [APP_DIR] });
|
|
68
|
+
const result = spawnSync(process.execPath, [cli, ...args], {
|
|
69
|
+
cwd: APP_DIR,
|
|
70
|
+
env,
|
|
71
|
+
stdio: 'inherit',
|
|
72
|
+
windowsHide: true,
|
|
73
|
+
});
|
|
74
|
+
if (result.error) throw result.error;
|
|
75
|
+
return result.status === 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** npm 安装时 Prisma Client 由 postinstall 生成;被 --ignore-scripts 跳过时在这里补生成 */
|
|
79
|
+
function ensurePrismaClient(env) {
|
|
80
|
+
let clientDir;
|
|
81
|
+
try {
|
|
82
|
+
clientDir = path.dirname(require.resolve('.prisma/client/index.js', { paths: [APP_DIR] }));
|
|
83
|
+
} catch {
|
|
84
|
+
clientDir = null;
|
|
85
|
+
}
|
|
86
|
+
if (clientDir && fs.existsSync(path.join(clientDir, 'schema.prisma'))) return;
|
|
87
|
+
console.log('[wrong-notebook] 正在生成 Prisma Client...');
|
|
88
|
+
if (!runPrisma(['generate', '--schema', path.join(APP_DIR, 'prisma', 'schema.prisma')], env)) {
|
|
89
|
+
throw new Error('Prisma Client 生成失败,请检查安装目录是否可写');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Turbopack 把 serverExternalPackages 编译成带哈希的别名(如 @prisma/client-2c3a283f134fdcb6),
|
|
95
|
+
* standalone 用 .next/node_modules 下的符号链接指向真实包。npm 打包会丢弃该目录,
|
|
96
|
+
* 飞牛OS 打包也不接受符号链接,因此安装包不带这些链接,改为在解析失败时去掉哈希后缀再解析。
|
|
97
|
+
*/
|
|
98
|
+
function installExternalAliasResolver() {
|
|
99
|
+
const Module = require('node:module');
|
|
100
|
+
if (typeof Module.registerHooks !== 'function') {
|
|
101
|
+
throw new Error(`需要 Node.js 22.15 或更高版本(当前 ${process.version})`);
|
|
102
|
+
}
|
|
103
|
+
const alias = /^((?:@[^/]+\/)?[^/]+)-[0-9a-f]{16}(\/.*)?$/;
|
|
104
|
+
// 同时作用于 require 和 import(bcryptjs 3 为 ESM,由 import() 加载)
|
|
105
|
+
Module.registerHooks({
|
|
106
|
+
resolve(specifier, context, nextResolve) {
|
|
107
|
+
try {
|
|
108
|
+
return nextResolve(specifier, context);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
const match = alias.exec(specifier);
|
|
111
|
+
if (!match) throw error;
|
|
112
|
+
return nextResolve(match[1] + (match[2] || ''), context);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function prepare(options = {}) {
|
|
119
|
+
const dataDir = path.resolve(options.dataDir || defaultDataDir());
|
|
120
|
+
const configDir = path.join(dataDir, 'config');
|
|
121
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
122
|
+
|
|
123
|
+
const dbFile = path.join(dataDir, 'wrong-notebook.db');
|
|
124
|
+
const version = appVersion();
|
|
125
|
+
const env = {
|
|
126
|
+
...process.env,
|
|
127
|
+
NODE_ENV: 'production',
|
|
128
|
+
NEXT_TELEMETRY_DISABLED: '1',
|
|
129
|
+
DATABASE_URL: sqliteUrl(dbFile),
|
|
130
|
+
CONFIG_DIR: configDir,
|
|
131
|
+
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET || ensureSecret(dataDir),
|
|
132
|
+
AUTH_TRUST_HOST: process.env.AUTH_TRUST_HOST || 'true',
|
|
133
|
+
PRESERVE_EXISTING_DATA: 'true',
|
|
134
|
+
APP_VERSION: process.env.APP_VERSION || version,
|
|
135
|
+
WRONG_NOTEBOOK_HOME: dataDir,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
ensurePrismaClient(env);
|
|
139
|
+
|
|
140
|
+
if (!fs.existsSync(dbFile) || fs.statSync(dbFile).size === 0) {
|
|
141
|
+
const seed = path.join(APP_DIR, 'prisma', 'seed.db');
|
|
142
|
+
if (fs.existsSync(seed)) {
|
|
143
|
+
console.log('[wrong-notebook] 初始化数据库(默认管理员 admin@localhost / 123456,登录后请立即修改密码)');
|
|
144
|
+
fs.copyFileSync(seed, dbFile);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
console.log('[wrong-notebook] 正在执行数据库迁移...');
|
|
149
|
+
if (!runPrisma(['migrate', 'deploy', '--schema', path.join(APP_DIR, 'prisma', 'schema.prisma')], env)) {
|
|
150
|
+
throw new Error('数据库迁移失败,已停止启动');
|
|
151
|
+
}
|
|
152
|
+
return { dataDir, dbFile, env, version };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function start(options = {}) {
|
|
156
|
+
const { dataDir, env, version } = prepare(options);
|
|
157
|
+
const port = String(options.port || process.env.PORT || DEFAULT_PORT);
|
|
158
|
+
const host = options.host || process.env.HOSTNAME || '0.0.0.0';
|
|
159
|
+
Object.assign(process.env, env, { PORT: port, HOSTNAME: host });
|
|
160
|
+
console.log(`[wrong-notebook] v${version} 数据目录:${dataDir}`);
|
|
161
|
+
const shownHost = host === '0.0.0.0' || host === '::' ? '127.0.0.1' : host;
|
|
162
|
+
console.log(`[wrong-notebook] 访问地址:http://${shownHost}:${port}`);
|
|
163
|
+
installExternalAliasResolver();
|
|
164
|
+
// standalone 的 server.js 会切换工作目录到自身所在目录并监听 PORT/HOSTNAME
|
|
165
|
+
require(path.join(APP_DIR, 'server.js'));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
module.exports = { prepare, start, parseArgs, defaultDataDir, sqliteUrl };
|
|
169
|
+
|
|
170
|
+
if (require.main === module) {
|
|
171
|
+
try {
|
|
172
|
+
start(parseArgs(process.argv.slice(2)));
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.error(`[wrong-notebook] 启动失败:${error.message}`);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wrong-notebook",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "2026.10.21",
|
|
4
|
+
"description": "错题本:上传题目图片,由 AI 识别、解析并标注知识点,支持练习、统计与打印导出",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"wrong-notebook",
|
|
7
|
+
"mistake-notebook",
|
|
8
|
+
"错题本",
|
|
9
|
+
"ai",
|
|
10
|
+
"education"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/margrop/wrong-notebook",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/margrop/wrong-notebook.git"
|
|
16
|
+
},
|
|
17
|
+
"bugs": "https://github.com/margrop/wrong-notebook/issues",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"bin": {
|
|
20
|
+
"wrong-notebook": "bin/wrong-notebook.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"bin",
|
|
24
|
+
"launcher.js",
|
|
25
|
+
"server.js",
|
|
26
|
+
".next",
|
|
27
|
+
"public",
|
|
28
|
+
"prisma",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=22.15"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"postinstall": "node bin/wrong-notebook.js prepare-client"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@prisma/client": "5.22.0",
|
|
39
|
+
"bcryptjs": "3.0.3",
|
|
40
|
+
"google-auth-library": "10.5.0",
|
|
41
|
+
"next": "16.3.8",
|
|
42
|
+
"react": "19.2.8",
|
|
43
|
+
"react-dom": "19.2.8",
|
|
44
|
+
"prisma": "5.22.0"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "User" (
|
|
3
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
+
"email" TEXT NOT NULL,
|
|
5
|
+
"password" TEXT NOT NULL,
|
|
6
|
+
"name" TEXT,
|
|
7
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
8
|
+
"updatedAt" DATETIME NOT NULL
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- CreateTable
|
|
12
|
+
CREATE TABLE "Subject" (
|
|
13
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
14
|
+
"name" TEXT NOT NULL,
|
|
15
|
+
"userId" TEXT NOT NULL,
|
|
16
|
+
CONSTRAINT "Subject_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
-- CreateTable
|
|
20
|
+
CREATE TABLE "ErrorItem" (
|
|
21
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
22
|
+
"userId" TEXT NOT NULL,
|
|
23
|
+
"subjectId" TEXT,
|
|
24
|
+
"originalImageUrl" TEXT NOT NULL,
|
|
25
|
+
"ocrText" TEXT,
|
|
26
|
+
"questionText" TEXT,
|
|
27
|
+
"answerText" TEXT,
|
|
28
|
+
"analysis" TEXT,
|
|
29
|
+
"knowledgePoints" TEXT,
|
|
30
|
+
"source" TEXT,
|
|
31
|
+
"errorType" TEXT,
|
|
32
|
+
"userNotes" TEXT,
|
|
33
|
+
"masteryLevel" INTEGER NOT NULL DEFAULT 0,
|
|
34
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
35
|
+
"updatedAt" DATETIME NOT NULL,
|
|
36
|
+
CONSTRAINT "ErrorItem_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
37
|
+
CONSTRAINT "ErrorItem_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- CreateTable
|
|
41
|
+
CREATE TABLE "ReviewSchedule" (
|
|
42
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
43
|
+
"errorItemId" TEXT NOT NULL,
|
|
44
|
+
"scheduledFor" DATETIME NOT NULL,
|
|
45
|
+
"completedAt" DATETIME,
|
|
46
|
+
"isCorrect" BOOLEAN,
|
|
47
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
48
|
+
CONSTRAINT "ReviewSchedule_errorItemId_fkey" FOREIGN KEY ("errorItemId") REFERENCES "ErrorItem" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
-- CreateTable
|
|
52
|
+
CREATE TABLE "PracticeSession" (
|
|
53
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
54
|
+
"userId" TEXT NOT NULL,
|
|
55
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
-- CreateIndex
|
|
59
|
+
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
60
|
+
|
|
61
|
+
-- CreateIndex
|
|
62
|
+
CREATE UNIQUE INDEX "Subject_name_userId_key" ON "Subject"("name", "userId");
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the `PracticeSession` table. If the table is not empty, all the data it contains will be lost.
|
|
5
|
+
- Added the required column `updatedAt` to the `Subject` table without a default value. This is not possible if the table is not empty.
|
|
6
|
+
|
|
7
|
+
*/
|
|
8
|
+
-- DropTable
|
|
9
|
+
PRAGMA foreign_keys=off;
|
|
10
|
+
DROP TABLE "PracticeSession";
|
|
11
|
+
PRAGMA foreign_keys=on;
|
|
12
|
+
|
|
13
|
+
-- CreateTable
|
|
14
|
+
CREATE TABLE "PracticeRecord" (
|
|
15
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
16
|
+
"userId" TEXT NOT NULL,
|
|
17
|
+
"subject" TEXT,
|
|
18
|
+
"difficulty" TEXT,
|
|
19
|
+
"isCorrect" BOOLEAN,
|
|
20
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
21
|
+
CONSTRAINT "PracticeRecord_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
-- RedefineTables
|
|
25
|
+
PRAGMA defer_foreign_keys=ON;
|
|
26
|
+
PRAGMA foreign_keys=OFF;
|
|
27
|
+
CREATE TABLE "new_Subject" (
|
|
28
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
29
|
+
"name" TEXT NOT NULL,
|
|
30
|
+
"userId" TEXT NOT NULL,
|
|
31
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
32
|
+
"updatedAt" DATETIME NOT NULL,
|
|
33
|
+
CONSTRAINT "Subject_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
34
|
+
);
|
|
35
|
+
INSERT INTO "new_Subject" ("id", "name", "userId") SELECT "id", "name", "userId" FROM "Subject";
|
|
36
|
+
DROP TABLE "Subject";
|
|
37
|
+
ALTER TABLE "new_Subject" RENAME TO "Subject";
|
|
38
|
+
CREATE UNIQUE INDEX "Subject_name_userId_key" ON "Subject"("name", "userId");
|
|
39
|
+
PRAGMA foreign_keys=ON;
|
|
40
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- RedefineTables
|
|
2
|
+
PRAGMA defer_foreign_keys=ON;
|
|
3
|
+
PRAGMA foreign_keys=OFF;
|
|
4
|
+
CREATE TABLE "new_User" (
|
|
5
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
+
"email" TEXT NOT NULL,
|
|
7
|
+
"password" TEXT NOT NULL,
|
|
8
|
+
"name" TEXT,
|
|
9
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
10
|
+
"updatedAt" DATETIME NOT NULL,
|
|
11
|
+
"educationStage" TEXT,
|
|
12
|
+
"enrollmentYear" INTEGER,
|
|
13
|
+
"role" TEXT NOT NULL DEFAULT 'user',
|
|
14
|
+
"isActive" BOOLEAN NOT NULL DEFAULT true
|
|
15
|
+
);
|
|
16
|
+
INSERT INTO "new_User" ("createdAt", "educationStage", "email", "enrollmentYear", "id", "name", "password", "updatedAt") SELECT "createdAt", "educationStage", "email", "enrollmentYear", "id", "name", "password", "updatedAt" FROM "User";
|
|
17
|
+
DROP TABLE "User";
|
|
18
|
+
ALTER TABLE "new_User" RENAME TO "User";
|
|
19
|
+
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
20
|
+
PRAGMA foreign_keys=ON;
|
|
21
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- RedefineTables
|
|
2
|
+
PRAGMA defer_foreign_keys=ON;
|
|
3
|
+
PRAGMA foreign_keys=OFF;
|
|
4
|
+
CREATE TABLE "new_ErrorItem" (
|
|
5
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
6
|
+
"userId" TEXT NOT NULL,
|
|
7
|
+
"subjectId" TEXT,
|
|
8
|
+
"originalImageUrl" TEXT NOT NULL,
|
|
9
|
+
"ocrText" TEXT,
|
|
10
|
+
"questionText" TEXT,
|
|
11
|
+
"answerText" TEXT,
|
|
12
|
+
"analysis" TEXT,
|
|
13
|
+
"knowledgePoints" TEXT,
|
|
14
|
+
"source" TEXT,
|
|
15
|
+
"errorType" TEXT,
|
|
16
|
+
"userNotes" TEXT,
|
|
17
|
+
"masteryLevel" INTEGER NOT NULL DEFAULT 0,
|
|
18
|
+
"gradeSemester" TEXT,
|
|
19
|
+
"paperLevel" TEXT,
|
|
20
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
21
|
+
"updatedAt" DATETIME NOT NULL,
|
|
22
|
+
CONSTRAINT "ErrorItem_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
23
|
+
CONSTRAINT "ErrorItem_subjectId_fkey" FOREIGN KEY ("subjectId") REFERENCES "Subject" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
24
|
+
);
|
|
25
|
+
INSERT INTO "new_ErrorItem" ("analysis", "answerText", "createdAt", "errorType", "gradeSemester", "id", "knowledgePoints", "masteryLevel", "ocrText", "originalImageUrl", "paperLevel", "questionText", "source", "subjectId", "updatedAt", "userId", "userNotes") SELECT "analysis", "answerText", "createdAt", "errorType", "gradeSemester", "id", "knowledgePoints", "masteryLevel", "ocrText", "originalImageUrl", "paperLevel", "questionText", "source", "subjectId", "updatedAt", "userId", "userNotes" FROM "ErrorItem";
|
|
26
|
+
DROP TABLE "ErrorItem";
|
|
27
|
+
ALTER TABLE "new_ErrorItem" RENAME TO "ErrorItem";
|
|
28
|
+
PRAGMA foreign_keys=ON;
|
|
29
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "KnowledgeTag" (
|
|
3
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
4
|
+
"name" TEXT NOT NULL,
|
|
5
|
+
"subject" TEXT NOT NULL,
|
|
6
|
+
"parentId" TEXT,
|
|
7
|
+
"order" INTEGER NOT NULL DEFAULT 0,
|
|
8
|
+
"code" TEXT,
|
|
9
|
+
"isSystem" BOOLEAN NOT NULL DEFAULT false,
|
|
10
|
+
"userId" TEXT,
|
|
11
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
12
|
+
"updatedAt" DATETIME NOT NULL,
|
|
13
|
+
CONSTRAINT "KnowledgeTag_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "KnowledgeTag" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
14
|
+
CONSTRAINT "KnowledgeTag_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
-- CreateTable
|
|
18
|
+
CREATE TABLE "_ErrorItemToKnowledgeTag" (
|
|
19
|
+
"A" TEXT NOT NULL,
|
|
20
|
+
"B" TEXT NOT NULL,
|
|
21
|
+
CONSTRAINT "_ErrorItemToKnowledgeTag_A_fkey" FOREIGN KEY ("A") REFERENCES "ErrorItem" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
22
|
+
CONSTRAINT "_ErrorItemToKnowledgeTag_B_fkey" FOREIGN KEY ("B") REFERENCES "KnowledgeTag" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
-- CreateIndex
|
|
26
|
+
CREATE INDEX "KnowledgeTag_parentId_idx" ON "KnowledgeTag"("parentId");
|
|
27
|
+
|
|
28
|
+
-- CreateIndex
|
|
29
|
+
CREATE INDEX "KnowledgeTag_subject_idx" ON "KnowledgeTag"("subject");
|
|
30
|
+
|
|
31
|
+
-- CreateIndex
|
|
32
|
+
CREATE UNIQUE INDEX "KnowledgeTag_subject_name_userId_key" ON "KnowledgeTag"("subject", "name", "userId");
|
|
33
|
+
|
|
34
|
+
-- CreateIndex
|
|
35
|
+
CREATE UNIQUE INDEX "_ErrorItemToKnowledgeTag_AB_unique" ON "_ErrorItemToKnowledgeTag"("A", "B");
|
|
36
|
+
|
|
37
|
+
-- CreateIndex
|
|
38
|
+
CREATE INDEX "_ErrorItemToKnowledgeTag_B_index" ON "_ErrorItemToKnowledgeTag"("B");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- A unique constraint covering the columns `[subject,name,userId,parentId]` on the table `KnowledgeTag` will be added. If there are existing duplicate values, this will fail.
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
-- DropIndex
|
|
8
|
+
DROP INDEX "KnowledgeTag_subject_name_userId_key";
|
|
9
|
+
|
|
10
|
+
-- CreateIndex
|
|
11
|
+
CREATE UNIQUE INDEX "KnowledgeTag_subject_name_userId_parentId_key" ON "KnowledgeTag"("subject", "name", "userId", "parentId");
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
-- AlterTable
|
|
2
|
+
ALTER TABLE "ErrorItem" ADD COLUMN "masteryEvaluatedAt" DATETIME;
|
|
3
|
+
ALTER TABLE "ErrorItem" ADD COLUMN "masteryProbability" REAL;
|
|
4
|
+
ALTER TABLE "ErrorItem" ADD COLUMN "masteryReason" TEXT;
|
|
5
|
+
ALTER TABLE "ErrorItem" ADD COLUMN "masterySource" TEXT;
|
|
6
|
+
ALTER TABLE "ErrorItem" ADD COLUMN "shortId" TEXT;
|
|
7
|
+
|
|
8
|
+
-- CreateTable
|
|
9
|
+
CREATE TABLE "ExamPaper" (
|
|
10
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
11
|
+
"userId" TEXT NOT NULL,
|
|
12
|
+
"title" TEXT NOT NULL,
|
|
13
|
+
"status" TEXT NOT NULL DEFAULT 'generating',
|
|
14
|
+
"scope" TEXT NOT NULL,
|
|
15
|
+
"difficulty" TEXT NOT NULL,
|
|
16
|
+
"requestedCount" INTEGER NOT NULL,
|
|
17
|
+
"subjectIds" TEXT NOT NULL,
|
|
18
|
+
"tagNames" TEXT,
|
|
19
|
+
"resultsRecordedAt" DATETIME,
|
|
20
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
21
|
+
"updatedAt" DATETIME NOT NULL,
|
|
22
|
+
CONSTRAINT "ExamPaper_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
-- CreateTable
|
|
26
|
+
CREATE TABLE "ExamQuestion" (
|
|
27
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
28
|
+
"paperId" TEXT NOT NULL,
|
|
29
|
+
"order" INTEGER NOT NULL,
|
|
30
|
+
"errorItemId" TEXT,
|
|
31
|
+
"sourceShortId" TEXT NOT NULL,
|
|
32
|
+
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
33
|
+
"questionText" TEXT,
|
|
34
|
+
"answerText" TEXT,
|
|
35
|
+
"analysis" TEXT,
|
|
36
|
+
"error" TEXT,
|
|
37
|
+
"practiceRecordId" TEXT,
|
|
38
|
+
CONSTRAINT "ExamQuestion_paperId_fkey" FOREIGN KEY ("paperId") REFERENCES "ExamPaper" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
39
|
+
CONSTRAINT "ExamQuestion_errorItemId_fkey" FOREIGN KEY ("errorItemId") REFERENCES "ErrorItem" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
40
|
+
CONSTRAINT "ExamQuestion_practiceRecordId_fkey" FOREIGN KEY ("practiceRecordId") REFERENCES "PracticeRecord" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
-- RedefineTables
|
|
44
|
+
PRAGMA defer_foreign_keys=ON;
|
|
45
|
+
PRAGMA foreign_keys=OFF;
|
|
46
|
+
CREATE TABLE "new_PracticeRecord" (
|
|
47
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
48
|
+
"userId" TEXT NOT NULL,
|
|
49
|
+
"subject" TEXT,
|
|
50
|
+
"difficulty" TEXT,
|
|
51
|
+
"isCorrect" BOOLEAN,
|
|
52
|
+
"errorItemId" TEXT,
|
|
53
|
+
"result" TEXT,
|
|
54
|
+
"questionText" TEXT,
|
|
55
|
+
"answerText" TEXT,
|
|
56
|
+
"analysis" TEXT,
|
|
57
|
+
"source" TEXT NOT NULL DEFAULT 'practice',
|
|
58
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
59
|
+
CONSTRAINT "PracticeRecord_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
60
|
+
CONSTRAINT "PracticeRecord_errorItemId_fkey" FOREIGN KEY ("errorItemId") REFERENCES "ErrorItem" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
61
|
+
);
|
|
62
|
+
INSERT INTO "new_PracticeRecord" ("createdAt", "difficulty", "id", "isCorrect", "subject", "userId") SELECT "createdAt", "difficulty", "id", "isCorrect", "subject", "userId" FROM "PracticeRecord";
|
|
63
|
+
DROP TABLE "PracticeRecord";
|
|
64
|
+
ALTER TABLE "new_PracticeRecord" RENAME TO "PracticeRecord";
|
|
65
|
+
CREATE INDEX "PracticeRecord_errorItemId_createdAt_idx" ON "PracticeRecord"("errorItemId", "createdAt");
|
|
66
|
+
CREATE TABLE "new_User" (
|
|
67
|
+
"id" TEXT NOT NULL PRIMARY KEY,
|
|
68
|
+
"email" TEXT NOT NULL,
|
|
69
|
+
"password" TEXT NOT NULL,
|
|
70
|
+
"name" TEXT,
|
|
71
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
72
|
+
"updatedAt" DATETIME NOT NULL,
|
|
73
|
+
"educationStage" TEXT,
|
|
74
|
+
"enrollmentYear" INTEGER,
|
|
75
|
+
"role" TEXT NOT NULL DEFAULT 'user',
|
|
76
|
+
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
77
|
+
"confirmBeforeImport" BOOLEAN NOT NULL DEFAULT false
|
|
78
|
+
);
|
|
79
|
+
INSERT INTO "new_User" ("createdAt", "educationStage", "email", "enrollmentYear", "id", "isActive", "name", "password", "role", "updatedAt") SELECT "createdAt", "educationStage", "email", "enrollmentYear", "id", "isActive", "name", "password", "role", "updatedAt" FROM "User";
|
|
80
|
+
DROP TABLE "User";
|
|
81
|
+
ALTER TABLE "new_User" RENAME TO "User";
|
|
82
|
+
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
83
|
+
PRAGMA foreign_keys=ON;
|
|
84
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
85
|
+
|
|
86
|
+
-- CreateIndex
|
|
87
|
+
CREATE INDEX "ExamPaper_userId_createdAt_idx" ON "ExamPaper"("userId", "createdAt");
|
|
88
|
+
|
|
89
|
+
-- CreateIndex
|
|
90
|
+
CREATE UNIQUE INDEX "ExamQuestion_practiceRecordId_key" ON "ExamQuestion"("practiceRecordId");
|
|
91
|
+
|
|
92
|
+
-- CreateIndex
|
|
93
|
+
CREATE INDEX "ExamQuestion_paperId_order_idx" ON "ExamQuestion"("paperId", "order");
|
|
94
|
+
|
|
95
|
+
-- 为已有题目补发 6 位 base58 短 ID,并重抽极小概率出现的重复值
|
|
96
|
+
UPDATE "ErrorItem" SET "shortId" = substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) WHERE "shortId" IS NULL;
|
|
97
|
+
UPDATE "ErrorItem" SET "shortId" = substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) WHERE rowid NOT IN (SELECT MIN(rowid) FROM "ErrorItem" GROUP BY "shortId");
|
|
98
|
+
UPDATE "ErrorItem" SET "shortId" = substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) WHERE rowid NOT IN (SELECT MIN(rowid) FROM "ErrorItem" GROUP BY "shortId");
|
|
99
|
+
UPDATE "ErrorItem" SET "shortId" = substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) || substr('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz', (abs(random()) % 58) + 1, 1) WHERE rowid NOT IN (SELECT MIN(rowid) FROM "ErrorItem" GROUP BY "shortId");
|
|
100
|
+
|
|
101
|
+
-- CreateIndex
|
|
102
|
+
CREATE UNIQUE INDEX "ErrorItem_shortId_key" ON "ErrorItem"("shortId");
|
|
103
|
+
|