WuYongJie 48871454e9 feat(bom-costing): BOM 预估 v2 —— 价格回退工具、case 级预估卡编排与预览页
- agent 工具:尺寸感知镜像检索 + 分类画像三级级联(包装 v1 回退链,导出纯函数复用)
- case 级编排:首批代表 SKU 自动精算,其余按需点算;结果持久缓存(新表 BomCostingAgentSkuEstimate,幂等迁移)
- EstimateCard 契约:代码侧聚合五行构成/区间包络/最小置信度/不确定点并集
- API:/api/bom-costing/cases/[id]/agent-estimate(GET 缓存卡 + POST 运行,复用模块鉴权)
- 预览页:/bom-costing/estimate(预估卡 + SKU 列表按需点算 + 竞品图片浏览,旁路不过闸门不设默认入口)
- Select 组件:透传 id/aria 到触发按钮;修复 skill 知识未注入循环的缺陷
- 基线工具:report:bom-agent-baseline(定价覆盖率 + shadow 聚合,含隧道重试)
- 设计文档:docs/架构设计/BOM成本预估v2-agent方案设计-20260916.md
2026-09-16 17:37:06 +08:00

218 lines
13 KiB
JSON

{
"name": "furniture-3d-system",
"version": "0.1.0",
"private": true,
"scripts": {
"predev": "npm run prisma:check-client-sync",
"dev": "next dev",
"build": "prisma generate && next build",
"start": "next start",
"lint": "eslint",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"clean:local": "node scripts/cleanup-local-artifacts.js",
"prisma:generate": "prisma generate",
"prisma:check-client-sync": "node scripts/check-prisma-client-sync.js",
"prisma:push": "node scripts/prisma-db-push-local.js",
"prisma:studio": "prisma studio",
"sync:supply-chain-product-archive": "tsx scripts/sync-supply-chain-product-archive.ts",
"sync:supply-chain-product-archive-daily": "tsx scripts/sync-supply-chain-product-archive-sales-performance-daily.ts",
"sync:supply-chain-product-archive-enrichment": "tsx scripts/sync-supply-chain-product-archive-enrichment.ts",
"sync:supply-chain-product-archive-sales-performance": "tsx scripts/sync-supply-chain-product-archive-sales-performance.ts",
"sync:jst-sku-product-archive": "tsx scripts/sync-jst-sku-product-archive.ts",
"sync:bom-cost-reference": "tsx scripts/sync-bom-cost-reference.ts",
"backtest:bom-cost-reference": "tsx scripts/backtest-bom-cost-reference.ts",
"report:bom-cost-shadow-divergence": "tsx scripts/report-bom-cost-shadow-divergence.ts",
"report:bom-agent-baseline": "tsx scripts/report-bom-agent-baseline.ts",
"trial:bom-costing-agent": "tsx scripts/run-bom-costing-agent-trial.ts",
"import:yunshan-created-at": "tsx scripts/import-yunshan-product-created-at.ts",
"import:product-archive-drawing-media": "tsx scripts/import-product-archive-drawing-media.ts",
"db:verify-master-data": "node scripts/verify-master-data-foundation.js",
"db:verify-master-data:audit": "node scripts/verify-master-data-foundation.js --output .master-data-audits/foundation-hard-ready-gate-current.json --summary-output .master-data-audits/foundation-hard-ready-gate-current.summary.json --summary-stdout",
"db:verify-master-data:strict": "node scripts/verify-master-data-foundation.js --require-applied",
"db:verify-master-data:migration-status": "node scripts/verify-master-data-foundation.js --read-only-migration-status",
"db:verify-master-data:production-readonly": "node scripts/verify-master-data-foundation.js --read-only-quality --summary-output .master-data-audits/foundation-production-readonly-current.summary.json --summary-stdout",
"db:cleanup-master-data": "node scripts/apply-master-data-cleanup-plan.js",
"db:cleanup-master-data:validate": "node scripts/apply-master-data-cleanup-plan.js --validate-plan",
"db:cleanup-operation-logs": "tsx scripts/cleanup-operation-logs.ts",
"db:cleanup-operation-logs:apply": "tsx scripts/cleanup-operation-logs.ts --apply --confirm=cleanup-operation-logs",
"db:export-product-category-review": "node scripts/export-non-integrated-product-category-review.js",
"db:build-product-category-cleanup-plan": "node scripts/build-non-integrated-product-category-cleanup-plan.js",
"db:match-jst-product-category-cleanup-plan": "node scripts/match-jst-product-category-cleanup-plan.js",
"db:archive-jst-unresolved-products": "node scripts/archive-jst-unresolved-non-integrated-products.js",
"prisma:seed": "tsx prisma/seed.ts",
"open-platform:seed": "tsx scripts/seed-open-platform-demo.ts",
"type-check": "node scripts/run-type-check.js",
"storage:verify-config": "tsx scripts/verify-object-storage-config.ts",
"storage:migrate-historical-assets": "tsx scripts/migrate-historical-assets-to-qiniu.ts",
"storage:migrate-historical-assets:gate": "tsx scripts/migrate-historical-assets-to-qiniu.ts --fail-on-missing-sources",
"storage:migrate-historical-assets:apply": "tsx scripts/migrate-historical-assets-to-qiniu.ts --apply",
"storage:gc:audit": "tsx scripts/storage-gc.ts",
"storage:gc:apply": "tsx scripts/storage-gc.ts --apply",
"storage:inventory:filesystem": "tsx scripts/migrate-historical-assets-to-qiniu.ts --skip-database-scan --include-filesystem-inventory",
"storage:inventory:filesystem:apply": "tsx scripts/migrate-historical-assets-to-qiniu.ts --skip-database-scan --include-filesystem-inventory --apply",
"demo:create": "node scripts/create-demo-data.js",
"demo:setup": "npm run prisma:push && npm run demo:create",
"demo:update": "node scripts/update-demo-models.js",
"demo:refresh": "npm run prisma:push && npm run demo:update",
"thumbnails:backfill": "tsx scripts/backfill-asset-variant-thumbnails.ts",
"thumbnails:backfill:apply": "tsx scripts/backfill-asset-variant-thumbnails.ts --apply",
"materials:sync-textures": "tsx scripts/sync-material-textures.ts",
"materials:sync-textures:apply": "tsx scripts/sync-material-textures.ts --apply",
"materials:sync-standard": "tsx scripts/sync-standard-finishes.ts",
"materials:sync-standard:apply": "tsx scripts/sync-standard-finishes.ts --apply",
"sync:jst-sku-stock": "tsx scripts/sync-jst-sku-stock-products.ts",
"image-search:model:prepare": "tsx scripts/prepare-product-archive-image-search-model.ts",
"image-search:index": "tsx scripts/index-product-archive-images.ts",
"repair:barcode-print:historical": "tsx scripts/repair-barcode-print-source-rows.ts",
"sync:oa-board": "tsx scripts/sync-oa-board.ts",
"sync:oa-board:apply": "tsx scripts/sync-oa-board.ts --apply",
"sync:oa-brand-planning": "tsx scripts/sync-oa-brand-planning-board.ts",
"sync:oa-brand-planning:apply": "tsx scripts/sync-oa-brand-planning-board.ts --apply",
"cache:oa-board:local": "tsx scripts/cache-oa-board-local-preview.ts",
"import:oa-board-activity-mappings": "tsx scripts/import-oa-board-activity-mappings.ts",
"import:oa-board-node-rules": "tsx scripts/import-oa-board-node-rules.ts",
"report:oa-board-activities": "tsx scripts/report-oa-board-activities.ts",
"sync:employee-directory": "tsx scripts/sync-employee-directory.ts",
"sync:employee-directory:apply": "tsx scripts/sync-employee-directory.ts --apply",
"sync:external-jsreport": "tsx scripts/sync-external-readonly-to-jsreport.ts",
"sync:external-jsreport:apply": "tsx scripts/sync-external-readonly-to-jsreport.ts --apply",
"db:verify-master-data:truth": "node scripts/verify-master-data-truth-sources.js",
"db:verify-master-data:code": "node scripts/verify-master-data-code-boundaries.js",
"db:verify-master-data:all": "npm run db:verify-master-data:truth && npm run db:verify-master-data:code && npm run db:verify-master-data:migration-status && npm run db:verify-master-data",
"db:verify-master-data:all:strict": "npm run db:verify-master-data:truth && npm run db:verify-master-data:code && npm run db:verify-master-data:migration-status && npm run db:verify-master-data:strict",
"db:verify-master-data:readiness": "node scripts/verify-master-data-readiness.js",
"db:verify-master-data:readiness:audit": "node scripts/verify-master-data-readiness.js --output .master-data-audits/readiness-current.json",
"db:diagnose-prisma-migration-baseline": "node scripts/diagnose-prisma-migration-baseline.js",
"db:preflight-database-foundation-change": "node scripts/preflight-database-foundation-change.js",
"db:preflight-database-foundation-change:audit": "node scripts/preflight-database-foundation-change.js --output .master-data-audits/foundation-preflight-current.json",
"db:backup:postgres": "node scripts/create-postgres-backup.js",
"db:foundation:migrate": "node scripts/run-database-foundation-migrations.js",
"db:foundation:migrate:audit": "node scripts/run-database-foundation-migrations.js --output .master-data-audits/foundation-migrate-plan-current.json",
"db:foundation:apply-required": "node scripts/apply-master-data-foundation-migrations.js",
"db:foundation:apply-required:audit": "node scripts/apply-master-data-foundation-migrations.js --output .master-data-audits/foundation-required-migration-apply-plan-current.json",
"db:foundation:apply-structure-repair": "node scripts/apply-prisma-structure-repair.js",
"db:foundation:apply-structure-repair:audit": "node scripts/apply-prisma-structure-repair.js --output .master-data-audits/authorized-structure-repair-apply-plan-current.json",
"db:foundation:baseline-resolve": "node scripts/apply-prisma-baseline-resolve.js",
"db:foundation:rehearse-migration": "node scripts/rehearse-database-foundation-migration.js",
"db:foundation:rehearse-structure-repair": "node scripts/rehearse-prisma-structure-repair.js",
"db:foundation:baseline-repair-plan": "node scripts/plan-prisma-baseline-repair.js",
"db:foundation:plan-pre-sku-formalization-repair": "node scripts/plan-pre-sku-formalization-repair.js",
"db:foundation:validate-pre-sku-formalization-repair": "node scripts/plan-pre-sku-formalization-repair.js --validate-plan",
"db:foundation:apply-pre-sku-formalization-repair": "node scripts/apply-pre-sku-formalization-repair.js",
"db:foundation:audit": "node scripts/run-master-data-foundation-audit.js",
"db:foundation:audit:cleanup-template": "node scripts/run-master-data-foundation-audit.js --include-cleanup-template",
"db:foundation:audit:production-readonly": "node scripts/run-master-data-foundation-audit.js --production-read-only --output-dir .master-data-audits/foundation-production-readonly-current",
"db:foundation:verify-production-readonly": "node scripts/verify-production-readonly-foundation-manifest.js",
"db:foundation:audit:full": "node scripts/run-master-data-foundation-audit.js --include-cleanup-template --include-storage-migration-gate --use-docker-shadow --include-structure-repair-rehearsal --output-dir .master-data-audits/foundation-audit-current-goal",
"db:foundation:completion-checklist": "node scripts/print-master-data-foundation-checklist.js",
"db:foundation:decision-package": "node scripts/print-master-data-foundation-decision-package.js"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.948.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@hookform/resolvers": "^5.2.2",
"@huggingface/transformers": "3.8.1",
"@prisma/adapter-pg": "^7.3.0",
"@prisma/client": "^7.3.0",
"@react-three/drei": "^10.7.7",
"@react-three/fiber": "^9.5.0",
"@tanstack/react-query": "^5.90.20",
"@types/bcryptjs": "^2.4.6",
"@types/jsonwebtoken": "^9.0.10",
"@types/qrcode": "^1.5.6",
"autoprefixer": "^10.4.22",
"bcryptjs": "^3.0.3",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
"dockerode": "^4.0.9",
"exceljs": "^4.4.0",
"framer-motion": "^12.29.2",
"gsap": "^3.12.5",
"html2canvas": "^1.4.1",
"ioredis": "^5.9.2",
"jsonwebtoken": "^9.0.3",
"jszip": "^3.10.1",
"lucide-react": "^0.563.0",
"mssql": "^12.5.0",
"mysql2": "^3.15.3",
"nanoid": "^5.1.6",
"next": "^16.1.6",
"obj2gltf": "^3.2.0",
"pg": "^8.17.2",
"pinyin-pro": "^3.28.1",
"postcss": "^8.5.6",
"print-js": "^1.6.0",
"puppeteer": "^24.40.0",
"qiniu": "^7.15.2",
"qr-scanner": "^1.4.2",
"qrcode": "^1.5.4",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-hook-form": "^7.54.2",
"sharp": "^0.34.5",
"ssh2": "^1.17.0",
"tailwind-merge": "^3.4.0",
"three": "^0.182.0",
"xlsx": "^0.18.5",
"zod": "^4.3.6",
"zustand": "^5.0.2"
},
"overrides": {
"@react-three/drei": {
"react": "19.2.4",
"react-dom": "19.2.4"
},
"@react-three/fiber": {
"react": "19.2.4",
"react-dom": "19.2.4"
},
"@react-spring/three": {
"react": "19.2.4",
"react-dom": "19.2.4"
},
"@react-spring/animated": {
"react": "19.2.4"
},
"@react-spring/core": {
"react": "19.2.4"
},
"@react-spring/shared": {
"react": "19.2.4"
}
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.18",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/dockerode": "^4.0.1",
"@types/ioredis": "^4.28.10",
"@types/jest": "^30.0.0",
"@types/node": "^22.19.7",
"@types/pg": "^8.16.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@types/ssh2": "^1.15.5",
"@types/supertest": "^6.0.3",
"@types/three": "^0.182.0",
"babel-plugin-react-compiler": "1.0.0",
"eslint": "^9",
"eslint-config-next": "^16.1.6",
"fast-check": "^4.5.3",
"jest": "^30.2.0",
"jest-environment-jsdom": "^30.2.0",
"playwright": "^1.59.1",
"prisma": "^7.3.0",
"supertest": "^7.2.2",
"tailwindcss": "^4.1.18",
"tsx": "^4.21.0",
"typescript": "^5"
}
}