Files
Genarrative/package.json
T
suzmii 7ae71441ba
Project CI / Repository checks (pull_request) Successful in 2m49s
Project CI / Frontend tests (pull_request) Successful in 3m46s
Project CI / Backend tests (pull_request) Successful in 6m42s
Project CI / Native shell tests (pull_request) Successful in 17m35s
合并 master:接入 AGC 内置插件宿主与 Cocos 编辑器能力(#338)
合并 origin/master 4a46f89c9 到 chore/agc-acceptance-build(HEAD 55fab1776),本次合并共涉及 117 个文件(113 个自动合并 + 4 个冲突)。

- 自动合并 113 个文件:插件宿主与插件工作区(plugin_host.rs / builtin_plugins.rs / editor_adapter(_s).rs / plugins/agc-cocos-editor / cocos-editor-bridge crate / editor-adapter-api)、构建与打包脚本、locked Cargo.lock 及 master 侧锁与资源链路改动;不逐条列出。
- 冲突 1 apps/ai-game-creator-shell/src/App.tsx:271-278:两侧各自新增一个 import(本分支 ./services/tauriEventSubscription、master ./services/pluginHost),两个 import 都保留,并按 simple-import-sort 口径排在 ./services/platformSession 之后、tauriEventSubscription 之前;四个符号都仍被使用。
- 冲突 2 docs/project-memory/shared-memory/decision-log.md:8338-8469:两侧在同一位置追加记录,逐字保留两侧记录且各自原有顺序不变(先本分支的 2026-09-11 资源卡预览 data URL / loopback HTTP 两条,后 master 的 2026-09-09~2026-09-12 通用插件宿主、Cocos 桥接与内置插件开关条目),不改写、不合并措辞。
- 冲突 3 docs/project-memory/shared-memory/pitfalls.md:79-112:同上,保留本分支的「2026-09-05 资源画本转场与视口分离」与 master 的「2026-09-11 首页自动工作区必须使用 AGC 管理目录」「2026-09-12 Cocos 项目识别不等于编辑器桥就绪」「2026-09-11 Cocos 项目必须走独立导入分支」,内容逐字保留、两侧原顺序不变。
- 冲突 4 apps/ai-game-creator-shell/src-tauri/src/agent/direct_project_history.rs:400-435:判据是「两侧不互斥」,解法为 both(语义超集)。
- 冲突 4 保留本分支的有界退避重试循环(DIRECT_PROJECT_HISTORY_CONTENTION_RETRY_BACKOFF_MS + is_direct_project_history_contention_failure + 测试注入点)与单次尝试函数 append_direct_project_history_item_once(含锁外幂等回扫与锁内状态复核)。
- 冲突 4 保留 master 的有界等待取项目写锁:把该函数内原来的零等待 crate::project::acquire_project_write_lock(root, "conversation.write") 换成 acquire_game_creator_agent_runtime_project_write_lock_with_wait(root, "conversation.write"),并原样保留 master 的注释(agc_write_file 占锁 5.5 秒期间,零等待取锁会让流式历史落盘直接失败)。
- 冲突 4 判断依据:master 只替换了同一处的取锁语义(零等待 → 约 10 秒有界等待,并有 append_waits_for_a_same_process_project_writer 用例锁定),不改变函数签名、调用方与错误类型;HEAD 的重试循环因此仍然可达,与有界等待叠加后语义更强——写文件占锁由有界等待吃掉,等待窗口耗尽后的残余争用再由一次 250ms 短退避重试兜底。未删除任何一侧行为,也未放弃任何一侧语义。
- 冲突 4 位置取舍:有界等待取锁仍放在锁外回扫与序列化之后(本分支结构),保住「幂等回扫与序列化留在锁外、不让他人等整份历史读完」的性能语义;master 的注释与调用参数逐字保留。
- 验证:npm run typecheck、npm --prefix apps/ai-game-creator-shell run typecheck、cargo check --locked --all-targets(exit 0,0 error)、npm run check:rustfmt、npm run check:encoding、git diff --check 全部通过;冲突标记扫描为空。
- 定向 Rust 测试(--test-threads=1):direct_project_history 19 passed / 0 failed(含本分支 contention_failure_is_retried_with_bounded_backoff、contention_failure_beyond_the_backoff_budget_fails_closed、shape_failure_is_not_retried 与 master 的 append_waits_for_a_same_process_project_writer);conversation 36 passed / 0 failed;write_lock 21 passed / 0 failed。两侧用例同时绿,证明有界等待取锁与有界退避重试叠加后语义自洽。
- 未跑全量测试(按仓库约定本地只跑定向,全量交给 CI);本次不 push。
2026-09-13 15:33:48 +08:00

264 lines
19 KiB
JSON

{
"name": "react-example",
"private": true,
"version": "0.0.0",
"type": "module",
"packageManager": "npm@10.9.7",
"workspaces": [
"apps/admin-web",
"apps/ai-game-creator-shell",
"apps/desktop-shell",
"apps/mobile-shell",
"apps/preview-deployer-web",
"packages/image-canvas-core",
"packages/image-canvas-react",
"packages/agc-plugin-sdk",
"packages/shared",
"plugins/agc-cocos-editor",
"tools/spine-json-export-validator"
],
"scripts": {
"prepare": "husky",
"dev": "node scripts/dev.mjs",
"dev:spacetime": "node scripts/dev.mjs spacetime",
"dev:api-server": "node scripts/dev.mjs api-server",
"dev:bgfilter-worker": "node scripts/dev.mjs bgfilter-worker",
"bgfilter-worker:load-smoke": "node scripts/bgfilter-worker-load-smoke.mjs",
"bgfilter-worker:fault-smoke": "node scripts/bgfilter-worker-load-smoke.mjs fault",
"bgfilter-worker:smoke-test": "node --test scripts/bgfilter-worker-load-smoke.test.mjs",
"dev:web": "node scripts/dev.mjs web",
"dev:admin-web": "node scripts/dev.mjs admin-web",
"server-manager:panel": "cargo run -p server-manager-panel --manifest-path server-rs/Cargo.toml",
"preview-deployer:server": "cargo run -p preview-deployer-server --manifest-path server-rs/Cargo.toml",
"preview-deployer:web:dev": "npm --prefix apps/preview-deployer-web run dev",
"preview-deployer:web:typecheck": "npm --prefix apps/preview-deployer-web run typecheck",
"preview-deployer:web:test": "npm --prefix apps/preview-deployer-web run test",
"preview-deployer:web:build": "npm --prefix apps/preview-deployer-web run build",
"dev:spacetime:logs": "node scripts/run-bash-script.mjs scripts/spacetime-logs-local.sh",
"otel:debug": "node scripts/run-otelcol.mjs debug",
"otel:rider": "node scripts/run-otelcol.mjs rider",
"admin-web:build": "node scripts/admin-web-build.mjs build",
"admin-web:typecheck": "node scripts/admin-web-build.mjs typecheck",
"admin-web:preview": "npm --prefix apps/admin-web run preview --",
"spacetime:generate": "node scripts/generate-spacetime-bindings.mjs",
"spacetime:external-generation:maintain": "node scripts/spacetime-maintain-external-generation-jobs.mjs",
"spacetime:editor-image-asset-kind:clean": "node scripts/spacetime-clean-editor-image-asset-kind.mjs",
"spacetime:editor-canvas-layout:migrate": "node scripts/spacetime-migrate-editor-canvas-layout.mjs",
"spacetime:editor-canvas-resources:repair": "node scripts/spacetime-repair-editor-canvas-resources.mjs",
"spacetime:wechat-virtual-payment:reconcile": "node scripts/reconcile-wechat-virtual-payment-order.mjs",
"check:wechat-virtual-payment-reconcile": "node scripts/check-wechat-virtual-payment-reconcile.mjs",
"check:api-server-env": "node scripts/check-api-server-env.mjs",
"check:admin-account-procedures": "node scripts/check-admin-account-procedures.mjs",
"check:editor-idempotency-procedures": "node scripts/spacetime-editor-idempotency-smoke.mjs",
"check:spacetime-runtime-access": "node scripts/check-spacetime-runtime-access.mjs",
"check:module-runtime-artifact": "node scripts/check-module-runtime-artifact.mjs",
"deploy:rust:remote": "node scripts/run-bash-script.mjs scripts/deploy-rust-remote.sh",
"build:production-release": "node scripts/run-bash-script.mjs scripts/build-production-release.sh",
"build:rust:ubuntu": "node scripts/run-bash-script.mjs scripts/deploy-rust-remote.sh",
"build": "node scripts/build-gate.mjs",
"build:raw": "node scripts/vite-cli.mjs build",
"preview": "node scripts/vite-cli.mjs preview",
"clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
"audit:rust-build-cache": "node scripts/rust-build-cache.mjs",
"clean:rust-incremental": "node scripts/rust-build-cache.mjs --clean-incremental",
"test:rust-build-cache": "node --test scripts/rust-build-cache.test.mjs",
"check:encoding": "node scripts/check-encoding.mjs",
"check:git-hooks": "node --test scripts/git-hooks.test.mjs",
"check:npm-workspaces": "node --test scripts/check-npm-workspaces.test.mjs && node scripts/check-npm-workspaces.mjs",
"check:repository-ci": "bash scripts/check-repository-ci.sh",
"check:rustfmt": "cargo fmt --all --manifest-path server-rs/Cargo.toml -- --check && cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --check",
"check:spacetime-schema": "node scripts/check-spacetime-schema-guard.mjs",
"check:production-ops": "node scripts/check-production-ops-guardrails.mjs",
"check:preview-deployer": "node scripts/check-preview-deployer.mjs",
"check:maintenance-page": "node scripts/check-maintenance-page.mjs",
"check:database-backup": "node scripts/check-database-backup-to-oss.mjs",
"check:production-health-patrol": "node scripts/check-production-health-patrol.mjs",
"check:production-health-patrol-env": "node scripts/check-production-health-patrol-env-check.mjs",
"check:production-api-release": "node scripts/check-production-api-release.mjs",
"check:production-api-deploy": "node scripts/check-production-api-deploy.mjs",
"check:pingora-gateway-smoke": "node scripts/check-pingora-gateway-smoke.mjs",
"check:nginx-pingora-canary": "node scripts/check-nginx-pingora-canary.mjs",
"check:nginx-spa-routes": "node scripts/check-nginx-spa-routes.mjs",
"check:pingora-route-parity": "node scripts/check-pingora-route-parity.mjs",
"check:pingora-canary-live": "node scripts/check-pingora-canary-live.mjs",
"check:pingora-canary-live-guard": "node scripts/check-pingora-canary-live-guard.mjs",
"check:pingora-realpath-canary-toggle": "node scripts/check-pingora-realpath-canary-toggle.mjs",
"check:pingora-direct-preflight": "node -- scripts/check-pingora-direct-preflight.mjs && node scripts/check-pingora-direct-preflight-guard.mjs",
"check:pingora-direct-live": "node scripts/check-pingora-direct-live.mjs",
"check:pingora-direct-live-guard": "node scripts/check-pingora-direct-live-guard.mjs",
"check:pingora-direct-enable": "node scripts/check-pingora-direct-enable.mjs",
"check:pingora-direct-rollback": "node scripts/check-pingora-direct-rollback.mjs",
"check:pingora-health-patrol-env-switch": "node scripts/check-pingora-health-patrol-env-switch.mjs",
"check:pingora-gateway-env-shadow-switch": "node scripts/check-pingora-gateway-env-shadow-switch.mjs",
"check:pingora-tls-cert-sync": "node scripts/check-pingora-tls-cert-sync.mjs",
"check:pingora-current-release-audit": "node scripts/check-pingora-current-release-audit.mjs",
"check:pingora-direct-rehearsal-status": "node scripts/check-pingora-direct-rehearsal-status.mjs",
"check:pingora-cutover-status-snapshot": "node scripts/check-pingora-cutover-status-snapshot.mjs",
"check:pingora-cutover-evidence-bundle": "node scripts/check-pingora-cutover-evidence-bundle.mjs",
"check:pingora-cutover-command-evidence": "node scripts/check-pingora-cutover-command-evidence.mjs",
"check:pingora-cutover-evidence-verify": "node scripts/check-pingora-cutover-evidence-verify.mjs",
"check:pingora-cutover-evidence-audit": "node scripts/check-pingora-cutover-evidence-audit.mjs",
"check:pingora-canary-access-log-parity": "node scripts/check-pingora-canary-access-log-parity-check.mjs",
"check:pingora-canary-docker": "node scripts/check-pingora-canary-docker.mjs",
"check:pingora-production-release-build": "node scripts/check-pingora-production-release-build.mjs",
"check:pingora-release-readiness-plan": "node scripts/check-pingora-release-readiness-plan.mjs",
"check:pingora-release-readiness": "node scripts/check-pingora-release-readiness.mjs",
"plan:pingora-direct-cutover": "node scripts/check-pingora-release-readiness.mjs --dry-run-cutover",
"deploy:pingora-realpath-canary-enable": "bash scripts/deploy/pingora-realpath-canary-enable.sh",
"deploy:pingora-realpath-canary-disable": "bash scripts/deploy/pingora-realpath-canary-disable.sh",
"deploy:pingora-direct-enable": "bash scripts/deploy/pingora-direct-enable.sh",
"deploy:pingora-direct-rollback": "bash scripts/deploy/pingora-direct-rollback.sh",
"spine-export-validator:dev": "npm --prefix tools/spine-json-export-validator run dev --",
"spine-export-validator:typecheck": "npm --prefix tools/spine-json-export-validator run typecheck",
"spine-export-validator:build": "npm --prefix tools/spine-json-export-validator run build",
"check:wechat-miniprogram-auth": "node scripts/check-wechat-miniprogram-auth-smoke.mjs",
"check:server-rs-ddd": "npm run check:spacetime-schema && npm run check:spacetime-runtime-access && npm run check:module-runtime-artifact && node scripts/check-server-rs-ddd-boundaries.mjs",
"lint:eslint": "eslint . --ext .ts,.tsx,.js,.mjs,.cjs --max-warnings 0",
"typecheck": "tsc -p tsconfig.typecheck-guardrails.json --noEmit",
"lint": "npm run check:encoding && npm run check:npm-workspaces && npm run check:git-hooks && npm run check:rustfmt && npm run check:spacetime-schema && npm run check:production-ops && npm run check:preview-deployer && npm run check:maintenance-page && npm run lint:eslint && npm run typecheck",
"lint:fix": "eslint . --ext .ts,.tsx,.js,.mjs,.cjs --fix && prettier --write .",
"format:rust": "cargo fmt --all --manifest-path server-rs/Cargo.toml && cargo fmt --all --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml",
"format": "prettier --write . && npm run format:rust",
"format:check": "prettier --check . && npm run check:rustfmt",
"format:staged": "lint-staged",
"check:pre-push-master": "bash scripts/pre-push-master.sh",
"test": "vitest run",
"test:watch": "vitest",
"container:init": "node scripts/container-compose.mjs init",
"container:build": "node scripts/container-compose.mjs build",
"container:up": "node scripts/container-compose.mjs up",
"container:down": "node scripts/container-compose.mjs down",
"container:logs": "node scripts/container-compose.mjs logs",
"container:ps": "node scripts/container-compose.mjs ps",
"container:config": "node scripts/container-compose.mjs config",
"container:worker-smoke": "node scripts/container-worker-smoke.mjs",
"check": "npm run lint && npm run test && npm run build && npm run check:native-shells",
"codegraph:init": "codegraph init -i .",
"codegraph:index": "codegraph index .",
"codegraph:sync": "codegraph sync .",
"codegraph:status": "codegraph status .",
"rag:index": "node scripts/rag/index-docs.mjs",
"rag:search": "node scripts/rag/search-docs.mjs",
"database:backup:oss": "node scripts/database-backup-to-oss.mjs",
"mobile-shell:dev": "npm --prefix apps/mobile-shell run dev",
"mobile-shell:typecheck": "npm --prefix apps/mobile-shell run typecheck",
"mobile-shell:test": "npm --prefix apps/mobile-shell run test",
"mobile-shell:build-config": "npm --prefix apps/mobile-shell run build-config:smoke",
"mobile-shell:build:android": "npm --prefix apps/mobile-shell run build:android",
"mobile-shell:build:ios": "npm --prefix apps/mobile-shell run build:ios",
"mobile-shell:build-artifacts": "npm --prefix apps/mobile-shell run build-artifacts:smoke",
"mobile-shell:config": "npm --prefix apps/mobile-shell run config:smoke",
"mobile-shell:export": "npm --prefix apps/mobile-shell run export:smoke",
"desktop-shell:dev": "npm --prefix apps/desktop-shell run dev",
"desktop-shell:build": "npm --prefix apps/desktop-shell run build --",
"desktop-shell:stage-release-binary": "npm --prefix apps/desktop-shell run stage-release-binary",
"desktop-shell:typecheck": "npm --prefix apps/desktop-shell run typecheck",
"desktop-shell:test": "cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml",
"agc": "npm --prefix apps/ai-game-creator-shell run dev",
"agc:dev": "npm --prefix apps/ai-game-creator-shell run dev",
"agc:serve": "npm run agc:typecheck && npm --prefix apps/ai-game-creator-shell run dev-stack",
"agc:vite": "npm --prefix apps/ai-game-creator-shell run dev-server",
"agc:backend": "node scripts/dev.mjs backend",
"agc:config": "npm --prefix apps/ai-game-creator-shell run config --",
"agc:build": "npm --prefix apps/ai-game-creator-shell run build --",
"agc:skill-pack:check": "npm --prefix apps/ai-game-creator-shell run skill-pack:check",
"agc:skill-pack:sync": "npm --prefix apps/ai-game-creator-shell run skill-pack:sync",
"agc:plugins:test": "node --test plugins/agc-cocos-editor/src/entry.test.mjs",
"agc:plugins:native-test": "cargo test --manifest-path plugins/agc-cocos-editor/native/cocos-editor-bridge/Cargo.toml",
"agc:plugins:check": "npm run agc:plugins:test && npm run agc:plugins:native-test",
"agc:check": "npm run ai-game-creator-shell:check",
"agc:typecheck": "npm --prefix apps/ai-game-creator-shell run typecheck",
"agc:test": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-autonomous-playable-lane-defense-deterministic-e2e --",
"agc:test:chat": "npm --prefix apps/ai-game-creator-shell run test:chat --",
"agc:test:chat:manual": "npm --prefix apps/ai-game-creator-shell run test:chat:manual --",
"ai-game-creator-shell:dev": "npm --prefix apps/ai-game-creator-shell run dev",
"ai-game-creator-shell:dev-server": "npm --prefix apps/ai-game-creator-shell run dev-server",
"ai-game-creator-shell:build": "npm --prefix apps/ai-game-creator-shell run build --",
"ai-game-creator-shell:release:upload": "npm --prefix apps/ai-game-creator-shell run release:upload",
"ai-game-creator-shell:llm-status": "npm --prefix apps/ai-game-creator-shell run llm-status --",
"ai-game-creator-shell:agent-task": "npm --prefix apps/ai-game-creator-shell run agent-task --",
"agc:chat": "npm --prefix apps/ai-game-creator-shell run chat --",
"agc:swarm": "npm --prefix apps/ai-game-creator-shell run swarm --",
"agc:collaboration-policy-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:collaboration-policy-real-e2e --",
"agc:mixed-swarm-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:mixed-swarm-real-e2e --",
"ai-game-creator-shell:agent-run": "npm --prefix apps/ai-game-creator-shell run agent-run --",
"ai-game-creator-shell:agent-run:smoke": "npm --prefix apps/ai-game-creator-shell run agent-run:smoke",
"ai-game-creator-shell:agent-runtime:real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:real-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-swarm-autonomous-chat-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-swarm-autonomous-chat-real-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-autonomous-playable-lane-defense-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-autonomous-playable-lane-defense-real-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-autonomous-playable-lane-defense-deterministic-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-autonomous-playable-lane-defense-deterministic-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-autonomous-playable-lane-defense-deterministic-self-test": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-autonomous-playable-lane-defense-deterministic-self-test --",
"ai-game-creator-shell:agent-runtime:supervisor-swarm-transient-retry-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-swarm-transient-retry-real-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-swarm-final-reply-transient-retry-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-swarm-final-reply-transient-retry-real-e2e --",
"ai-game-creator-shell:agent-runtime:supervisor-swarm-tool-plan-handoff-runner-kill-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:supervisor-swarm-tool-plan-handoff-runner-kill-real-e2e --",
"ai-game-creator-shell:agent-runtime:steer-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:steer-real-e2e --",
"ai-game-creator-shell:agent-runtime:steer-runner-kill-real-e2e": "npm --prefix apps/ai-game-creator-shell run agent-runtime:steer-runner-kill-real-e2e --",
"agent-runtime-core:check": "cargo test --manifest-path server-rs/crates/agent-runtime-core/Cargo.toml",
"agent-runtime-orchestration:check": "cargo test --manifest-path server-rs/crates/agent-runtime-orchestration/Cargo.toml",
"ai-game-creator-shell:typecheck": "npm --prefix apps/ai-game-creator-shell run typecheck",
"ai-game-creator-shell:check": "npm run ai-game-creator-shell:typecheck && npm run test -- apps/ai-game-creator-shell/tests && npm run agent-runtime-core:check && npm run agent-runtime-orchestration:check && cargo test --locked -p platform-llm --manifest-path server-rs/Cargo.toml && cargo test --locked -p shared-contracts --manifest-path server-rs/Cargo.toml game_creation_app && cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --test-threads=1 && npm run ai-game-creator-shell:agent-run:smoke",
"check:native-shells": "node scripts/check-native-shells.mjs"
},
"dependencies": {
"@genarrative/image-canvas-core": "0.1.0",
"@genarrative/image-canvas-react": "0.1.0",
"@genarrative/shared": "0.1.0",
"@lexical/react": "^0.47.0",
"@lexical/utils": "^0.47.0",
"@tailwindcss/vite": "^4.1.14",
"@vitejs/plugin-react": "^5.0.4",
"dotenv": "^17.2.3",
"jszip": "^3.10.1",
"lexical": "^0.47.0",
"lucide-react": "^0.546.0",
"motion": "^12.23.24",
"overlayscrollbars": "2.16.0",
"overlayscrollbars-react": "0.5.6",
"qrcode": "^1.5.4",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"three": "^0.184.0",
"vite": "^6.2.0",
"zustand": "^5.0.14"
},
"lint-staged": {
"*.{js,mjs,cjs,ts,tsx}": [
"node scripts/lint-staged-eslint.mjs",
"prettier --write"
],
"*.rs": [
"node scripts/lint-staged-rustfmt.mjs"
]
},
"devDependencies": {
"@colbymchenry/codegraph": "^0.8.0",
"@tauri-apps/cli": "^2.11.2",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/node": "^22.14.0",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"@typescript-eslint/parser": "^6.21.0",
"@vitest/coverage-v8": "^0.34.6",
"autoprefixer": "^10.4.21",
"eslint": "^8.57.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.6",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-unused-imports": "^3.2.0",
"globals": "^13.24.0",
"husky": "9.1.7",
"jsdom": "^22.1.0",
"lint-staged": "16.4.0",
"prettier": "^3.3.3",
"tailwindcss": "^4.1.14",
"tsx": "^4.21.0",
"typescript": "~5.8.2",
"vite": "^6.2.0",
"vitest": "^0.34.6"
}
}