@datamoc/mw_games 0.23.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,50 @@ the public API may still change between minor versions.
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.24.1] - 2026-10-02
11
+
12
+ Dependency refresh: Babylon.js 9.29, `@capacitor/cli` held at 8.5.2 so it matches the other Capacitor
13
+ packages, and the SBOM and bundle-size baseline regenerated. The global bundle grew 2.5% gzipped
14
+ (356504 to 365318 B) from the newer Pixi and Babylon releases, which is accepted.
15
+
16
+ ### Changed
17
+
18
+ - Updated npm dependencies; `cap:sync` verified against Capacitor 8.5.2 on Android.
19
+ - Refreshed `sbom.cdx.json` and `tools/bundle-size.json`.
20
+
21
+ ## [0.24.0] - 2026-10-02
22
+
23
+ Small neural policies and renderer-free training now share game simulation rules,
24
+ with worker batches for larger workloads. A playable maze chase AI lab demonstrates
25
+ live controller switching, and chess search keeps the interface responsive.
26
+
27
+ ### Added
28
+
29
+ - A playable maze chase example with independent player and ghost AI selectors,
30
+ random turns, chase rules, path heuristics and a small neural policy trained
31
+ without a UI on the same original simulation rules. Includes keyboard and touch
32
+ steering, live mode switching, power dots and local-file browser checks.
33
+
34
+ - `ai.NeuralPolicy`: validated, dependency-free dense-model inference with shared
35
+ weights, legal-action masks, seeded softmax sampling, existing `JavaScriptAI`
36
+ behaviour integration and cancellable worker inference batches.
37
+ - `simulation.TrainingEnvironment`, `runRollouts` and `runRolloutsAsync`: seeded,
38
+ UI-free episodes over game-owned simulation rules, distinct termination and
39
+ truncation, bounded trajectories, resumable environment snapshots and worker
40
+ batches that reuse a model throughout each episode shard.
41
+ - A generated courier example with headless evolution training, resumable trainer
42
+ checkpoints, exported browser weights, serial/parallel benchmarks and a `file://`
43
+ regression check for frame time, input latency and cancellation of stale results.
44
+ - `searchTourneyAsync` returns `rootScores` for choosing among near-best moves using
45
+ the same worker search.
46
+
47
+ ### Fixed
48
+
49
+ - Chess example fuzzy moves now search on workers, with cancellation on reset and
50
+ timeout. Clock and memory updates refresh text without rebuilding the board;
51
+ worker lanes are capped at four and timeout fallback selects a legal move without
52
+ blocking on another search.
53
+
10
54
  ## [0.23.0] - 2026-09-30
11
55
 
12
56
  MIDI humanization and groove tooling (`audio`), plus RPG Maker map details from the MWGP
@@ -2350,5 +2394,3 @@ in it is new as of the tag, only now given a version number to refer to.
2350
2394
  bounds-check), writing distances into the wrong cell once a search looked at the
2351
2395
  step's origin rather than only its destination. Steps now refuse either end off
2352
2396
  the map before any index is touched.
2353
-
2354
-
package/README.md CHANGED
@@ -420,6 +420,48 @@ Frame-based `core.Recorder`/`Player` remains available for UI replay; command sc
420
420
  not need a frame loop. Callers must bound automatic work inside each rule, for example
421
421
  with `advanceToInput`.
422
422
 
