From dc5ecd60f6db1d260655a4aebb0e4c239bdb3f45 Mon Sep 17 00:00:00 2001 From: Zonghao Yuan <64521992+zonghaoyuan@users.noreply.github.com> Date: Wed, 3 Jun 2026 00:55:45 +0800 Subject: [PATCH] refactor: flatten monorepo to single web package (#12) Flatten the pnpm monorepo (apps/web + packages/*) into a single web package at the repo root. - Move app/lib/components/scripts/public to root; drop apps/web and packages/* wrappers - Rewrite tsconfig paths (@infiplot/*) to ./lib/*; turbopack.root = __dirname - Update Vercel (no root-directory) and Cloudflare (pnpm build:cf at root) deploy paths - Regenerate pnpm-lock.yaml to drop stale workspace importers - Bump engines.node to >=22 to match wrangler Co-Authored-By: Claude Opus 4.7 --- apps/web/.env.example => .env.example | 0 README.en.md | 12 +- README.ja.md | 12 +- README.md | 12 +- {apps/web/app => app}/api/beat-audio/route.ts | 0 .../web/app => app}/api/insert-beat/route.ts | 0 {apps/web/app => app}/api/scene/route.ts | 0 {apps/web/app => app}/api/start/route.ts | 0 {apps/web/app => app}/api/vision/route.ts | 0 {apps/web/app => app}/globals.css | 0 {apps/web/app => app}/layout.tsx | 0 {apps/web/app => app}/new/page.tsx | 0 {apps/web/app => app}/page.tsx | 0 {apps/web/app => app}/play/page.tsx | 0 apps/web/next.config.ts | 18 -- apps/web/package.json | 36 --- apps/web/tsconfig.json | 13 - .../components => components}/CustomForm.tsx | 0 .../components => components}/PlayCanvas.tsx | 0 .../components => components}/PresetCard.tsx | 0 .../ai-client/src => lib/ai-client}/chat.ts | 0 .../src => lib/ai-client}/fetchWithRetry.ts | 0 .../ai-client/src => lib/ai-client}/image.ts | 0 .../ai-client/src => lib/ai-client}/index.ts | 0 .../ai-client/src => lib/ai-client}/vision.ts | 0 {apps/web/lib => lib}/annotateClient.ts | 0 {apps/web/lib => lib}/config.ts | 0 .../src => lib/engine}/agents/architect.ts | 0 .../engine}/agents/characterDesigner.ts | 0 .../engine}/agents/cinematographer.ts | 0 .../src => lib/engine}/agents/painter.ts | 0 .../src => lib/engine}/agents/writer.ts | 0 .../engine/src => lib/engine}/director.ts | 0 {packages/engine/src => lib/engine}/index.ts | 0 .../engine/src => lib/engine}/jsonParser.ts | 0 .../engine/src => lib/engine}/mockImage.ts | 0 .../engine/src => lib/engine}/orchestrator.ts | 0 .../engine/src => lib/engine}/prompts.ts | 0 {packages/engine/src => lib/engine}/vision.ts | 0 {packages/engine/src => lib/engine}/voice.ts | 0 {apps/web/lib => lib}/presets.ts | 0 .../src => lib/tts-client}/index.ts | 0 .../src => lib/tts-client}/xiaomi.ts | 0 {packages/types/src => lib/types}/index.ts | 0 apps/web/next-env.d.ts => next-env.d.ts | 2 +- next.config.ts | 11 + ...open-next.config.ts => open-next.config.ts | 0 package.json | 33 ++- packages/ai-client/package.json | 17 -- packages/ai-client/tsconfig.json | 7 - packages/engine/package.json | 20 -- packages/engine/tsconfig.json | 7 - packages/tts-client/package.json | 17 -- packages/tts-client/tsconfig.json | 7 - packages/types/package.json | 14 - packages/types/tsconfig.json | 7 - pnpm-lock.yaml | 275 ++++++++---------- pnpm-workspace.yaml | 3 - .../postcss.config.mjs => postcss.config.mjs | 0 {apps/web/public => public}/home/f0.webp | Bin {apps/web/public => public}/home/f1.webp | Bin {apps/web/public => public}/home/f10.webp | Bin {apps/web/public => public}/home/f11.webp | Bin {apps/web/public => public}/home/f12.webp | Bin {apps/web/public => public}/home/f13.webp | Bin {apps/web/public => public}/home/f14.webp | Bin {apps/web/public => public}/home/f15.webp | Bin {apps/web/public => public}/home/f16.webp | Bin {apps/web/public => public}/home/f17.webp | Bin {apps/web/public => public}/home/f18.webp | Bin {apps/web/public => public}/home/f19.webp | Bin {apps/web/public => public}/home/f2.webp | Bin {apps/web/public => public}/home/f20.webp | Bin {apps/web/public => public}/home/f21.webp | Bin {apps/web/public => public}/home/f22.webp | Bin {apps/web/public => public}/home/f23.webp | Bin {apps/web/public => public}/home/f24.webp | Bin {apps/web/public => public}/home/f25.webp | Bin {apps/web/public => public}/home/f26.webp | Bin {apps/web/public => public}/home/f27.webp | Bin {apps/web/public => public}/home/f28.webp | Bin {apps/web/public => public}/home/f29.webp | Bin {apps/web/public => public}/home/f3.webp | Bin {apps/web/public => public}/home/f30.webp | Bin {apps/web/public => public}/home/f31.webp | Bin {apps/web/public => public}/home/f4.webp | Bin {apps/web/public => public}/home/f5.webp | Bin {apps/web/public => public}/home/f6.webp | Bin {apps/web/public => public}/home/f7.webp | Bin {apps/web/public => public}/home/f8.webp | Bin {apps/web/public => public}/home/f9.webp | Bin .../public => public}/home/firstact/f0.json | 0 .../public => public}/home/firstact/f1.json | 0 .../public => public}/home/firstact/f10.json | 0 .../public => public}/home/firstact/f11.json | 0 .../public => public}/home/firstact/f12.json | 0 .../public => public}/home/firstact/f13.json | 0 .../public => public}/home/firstact/f2.json | 0 .../public => public}/home/firstact/f3.json | 0 .../public => public}/home/firstact/f4.json | 0 .../public => public}/home/firstact/f5.json | 0 .../public => public}/home/firstact/f6.json | 0 .../public => public}/home/firstact/f7.json | 0 .../public => public}/home/firstact/f8.json | 0 .../public => public}/home/firstact/f9.json | 0 .../public => public}/home/firstact/m0.json | 0 .../public => public}/home/firstact/m1.json | 0 .../public => public}/home/firstact/m10.json | 0 .../public => public}/home/firstact/m11.json | 0 .../public => public}/home/firstact/m12.json | 0 .../public => public}/home/firstact/m13.json | 0 .../public => public}/home/firstact/m15.json | 0 .../public => public}/home/firstact/m16.json | 0 .../public => public}/home/firstact/m17.json | 0 .../public => public}/home/firstact/m18.json | 0 .../public => public}/home/firstact/m19.json | 0 .../public => public}/home/firstact/m2.json | 0 .../public => public}/home/firstact/m20.json | 0 .../public => public}/home/firstact/m21.json | 0 .../public => public}/home/firstact/m22.json | 0 .../public => public}/home/firstact/m23.json | 0 .../public => public}/home/firstact/m24.json | 0 .../public => public}/home/firstact/m25.json | 0 .../public => public}/home/firstact/m26.json | 0 .../public => public}/home/firstact/m27.json | 0 .../public => public}/home/firstact/m28.json | 0 .../public => public}/home/firstact/m3.json | 0 .../public => public}/home/firstact/m30.json | 0 .../public => public}/home/firstact/m31.json | 0 .../public => public}/home/firstact/m4.json | 0 .../public => public}/home/firstact/m5.json | 0 .../public => public}/home/firstact/m6.json | 0 .../public => public}/home/firstact/m7.json | 0 .../public => public}/home/firstact/m8.json | 0 .../public => public}/home/firstact/m9.json | 0 .../public => public}/home/firstscene/f0.webp | Bin .../public => public}/home/firstscene/f1.webp | Bin .../home/firstscene/f10.webp | Bin .../home/firstscene/f11.webp | Bin .../home/firstscene/f12.webp | Bin .../home/firstscene/f13.webp | Bin .../public => public}/home/firstscene/f2.webp | Bin .../public => public}/home/firstscene/f3.webp | Bin .../public => public}/home/firstscene/f4.webp | Bin .../public => public}/home/firstscene/f5.webp | Bin .../public => public}/home/firstscene/f6.webp | Bin .../public => public}/home/firstscene/f7.webp | Bin .../public => public}/home/firstscene/f8.webp | Bin .../public => public}/home/firstscene/f9.webp | Bin .../public => public}/home/firstscene/m0.webp | Bin .../public => public}/home/firstscene/m1.webp | Bin .../home/firstscene/m10.webp | Bin .../home/firstscene/m11.webp | Bin .../home/firstscene/m12.webp | Bin .../home/firstscene/m13.webp | Bin .../home/firstscene/m15.webp | Bin .../home/firstscene/m16.webp | Bin .../home/firstscene/m17.webp | Bin .../home/firstscene/m18.webp | Bin .../home/firstscene/m19.webp | Bin .../public => public}/home/firstscene/m2.webp | Bin .../home/firstscene/m20.webp | Bin .../home/firstscene/m21.webp | Bin .../home/firstscene/m22.webp | Bin .../home/firstscene/m23.webp | Bin .../home/firstscene/m24.webp | Bin .../home/firstscene/m25.webp | Bin .../home/firstscene/m26.webp | Bin .../home/firstscene/m27.webp | Bin .../home/firstscene/m28.webp | Bin .../public => public}/home/firstscene/m3.webp | Bin .../home/firstscene/m30.webp | Bin .../home/firstscene/m31.webp | Bin .../public => public}/home/firstscene/m4.webp | Bin .../public => public}/home/firstscene/m5.webp | Bin .../public => public}/home/firstscene/m6.webp | Bin .../public => public}/home/firstscene/m7.webp | Bin .../public => public}/home/firstscene/m8.webp | Bin .../public => public}/home/firstscene/m9.webp | Bin {apps/web/public => public}/home/m0.webp | Bin {apps/web/public => public}/home/m1.webp | Bin {apps/web/public => public}/home/m10.webp | Bin {apps/web/public => public}/home/m11.webp | Bin {apps/web/public => public}/home/m12.webp | Bin {apps/web/public => public}/home/m13.webp | Bin {apps/web/public => public}/home/m14.webp | Bin {apps/web/public => public}/home/m15.webp | Bin {apps/web/public => public}/home/m16.webp | Bin {apps/web/public => public}/home/m17.webp | Bin {apps/web/public => public}/home/m18.webp | Bin {apps/web/public => public}/home/m19.webp | Bin {apps/web/public => public}/home/m2.webp | Bin {apps/web/public => public}/home/m20.webp | Bin {apps/web/public => public}/home/m21.webp | Bin {apps/web/public => public}/home/m22.webp | Bin {apps/web/public => public}/home/m23.webp | Bin {apps/web/public => public}/home/m24.webp | Bin {apps/web/public => public}/home/m25.webp | Bin {apps/web/public => public}/home/m26.webp | Bin {apps/web/public => public}/home/m27.webp | Bin {apps/web/public => public}/home/m28.webp | Bin {apps/web/public => public}/home/m29.webp | Bin {apps/web/public => public}/home/m3.webp | Bin {apps/web/public => public}/home/m30.webp | Bin {apps/web/public => public}/home/m31.webp | Bin {apps/web/public => public}/home/m4.webp | Bin {apps/web/public => public}/home/m5.webp | Bin {apps/web/public => public}/home/m6.webp | Bin {apps/web/public => public}/home/m7.webp | Bin {apps/web/public => public}/home/m8.webp | Bin {apps/web/public => public}/home/m9.webp | Bin {apps/web/public => public}/qq-group.webp | Bin .../generate-home-images.mjs | 8 +- .../localize-firstact-images.mjs | 4 +- .../optimize-home-images.mjs | 2 +- .../scripts => scripts}/prebake-firstacts.mjs | 8 +- .../tailwind.config.ts => tailwind.config.ts | 0 tsconfig.base.json | 17 -- tsconfig.json | 56 ++++ apps/web/vercel.json => vercel.json | 0 apps/web/wrangler.jsonc => wrangler.jsonc | 2 +- 221 files changed, 241 insertions(+), 379 deletions(-) rename apps/web/.env.example => .env.example (100%) rename {apps/web/app => app}/api/beat-audio/route.ts (100%) rename {apps/web/app => app}/api/insert-beat/route.ts (100%) rename {apps/web/app => app}/api/scene/route.ts (100%) rename {apps/web/app => app}/api/start/route.ts (100%) rename {apps/web/app => app}/api/vision/route.ts (100%) rename {apps/web/app => app}/globals.css (100%) rename {apps/web/app => app}/layout.tsx (100%) rename {apps/web/app => app}/new/page.tsx (100%) rename {apps/web/app => app}/page.tsx (100%) rename {apps/web/app => app}/play/page.tsx (100%) delete mode 100644 apps/web/next.config.ts delete mode 100644 apps/web/package.json delete mode 100644 apps/web/tsconfig.json rename {apps/web/components => components}/CustomForm.tsx (100%) rename {apps/web/components => components}/PlayCanvas.tsx (100%) rename {apps/web/components => components}/PresetCard.tsx (100%) rename {packages/ai-client/src => lib/ai-client}/chat.ts (100%) rename {packages/ai-client/src => lib/ai-client}/fetchWithRetry.ts (100%) rename {packages/ai-client/src => lib/ai-client}/image.ts (100%) rename {packages/ai-client/src => lib/ai-client}/index.ts (100%) rename {packages/ai-client/src => lib/ai-client}/vision.ts (100%) rename {apps/web/lib => lib}/annotateClient.ts (100%) rename {apps/web/lib => lib}/config.ts (100%) rename {packages/engine/src => lib/engine}/agents/architect.ts (100%) rename {packages/engine/src => lib/engine}/agents/characterDesigner.ts (100%) rename {packages/engine/src => lib/engine}/agents/cinematographer.ts (100%) rename {packages/engine/src => lib/engine}/agents/painter.ts (100%) rename {packages/engine/src => lib/engine}/agents/writer.ts (100%) rename {packages/engine/src => lib/engine}/director.ts (100%) rename {packages/engine/src => lib/engine}/index.ts (100%) rename {packages/engine/src => lib/engine}/jsonParser.ts (100%) rename {packages/engine/src => lib/engine}/mockImage.ts (100%) rename {packages/engine/src => lib/engine}/orchestrator.ts (100%) rename {packages/engine/src => lib/engine}/prompts.ts (100%) rename {packages/engine/src => lib/engine}/vision.ts (100%) rename {packages/engine/src => lib/engine}/voice.ts (100%) rename {apps/web/lib => lib}/presets.ts (100%) rename {packages/tts-client/src => lib/tts-client}/index.ts (100%) rename {packages/tts-client/src => lib/tts-client}/xiaomi.ts (100%) rename {packages/types/src => lib/types}/index.ts (100%) rename apps/web/next-env.d.ts => next-env.d.ts (84%) create mode 100644 next.config.ts rename apps/web/open-next.config.ts => open-next.config.ts (100%) delete mode 100644 packages/ai-client/package.json delete mode 100644 packages/ai-client/tsconfig.json delete mode 100644 packages/engine/package.json delete mode 100644 packages/engine/tsconfig.json delete mode 100644 packages/tts-client/package.json delete mode 100644 packages/tts-client/tsconfig.json delete mode 100644 packages/types/package.json delete mode 100644 packages/types/tsconfig.json delete mode 100644 pnpm-workspace.yaml rename apps/web/postcss.config.mjs => postcss.config.mjs (100%) rename {apps/web/public => public}/home/f0.webp (100%) rename {apps/web/public => public}/home/f1.webp (100%) rename {apps/web/public => public}/home/f10.webp (100%) rename {apps/web/public => public}/home/f11.webp (100%) rename {apps/web/public => public}/home/f12.webp (100%) rename {apps/web/public => public}/home/f13.webp (100%) rename {apps/web/public => public}/home/f14.webp (100%) rename {apps/web/public => public}/home/f15.webp (100%) rename {apps/web/public => public}/home/f16.webp (100%) rename {apps/web/public => public}/home/f17.webp (100%) rename {apps/web/public => public}/home/f18.webp (100%) rename {apps/web/public => public}/home/f19.webp (100%) rename {apps/web/public => public}/home/f2.webp (100%) rename {apps/web/public => public}/home/f20.webp (100%) rename {apps/web/public => public}/home/f21.webp (100%) rename {apps/web/public => public}/home/f22.webp (100%) rename {apps/web/public => public}/home/f23.webp (100%) rename {apps/web/public => public}/home/f24.webp (100%) rename {apps/web/public => public}/home/f25.webp (100%) rename {apps/web/public => public}/home/f26.webp (100%) rename {apps/web/public => public}/home/f27.webp (100%) rename {apps/web/public => public}/home/f28.webp (100%) rename {apps/web/public => public}/home/f29.webp (100%) rename {apps/web/public => public}/home/f3.webp (100%) rename {apps/web/public => public}/home/f30.webp (100%) rename {apps/web/public => public}/home/f31.webp (100%) rename {apps/web/public => public}/home/f4.webp (100%) rename {apps/web/public => public}/home/f5.webp (100%) rename {apps/web/public => public}/home/f6.webp (100%) rename {apps/web/public => public}/home/f7.webp (100%) rename {apps/web/public => public}/home/f8.webp (100%) rename {apps/web/public => public}/home/f9.webp (100%) rename {apps/web/public => public}/home/firstact/f0.json (100%) rename {apps/web/public => public}/home/firstact/f1.json (100%) rename {apps/web/public => public}/home/firstact/f10.json (100%) rename {apps/web/public => public}/home/firstact/f11.json (100%) rename {apps/web/public => public}/home/firstact/f12.json (100%) rename {apps/web/public => public}/home/firstact/f13.json (100%) rename {apps/web/public => public}/home/firstact/f2.json (100%) rename {apps/web/public => public}/home/firstact/f3.json (100%) rename {apps/web/public => public}/home/firstact/f4.json (100%) rename {apps/web/public => public}/home/firstact/f5.json (100%) rename {apps/web/public => public}/home/firstact/f6.json (100%) rename {apps/web/public => public}/home/firstact/f7.json (100%) rename {apps/web/public => public}/home/firstact/f8.json (100%) rename {apps/web/public => public}/home/firstact/f9.json (100%) rename {apps/web/public => public}/home/firstact/m0.json (100%) rename {apps/web/public => public}/home/firstact/m1.json (100%) rename {apps/web/public => public}/home/firstact/m10.json (100%) rename {apps/web/public => public}/home/firstact/m11.json (100%) rename {apps/web/public => public}/home/firstact/m12.json (100%) rename {apps/web/public => public}/home/firstact/m13.json (100%) rename {apps/web/public => public}/home/firstact/m15.json (100%) rename {apps/web/public => public}/home/firstact/m16.json (100%) rename {apps/web/public => public}/home/firstact/m17.json (100%) rename {apps/web/public => public}/home/firstact/m18.json (100%) rename {apps/web/public => public}/home/firstact/m19.json (100%) rename {apps/web/public => public}/home/firstact/m2.json (100%) rename {apps/web/public => public}/home/firstact/m20.json (100%) rename {apps/web/public => public}/home/firstact/m21.json (100%) rename {apps/web/public => public}/home/firstact/m22.json (100%) rename {apps/web/public => public}/home/firstact/m23.json (100%) rename {apps/web/public => public}/home/firstact/m24.json (100%) rename {apps/web/public => public}/home/firstact/m25.json (100%) rename {apps/web/public => public}/home/firstact/m26.json (100%) rename {apps/web/public => public}/home/firstact/m27.json (100%) rename {apps/web/public => public}/home/firstact/m28.json (100%) rename {apps/web/public => public}/home/firstact/m3.json (100%) rename {apps/web/public => public}/home/firstact/m30.json (100%) rename {apps/web/public => public}/home/firstact/m31.json (100%) rename {apps/web/public => public}/home/firstact/m4.json (100%) rename {apps/web/public => public}/home/firstact/m5.json (100%) rename {apps/web/public => public}/home/firstact/m6.json (100%) rename {apps/web/public => public}/home/firstact/m7.json (100%) rename {apps/web/public => public}/home/firstact/m8.json (100%) rename {apps/web/public => public}/home/firstact/m9.json (100%) rename {apps/web/public => public}/home/firstscene/f0.webp (100%) rename {apps/web/public => public}/home/firstscene/f1.webp (100%) rename {apps/web/public => public}/home/firstscene/f10.webp (100%) rename {apps/web/public => public}/home/firstscene/f11.webp (100%) rename {apps/web/public => public}/home/firstscene/f12.webp (100%) rename {apps/web/public => public}/home/firstscene/f13.webp (100%) rename {apps/web/public => public}/home/firstscene/f2.webp (100%) rename {apps/web/public => public}/home/firstscene/f3.webp (100%) rename {apps/web/public => public}/home/firstscene/f4.webp (100%) rename {apps/web/public => public}/home/firstscene/f5.webp (100%) rename {apps/web/public => public}/home/firstscene/f6.webp (100%) rename {apps/web/public => public}/home/firstscene/f7.webp (100%) rename {apps/web/public => public}/home/firstscene/f8.webp (100%) rename {apps/web/public => public}/home/firstscene/f9.webp (100%) rename {apps/web/public => public}/home/firstscene/m0.webp (100%) rename {apps/web/public => public}/home/firstscene/m1.webp (100%) rename {apps/web/public => public}/home/firstscene/m10.webp (100%) rename {apps/web/public => public}/home/firstscene/m11.webp (100%) rename {apps/web/public => public}/home/firstscene/m12.webp (100%) rename {apps/web/public => public}/home/firstscene/m13.webp (100%) rename {apps/web/public => public}/home/firstscene/m15.webp (100%) rename {apps/web/public => public}/home/firstscene/m16.webp (100%) rename {apps/web/public => public}/home/firstscene/m17.webp (100%) rename {apps/web/public => public}/home/firstscene/m18.webp (100%) rename {apps/web/public => public}/home/firstscene/m19.webp (100%) rename {apps/web/public => public}/home/firstscene/m2.webp (100%) rename {apps/web/public => public}/home/firstscene/m20.webp (100%) rename {apps/web/public => public}/home/firstscene/m21.webp (100%) rename {apps/web/public => public}/home/firstscene/m22.webp (100%) rename {apps/web/public => public}/home/firstscene/m23.webp (100%) rename {apps/web/public => public}/home/firstscene/m24.webp (100%) rename {apps/web/public => public}/home/firstscene/m25.webp (100%) rename {apps/web/public => public}/home/firstscene/m26.webp (100%) rename {apps/web/public => public}/home/firstscene/m27.webp (100%) rename {apps/web/public => public}/home/firstscene/m28.webp (100%) rename {apps/web/public => public}/home/firstscene/m3.webp (100%) rename {apps/web/public => public}/home/firstscene/m30.webp (100%) rename {apps/web/public => public}/home/firstscene/m31.webp (100%) rename {apps/web/public => public}/home/firstscene/m4.webp (100%) rename {apps/web/public => public}/home/firstscene/m5.webp (100%) rename {apps/web/public => public}/home/firstscene/m6.webp (100%) rename {apps/web/public => public}/home/firstscene/m7.webp (100%) rename {apps/web/public => public}/home/firstscene/m8.webp (100%) rename {apps/web/public => public}/home/firstscene/m9.webp (100%) rename {apps/web/public => public}/home/m0.webp (100%) rename {apps/web/public => public}/home/m1.webp (100%) rename {apps/web/public => public}/home/m10.webp (100%) rename {apps/web/public => public}/home/m11.webp (100%) rename {apps/web/public => public}/home/m12.webp (100%) rename {apps/web/public => public}/home/m13.webp (100%) rename {apps/web/public => public}/home/m14.webp (100%) rename {apps/web/public => public}/home/m15.webp (100%) rename {apps/web/public => public}/home/m16.webp (100%) rename {apps/web/public => public}/home/m17.webp (100%) rename {apps/web/public => public}/home/m18.webp (100%) rename {apps/web/public => public}/home/m19.webp (100%) rename {apps/web/public => public}/home/m2.webp (100%) rename {apps/web/public => public}/home/m20.webp (100%) rename {apps/web/public => public}/home/m21.webp (100%) rename {apps/web/public => public}/home/m22.webp (100%) rename {apps/web/public => public}/home/m23.webp (100%) rename {apps/web/public => public}/home/m24.webp (100%) rename {apps/web/public => public}/home/m25.webp (100%) rename {apps/web/public => public}/home/m26.webp (100%) rename {apps/web/public => public}/home/m27.webp (100%) rename {apps/web/public => public}/home/m28.webp (100%) rename {apps/web/public => public}/home/m29.webp (100%) rename {apps/web/public => public}/home/m3.webp (100%) rename {apps/web/public => public}/home/m30.webp (100%) rename {apps/web/public => public}/home/m31.webp (100%) rename {apps/web/public => public}/home/m4.webp (100%) rename {apps/web/public => public}/home/m5.webp (100%) rename {apps/web/public => public}/home/m6.webp (100%) rename {apps/web/public => public}/home/m7.webp (100%) rename {apps/web/public => public}/home/m8.webp (100%) rename {apps/web/public => public}/home/m9.webp (100%) rename {apps/web/public => public}/qq-group.webp (100%) rename {apps/web/scripts => scripts}/generate-home-images.mjs (98%) rename {apps/web/scripts => scripts}/localize-firstact-images.mjs (96%) rename {apps/web/scripts => scripts}/optimize-home-images.mjs (95%) rename {apps/web/scripts => scripts}/prebake-firstacts.mjs (98%) rename apps/web/tailwind.config.ts => tailwind.config.ts (100%) delete mode 100644 tsconfig.base.json create mode 100644 tsconfig.json rename apps/web/vercel.json => vercel.json (100%) rename apps/web/wrangler.jsonc => wrangler.jsonc (86%) diff --git a/apps/web/.env.example b/.env.example similarity index 100% rename from apps/web/.env.example rename to .env.example diff --git a/README.en.md b/README.en.md index 8629313..9f0d091 100644 --- a/README.en.md +++ b/README.en.md @@ -41,9 +41,9 @@ Free to play, no setup required: [infiplot.com](https://infiplot.com) InfiPlot deploys to both Vercel and Cloudflare Workers. Cloudflare deployment requires the Workers Paid Plan because the scene pipeline needs longer CPU time; for personal use, the one-click Vercel deploy is recommended. -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&root-directory=apps/web&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot/blob/main/README.en.md%23configuration-guide)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot/tree/main/apps/web) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot/blob/main/README.en.md%23configuration-guide)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot) -After deploy, fill in the environment variables — see the [Configuration guide](#configuration-guide) below. Both platforms need `apps/web` as the project root (Vercel's button passes this automatically; on Cloudflare, set the build root to `apps/web` and the build command to `pnpm --filter @infiplot/web build:cf`). +After deploy, fill in the environment variables — see the [Configuration guide](#configuration-guide) below. The repo root is the app itself: Vercel needs no special root directory; on Cloudflare, just set the build command to `pnpm build:cf`. --- @@ -118,7 +118,7 @@ Get in touch: hi@infiplot.com Scan to join our **beta community on QQ** (group ID `575404333`) to share feedback and help shape the project: -InfiPlot beta community QQ group QR code +InfiPlot beta community QQ group QR code --- @@ -143,11 +143,11 @@ Nine variables are required; TTS is optional (leave blank to run silently). Ther |---|---| | `MOCK_IMAGE=true` | Skip image generation; the renderer returns a static placeholder. Story, voice, and choices still run normally. Great for iterating on TTS without burning Runware credits. | -Where to set them (see `apps/web/.env.example` for the exact shape): +Where to set them (see `.env.example` for the exact shape): -- **Local dev** — `apps/web/.env.local` +- **Local dev** — `.env.local` - **Vercel** — Project Settings → Environment Variables -- **Cloudflare Workers** — from `apps/web/`, run `wrangler secret put ` for each variable, or set them in the dashboard (Workers → infiplot → Settings → Variables and Secrets). For a private staging instance, gate the Worker behind [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/) — zero-code email-whitelist auth in front of the Worker. +- **Cloudflare Workers** — from the repo root, run `wrangler secret put ` for each variable, or set them in the dashboard (Workers → infiplot → Settings → Variables and Secrets). For a private staging instance, gate the Worker behind [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/) — zero-code email-whitelist auth in front of the Worker. **3. Mind the cost** diff --git a/README.ja.md b/README.ja.md index aac8098..fdc7a31 100644 --- a/README.ja.md +++ b/README.ja.md @@ -41,9 +41,9 @@ InfiPlot は、AI がコンテンツをリアルタイムに生成するイン InfiPlot は Vercel と Cloudflare Workers の両方にデプロイできます。Cloudflare へのデプロイはシーンパイプラインがより長い CPU 時間を必要とするため、Workers Paid Plan が必要です。個人利用には Vercel のワンクリックデプロイをおすすめします。 -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&root-directory=apps/web&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot/blob/main/README.ja.md%23%E8%A8%AD%E5%AE%9A%E3%82%AC%E3%82%A4%E3%83%89)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot/tree/main/apps/web) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot/blob/main/README.ja.md%23%E8%A8%AD%E5%AE%9A%E3%82%AC%E3%82%A4%E3%83%89)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot) -デプロイ後、環境変数を設定してください —— 下記の[設定ガイド](#設定ガイド)を参照。両方のプラットフォームで、プロジェクトのルートを `apps/web` に設定する必要があります(Vercel のデプロイボタンが自動で渡します。Cloudflare では build root を `apps/web`、ビルドコマンドを `pnpm --filter @infiplot/web build:cf` に設定してください)。 +デプロイ後、環境変数を設定してください —— 下記の[設定ガイド](#設定ガイド)を参照。リポジトリのルートがアプリ本体です:Vercel では特別なルート設定は不要です。Cloudflare ではビルドコマンドを `pnpm build:cf` に設定するだけで済みます。 --- @@ -117,7 +117,7 @@ flowchart TD **InfiPlot ベータ交流グループ**(QQ グループ番号 `575404333`)—— QR コードを読み取って参加し、フィードバックや共同開発にご参加ください: -InfiPlot ベータ交流グループ QQ QRコード +InfiPlot ベータ交流グループ QQ QRコード --- @@ -142,11 +142,11 @@ InfiPlot は 4 種類のモデルプロバイダと通信します。**テキス |---|---| | `MOCK_IMAGE=true` | 画像生成をスキップし、レンダラが静的なプレースホルダを返します。ストーリー・音声・選択肢は通常どおり動作します。Runware のクレジットを消費せずに TTS を調整するのに最適です。 | -設定場所(正確なフォーマットは `apps/web/.env.example` を参照): +設定場所(正確なフォーマットは `.env.example` を参照): -- **ローカル開発** —— `apps/web/.env.local` +- **ローカル開発** —— `.env.local` - **Vercel** —— Project Settings → Environment Variables -- **Cloudflare Workers** —— `apps/web/` から各変数について `wrangler secret put ` を実行するか、ダッシュボード(Workers → infiplot → Settings → Variables and Secrets)で設定します。ステージング環境にアクセス制限を掛けたい場合は、Worker の前に [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/) を挟むと、ゼロコードでメール許可リスト方式の認証が利用できます。 +- **Cloudflare Workers** —— リポジトリのルートから各変数について `wrangler secret put ` を実行するか、ダッシュボード(Workers → infiplot → Settings → Variables and Secrets)で設定します。ステージング環境にアクセス制限を掛けたい場合は、Worker の前に [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/) を挟むと、ゼロコードでメール許可リスト方式の認証が利用できます。 **3. コストに注意** diff --git a/README.md b/README.md index 62e2092..bb8abec 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,9 @@ InfiPlot是一款AI实时生成内容的互动剧情游戏,这里没有预设 InfiPlot 同时支持部署到 Vercel 与 Cloudflare Workers。Cloudflare 部署因场景流水线需要更长 CPU 时间,需要 Workers Paid Plan;个人使用推荐用 Vercel 一键部署。 -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&root-directory=apps/web&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot%23%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot/tree/main/apps/web) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot%23%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B)   [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot) -部署完成后,填好环境变量 —— 详见下方的[配置教程](#配置教程)。两个平台都需要把项目根目录设为 `apps/web`(Vercel 一键部署按钮会自动带上;在 Cloudflare 上请把 build root 设为 `apps/web`,构建命令设为 `pnpm --filter @infiplot/web build:cf`)。 +部署完成后,填好环境变量 —— 详见下方的[配置教程](#配置教程)。仓库根目录就是应用本身:Vercel 无需额外设置 root directory;在 Cloudflare 上把构建命令设为 `pnpm build:cf` 即可。 --- @@ -117,7 +117,7 @@ flowchart TD 欢迎扫码加入 **InfiPlot 内测交流群**(QQ 群号 `575404333`),一起反馈体验、参与共建: -InfiPlot 内测交流群 QQ 二维码 +InfiPlot 内测交流群 QQ 二维码 --- @@ -142,11 +142,11 @@ InfiPlot 会与四类模型供应商通信。**文本(Text)和视觉(Visio |---|---| | `MOCK_IMAGE=true` | 跳过图像生成,渲染器返回一张静态占位图。剧情、语音、选项照常运行。非常适合在不消耗 Runware 额度的情况下调试 TTS。 | -在哪里设置(确切字段见 `apps/web/.env.example`): +在哪里设置(确切字段见 `.env.example`): -- **本地开发** —— `apps/web/.env.local` +- **本地开发** —— `.env.local` - **Vercel** —— Project Settings → Environment Variables -- **Cloudflare Workers** —— 在 `apps/web/` 目录下逐个执行 `wrangler secret put `,或在 dashboard 里设置(Workers → infiplot → Settings → Variables and Secrets)。如果要给 staging 加访问限制,可以在 Worker 前面挂一个 [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/)(零代码,邮箱白名单)。 +- **Cloudflare Workers** —— 在仓库根目录下逐个执行 `wrangler secret put `,或在 dashboard 里设置(Workers → infiplot → Settings → Variables and Secrets)。如果要给 staging 加访问限制,可以在 Worker 前面挂一个 [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/)(零代码,邮箱白名单)。 **3. 注意成本** diff --git a/apps/web/app/api/beat-audio/route.ts b/app/api/beat-audio/route.ts similarity index 100% rename from apps/web/app/api/beat-audio/route.ts rename to app/api/beat-audio/route.ts diff --git a/apps/web/app/api/insert-beat/route.ts b/app/api/insert-beat/route.ts similarity index 100% rename from apps/web/app/api/insert-beat/route.ts rename to app/api/insert-beat/route.ts diff --git a/apps/web/app/api/scene/route.ts b/app/api/scene/route.ts similarity index 100% rename from apps/web/app/api/scene/route.ts rename to app/api/scene/route.ts diff --git a/apps/web/app/api/start/route.ts b/app/api/start/route.ts similarity index 100% rename from apps/web/app/api/start/route.ts rename to app/api/start/route.ts diff --git a/apps/web/app/api/vision/route.ts b/app/api/vision/route.ts similarity index 100% rename from apps/web/app/api/vision/route.ts rename to app/api/vision/route.ts diff --git a/apps/web/app/globals.css b/app/globals.css similarity index 100% rename from apps/web/app/globals.css rename to app/globals.css diff --git a/apps/web/app/layout.tsx b/app/layout.tsx similarity index 100% rename from apps/web/app/layout.tsx rename to app/layout.tsx diff --git a/apps/web/app/new/page.tsx b/app/new/page.tsx similarity index 100% rename from apps/web/app/new/page.tsx rename to app/new/page.tsx diff --git a/apps/web/app/page.tsx b/app/page.tsx similarity index 100% rename from apps/web/app/page.tsx rename to app/page.tsx diff --git a/apps/web/app/play/page.tsx b/app/play/page.tsx similarity index 100% rename from apps/web/app/play/page.tsx rename to app/play/page.tsx diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts deleted file mode 100644 index 29b64b4..0000000 --- a/apps/web/next.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import path from "node:path"; -import type { NextConfig } from "next"; - -const config: NextConfig = { - reactStrictMode: true, - typedRoutes: false, - transpilePackages: [ - "@infiplot/engine", - "@infiplot/ai-client", - "@infiplot/types", - "@infiplot/tts-client", - ], - turbopack: { - root: path.join(__dirname, "..", ".."), - }, -}; - -export default config; diff --git a/apps/web/package.json b/apps/web/package.json deleted file mode 100644 index 571477f..0000000 --- a/apps/web/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@infiplot/web", - "version": "0.1.0", - "private": true, - "type": "module", - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "typecheck": "tsc --noEmit", - "build:cf": "opennextjs-cloudflare build", - "preview:cf": "opennextjs-cloudflare preview", - "deploy:cf": "opennextjs-cloudflare deploy" - }, - "dependencies": { - "@infiplot/ai-client": "workspace:*", - "@infiplot/engine": "workspace:*", - "@infiplot/types": "workspace:*", - "next": "^16.0.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@opennextjs/cloudflare": "^1.19.11", - "sharp": "^0.33.5", - "@types/node": "^22.9.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", - "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", - "tailwindcss": "^3.4.15", - "typescript": "^5.6.3", - "wrangler": "^4.96.0" - } -} diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json deleted file mode 100644 index 203069b..0000000 --- a/apps/web/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true, - "incremental": true, - "plugins": [{ "name": "next" }], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/apps/web/components/CustomForm.tsx b/components/CustomForm.tsx similarity index 100% rename from apps/web/components/CustomForm.tsx rename to components/CustomForm.tsx diff --git a/apps/web/components/PlayCanvas.tsx b/components/PlayCanvas.tsx similarity index 100% rename from apps/web/components/PlayCanvas.tsx rename to components/PlayCanvas.tsx diff --git a/apps/web/components/PresetCard.tsx b/components/PresetCard.tsx similarity index 100% rename from apps/web/components/PresetCard.tsx rename to components/PresetCard.tsx diff --git a/packages/ai-client/src/chat.ts b/lib/ai-client/chat.ts similarity index 100% rename from packages/ai-client/src/chat.ts rename to lib/ai-client/chat.ts diff --git a/packages/ai-client/src/fetchWithRetry.ts b/lib/ai-client/fetchWithRetry.ts similarity index 100% rename from packages/ai-client/src/fetchWithRetry.ts rename to lib/ai-client/fetchWithRetry.ts diff --git a/packages/ai-client/src/image.ts b/lib/ai-client/image.ts similarity index 100% rename from packages/ai-client/src/image.ts rename to lib/ai-client/image.ts diff --git a/packages/ai-client/src/index.ts b/lib/ai-client/index.ts similarity index 100% rename from packages/ai-client/src/index.ts rename to lib/ai-client/index.ts diff --git a/packages/ai-client/src/vision.ts b/lib/ai-client/vision.ts similarity index 100% rename from packages/ai-client/src/vision.ts rename to lib/ai-client/vision.ts diff --git a/apps/web/lib/annotateClient.ts b/lib/annotateClient.ts similarity index 100% rename from apps/web/lib/annotateClient.ts rename to lib/annotateClient.ts diff --git a/apps/web/lib/config.ts b/lib/config.ts similarity index 100% rename from apps/web/lib/config.ts rename to lib/config.ts diff --git a/packages/engine/src/agents/architect.ts b/lib/engine/agents/architect.ts similarity index 100% rename from packages/engine/src/agents/architect.ts rename to lib/engine/agents/architect.ts diff --git a/packages/engine/src/agents/characterDesigner.ts b/lib/engine/agents/characterDesigner.ts similarity index 100% rename from packages/engine/src/agents/characterDesigner.ts rename to lib/engine/agents/characterDesigner.ts diff --git a/packages/engine/src/agents/cinematographer.ts b/lib/engine/agents/cinematographer.ts similarity index 100% rename from packages/engine/src/agents/cinematographer.ts rename to lib/engine/agents/cinematographer.ts diff --git a/packages/engine/src/agents/painter.ts b/lib/engine/agents/painter.ts similarity index 100% rename from packages/engine/src/agents/painter.ts rename to lib/engine/agents/painter.ts diff --git a/packages/engine/src/agents/writer.ts b/lib/engine/agents/writer.ts similarity index 100% rename from packages/engine/src/agents/writer.ts rename to lib/engine/agents/writer.ts diff --git a/packages/engine/src/director.ts b/lib/engine/director.ts similarity index 100% rename from packages/engine/src/director.ts rename to lib/engine/director.ts diff --git a/packages/engine/src/index.ts b/lib/engine/index.ts similarity index 100% rename from packages/engine/src/index.ts rename to lib/engine/index.ts diff --git a/packages/engine/src/jsonParser.ts b/lib/engine/jsonParser.ts similarity index 100% rename from packages/engine/src/jsonParser.ts rename to lib/engine/jsonParser.ts diff --git a/packages/engine/src/mockImage.ts b/lib/engine/mockImage.ts similarity index 100% rename from packages/engine/src/mockImage.ts rename to lib/engine/mockImage.ts diff --git a/packages/engine/src/orchestrator.ts b/lib/engine/orchestrator.ts similarity index 100% rename from packages/engine/src/orchestrator.ts rename to lib/engine/orchestrator.ts diff --git a/packages/engine/src/prompts.ts b/lib/engine/prompts.ts similarity index 100% rename from packages/engine/src/prompts.ts rename to lib/engine/prompts.ts diff --git a/packages/engine/src/vision.ts b/lib/engine/vision.ts similarity index 100% rename from packages/engine/src/vision.ts rename to lib/engine/vision.ts diff --git a/packages/engine/src/voice.ts b/lib/engine/voice.ts similarity index 100% rename from packages/engine/src/voice.ts rename to lib/engine/voice.ts diff --git a/apps/web/lib/presets.ts b/lib/presets.ts similarity index 100% rename from apps/web/lib/presets.ts rename to lib/presets.ts diff --git a/packages/tts-client/src/index.ts b/lib/tts-client/index.ts similarity index 100% rename from packages/tts-client/src/index.ts rename to lib/tts-client/index.ts diff --git a/packages/tts-client/src/xiaomi.ts b/lib/tts-client/xiaomi.ts similarity index 100% rename from packages/tts-client/src/xiaomi.ts rename to lib/tts-client/xiaomi.ts diff --git a/packages/types/src/index.ts b/lib/types/index.ts similarity index 100% rename from packages/types/src/index.ts rename to lib/types/index.ts diff --git a/apps/web/next-env.d.ts b/next-env.d.ts similarity index 84% rename from apps/web/next-env.d.ts rename to next-env.d.ts index c4b7818..9edff1c 100644 --- a/apps/web/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/dev/types/routes.d.ts"; +import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..1150341 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,11 @@ +import type { NextConfig } from "next"; + +const config: NextConfig = { + reactStrictMode: true, + typedRoutes: false, + turbopack: { + root: __dirname, + }, +}; + +export default config; diff --git a/apps/web/open-next.config.ts b/open-next.config.ts similarity index 100% rename from apps/web/open-next.config.ts rename to open-next.config.ts diff --git a/package.json b/package.json index f853b72..c5d3a40 100644 --- a/package.json +++ b/package.json @@ -2,20 +2,39 @@ "name": "infiplot", "version": "0.1.0", "private": true, + "type": "module", "description": "AI 实时交互剧情游戏", "license": "AGPL-3.0-only", "packageManager": "pnpm@9.12.0", "engines": { - "node": ">=20" + "node": ">=22" }, "scripts": { - "dev": "pnpm --filter @infiplot/web dev", - "build": "pnpm --filter @infiplot/web build", - "start": "pnpm --filter @infiplot/web start", - "lint": "pnpm -r lint", - "typecheck": "pnpm -r typecheck" + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "typecheck": "tsc --noEmit", + "build:cf": "opennextjs-cloudflare build", + "preview:cf": "opennextjs-cloudflare preview", + "deploy:cf": "opennextjs-cloudflare deploy" + }, + "dependencies": { + "jsonrepair": "^3.14.0", + "next": "^16.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { - "typescript": "^5.6.3" + "@opennextjs/cloudflare": "^1.19.11", + "@types/node": "^22.9.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "sharp": "^0.33.5", + "tailwindcss": "^3.4.15", + "typescript": "^5.6.3", + "wrangler": "^4.96.0" } } diff --git a/packages/ai-client/package.json b/packages/ai-client/package.json deleted file mode 100644 index 07d6e01..0000000 --- a/packages/ai-client/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@infiplot/ai-client", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "exports": { - ".": "./src/index.ts" - }, - "scripts": { - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@infiplot/types": "workspace:*" - } -} diff --git a/packages/ai-client/tsconfig.json b/packages/ai-client/tsconfig.json deleted file mode 100644 index 25e8cea..0000000 --- a/packages/ai-client/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["src/**/*"] -} diff --git a/packages/engine/package.json b/packages/engine/package.json deleted file mode 100644 index 5dfb5f3..0000000 --- a/packages/engine/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@infiplot/engine", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "exports": { - ".": "./src/index.ts" - }, - "scripts": { - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@infiplot/ai-client": "workspace:*", - "@infiplot/tts-client": "workspace:*", - "@infiplot/types": "workspace:*", - "jsonrepair": "^3.14.0" - } -} diff --git a/packages/engine/tsconfig.json b/packages/engine/tsconfig.json deleted file mode 100644 index 25e8cea..0000000 --- a/packages/engine/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["src/**/*"] -} diff --git a/packages/tts-client/package.json b/packages/tts-client/package.json deleted file mode 100644 index 170aa3b..0000000 --- a/packages/tts-client/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@infiplot/tts-client", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "exports": { - ".": "./src/index.ts" - }, - "scripts": { - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@infiplot/types": "workspace:*" - } -} diff --git a/packages/tts-client/tsconfig.json b/packages/tts-client/tsconfig.json deleted file mode 100644 index 25e8cea..0000000 --- a/packages/tts-client/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["src/**/*"] -} diff --git a/packages/types/package.json b/packages/types/package.json deleted file mode 100644 index 235f087..0000000 --- a/packages/types/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@infiplot/types", - "version": "0.1.0", - "private": true, - "type": "module", - "main": "./src/index.ts", - "types": "./src/index.ts", - "exports": { - ".": "./src/index.ts" - }, - "scripts": { - "typecheck": "tsc --noEmit" - } -} diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json deleted file mode 100644 index 25e8cea..0000000 --- a/packages/types/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "noEmit": true - }, - "include": ["src/**/*"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d926c0b..ce3df06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,44 +7,32 @@ settings: importers: .: - devDependencies: - typescript: - specifier: ^5.6.3 - version: 5.9.3 - - apps/web: dependencies: - '@infiplot/ai-client': - specifier: workspace:* - version: link:../../packages/ai-client - '@infiplot/engine': - specifier: workspace:* - version: link:../../packages/engine - '@infiplot/types': - specifier: workspace:* - version: link:../../packages/types + jsonrepair: + specifier: ^3.14.0 + version: 3.14.0 next: specifier: ^16.0.0 - version: 16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: ^19.0.0 - version: 19.2.6 + version: 19.2.7 react-dom: specifier: ^19.0.0 - version: 19.2.6(react@19.2.6) + version: 19.2.7(react@19.2.7) devDependencies: '@opennextjs/cloudflare': specifier: ^1.19.11 - version: 1.19.11(next@16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.96.0) + version: 1.19.11(next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(wrangler@4.97.0) '@types/node': specifier: ^22.9.0 version: 22.19.19 '@types/react': specifier: ^19.0.0 - version: 19.2.15 + version: 19.2.16 '@types/react-dom': specifier: ^19.0.0 - version: 19.2.3(@types/react@19.2.15) + version: 19.2.3(@types/react@19.2.16) autoprefixer: specifier: ^10.4.20 version: 10.5.0(postcss@8.5.15) @@ -62,36 +50,7 @@ importers: version: 5.9.3 wrangler: specifier: ^4.96.0 - version: 4.96.0 - - packages/ai-client: - dependencies: - '@infiplot/types': - specifier: workspace:* - version: link:../types - - packages/engine: - dependencies: - '@infiplot/ai-client': - specifier: workspace:* - version: link:../ai-client - '@infiplot/tts-client': - specifier: workspace:* - version: link:../tts-client - '@infiplot/types': - specifier: workspace:* - version: link:../types - jsonrepair: - specifier: ^3.14.0 - version: 3.14.0 - - packages/tts-client: - dependencies: - '@infiplot/types': - specifier: workspace:* - version: link:../types - - packages/types: {} + version: 4.97.0 packages: @@ -356,32 +315,32 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260529.1': - resolution: {integrity: sha512-gxh5sXw0CsBxNCNj8uJnrAxqFM7+R8SZI9WIqYMKz6uaPxgg+eTcBDTxjKczMs6bS21FkTEF6ohIzB5+UvxwKw==} + '@cloudflare/workerd-darwin-64@1.20260601.1': + resolution: {integrity: sha512-iXZBVuRbvuVqQ/63wul01hHCv/3R8G5S8zbkjfoHvyPZFynmlKTV59Hk+H8whyGwFAZuB71UJGLr+G5mJKfjWA==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260529.1': - resolution: {integrity: sha512-B8xOwqd8ok8oaWBPhrpmNVSYou6AejFrYf3VzsJF6pg6TEA2tYbdThAGXgtLPQ8d1RD7GXYjVth2dSMg9napDA==} + '@cloudflare/workerd-darwin-arm64@1.20260601.1': + resolution: {integrity: sha512-veGpZQGBw07Twt+Y4z3oyo+/obKHt0iWUwvDV5GOiDAYjC/zW+YGstgVzg4SHq+k1sLH3ElqL2TXx20I5WBv3Q==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260529.1': - resolution: {integrity: sha512-M1EKzsfoKmmno7MNPkuIc8iOdHLhFnE7ltEYaGGEoOj1MTJfMBK/JkIrhdkzc/06wpyPZPiBfBBmUppbeaMqUg==} + '@cloudflare/workerd-linux-64@1.20260601.1': + resolution: {integrity: sha512-n/9hDz7fPGpYF0J684+Xr5zgjcS2jdmY2Of5m6e+eQ/M9+RfR+UaU8Ee/tkA1dDC0LYQB13hfPafZG66Ff1CsA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260529.1': - resolution: {integrity: sha512-Mn/Qpl1FAHDLtPthw6ti5gsHRj582jJdtK4OMUlW1CN0v+pmmxaav3KSqq7CS6a+5W0o2e8o9fKnjVilBxVVmQ==} + '@cloudflare/workerd-linux-arm64@1.20260601.1': + resolution: {integrity: sha512-VHRZZbexATS+n+1j3x/CZaYbIJEye0J3iIHgG0Wp+l+NrZCKQ8qi8Lq1uTV0dLJQ67FuZtJtWdQ95mm9F7Fc+A==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260529.1': - resolution: {integrity: sha512-78xgJJeXxkKYumWdKGH1pybUsEjTreSvbJqirW9cth7ZGonqdv5pzAVt+WWcbu0OFcSHrtQFX6zWioPNFp0/xQ==} + '@cloudflare/workerd-windows-64@1.20260601.1': + resolution: {integrity: sha512-ye0C7MFLkeH16iTo8Tcjv2KiFmp23+sZGvUzSQa4xhP0QMe6EoJ+H/4SqqvnZ5nfN54slqKvx2VnXceENWe2CQ==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -974,53 +933,53 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@next/env@16.2.6': - resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==} + '@next/env@16.2.7': + resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==} - '@next/swc-darwin-arm64@16.2.6': - resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==} + '@next/swc-darwin-arm64@16.2.7': + resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.6': - resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==} + '@next/swc-darwin-x64@16.2.7': + resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.6': - resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==} + '@next/swc-linux-arm64-gnu@16.2.7': + resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.2.6': - resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} + '@next/swc-linux-arm64-musl@16.2.7': + resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.2.6': - resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} + '@next/swc-linux-x64-gnu@16.2.7': + resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.2.6': - resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} + '@next/swc-linux-x64-musl@16.2.7': + resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.2.6': - resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} + '@next/swc-win32-arm64-msvc@16.2.7': + resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.6': - resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==} + '@next/swc-win32-x64-msvc@16.2.7': + resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1265,8 +1224,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.15': - resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} + '@types/react@19.2.16': + resolution: {integrity: sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1527,8 +1486,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.364: - resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} + electron-to-chromium@1.5.365: + resolution: {integrity: sha512-xfip4u1QF1s+URFqpA6N+OeFpDGpN7VJz1f3MO3bVL0QYBjpGiZ5/Of7kugvM+o8TTqmanUlviHN3c8M9vYWCw==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1860,8 +1819,8 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - miniflare@4.20260529.0: - resolution: {integrity: sha512-4pj7WZQR/uYqVMa0cpAmmPBKEb0JegSocuystaXCubY455iqWdPUqgVD9R6N28oneWyPiUyAu5N8QpLbK+MU/Q==} + miniflare@4.20260601.0: + resolution: {integrity: sha512-56TFiulSEQu43cYxdXgCiA3U3i+Ls0NoXwJXd6DmpNsx8yl/1Il2T3DQ4CMXjR6yfE7CSvC5MuXaqcSAMREjgw==} engines: {node: '>=22.0.0'} hasBin: true @@ -1904,8 +1863,8 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - next@16.2.6: - resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==} + next@16.2.7: + resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -1939,8 +1898,8 @@ packages: encoding: optional: true - node-releases@2.0.46: - resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} engines: {node: '>=18'} normalize-path@3.0.0: @@ -2105,13 +2064,13 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - react-dom@19.2.6: - resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.6 + react: ^19.2.7 - react@19.2.6: - resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -2364,17 +2323,17 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true - workerd@1.20260529.1: - resolution: {integrity: sha512-G1rurOKEdzCtFE0yUPR9J9mUnPzMU8NdsD7NKM1/oMyCr1j3VEtWJzc5VbhgFQHNBVWrHzCL0JgVPuBirRW31g==} + workerd@1.20260601.1: + resolution: {integrity: sha512-Bg4+HF3B8TW0urAv8chiz25HSQ/aJxMBjgheUzu/nB1NQa+CaKGrUPv+Z3bf0np/WxLHYW1kcseVEtzZVPbX4g==} engines: {node: '>=16'} hasBin: true - wrangler@4.96.0: - resolution: {integrity: sha512-8WuiMutalyfBB74wwRyy4VKKJEHjQuEnwcvdUav1M5AfQ8VaTYY5ZQnzvVZPOVXap40k5Mntz1LY3SPWpPukTg==} + wrangler@4.97.0: + resolution: {integrity: sha512-jzW/aNvjerV+4TmwbvwGY6lpcuBk7EFUTonMDNfci45wSmMTj2/OJN+83cc/CeepKdb+6ZjGJw9NRjmcQoxqRg==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260529.1 + '@cloudflare/workers-types': ^4.20260601.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -3028,25 +2987,25 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260529.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260529.1 + workerd: 1.20260601.1 - '@cloudflare/workerd-darwin-64@1.20260529.1': + '@cloudflare/workerd-darwin-64@1.20260601.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260529.1': + '@cloudflare/workerd-darwin-arm64@1.20260601.1': optional: true - '@cloudflare/workerd-linux-64@1.20260529.1': + '@cloudflare/workerd-linux-64@1.20260601.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260529.1': + '@cloudflare/workerd-linux-arm64@1.20260601.1': optional: true - '@cloudflare/workerd-windows-64@1.20260529.1': + '@cloudflare/workerd-windows-64@1.20260601.1': optional: true '@cspotcode/source-map-support@0.8.1': @@ -3424,30 +3383,30 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@next/env@16.2.6': {} + '@next/env@16.2.7': {} - '@next/swc-darwin-arm64@16.2.6': + '@next/swc-darwin-arm64@16.2.7': optional: true - '@next/swc-darwin-x64@16.2.6': + '@next/swc-darwin-x64@16.2.7': optional: true - '@next/swc-linux-arm64-gnu@16.2.6': + '@next/swc-linux-arm64-gnu@16.2.7': optional: true - '@next/swc-linux-arm64-musl@16.2.6': + '@next/swc-linux-arm64-musl@16.2.7': optional: true - '@next/swc-linux-x64-gnu@16.2.6': + '@next/swc-linux-x64-gnu@16.2.7': optional: true - '@next/swc-linux-x64-musl@16.2.6': + '@next/swc-linux-x64-musl@16.2.7': optional: true - '@next/swc-win32-arm64-msvc@16.2.6': + '@next/swc-win32-arm64-msvc@16.2.7': optional: true - '@next/swc-win32-x64-msvc@16.2.6': + '@next/swc-win32-x64-msvc@16.2.7': optional: true '@noble/ciphers@1.3.0': {} @@ -3487,7 +3446,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@opennextjs/aws@4.0.2(next@16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': + '@opennextjs/aws@4.0.2(next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: '@ast-grep/napi': 0.40.5 '@aws-sdk/client-cloudfront': 3.984.0 @@ -3503,26 +3462,26 @@ snapshots: cookie: 1.1.1 esbuild: 0.25.4 express: 5.2.1 - next: 16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) path-to-regexp: 6.3.0 urlpattern-polyfill: 10.1.0 yaml: 2.9.0 transitivePeerDependencies: - supports-color - '@opennextjs/cloudflare@1.19.11(next@16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(wrangler@4.96.0)': + '@opennextjs/cloudflare@1.19.11(next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(wrangler@4.97.0)': dependencies: '@ast-grep/napi': 0.40.5 '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 4.0.2(next@16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) + '@opennextjs/aws': 4.0.2(next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) ci-info: 4.4.0 cloudflare: 4.5.0 comment-json: 4.6.2 enquirer: 2.4.1 glob: 12.0.0 - next: 16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next: 16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) ts-tqdm: 0.8.6 - wrangler: 4.96.0 + wrangler: 4.97.0 yargs: 18.0.0 transitivePeerDependencies: - encoding @@ -3757,11 +3716,11 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/react-dom@19.2.3(@types/react@19.2.15)': + '@types/react-dom@19.2.3(@types/react@19.2.16)': dependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.16 - '@types/react@19.2.15': + '@types/react@19.2.16': dependencies: csstype: 3.2.3 @@ -3854,8 +3813,8 @@ snapshots: dependencies: baseline-browser-mapping: 2.10.33 caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.364 - node-releases: 2.0.46 + electron-to-chromium: 1.5.365 + node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) buffer-from@1.1.2: {} @@ -3998,7 +3957,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.364: {} + electron-to-chromium@1.5.365: {} emoji-regex@10.6.0: {} @@ -4375,12 +4334,12 @@ snapshots: mimic-fn@2.1.0: {} - miniflare@4.20260529.0: + miniflare@4.20260601.0: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 undici: 7.24.8 - workerd: 1.20260529.1 + workerd: 1.20260601.1 ws: 8.20.1 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -4417,25 +4376,25 @@ snapshots: negotiator@1.0.0: {} - next@16.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + next@16.2.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: - '@next/env': 16.2.6 + '@next/env': 16.2.7 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.10.33 caniuse-lite: 1.0.30001793 postcss: 8.4.31 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - styled-jsx: 5.1.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + styled-jsx: 5.1.6(react@19.2.7) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.6 - '@next/swc-darwin-x64': 16.2.6 - '@next/swc-linux-arm64-gnu': 16.2.6 - '@next/swc-linux-arm64-musl': 16.2.6 - '@next/swc-linux-x64-gnu': 16.2.6 - '@next/swc-linux-x64-musl': 16.2.6 - '@next/swc-win32-arm64-msvc': 16.2.6 - '@next/swc-win32-x64-msvc': 16.2.6 + '@next/swc-darwin-arm64': 16.2.7 + '@next/swc-darwin-x64': 16.2.7 + '@next/swc-linux-arm64-gnu': 16.2.7 + '@next/swc-linux-arm64-musl': 16.2.7 + '@next/swc-linux-x64-gnu': 16.2.7 + '@next/swc-linux-x64-musl': 16.2.7 + '@next/swc-win32-arm64-msvc': 16.2.7 + '@next/swc-win32-x64-msvc': 16.2.7 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -4447,7 +4406,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-releases@2.0.46: {} + node-releases@2.0.47: {} normalize-path@3.0.0: {} @@ -4577,12 +4536,12 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-dom@19.2.6(react@19.2.6): + react-dom@19.2.7(react@19.2.7): dependencies: - react: 19.2.6 + react: 19.2.7 scheduler: 0.27.0 - react@19.2.6: {} + react@19.2.7: {} read-cache@1.0.0: dependencies: @@ -4776,10 +4735,10 @@ snapshots: strnum@2.3.0: {} - styled-jsx@5.1.6(react@19.2.6): + styled-jsx@5.1.6(react@19.2.7): dependencies: client-only: 0.0.1 - react: 19.2.6 + react: 19.2.7 sucrase@3.35.1: dependencies: @@ -4906,24 +4865,24 @@ snapshots: dependencies: isexe: 3.1.5 - workerd@1.20260529.1: + workerd@1.20260601.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260529.1 - '@cloudflare/workerd-darwin-arm64': 1.20260529.1 - '@cloudflare/workerd-linux-64': 1.20260529.1 - '@cloudflare/workerd-linux-arm64': 1.20260529.1 - '@cloudflare/workerd-windows-64': 1.20260529.1 + '@cloudflare/workerd-darwin-64': 1.20260601.1 + '@cloudflare/workerd-darwin-arm64': 1.20260601.1 + '@cloudflare/workerd-linux-64': 1.20260601.1 + '@cloudflare/workerd-linux-arm64': 1.20260601.1 + '@cloudflare/workerd-windows-64': 1.20260601.1 - wrangler@4.96.0: + wrangler@4.97.0: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260529.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260601.1) blake3-wasm: 2.1.5 esbuild: 0.27.3 - miniflare: 4.20260529.0 + miniflare: 4.20260601.0 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260529.1 + workerd: 1.20260601.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 3ff5faa..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - "apps/*" - - "packages/*" diff --git a/apps/web/postcss.config.mjs b/postcss.config.mjs similarity index 100% rename from apps/web/postcss.config.mjs rename to postcss.config.mjs diff --git a/apps/web/public/home/f0.webp b/public/home/f0.webp similarity index 100% rename from apps/web/public/home/f0.webp rename to public/home/f0.webp diff --git a/apps/web/public/home/f1.webp b/public/home/f1.webp similarity index 100% rename from apps/web/public/home/f1.webp rename to public/home/f1.webp diff --git a/apps/web/public/home/f10.webp b/public/home/f10.webp similarity index 100% rename from apps/web/public/home/f10.webp rename to public/home/f10.webp diff --git a/apps/web/public/home/f11.webp b/public/home/f11.webp similarity index 100% rename from apps/web/public/home/f11.webp rename to public/home/f11.webp diff --git a/apps/web/public/home/f12.webp b/public/home/f12.webp similarity index 100% rename from apps/web/public/home/f12.webp rename to public/home/f12.webp diff --git a/apps/web/public/home/f13.webp b/public/home/f13.webp similarity index 100% rename from apps/web/public/home/f13.webp rename to public/home/f13.webp diff --git a/apps/web/public/home/f14.webp b/public/home/f14.webp similarity index 100% rename from apps/web/public/home/f14.webp rename to public/home/f14.webp diff --git a/apps/web/public/home/f15.webp b/public/home/f15.webp similarity index 100% rename from apps/web/public/home/f15.webp rename to public/home/f15.webp diff --git a/apps/web/public/home/f16.webp b/public/home/f16.webp similarity index 100% rename from apps/web/public/home/f16.webp rename to public/home/f16.webp diff --git a/apps/web/public/home/f17.webp b/public/home/f17.webp similarity index 100% rename from apps/web/public/home/f17.webp rename to public/home/f17.webp diff --git a/apps/web/public/home/f18.webp b/public/home/f18.webp similarity index 100% rename from apps/web/public/home/f18.webp rename to public/home/f18.webp diff --git a/apps/web/public/home/f19.webp b/public/home/f19.webp similarity index 100% rename from apps/web/public/home/f19.webp rename to public/home/f19.webp diff --git a/apps/web/public/home/f2.webp b/public/home/f2.webp similarity index 100% rename from apps/web/public/home/f2.webp rename to public/home/f2.webp diff --git a/apps/web/public/home/f20.webp b/public/home/f20.webp similarity index 100% rename from apps/web/public/home/f20.webp rename to public/home/f20.webp diff --git a/apps/web/public/home/f21.webp b/public/home/f21.webp similarity index 100% rename from apps/web/public/home/f21.webp rename to public/home/f21.webp diff --git a/apps/web/public/home/f22.webp b/public/home/f22.webp similarity index 100% rename from apps/web/public/home/f22.webp rename to public/home/f22.webp diff --git a/apps/web/public/home/f23.webp b/public/home/f23.webp similarity index 100% rename from apps/web/public/home/f23.webp rename to public/home/f23.webp diff --git a/apps/web/public/home/f24.webp b/public/home/f24.webp similarity index 100% rename from apps/web/public/home/f24.webp rename to public/home/f24.webp diff --git a/apps/web/public/home/f25.webp b/public/home/f25.webp similarity index 100% rename from apps/web/public/home/f25.webp rename to public/home/f25.webp diff --git a/apps/web/public/home/f26.webp b/public/home/f26.webp similarity index 100% rename from apps/web/public/home/f26.webp rename to public/home/f26.webp diff --git a/apps/web/public/home/f27.webp b/public/home/f27.webp similarity index 100% rename from apps/web/public/home/f27.webp rename to public/home/f27.webp diff --git a/apps/web/public/home/f28.webp b/public/home/f28.webp similarity index 100% rename from apps/web/public/home/f28.webp rename to public/home/f28.webp diff --git a/apps/web/public/home/f29.webp b/public/home/f29.webp similarity index 100% rename from apps/web/public/home/f29.webp rename to public/home/f29.webp diff --git a/apps/web/public/home/f3.webp b/public/home/f3.webp similarity index 100% rename from apps/web/public/home/f3.webp rename to public/home/f3.webp diff --git a/apps/web/public/home/f30.webp b/public/home/f30.webp similarity index 100% rename from apps/web/public/home/f30.webp rename to public/home/f30.webp diff --git a/apps/web/public/home/f31.webp b/public/home/f31.webp similarity index 100% rename from apps/web/public/home/f31.webp rename to public/home/f31.webp diff --git a/apps/web/public/home/f4.webp b/public/home/f4.webp similarity index 100% rename from apps/web/public/home/f4.webp rename to public/home/f4.webp diff --git a/apps/web/public/home/f5.webp b/public/home/f5.webp similarity index 100% rename from apps/web/public/home/f5.webp rename to public/home/f5.webp diff --git a/apps/web/public/home/f6.webp b/public/home/f6.webp similarity index 100% rename from apps/web/public/home/f6.webp rename to public/home/f6.webp diff --git a/apps/web/public/home/f7.webp b/public/home/f7.webp similarity index 100% rename from apps/web/public/home/f7.webp rename to public/home/f7.webp diff --git a/apps/web/public/home/f8.webp b/public/home/f8.webp similarity index 100% rename from apps/web/public/home/f8.webp rename to public/home/f8.webp diff --git a/apps/web/public/home/f9.webp b/public/home/f9.webp similarity index 100% rename from apps/web/public/home/f9.webp rename to public/home/f9.webp diff --git a/apps/web/public/home/firstact/f0.json b/public/home/firstact/f0.json similarity index 100% rename from apps/web/public/home/firstact/f0.json rename to public/home/firstact/f0.json diff --git a/apps/web/public/home/firstact/f1.json b/public/home/firstact/f1.json similarity index 100% rename from apps/web/public/home/firstact/f1.json rename to public/home/firstact/f1.json diff --git a/apps/web/public/home/firstact/f10.json b/public/home/firstact/f10.json similarity index 100% rename from apps/web/public/home/firstact/f10.json rename to public/home/firstact/f10.json diff --git a/apps/web/public/home/firstact/f11.json b/public/home/firstact/f11.json similarity index 100% rename from apps/web/public/home/firstact/f11.json rename to public/home/firstact/f11.json diff --git a/apps/web/public/home/firstact/f12.json b/public/home/firstact/f12.json similarity index 100% rename from apps/web/public/home/firstact/f12.json rename to public/home/firstact/f12.json diff --git a/apps/web/public/home/firstact/f13.json b/public/home/firstact/f13.json similarity index 100% rename from apps/web/public/home/firstact/f13.json rename to public/home/firstact/f13.json diff --git a/apps/web/public/home/firstact/f2.json b/public/home/firstact/f2.json similarity index 100% rename from apps/web/public/home/firstact/f2.json rename to public/home/firstact/f2.json diff --git a/apps/web/public/home/firstact/f3.json b/public/home/firstact/f3.json similarity index 100% rename from apps/web/public/home/firstact/f3.json rename to public/home/firstact/f3.json diff --git a/apps/web/public/home/firstact/f4.json b/public/home/firstact/f4.json similarity index 100% rename from apps/web/public/home/firstact/f4.json rename to public/home/firstact/f4.json diff --git a/apps/web/public/home/firstact/f5.json b/public/home/firstact/f5.json similarity index 100% rename from apps/web/public/home/firstact/f5.json rename to public/home/firstact/f5.json diff --git a/apps/web/public/home/firstact/f6.json b/public/home/firstact/f6.json similarity index 100% rename from apps/web/public/home/firstact/f6.json rename to public/home/firstact/f6.json diff --git a/apps/web/public/home/firstact/f7.json b/public/home/firstact/f7.json similarity index 100% rename from apps/web/public/home/firstact/f7.json rename to public/home/firstact/f7.json diff --git a/apps/web/public/home/firstact/f8.json b/public/home/firstact/f8.json similarity index 100% rename from apps/web/public/home/firstact/f8.json rename to public/home/firstact/f8.json diff --git a/apps/web/public/home/firstact/f9.json b/public/home/firstact/f9.json similarity index 100% rename from apps/web/public/home/firstact/f9.json rename to public/home/firstact/f9.json diff --git a/apps/web/public/home/firstact/m0.json b/public/home/firstact/m0.json similarity index 100% rename from apps/web/public/home/firstact/m0.json rename to public/home/firstact/m0.json diff --git a/apps/web/public/home/firstact/m1.json b/public/home/firstact/m1.json similarity index 100% rename from apps/web/public/home/firstact/m1.json rename to public/home/firstact/m1.json diff --git a/apps/web/public/home/firstact/m10.json b/public/home/firstact/m10.json similarity index 100% rename from apps/web/public/home/firstact/m10.json rename to public/home/firstact/m10.json diff --git a/apps/web/public/home/firstact/m11.json b/public/home/firstact/m11.json similarity index 100% rename from apps/web/public/home/firstact/m11.json rename to public/home/firstact/m11.json diff --git a/apps/web/public/home/firstact/m12.json b/public/home/firstact/m12.json similarity index 100% rename from apps/web/public/home/firstact/m12.json rename to public/home/firstact/m12.json diff --git a/apps/web/public/home/firstact/m13.json b/public/home/firstact/m13.json similarity index 100% rename from apps/web/public/home/firstact/m13.json rename to public/home/firstact/m13.json diff --git a/apps/web/public/home/firstact/m15.json b/public/home/firstact/m15.json similarity index 100% rename from apps/web/public/home/firstact/m15.json rename to public/home/firstact/m15.json diff --git a/apps/web/public/home/firstact/m16.json b/public/home/firstact/m16.json similarity index 100% rename from apps/web/public/home/firstact/m16.json rename to public/home/firstact/m16.json diff --git a/apps/web/public/home/firstact/m17.json b/public/home/firstact/m17.json similarity index 100% rename from apps/web/public/home/firstact/m17.json rename to public/home/firstact/m17.json diff --git a/apps/web/public/home/firstact/m18.json b/public/home/firstact/m18.json similarity index 100% rename from apps/web/public/home/firstact/m18.json rename to public/home/firstact/m18.json diff --git a/apps/web/public/home/firstact/m19.json b/public/home/firstact/m19.json similarity index 100% rename from apps/web/public/home/firstact/m19.json rename to public/home/firstact/m19.json diff --git a/apps/web/public/home/firstact/m2.json b/public/home/firstact/m2.json similarity index 100% rename from apps/web/public/home/firstact/m2.json rename to public/home/firstact/m2.json diff --git a/apps/web/public/home/firstact/m20.json b/public/home/firstact/m20.json similarity index 100% rename from apps/web/public/home/firstact/m20.json rename to public/home/firstact/m20.json diff --git a/apps/web/public/home/firstact/m21.json b/public/home/firstact/m21.json similarity index 100% rename from apps/web/public/home/firstact/m21.json rename to public/home/firstact/m21.json diff --git a/apps/web/public/home/firstact/m22.json b/public/home/firstact/m22.json similarity index 100% rename from apps/web/public/home/firstact/m22.json rename to public/home/firstact/m22.json diff --git a/apps/web/public/home/firstact/m23.json b/public/home/firstact/m23.json similarity index 100% rename from apps/web/public/home/firstact/m23.json rename to public/home/firstact/m23.json diff --git a/apps/web/public/home/firstact/m24.json b/public/home/firstact/m24.json similarity index 100% rename from apps/web/public/home/firstact/m24.json rename to public/home/firstact/m24.json diff --git a/apps/web/public/home/firstact/m25.json b/public/home/firstact/m25.json similarity index 100% rename from apps/web/public/home/firstact/m25.json rename to public/home/firstact/m25.json diff --git a/apps/web/public/home/firstact/m26.json b/public/home/firstact/m26.json similarity index 100% rename from apps/web/public/home/firstact/m26.json rename to public/home/firstact/m26.json diff --git a/apps/web/public/home/firstact/m27.json b/public/home/firstact/m27.json similarity index 100% rename from apps/web/public/home/firstact/m27.json rename to public/home/firstact/m27.json diff --git a/apps/web/public/home/firstact/m28.json b/public/home/firstact/m28.json similarity index 100% rename from apps/web/public/home/firstact/m28.json rename to public/home/firstact/m28.json diff --git a/apps/web/public/home/firstact/m3.json b/public/home/firstact/m3.json similarity index 100% rename from apps/web/public/home/firstact/m3.json rename to public/home/firstact/m3.json diff --git a/apps/web/public/home/firstact/m30.json b/public/home/firstact/m30.json similarity index 100% rename from apps/web/public/home/firstact/m30.json rename to public/home/firstact/m30.json diff --git a/apps/web/public/home/firstact/m31.json b/public/home/firstact/m31.json similarity index 100% rename from apps/web/public/home/firstact/m31.json rename to public/home/firstact/m31.json diff --git a/apps/web/public/home/firstact/m4.json b/public/home/firstact/m4.json similarity index 100% rename from apps/web/public/home/firstact/m4.json rename to public/home/firstact/m4.json diff --git a/apps/web/public/home/firstact/m5.json b/public/home/firstact/m5.json similarity index 100% rename from apps/web/public/home/firstact/m5.json rename to public/home/firstact/m5.json diff --git a/apps/web/public/home/firstact/m6.json b/public/home/firstact/m6.json similarity index 100% rename from apps/web/public/home/firstact/m6.json rename to public/home/firstact/m6.json diff --git a/apps/web/public/home/firstact/m7.json b/public/home/firstact/m7.json similarity index 100% rename from apps/web/public/home/firstact/m7.json rename to public/home/firstact/m7.json diff --git a/apps/web/public/home/firstact/m8.json b/public/home/firstact/m8.json similarity index 100% rename from apps/web/public/home/firstact/m8.json rename to public/home/firstact/m8.json diff --git a/apps/web/public/home/firstact/m9.json b/public/home/firstact/m9.json similarity index 100% rename from apps/web/public/home/firstact/m9.json rename to public/home/firstact/m9.json diff --git a/apps/web/public/home/firstscene/f0.webp b/public/home/firstscene/f0.webp similarity index 100% rename from apps/web/public/home/firstscene/f0.webp rename to public/home/firstscene/f0.webp diff --git a/apps/web/public/home/firstscene/f1.webp b/public/home/firstscene/f1.webp similarity index 100% rename from apps/web/public/home/firstscene/f1.webp rename to public/home/firstscene/f1.webp diff --git a/apps/web/public/home/firstscene/f10.webp b/public/home/firstscene/f10.webp similarity index 100% rename from apps/web/public/home/firstscene/f10.webp rename to public/home/firstscene/f10.webp diff --git a/apps/web/public/home/firstscene/f11.webp b/public/home/firstscene/f11.webp similarity index 100% rename from apps/web/public/home/firstscene/f11.webp rename to public/home/firstscene/f11.webp diff --git a/apps/web/public/home/firstscene/f12.webp b/public/home/firstscene/f12.webp similarity index 100% rename from apps/web/public/home/firstscene/f12.webp rename to public/home/firstscene/f12.webp diff --git a/apps/web/public/home/firstscene/f13.webp b/public/home/firstscene/f13.webp similarity index 100% rename from apps/web/public/home/firstscene/f13.webp rename to public/home/firstscene/f13.webp diff --git a/apps/web/public/home/firstscene/f2.webp b/public/home/firstscene/f2.webp similarity index 100% rename from apps/web/public/home/firstscene/f2.webp rename to public/home/firstscene/f2.webp diff --git a/apps/web/public/home/firstscene/f3.webp b/public/home/firstscene/f3.webp similarity index 100% rename from apps/web/public/home/firstscene/f3.webp rename to public/home/firstscene/f3.webp diff --git a/apps/web/public/home/firstscene/f4.webp b/public/home/firstscene/f4.webp similarity index 100% rename from apps/web/public/home/firstscene/f4.webp rename to public/home/firstscene/f4.webp diff --git a/apps/web/public/home/firstscene/f5.webp b/public/home/firstscene/f5.webp similarity index 100% rename from apps/web/public/home/firstscene/f5.webp rename to public/home/firstscene/f5.webp diff --git a/apps/web/public/home/firstscene/f6.webp b/public/home/firstscene/f6.webp similarity index 100% rename from apps/web/public/home/firstscene/f6.webp rename to public/home/firstscene/f6.webp diff --git a/apps/web/public/home/firstscene/f7.webp b/public/home/firstscene/f7.webp similarity index 100% rename from apps/web/public/home/firstscene/f7.webp rename to public/home/firstscene/f7.webp diff --git a/apps/web/public/home/firstscene/f8.webp b/public/home/firstscene/f8.webp similarity index 100% rename from apps/web/public/home/firstscene/f8.webp rename to public/home/firstscene/f8.webp diff --git a/apps/web/public/home/firstscene/f9.webp b/public/home/firstscene/f9.webp similarity index 100% rename from apps/web/public/home/firstscene/f9.webp rename to public/home/firstscene/f9.webp diff --git a/apps/web/public/home/firstscene/m0.webp b/public/home/firstscene/m0.webp similarity index 100% rename from apps/web/public/home/firstscene/m0.webp rename to public/home/firstscene/m0.webp diff --git a/apps/web/public/home/firstscene/m1.webp b/public/home/firstscene/m1.webp similarity index 100% rename from apps/web/public/home/firstscene/m1.webp rename to public/home/firstscene/m1.webp diff --git a/apps/web/public/home/firstscene/m10.webp b/public/home/firstscene/m10.webp similarity index 100% rename from apps/web/public/home/firstscene/m10.webp rename to public/home/firstscene/m10.webp diff --git a/apps/web/public/home/firstscene/m11.webp b/public/home/firstscene/m11.webp similarity index 100% rename from apps/web/public/home/firstscene/m11.webp rename to public/home/firstscene/m11.webp diff --git a/apps/web/public/home/firstscene/m12.webp b/public/home/firstscene/m12.webp similarity index 100% rename from apps/web/public/home/firstscene/m12.webp rename to public/home/firstscene/m12.webp diff --git a/apps/web/public/home/firstscene/m13.webp b/public/home/firstscene/m13.webp similarity index 100% rename from apps/web/public/home/firstscene/m13.webp rename to public/home/firstscene/m13.webp diff --git a/apps/web/public/home/firstscene/m15.webp b/public/home/firstscene/m15.webp similarity index 100% rename from apps/web/public/home/firstscene/m15.webp rename to public/home/firstscene/m15.webp diff --git a/apps/web/public/home/firstscene/m16.webp b/public/home/firstscene/m16.webp similarity index 100% rename from apps/web/public/home/firstscene/m16.webp rename to public/home/firstscene/m16.webp diff --git a/apps/web/public/home/firstscene/m17.webp b/public/home/firstscene/m17.webp similarity index 100% rename from apps/web/public/home/firstscene/m17.webp rename to public/home/firstscene/m17.webp diff --git a/apps/web/public/home/firstscene/m18.webp b/public/home/firstscene/m18.webp similarity index 100% rename from apps/web/public/home/firstscene/m18.webp rename to public/home/firstscene/m18.webp diff --git a/apps/web/public/home/firstscene/m19.webp b/public/home/firstscene/m19.webp similarity index 100% rename from apps/web/public/home/firstscene/m19.webp rename to public/home/firstscene/m19.webp diff --git a/apps/web/public/home/firstscene/m2.webp b/public/home/firstscene/m2.webp similarity index 100% rename from apps/web/public/home/firstscene/m2.webp rename to public/home/firstscene/m2.webp diff --git a/apps/web/public/home/firstscene/m20.webp b/public/home/firstscene/m20.webp similarity index 100% rename from apps/web/public/home/firstscene/m20.webp rename to public/home/firstscene/m20.webp diff --git a/apps/web/public/home/firstscene/m21.webp b/public/home/firstscene/m21.webp similarity index 100% rename from apps/web/public/home/firstscene/m21.webp rename to public/home/firstscene/m21.webp diff --git a/apps/web/public/home/firstscene/m22.webp b/public/home/firstscene/m22.webp similarity index 100% rename from apps/web/public/home/firstscene/m22.webp rename to public/home/firstscene/m22.webp diff --git a/apps/web/public/home/firstscene/m23.webp b/public/home/firstscene/m23.webp similarity index 100% rename from apps/web/public/home/firstscene/m23.webp rename to public/home/firstscene/m23.webp diff --git a/apps/web/public/home/firstscene/m24.webp b/public/home/firstscene/m24.webp similarity index 100% rename from apps/web/public/home/firstscene/m24.webp rename to public/home/firstscene/m24.webp diff --git a/apps/web/public/home/firstscene/m25.webp b/public/home/firstscene/m25.webp similarity index 100% rename from apps/web/public/home/firstscene/m25.webp rename to public/home/firstscene/m25.webp diff --git a/apps/web/public/home/firstscene/m26.webp b/public/home/firstscene/m26.webp similarity index 100% rename from apps/web/public/home/firstscene/m26.webp rename to public/home/firstscene/m26.webp diff --git a/apps/web/public/home/firstscene/m27.webp b/public/home/firstscene/m27.webp similarity index 100% rename from apps/web/public/home/firstscene/m27.webp rename to public/home/firstscene/m27.webp diff --git a/apps/web/public/home/firstscene/m28.webp b/public/home/firstscene/m28.webp similarity index 100% rename from apps/web/public/home/firstscene/m28.webp rename to public/home/firstscene/m28.webp diff --git a/apps/web/public/home/firstscene/m3.webp b/public/home/firstscene/m3.webp similarity index 100% rename from apps/web/public/home/firstscene/m3.webp rename to public/home/firstscene/m3.webp diff --git a/apps/web/public/home/firstscene/m30.webp b/public/home/firstscene/m30.webp similarity index 100% rename from apps/web/public/home/firstscene/m30.webp rename to public/home/firstscene/m30.webp diff --git a/apps/web/public/home/firstscene/m31.webp b/public/home/firstscene/m31.webp similarity index 100% rename from apps/web/public/home/firstscene/m31.webp rename to public/home/firstscene/m31.webp diff --git a/apps/web/public/home/firstscene/m4.webp b/public/home/firstscene/m4.webp similarity index 100% rename from apps/web/public/home/firstscene/m4.webp rename to public/home/firstscene/m4.webp diff --git a/apps/web/public/home/firstscene/m5.webp b/public/home/firstscene/m5.webp similarity index 100% rename from apps/web/public/home/firstscene/m5.webp rename to public/home/firstscene/m5.webp diff --git a/apps/web/public/home/firstscene/m6.webp b/public/home/firstscene/m6.webp similarity index 100% rename from apps/web/public/home/firstscene/m6.webp rename to public/home/firstscene/m6.webp diff --git a/apps/web/public/home/firstscene/m7.webp b/public/home/firstscene/m7.webp similarity index 100% rename from apps/web/public/home/firstscene/m7.webp rename to public/home/firstscene/m7.webp diff --git a/apps/web/public/home/firstscene/m8.webp b/public/home/firstscene/m8.webp similarity index 100% rename from apps/web/public/home/firstscene/m8.webp rename to public/home/firstscene/m8.webp diff --git a/apps/web/public/home/firstscene/m9.webp b/public/home/firstscene/m9.webp similarity index 100% rename from apps/web/public/home/firstscene/m9.webp rename to public/home/firstscene/m9.webp diff --git a/apps/web/public/home/m0.webp b/public/home/m0.webp similarity index 100% rename from apps/web/public/home/m0.webp rename to public/home/m0.webp diff --git a/apps/web/public/home/m1.webp b/public/home/m1.webp similarity index 100% rename from apps/web/public/home/m1.webp rename to public/home/m1.webp diff --git a/apps/web/public/home/m10.webp b/public/home/m10.webp similarity index 100% rename from apps/web/public/home/m10.webp rename to public/home/m10.webp diff --git a/apps/web/public/home/m11.webp b/public/home/m11.webp similarity index 100% rename from apps/web/public/home/m11.webp rename to public/home/m11.webp diff --git a/apps/web/public/home/m12.webp b/public/home/m12.webp similarity index 100% rename from apps/web/public/home/m12.webp rename to public/home/m12.webp diff --git a/apps/web/public/home/m13.webp b/public/home/m13.webp similarity index 100% rename from apps/web/public/home/m13.webp rename to public/home/m13.webp diff --git a/apps/web/public/home/m14.webp b/public/home/m14.webp similarity index 100% rename from apps/web/public/home/m14.webp rename to public/home/m14.webp diff --git a/apps/web/public/home/m15.webp b/public/home/m15.webp similarity index 100% rename from apps/web/public/home/m15.webp rename to public/home/m15.webp diff --git a/apps/web/public/home/m16.webp b/public/home/m16.webp similarity index 100% rename from apps/web/public/home/m16.webp rename to public/home/m16.webp diff --git a/apps/web/public/home/m17.webp b/public/home/m17.webp similarity index 100% rename from apps/web/public/home/m17.webp rename to public/home/m17.webp diff --git a/apps/web/public/home/m18.webp b/public/home/m18.webp similarity index 100% rename from apps/web/public/home/m18.webp rename to public/home/m18.webp diff --git a/apps/web/public/home/m19.webp b/public/home/m19.webp similarity index 100% rename from apps/web/public/home/m19.webp rename to public/home/m19.webp diff --git a/apps/web/public/home/m2.webp b/public/home/m2.webp similarity index 100% rename from apps/web/public/home/m2.webp rename to public/home/m2.webp diff --git a/apps/web/public/home/m20.webp b/public/home/m20.webp similarity index 100% rename from apps/web/public/home/m20.webp rename to public/home/m20.webp diff --git a/apps/web/public/home/m21.webp b/public/home/m21.webp similarity index 100% rename from apps/web/public/home/m21.webp rename to public/home/m21.webp diff --git a/apps/web/public/home/m22.webp b/public/home/m22.webp similarity index 100% rename from apps/web/public/home/m22.webp rename to public/home/m22.webp diff --git a/apps/web/public/home/m23.webp b/public/home/m23.webp similarity index 100% rename from apps/web/public/home/m23.webp rename to public/home/m23.webp diff --git a/apps/web/public/home/m24.webp b/public/home/m24.webp similarity index 100% rename from apps/web/public/home/m24.webp rename to public/home/m24.webp diff --git a/apps/web/public/home/m25.webp b/public/home/m25.webp similarity index 100% rename from apps/web/public/home/m25.webp rename to public/home/m25.webp diff --git a/apps/web/public/home/m26.webp b/public/home/m26.webp similarity index 100% rename from apps/web/public/home/m26.webp rename to public/home/m26.webp diff --git a/apps/web/public/home/m27.webp b/public/home/m27.webp similarity index 100% rename from apps/web/public/home/m27.webp rename to public/home/m27.webp diff --git a/apps/web/public/home/m28.webp b/public/home/m28.webp similarity index 100% rename from apps/web/public/home/m28.webp rename to public/home/m28.webp diff --git a/apps/web/public/home/m29.webp b/public/home/m29.webp similarity index 100% rename from apps/web/public/home/m29.webp rename to public/home/m29.webp diff --git a/apps/web/public/home/m3.webp b/public/home/m3.webp similarity index 100% rename from apps/web/public/home/m3.webp rename to public/home/m3.webp diff --git a/apps/web/public/home/m30.webp b/public/home/m30.webp similarity index 100% rename from apps/web/public/home/m30.webp rename to public/home/m30.webp diff --git a/apps/web/public/home/m31.webp b/public/home/m31.webp similarity index 100% rename from apps/web/public/home/m31.webp rename to public/home/m31.webp diff --git a/apps/web/public/home/m4.webp b/public/home/m4.webp similarity index 100% rename from apps/web/public/home/m4.webp rename to public/home/m4.webp diff --git a/apps/web/public/home/m5.webp b/public/home/m5.webp similarity index 100% rename from apps/web/public/home/m5.webp rename to public/home/m5.webp diff --git a/apps/web/public/home/m6.webp b/public/home/m6.webp similarity index 100% rename from apps/web/public/home/m6.webp rename to public/home/m6.webp diff --git a/apps/web/public/home/m7.webp b/public/home/m7.webp similarity index 100% rename from apps/web/public/home/m7.webp rename to public/home/m7.webp diff --git a/apps/web/public/home/m8.webp b/public/home/m8.webp similarity index 100% rename from apps/web/public/home/m8.webp rename to public/home/m8.webp diff --git a/apps/web/public/home/m9.webp b/public/home/m9.webp similarity index 100% rename from apps/web/public/home/m9.webp rename to public/home/m9.webp diff --git a/apps/web/public/qq-group.webp b/public/qq-group.webp similarity index 100% rename from apps/web/public/qq-group.webp rename to public/qq-group.webp diff --git a/apps/web/scripts/generate-home-images.mjs b/scripts/generate-home-images.mjs similarity index 98% rename from apps/web/scripts/generate-home-images.mjs rename to scripts/generate-home-images.mjs index 64d5ad9..d4a638e 100644 --- a/apps/web/scripts/generate-home-images.mjs +++ b/scripts/generate-home-images.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /** * One-off generator: produces the InfiPlot homepage story cards via Runware - * FLUX.2 and writes them as PNGs under apps/web/public/home/. + * FLUX.2 and writes them as PNGs under public/home/. * * Flat per-gender layout: 32 male-oriented (m0..m31) + 32 female-oriented * (f0..f31). All cards are 832x1024 (≈4:5) to match the homepage StoryCard @@ -11,10 +11,10 @@ * ink / cyberpunk / steampunk / pixel / etc.) so the homepage feels visually * varied rather than uniformly anime. Stories are 红果-short-drama framed. * - * Reads IMAGE_BASE_URL / IMAGE_API_KEY / IMAGE_MODEL from apps/web/.env.local. + * Reads IMAGE_BASE_URL / IMAGE_API_KEY / IMAGE_MODEL from .env.local. * * Run once: - * node apps/web/scripts/generate-home-images.mjs + * node scripts/generate-home-images.mjs * * Idempotent: skips any card whose .png or .webp already exists. Pass --force * to regenerate everything. @@ -71,7 +71,7 @@ const BASE_QUALITY = const W = 832; const H = 1024; -// Style suffixes — kept in sync with apps/web/app/page.tsx STYLE_MAP so the +// Style suffixes — kept in sync with app/page.tsx STYLE_MAP so the // homepage cover and the in-game styleGuide land on the same aesthetic. const S = { 二次元: "anime visual novel illustration, japanese galgame aesthetic, soft warm natural light", diff --git a/apps/web/scripts/localize-firstact-images.mjs b/scripts/localize-firstact-images.mjs similarity index 96% rename from apps/web/scripts/localize-firstact-images.mjs rename to scripts/localize-firstact-images.mjs index 55f8a74..f365139 100644 --- a/apps/web/scripts/localize-firstact-images.mjs +++ b/scripts/localize-firstact-images.mjs @@ -2,7 +2,7 @@ /** * Post-process for prebake-firstacts: each first-act JSON has imageUrl pointing * at https://im.runware.ai/... which adds ~1-2s of remote-CDN download on first - * click. This script downloads every imageUrl to apps/web/public/home/firstscene/ + * click. This script downloads every imageUrl to public/home/firstscene/ * (webp, compressed) and rewrites the JSON's imageUrl to the local /home/... * path, so click-to-play is bottlenecked only by JSON parse + local image * decode (sub-100ms). @@ -11,7 +11,7 @@ * skipped. Pass --force to re-download everything. * * Run once after prebake-firstacts.mjs completes: - * node apps/web/scripts/localize-firstact-images.mjs + * node scripts/localize-firstact-images.mjs */ import { fileURLToPath } from "node:url"; diff --git a/apps/web/scripts/optimize-home-images.mjs b/scripts/optimize-home-images.mjs similarity index 95% rename from apps/web/scripts/optimize-home-images.mjs rename to scripts/optimize-home-images.mjs index 9b76d1e..fd97b42 100644 --- a/apps/web/scripts/optimize-home-images.mjs +++ b/scripts/optimize-home-images.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * Compresses the freshly generated apps/web/public/home/*.png into much + * Compresses the freshly generated public/home/*.png into much * smaller .webp files alongside them, then deletes the originals. * Output webps target ~1200px on the long edge and quality 78. */ diff --git a/apps/web/scripts/prebake-firstacts.mjs b/scripts/prebake-firstacts.mjs similarity index 98% rename from apps/web/scripts/prebake-firstacts.mjs rename to scripts/prebake-firstacts.mjs index 5c07ace..b66d194 100644 --- a/apps/web/scripts/prebake-firstacts.mjs +++ b/scripts/prebake-firstacts.mjs @@ -2,7 +2,7 @@ /** * One-off generator: produces the InfiPlot homepage "instant-play" first-act * JSONs by driving each curated card through the live engine (POST /api/start) - * and saving the full StartResponse under apps/web/public/home/firstact/. + * and saving the full StartResponse under public/home/firstact/. * * The /play page detects ?card= and hydrates Session from the JSON * instead of calling /api/start, so click-to-play feels instant — only the @@ -13,7 +13,7 @@ * Pass --force to regenerate all 64. * * Run once: - * node apps/web/scripts/prebake-firstacts.mjs + * node scripts/prebake-firstacts.mjs * * Concurrency 4 to avoid LLM/Runware/MiMo provider rate limits. */ @@ -30,7 +30,7 @@ const FORCE = process.argv.includes("--force"); const BASE_URL = process.env.BASE_URL ?? "http://localhost:3000"; const CONCURRENCY = 4; -// Mirror of apps/web/app/page.tsx STYLE_MAP — keep these in sync. The engine +// Mirror of app/page.tsx STYLE_MAP — keep these in sync. The engine // only needs the prose styleGuide string; this script maps card.style → that. const STYLE_MAP = { 二次元: "唯美二次元动漫插画,日系 galgame 精致质感,柔和温暖的自然光照。", @@ -47,7 +47,7 @@ const STYLE_MAP = { 赛博朋克: "赛博朋克都市,霓虹反射湿润街道,电子义体高光。", }; -// Mirror of apps/web/app/page.tsx STORIES, flat with name + gender. Indexes +// Mirror of app/page.tsx STORIES, flat with name + gender. Indexes // match the m0..m31 / f0..f31 cover filenames. const CARDS = [ // 男性向 m0..m31 diff --git a/apps/web/tailwind.config.ts b/tailwind.config.ts similarity index 100% rename from apps/web/tailwind.config.ts rename to tailwind.config.ts diff --git a/tsconfig.base.json b/tsconfig.base.json deleted file mode 100644 index d195d30..0000000 --- a/tsconfig.base.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "module": "ESNext", - "moduleResolution": "Bundler", - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noUncheckedIndexedAccess": true, - "verbatimModuleSyntax": false, - "jsx": "preserve" - } -} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..bdcf76f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,56 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "moduleResolution": "Bundler", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noUncheckedIndexedAccess": true, + "verbatimModuleSyntax": false, + "jsx": "react-jsx", + "noEmit": true, + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ], + "@infiplot/engine": [ + "./lib/engine/index.ts" + ], + "@infiplot/ai-client": [ + "./lib/ai-client/index.ts" + ], + "@infiplot/tts-client": [ + "./lib/tts-client/index.ts" + ], + "@infiplot/types": [ + "./lib/types/index.ts" + ] + }, + "allowJs": true + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/apps/web/vercel.json b/vercel.json similarity index 100% rename from apps/web/vercel.json rename to vercel.json diff --git a/apps/web/wrangler.jsonc b/wrangler.jsonc similarity index 86% rename from apps/web/wrangler.jsonc rename to wrangler.jsonc index 37cfd8e..570be18 100644 --- a/apps/web/wrangler.jsonc +++ b/wrangler.jsonc @@ -11,7 +11,7 @@ "observability": { "enabled": true }, - // 60s mirrors apps/web/vercel.json maxDuration for the scene pipeline tail + // 60s mirrors vercel.json maxDuration for the scene pipeline tail // (multi-agent LLM, ~30-45s p95). Requires Workers Paid — Free is capped // at 10ms CPU. I/O wait does not count against this budget. "limits": {