`web-server/src/preprocess/keypoint-codec.ts` 是契约 websocket-keypoints §2 的
**参考实现**(其 encodeBinaryFrame 注释即「Android 端参考实现」,
decodeBinaryFrame 注释即「Windows 端参考实现(T-WIN-004)」)。Android 已用
「金标准字节向量」与它对齐,而 **Windows 的 GDScript 解码器此前只跟自己比过**
(自己编码、自己解码)—— 那条边由本仓暴露出的向量来补。
新增:
* scripts/gen-frame-vectors.mts(+ npm run vectors:frame):用参考实现生成 12 个
用例的字节与**参考解码结果**,供 Windows 仓的 accept-frame-vectors.sh 锁定比对。
向量里同时给出 inputPoints(原始 float64 输入)、f32InputPoints / f32Hex
(收敛到 float32 的**同输入**基准)与 points(参考解码结果),各自注明用途。
* test/keypoint-frame-codec.spec.ts(7 项):把参考实现对其他两端的承诺显式钉住 ——
i16 最小值边界(-32768/32767 必须是 0x8000,不能被夹成 -32767)、
**取整规则**(JS Math.round 半数朝 +∞:-2.5 → -2,与 Android 的 Math.round 一致)、
置信度阈值 128/255 与两端夹紧、u32 frame_id(0xFFFFFFFF / 0x80000000)、
flags 只取低 8 位、非法帧(长度 / magic / 版本)拒绝、20 组随机输入的往返量化误差。
实测:npm run verify 全绿 —— 契约 6 项 / 35 路由 / 版本一致 / 26 文件 302 项测试
(原 295)/ build / 产物级实体注册核对 / 启动冒烟。
58 lines
1.9 KiB
JSON
58 lines
1.9 KiB
JSON
{
|
|
"name": "opendance-web-server",
|
|
"version": "0.7.4",
|
|
"description": "OpenDance Studio Web 管理服务端(NestJS + TypeORM + 现有 MySQL 实例)",
|
|
"license": "MIT",
|
|
"private": true,
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
},
|
|
"scripts": {
|
|
"build": "nest build",
|
|
"start": "nest start",
|
|
"start:dev": "nest start --watch",
|
|
"start:prod": "node dist/main.js",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:smoke": "node test/smoke.mjs",
|
|
"contracts:check": "node scripts/check-contracts.mjs && node scripts/check-routes.mjs && node scripts/check-version.mjs",
|
|
"verify": "npm run contracts:check && npm run typecheck && npm run test && npm run build && npm run bootstrap:check",
|
|
"typeorm": "node scripts/migrate.mjs",
|
|
"migration:generate": "node scripts/migrate.mjs generate",
|
|
"migration:run": "node scripts/migrate.mjs run",
|
|
"migration:revert": "node scripts/migrate.mjs revert",
|
|
"migration:show": "node scripts/migrate.mjs show",
|
|
"version:check": "node scripts/check-version.mjs",
|
|
"bootstrap:check": "node scripts/check-bootstrap.mjs",
|
|
"vectors:frame": "vite-node scripts/gen-frame-vectors.mts --"
|
|
},
|
|
"dependencies": {
|
|
"@nestjs/common": "^11.0.12",
|
|
"@nestjs/config": "^4.0.2",
|
|
"@nestjs/core": "^11.0.12",
|
|
"@nestjs/platform-express": "^11.0.12",
|
|
"@nestjs/typeorm": "^11.0.0",
|
|
"class-transformer": "^0.5.1",
|
|
"class-validator": "^0.14.1",
|
|
"dotenv": "^16.4.7",
|
|
"mysql2": "^3.12.0",
|
|
"reflect-metadata": "^0.2.2",
|
|
"rxjs": "^7.8.2",
|
|
"typeorm": "^0.3.21"
|
|
},
|
|
"devDependencies": {
|
|
"@nestjs/cli": "^11.0.5",
|
|
"@nestjs/schematics": "^11.0.2",
|
|
"@types/express": "^5.0.0",
|
|
"@types/multer": "^1.4.12",
|
|
"@types/node": "^22.13.10",
|
|
"source-map-support": "^0.5.21",
|
|
"sql.js": "^1.14.2",
|
|
"ts-node": "^10.9.2",
|
|
"tsconfig-paths": "^4.2.0",
|
|
"typescript": "^5.7.3",
|
|
"vitest": "^3.0.8"
|
|
}
|
|
}
|