423
+ ## Neural policies and UI-free training
424
+
425
+ `ai.NeuralPolicy` runs small dense models without a runtime dependency. Policies
426
+ share weights across agents, mask illegal actions and integrate with `JavaScriptAI`.
427
+ `simulation.TrainingEnvironment` exposes seeded `reset`/`step` episodes over the same
428
+ rules a game uses during play. Training runs at simulation speed in Node, with no
429
+ canvas, DOM, audio or frame loop. `runRolloutsAsync` batches whole episodes across
430
+ workers; model files bundle into the playable `file://` output.
431
+
432
+ Try the generated courier task, whose optimizer belongs to the example:
433
+
434
+ ```sh
435
+ npm run train:neural # train without any UI, export model and checkpoint
436
+ npm run train:neural -- --resume --iterations 40
437
+ npm run benchmark:neural # serial/parallel throughput and inference overhead
438
+ npm run example:neural:build # open examples/neural/dist/index.html directly
439
+ npm run neural:browser:check # workers, input latency and reset cancellation
440
+ ```
441
+
442
+ Training checkpoints include environment state and randomness, model/schema
443
+ versions and trainer state. Use small predictions directly when they fit the frame
444
+ budget; worker startup and transfer costs pay off on larger simulation batches.
445
+
446
+ ## Maze chase AI example
447
+
448
+ `examples/pacman` is a playable Pac-Man-style game with an original maze and drawn
449
+ shapes. Switch the player between keyboard control, random turns, a path-and-risk
450
+ heuristic and a trained neural policy. Ghosts independently select random turns,
451
+ direct chase rules (`JavaScriptAI`), path heuristics (`HeuristicAI`) or `NeuralPolicy`.
452
+ Selections take effect during the current game, preserving score and lives.
453
+
454
+ Arrows or WASD steer; P and G cycle the player and ghost controllers; Space pauses;
455
+ R starts a new game. Large dots make ghosts edible. The neural model uses UI-free
456
+ imitation training from the heuristic, sharing the playable simulation rules.
457
+
458
+ ```sh
459
+ npm run example:pacman # development server
460
+ npm run example:pacman:build # open examples/pacman/dist/index.html directly
461
+ npm run train:pacman # retrain and export weights without rendering
462
+ npm run pacman:browser:check # selectors, WebGL, frame time and responsive layouts
463
+ ```
464
+
423
465
  ## Roadmap
424
466
 
