Client-side optimizer for Neverness to Everness console builds. Imports a gear export from nte-history-exporter, keeps it in IndexedDB, and solves for the best module placement per character or across a team. - domain/: pure ports of the Python research scripts (shapes, cartridges, board tiling, stats, scoring, set bonuses, Arc effects, sheet prediction). No DOM, no storage imports, so they stay worker-safe and Node-testable. - solver/: single-character solve with branch and bound, plus a three-phase team solve (portfolio, leximin, column generation) over disjoint item sets. Runs in a Worker when one can be constructed, inline otherwise. - db/: three storage tiers selected by use rather than feature detection, fail-closed import validation, and undo that restores both sides of a steal. - ui/: React 19 views for items, characters and teams; the board is drawn as the deliverable rather than a score. - Two build targets: a hosted bundle and a single self-contained nte.html with no external requests. Values the model cannot measure are reported as unavailable rather than guessed: cartridge set bonuses, the level 80 base-stat multiplier, and the distinction between "optimal for this packing" and globally optimal. 145 tests, tsc clean, both build targets clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
1.3 KiB
JSON
37 lines
1.3 KiB
JSON
{
|
|
"name": "nte-optimizer",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"description": "Gear optimizer for Neverness to Everness. Static, no server.",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "npm run generate && tsc -b && vite build",
|
|
"build:single": "npm run build && vite build --config vite.single.config.ts",
|
|
"preview": "vite preview",
|
|
"serve:dist": "python3 -m http.server -d dist",
|
|
"generate": "npm run gen:gamedata && npm run gen:tilings",
|
|
"gen:gamedata": "node --experimental-strip-types tools/prune-gamedata.ts",
|
|
"gen:tilings": "node --experimental-strip-types tools/precompute-tilings.ts",
|
|
"gen:icons": "node --experimental-strip-types tools/fetch-icons.ts",
|
|
"bench": "node --experimental-strip-types tools/bench-solve.ts",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"typecheck": "tsc -b --noEmit",
|
|
"check:guides": "node --experimental-strip-types tools/check-guides.ts"
|
|
},
|
|
"dependencies": {
|
|
"idb": "8.0.3",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "26.2.0",
|
|
"@types/react": "19.2.18",
|
|
"@types/react-dom": "19.2.4",
|
|
"@vitejs/plugin-react": "6.1.0",
|
|
"typescript": "5.9.3",
|
|
"vite": "8.2.2",
|
|
"vitest": "4.1.11"
|
|
}
|
|
}
|