nte-optimizer/package.json
goober 5ce255fa6f feat: NTE gear optimizer web app
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>
2026-08-21 11:38:17 +03:00

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"
}
}