425
467
  See [ROADMAP.md](https://github.com/datamoc/mwg/blob/main/ROADMAP.md) for open work and
@@ -0,0 +1,65 @@
1
+ import type { AIAction, AIBehavior, AIValue } from './index.ts';
2
+ /** Flat row-major weights: output neuron first, then input feature. */
3
+ export interface DenseLayer {
4
+ inputSize: number;
5
+ outputSize: number;
6
+ weights: readonly number[];
7
+ biases: readonly number[];
8
+ }
9
+ /** Game-owned, redistributable weights and an explicit observation-schema version. */
10
+ export interface NeuralModel {
11
+ version: 1;
12
+ observationVersion: string;
13
+ layers: readonly DenseLayer[];
14
+ }
15
+ export interface NeuralObservation {
16
+ input: readonly number[];
17
+ /** Omitted means all actions are legal; false excludes an action. */
18
+ mask?: readonly boolean[];
19
+ }
20
+ /**
21
+ * The self-contained evaluator shared by the local policy and serialized worker tasks.
22
+ * Limits apply before copying weights: at most 32 layers, 4096 neurons per layer and
23
+ * one million weights plus biases. Activations reuse buffers; returned outputs are owned
24
+ * by the caller. Hidden layers use ReLU, output scores remain linear.
25
+ */
26
+ export declare function createNeuralEvaluator(model: NeuralModel): {
27
+ predict(input: readonly number[], output?: Float64Array): Float64Array;
28
+ select(observation: NeuralObservation, random?: () => number): number | null;
29
+ };
30
+ /**
31
+ * A small shared dense policy, usable inside existing JavaScriptAI behaviours.
32
+ * Model weights are copied on construction. Supply a seeded random callback to sample
33
+ * softmax scores; omit it for the first highest-scoring legal action. All-masked is idle.
34
+ * Async batches return detached results, never mutate game state; callers must discard
35
+ * results whose scene or position changed while awaiting them.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import { NeuralPolicy, JavaScriptAI } from '@datamoc/mw_games/ai';
40
+ * const policy = new NeuralPolicy({ version: 1, observationVersion: 'v1', layers: [
41
+ * { inputSize: 1, outputSize: 2, weights: [-1, 1], biases: [0, 0] },
42
+ * ] });
43
+ * console.log(policy.selectAction({ input: [2] })); // 1
44
+ * const ai = new JavaScriptAI({ seed: 7 });
45
+ * ai.register({ id: 'npc', behaviors: [policy.behavior('neural',
46
+ * [{ type: 'left' }, { type: 'right' }], () => ({ input: [2] }))] });
47
+ * console.log(ai.decide('npc', { perception: null }).action?.type); // right
48
+ * const scores = await policy.predictBatchAsync([[2], [-2]]);
49
+ * ```
50
+ */
51
+ export declare class NeuralPolicy {
52
+ private readonly model;
53
+ private readonly evaluator;
54
+ constructor(model: NeuralModel);
55
+ predict(input: readonly number[], output?: Float64Array): Float64Array;
56
+ selectAction(observation: NeuralObservation, random?: () => number): number | null;
57
+ exportModel(): NeuralModel;
58
+ behavior(id: string, actions: readonly AIAction[], observe: (perception: AIValue) => NeuralObservation, sample?: boolean): AIBehavior;
59
+ /** One cancellable worker batch: at most 65536 observations and one million input or output values. */
60
+ predictBatchAsync(inputs: readonly (readonly number[])[], options?: {
61
+ signal?: AbortSignal;
62
+ timeout?: number;
63
+ }): Promise<Float64Array[]>;
64
+ }
65
+ //# sourceMappingURL=Neural.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Neural.d.ts","sourceRoot":"","sources":["../../src/ai/Neural.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEhE,uEAAuE;AACvE,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,qEAAqE;IACrE,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG;IAC1D,OAAO,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACvE,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7E,CA2FA;AASD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IAErE,YAAY,KAAK,EAAE,WAAW,EAG7B;IAED,OAAO,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAErE;IAED,YAAY,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjF;IAED,WAAW,IAAI,WAAW,CAEzB;IAED,QAAQ,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,OAAO,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,iBAAiB,EACnD,MAAM,UAAQ,GACZ,UAAU,CAYZ;IAED,uGAAuG;IACvG,iBAAiB,CAChB,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EACtC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACtD,OAAO,CAAC,YAAY,EAAE,CAAC,CASzB;CACD"}
@@ -0,0 +1,169 @@
1
+ import { spawn } from '../threads/index.js';
2
+ /**
3
+ * The self-contained evaluator shared by the local policy and serialized worker tasks.
4
+ * Limits apply before copying weights: at most 32 layers, 4096 neurons per layer and
5
+ * one million weights plus biases. Activations reuse buffers; returned outputs are owned
6
+ * by the caller. Hidden layers use ReLU, output scores remain linear.
7
+ */
8
+ export function createNeuralEvaluator(model) {
9
+ if (model?.version !== 1 || typeof model.observationVersion !== 'string' || !model.observationVersion.length)
10
+ throw new TypeError('unsupported neural model or observation version');
11
+ if (!Array.isArray(model.layers) || !model.layers.length || model.layers.length > 32)
12
+ throw new RangeError('a neural model needs 1..32 layers');
13
+ let parameters = 0;
14
+ for (let index = 0; index < model.layers.length; index++) {
15
+ const layer = model.layers[index];
16
+ if (!layer ||
17
+ !Number.isInteger(layer.inputSize) ||
18
+ !Number.isInteger(layer.outputSize) ||
19
+ layer.inputSize < 1 ||
20
+ layer.outputSize < 1 ||
21
+ layer.inputSize > 4096 ||
22
+ layer.outputSize > 4096)
23
+ throw new RangeError('neural layer dimensions must be integers in 1..4096');
24
+ parameters += layer.inputSize * layer.outputSize + layer.outputSize;
25
+ if (parameters > 1_000_000)
26
+ throw new RangeError('neural model exceeds one million parameters');
27
+ if (index && model.layers[index - 1].outputSize !== layer.inputSize)
28
+ throw new RangeError('neural layer dimensions do not connect');
29
+ if (!Array.isArray(layer.weights) ||
30
+ !Array.isArray(layer.biases) ||
31
+ layer.weights.length !== layer.inputSize * layer.outputSize ||
32
+ layer.biases.length !== layer.outputSize ||
33
+ !Array.from(layer.weights).every(Number.isFinite) ||
34
+ !Array.from(layer.biases).every(Number.isFinite))
35
+ throw new TypeError('neural weights and biases must be finite and match layer dimensions');
36
+ }
37
+ const layers = model.layers.map((layer) => ({
38
+ ...layer,
39
+ weights: Float64Array.from(layer.weights),
40
+ biases: Float64Array.from(layer.biases),
41
+ buffer: new Float64Array(layer.outputSize),
42
+ }));
43
+ const predict = (input, output) => {
44
+ if (input.length !== layers[0].inputSize)
45
+ throw new TypeError('neural input must be finite and match the model');
46
+ for (let i = 0; i < input.length; i++)
47
+ if (!Number.isFinite(input[i]))
48
+ throw new TypeError('neural input must be finite');
49
+ const last = layers[layers.length - 1];
50
+ if (output && output.length !== last.outputSize)
51
+ throw new RangeError('neural output buffer has the wrong size');
52
+ let current = input;
53
+ for (let index = 0; index < layers.length; index++) {
54
+ const layer = layers[index];
55
+ for (let row = 0; row < layer.outputSize; row++) {
56
+ let sum = layer.biases[row];
57
+ for (let col = 0; col < layer.inputSize; col++)
58
+ sum += layer.weights[row * layer.inputSize + col] * current[col];
59
+ if (!Number.isFinite(sum))
60
+ throw new RangeError('neural activation overflow');
61
+ layer.buffer[row] = index === layers.length - 1 ? sum : Math.max(0, sum);
62
+ }
63
+ current = layer.buffer;
64
+ }
65
+ const result = output ?? new Float64Array(last.outputSize);
66
+ result.set(last.buffer);
67
+ return result;
68
+ };
69
+ const scores = new Float64Array(layers[layers.length - 1].outputSize);
70
+ return {
71
+ predict,
72
+ select(observation, random) {
73
+ const mask = observation.mask;
74
+ if (mask &&
75
+ (mask.length !== scores.length || !Array.from(mask).every((entry) => typeof entry === 'boolean')))
76
+ throw new TypeError('neural action mask must contain one boolean per output');
77
+ predict(observation.input, scores);
78
+ let best = null;
79
+ for (let i = 0; i < scores.length; i++)
80
+ if ((!mask || mask[i]) && (best === null || scores[i] > scores[best]))
81
+ best = i;
82
+ if (best === null || !random)
83
+ return best;
84
+ const draw = random();
85
+ if (!Number.isFinite(draw) || draw < 0 || draw >= 1)
86
+ throw new RangeError('sampling random must return a value in [0, 1)');
87
+ let total = 0;
88
+ for (let i = 0; i < scores.length; i++)
89
+ if (!mask || mask[i])
90
+ total += Math.exp(scores[i] - scores[best]);
91
+ let remaining = draw * total;
92
+ for (let i = 0; i < scores.length; i++) {
93
+ if (mask && !mask[i])
94
+ continue;
95
+ remaining -= Math.exp(scores[i] - scores[best]);
96
+ if (remaining < 0)
97
+ return i;
98
+ }
99
+ return best;
100
+ },
101
+ };
102
+ }
103
+ //One batch per worker, never a worker per agent. The evaluator source has no imports.
104
+ function inferenceBatch(source, model, inputs) {
105
+ const create = new Function(`return (${source});`)();
106
+ const evaluator = create(model);
107
+ return inputs.map((input) => evaluator.predict(input));
108
+ }
109
+ /**
110
+ * A small shared dense policy, usable inside existing JavaScriptAI behaviours.
111
+ * Model weights are copied on construction. Supply a seeded random callback to sample
112
+ * softmax scores; omit it for the first highest-scoring legal action. All-masked is idle.
113
+ * Async batches return detached results, never mutate game state; callers must discard
114
+ * results whose scene or position changed while awaiting them.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * import { NeuralPolicy, JavaScriptAI } from '@datamoc/mw_games/ai';
119
+ * const policy = new NeuralPolicy({ version: 1, observationVersion: 'v1', layers: [
120
+ * { inputSize: 1, outputSize: 2, weights: [-1, 1], biases: [0, 0] },
121
+ * ] });
122
+ * console.log(policy.selectAction({ input: [2] })); // 1
123
+ * const ai = new JavaScriptAI({ seed: 7 });
124
+ * ai.register({ id: 'npc', behaviors: [policy.behavior('neural',
125
+ * [{ type: 'left' }, { type: 'right' }], () => ({ input: [2] }))] });
126
+ * console.log(ai.decide('npc', { perception: null }).action?.type); // right
127
+ * const scores = await policy.predictBatchAsync([[2], [-2]]);
128
+ * ```
129
+ */
130
+ export class NeuralPolicy {
131
+ constructor(model) {
132
+ this.evaluator = createNeuralEvaluator(model);
133
+ this.model = structuredClone(model);
134
+ }
135
+ predict(input, output) {
136
+ return this.evaluator.predict(input, output);
137
+ }
138
+ selectAction(observation, random) {
139
+ return this.evaluator.select(observation, random);
140
+ }
141
+ exportModel() {
142
+ return structuredClone(this.model);
143
+ }
144
+ behavior(id, actions, observe, sample = false) {
145
+ if (actions.length !== this.model.layers[this.model.layers.length - 1].outputSize)
146
+ throw new RangeError('neural action mapping must match output size');
147
+ const mapping = structuredClone(actions);
148
+ return {
149
+ id,
150
+ decide: (context) => {
151
+ context.checkpoint();
152
+ const action = this.selectAction(observe(context.perception), sample ? context.random : undefined);
153
+ return action === null ? null : structuredClone(mapping[action]);
154
+ },
155
+ };
156
+ }
157
+ /** One cancellable worker batch: at most 65536 observations and one million input or output values. */
158
+ predictBatchAsync(inputs, options = {}) {
159
+ const inputSize = this.model.layers[0].inputSize;
160
+ const outputSize = this.model.layers[this.model.layers.length - 1].outputSize;
161
+ if (inputs.length > 65536 || inputs.length * Math.max(inputSize, outputSize) > 1_000_000)
162
+ return Promise.reject(new RangeError('neural batch exceeds its observation or value limit'));
163
+ for (const input of inputs)
164
+ if (!input || input.length !== inputSize)
165
+ return Promise.reject(new TypeError('neural batch inputs must match the model'));
166
+ return spawn(inferenceBatch, [createNeuralEvaluator.toString(), this.model, inputs], options);
167
+ }
168
+ }
169
+ //# sourceMappingURL=Neural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Neural.js","sourceRoot":"","sources":["../../src/ai/Neural.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { AlphaBetaGame, AlphaBetaOptions, AlphaBetaResult } from './search.ts';
2
+ export { NeuralPolicy } from './Neural.ts';
3
+ export type { DenseLayer, NeuralModel, NeuralObservation } from './Neural.ts';
2
4
  export { alphaBetaSearch, firstWins, rootSplits } from './search.ts';
3
5
  export type { AlphaBetaGame, AlphaBetaOptions, AlphaBetaResult, LuaAlphaBetaFunctions, LuaSearchValueAdapter, RootSplit, } from './search.ts';
4
6
  export { personalScoreView, scoreWith, sideScoreView, subjectsWhere } from './score.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
package/dist/ai/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { alphaBetaSearch } from './search.js';
2
+ export { NeuralPolicy } from './Neural.js';
2
3
  export { alphaBetaSearch, firstWins, rootSplits } from './search.js';
3
4
  export { personalScoreView, scoreWith, sideScoreView, subjectsWhere } from './score.js';
4
5
  export { Aspects, Difficulty, Goals, HeuristicAI, RecruitmentPattern, defaultWeigh, goalScore, keepAwayScore, } from './Heuristics.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,11 @@ export interface TourneyResult {
23
23
  nodes: number;
24
24
  /** the deepest fully completed iteration */
25
25
  depth: number;
26
+ /** async search only: every legal root move and its score from the side to move's view, in root order */
27
+ rootScores?: Array<{
28
+ move: BitboardMove;
29
+ score: number;
30
+ }>;
26
31
  }
27
32
  /**
28
33
  * The tournament engine's serializable task: a full iterative-deepening search over a
@@ -75,7 +80,9 @@ export declare function searchTourney(state: ChessState | BitboardState, options
75
80
  * is a self-contained `tourneyThink` task over a structured-cloned bitboard, scored
76
81
  * concurrently down a capped lane queue; the best child score from the opponent's
77
82
  * view is the worst for us, so the root plays the move whose child scored lowest,
78
- * with ties going to the earlier root move. An aborting signal rejects through
83
+ * with ties going to the earlier root move. `rootScores` exposes every candidate so
84
+ * games can choose near-best moves without repeating the search on the UI thread.
85
+ * An aborting signal rejects through
79
86
  * `threads.spawn` and terminates the workers.
80
87
  *
81
88
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"tourney.d.ts","sourceRoot":"","sources":["../../src/board/tourney.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,cAAc;IAC9B,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,sDAAsD;IACtD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,6FAA6F;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACxF,aAAa,CAo0Bf;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAO5G;AAuBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,UAAU,GAAG,aAAa,EACjC,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
1
+ {"version":3,"file":"tourney.d.ts","sourceRoot":"","sources":["../../src/board/tourney.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,cAAc;IAC9B,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,sDAAsD;IACtD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,6FAA6F;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACxF,aAAa,CAo0Bf;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAO5G;AAuBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,UAAU,GAAG,aAAa,EACjC,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAmDxB"}
@@ -952,7 +952,9 @@ function defaultTourneyJobs() {
952
952
  * is a self-contained `tourneyThink` task over a structured-cloned bitboard, scored
953
953
  * concurrently down a capped lane queue; the best child score from the opponent's
954
954
  * view is the worst for us, so the root plays the move whose child scored lowest,
955
- * with ties going to the earlier root move. An aborting signal rejects through
955
+ * with ties going to the earlier root move. `rootScores` exposes every candidate so
956
+ * games can choose near-best moves without repeating the search on the UI thread.
957
+ * An aborting signal rejects through
956
958
  * `threads.spawn` and terminates the workers.
957
959
  *
958
960
  * @example
@@ -974,7 +976,7 @@ export async function searchTourneyAsync(state, options = {}) {
974
976
  const root = toBitboard(state);
975
977
  const moves = bitboardMoves(root);
976
978
  if (!moves.length)
977
- return tourneyThink(root, { depth, maxNodes });
979
+ return { ...tourneyThink(root, { depth, maxNodes }), rootScores: [] };
978
980
  //one chain per lane over the shared move queue, the tools/compress-dist.mjs shape:
979
981
  //scores land by index, so ties break in root order no matter who finishes first
980
982
  const lanes = Math.max(1, Math.min(jobs, moves.length));
@@ -1008,6 +1010,10 @@ export async function searchTourneyAsync(state, options = {}) {
1008
1010
  score: scores[bestIndex] ?? 0,
1009
1011
  nodes,
1010
1012
  depth,
1013
+ rootScores: moves.map((move, index) => ({
1014
+ move: { from: move.from, to: move.to, ...(move.promotion ? { promotion: move.promotion } : {}) },
1015
+ score: scores[index] ?? 0,
1016
+ })),
1011
1017
  };
1012
1018
  }
1013
1019
  //# sourceMappingURL=tourney.js.map