getcompetitive 4.3.0 → 4.5.0
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/README.md +10 -4
- package/dist/meta-history.data.js +389 -0
- package/dist/meta-history.data.js.map +1 -0
- package/dist/server.js +6 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/doctor.js +5 -1
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/infer.js +269 -0
- package/dist/tools/infer.js.map +1 -0
- package/dist/tools/meta.js +78 -0
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/optimize.js +168 -0
- package/dist/tools/optimize.js.map +1 -0
- package/dist/tools/replay.js +221 -0
- package/dist/tools/replay.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set inference: reverse constraint solving. The player reports what they saw —
|
|
3
|
+
* who moved first, a damage percentage, what survived — and this tool narrows
|
|
4
|
+
* the space of sets the opponent's Pokémon could be running, ranked by how far
|
|
5
|
+
* each surviving candidate is from what the meta actually plays. The primitives
|
|
6
|
+
* are the same ones the forward tools use (exact level-50 Speed math and real
|
|
7
|
+
* damage rolls), run backwards. Every elimination is shown, so the narrowing is
|
|
8
|
+
* auditable rather than a black box, and everything a battle observation cannot
|
|
9
|
+
* prove is stated in the note.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { getDex, finalStat, damageResult } from '../dex.js';
|
|
13
|
+
import { getRegulationSet } from '../regulations.js';
|
|
14
|
+
import { findThreat } from '../threats.js';
|
|
15
|
+
import { ok, wrap, requireExists, READ_ONLY_ANNOTATIONS } from '../result.js';
|
|
16
|
+
/** The plausible item pool for an uncurated species, plus Choice Scarf. */
|
|
17
|
+
const ITEM_POOL = ['Choice Scarf', 'Choice Band', 'Choice Specs', 'Life Orb', 'Focus Sash', 'Assault Vest', 'Sitrus Berry'];
|
|
18
|
+
const SPEED_NATURES = ['Jolly', 'Timid'];
|
|
19
|
+
function spreadBy(primary, secondary) {
|
|
20
|
+
const evs = {};
|
|
21
|
+
evs[primary] = 252;
|
|
22
|
+
evs[secondary] = 252;
|
|
23
|
+
evs['hp'] = 4;
|
|
24
|
+
return evs;
|
|
25
|
+
}
|
|
26
|
+
/** Candidate sets for one species: the meta set plus the variations a scout can distinguish. */
|
|
27
|
+
function candidatesFor(dex, speciesName, curated) {
|
|
28
|
+
const sp = dex.species.get(speciesName);
|
|
29
|
+
requireExists(sp, 'Pokemon species', speciesName);
|
|
30
|
+
const base = sp.baseStats;
|
|
31
|
+
const offensiveStat = base.atk >= base.spa ? 'atk' : 'spa';
|
|
32
|
+
const speedNature = base.atk >= base.spa ? 'Jolly' : 'Timid';
|
|
33
|
+
const powerNature = base.atk >= base.spa ? 'Adamant' : 'Modest';
|
|
34
|
+
const mega = speciesName.toLowerCase().includes('mega');
|
|
35
|
+
const threat = curated?.threat;
|
|
36
|
+
const natures = [...new Set([...(threat?.nature ? [threat.nature] : []), speedNature, powerNature])];
|
|
37
|
+
const items = mega
|
|
38
|
+
? [...new Set([...(threat?.item ? [threat.item] : []), 'Life Orb', 'Sitrus Berry'])]
|
|
39
|
+
: [...new Set([...(threat?.item ? [threat.item] : []), ...ITEM_POOL])];
|
|
40
|
+
const spreads = [...new Set([
|
|
41
|
+
JSON.stringify(threat?.evs ?? spreadBy(offensiveStat, 'spe')),
|
|
42
|
+
JSON.stringify(spreadBy(offensiveStat, 'spe')),
|
|
43
|
+
JSON.stringify(spreadBy('hp', offensiveStat)),
|
|
44
|
+
JSON.stringify(spreadBy('hp', 'def')),
|
|
45
|
+
])].map((s) => JSON.parse(s));
|
|
46
|
+
const ability = threat?.ability ?? (sp.abilities?.[0] ?? '');
|
|
47
|
+
const out = [];
|
|
48
|
+
for (const nature of natures) {
|
|
49
|
+
for (const item of items) {
|
|
50
|
+
for (const evs of spreads) {
|
|
51
|
+
const baseSpeed = finalStat(9, 'spe', base.spe, 31, evs.spe ?? 0, 50, nature);
|
|
52
|
+
const speed = item === 'Choice Scarf' ? Math.floor(baseSpeed * 1.5) : baseSpeed;
|
|
53
|
+
// Prior: distance from the set the meta actually plays.
|
|
54
|
+
const weight = (nature === threat?.nature ? 1 : SPEED_NATURES.includes(nature) ? 0.7 : 0.5) *
|
|
55
|
+
(item === threat?.item ? 1 : item === 'Choice Scarf' ? 0.6 : 0.5) *
|
|
56
|
+
(JSON.stringify(evs) === JSON.stringify(threat?.evs ?? {}) ? 1 : 0.6);
|
|
57
|
+
out.push({ item: item || undefined, ability, nature, evs, speed, weight });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
const otherSetSchema = z.object({
|
|
64
|
+
species: z.string().describe('Species name, e.g. "Rillaboom".'),
|
|
65
|
+
level: z.number().int().optional().describe('Level; defaults to 50.'),
|
|
66
|
+
nature: z.string().optional().describe('Nature; defaults to neutral.'),
|
|
67
|
+
evs: z.record(z.string(), z.number()).optional().describe('EVs keyed by stat id.'),
|
|
68
|
+
championsPoints: z.record(z.string(), z.number()).optional().describe('Champions stat points, an alternative to evs.'),
|
|
69
|
+
item: z.string().optional().describe('Held item.'),
|
|
70
|
+
ability: z.string().optional().describe('Ability.'),
|
|
71
|
+
});
|
|
72
|
+
const observationSchema = z.union([
|
|
73
|
+
z.object({
|
|
74
|
+
kind: z.literal('speed'),
|
|
75
|
+
referenceSpeed: z.number().int().describe('The Speed of the member it raced against, e.g. your Salamence at 188.'),
|
|
76
|
+
relation: z
|
|
77
|
+
.enum(['outsped', 'outspeeds'])
|
|
78
|
+
.describe('"outsped" means the observed Pokémon moved first (its Speed is higher); "outspeeds" means your member moved first (its Speed is lower).'),
|
|
79
|
+
}),
|
|
80
|
+
z.object({
|
|
81
|
+
kind: z.literal('damageDealt'),
|
|
82
|
+
move: z.string().describe('The move the observed Pokémon used.'),
|
|
83
|
+
target: otherSetSchema.describe('The member it hit — your member, with its known set.'),
|
|
84
|
+
percent: z.number().describe('Damage shown as a percentage of the target\u2019s HP, e.g. 71 for "71/100".'),
|
|
85
|
+
}),
|
|
86
|
+
z.object({
|
|
87
|
+
kind: z.literal('damageTaken'),
|
|
88
|
+
move: z.string().describe('The move that hit the observed Pokémon.'),
|
|
89
|
+
attacker: otherSetSchema.describe('The attacker — your member, with its known set.'),
|
|
90
|
+
percentTaken: z.number().describe('Damage the observed Pokémon took, as a percentage of its own HP, e.g. 88 when it survived with 12%.'),
|
|
91
|
+
}),
|
|
92
|
+
z.object({
|
|
93
|
+
kind: z.literal('ability'),
|
|
94
|
+
ability: z.string().describe('An ability the observed Pokémon is known to have.'),
|
|
95
|
+
}),
|
|
96
|
+
z.object({
|
|
97
|
+
kind: z.literal('item'),
|
|
98
|
+
item: z.string().describe('An item the observed Pokémon is known to hold.'),
|
|
99
|
+
}),
|
|
100
|
+
]);
|
|
101
|
+
export function registerInferTool(server) {
|
|
102
|
+
server.registerTool('infer_set', {
|
|
103
|
+
title: 'Infer an opponent\u2019s set',
|
|
104
|
+
description: 'Reverse constraint solving for a battle observation: the player reports what they saw — who moved first, how hard a hit landed, what survived — and this tool narrows which set the opponent\u2019s Pok\u00e9mon could be running, ranked by how far each survivor is from the set the meta actually plays. The engine is the same math the forward tools use, run backwards: exact level-50 Speed (Choice Scarf included) and real damage rolls against the spread each candidate implies. Every observation is applied in order and the elimination count is reported, so the narrowing is auditable; `candidates` carries the surviving sets with a probability share. Roll variance means a damage observation keeps every candidate whose roll range contains the observed percentage, and the note lists what a battle observation cannot prove. For a ranked species the meta set anchors the prior; an unranked species gets a flat plausible pool. Read-only and offline.',
|
|
105
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
106
|
+
inputSchema: {
|
|
107
|
+
species: z
|
|
108
|
+
.string()
|
|
109
|
+
.describe('The opponent\u2019s species as observed, e.g. "Sneasler", "Salamence-Mega"; resolves case- and punctuation-insensitively.'),
|
|
110
|
+
observations: z
|
|
111
|
+
.array(observationSchema)
|
|
112
|
+
.min(1)
|
|
113
|
+
.max(8)
|
|
114
|
+
.describe('What the player saw, applied in order; later observations narrow earlier results.'),
|
|
115
|
+
regulation: z
|
|
116
|
+
.string()
|
|
117
|
+
.optional()
|
|
118
|
+
.describe('Regulation id, e.g. "m-c"; scopes which curated meta set anchors the prior.'),
|
|
119
|
+
},
|
|
120
|
+
outputSchema: {
|
|
121
|
+
species: z.string().describe('The species as resolved.'),
|
|
122
|
+
regulation: z.string().optional().describe('The regulation used for the meta prior, when one matched.'),
|
|
123
|
+
priorSets: z.number().int().describe('Candidate sets considered before any observation.'),
|
|
124
|
+
survivingSets: z
|
|
125
|
+
.number()
|
|
126
|
+
.int()
|
|
127
|
+
.describe('Candidates still possible after the last observation; `candidates` lists at most the top 8, so a count above 8 means the probabilities shown cover part of the mass, not all of it.'),
|
|
128
|
+
constraints: z
|
|
129
|
+
.array(z.object({
|
|
130
|
+
observation: z.string().describe('The observation, restated.'),
|
|
131
|
+
before: z.number().int().describe('Candidates still possible before it.'),
|
|
132
|
+
after: z.number().int().describe('Candidates still possible after it.'),
|
|
133
|
+
eliminated: z.number().int().describe('How many it ruled out.'),
|
|
134
|
+
}))
|
|
135
|
+
.describe('One entry per observation, in the order they were applied — the narrowing, shown.'),
|
|
136
|
+
candidates: z
|
|
137
|
+
.array(z.object({
|
|
138
|
+
item: z.string().optional().describe('Held item; absent when none is implied.'),
|
|
139
|
+
ability: z.string().describe('Ability.'),
|
|
140
|
+
nature: z.string().describe('Nature.'),
|
|
141
|
+
evs: z.record(z.string(), z.number()).describe('The spread, keyed by stat id.'),
|
|
142
|
+
speed: z.number().int().describe('Level-50 Speed with that spread, Scarf included.'),
|
|
143
|
+
probability: z.number().describe('Share of surviving prior mass, in percent; the engine\u2019s confidence in this candidate.'),
|
|
144
|
+
}))
|
|
145
|
+
.describe('The surviving sets, most likely first, at most 8.'),
|
|
146
|
+
note: z.string().describe('What the engine assumed and what observations cannot prove: neutral abilities when unknown, no stat stages, roll variance, and that damage percentages are rounded by the client.'),
|
|
147
|
+
},
|
|
148
|
+
}, wrap(async (args) => {
|
|
149
|
+
const dex = getDex(9);
|
|
150
|
+
const set = args.regulation ? getRegulationSet(args.regulation) : undefined;
|
|
151
|
+
const curated = findThreat(args.species, set?.id);
|
|
152
|
+
const sp = dex.species.get(args.species);
|
|
153
|
+
requireExists(sp, 'Pokemon species', args.species);
|
|
154
|
+
const priorPool = candidatesFor(dex, sp.name, curated);
|
|
155
|
+
let candidates = priorPool;
|
|
156
|
+
const constraints = [];
|
|
157
|
+
for (const obs of args.observations) {
|
|
158
|
+
const before = candidates.length;
|
|
159
|
+
const keep = [];
|
|
160
|
+
if (obs.kind === 'speed') {
|
|
161
|
+
for (const c of candidates) {
|
|
162
|
+
const faster = obs.relation === 'outsped' ? c.speed > obs.referenceSpeed : c.speed < obs.referenceSpeed;
|
|
163
|
+
if (faster)
|
|
164
|
+
keep.push(c);
|
|
165
|
+
}
|
|
166
|
+
constraints.push({
|
|
167
|
+
observation: `${obs.relation === 'outsped' ? 'outsped' : 'was outsped by'} a member at ${obs.referenceSpeed} Speed`,
|
|
168
|
+
before, after: keep.length, eliminated: before - keep.length,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else if (obs.kind === 'ability') {
|
|
172
|
+
for (const c of candidates) {
|
|
173
|
+
if (c.ability.toLowerCase() === obs.ability.toLowerCase())
|
|
174
|
+
keep.push(c);
|
|
175
|
+
}
|
|
176
|
+
constraints.push({ observation: `has ${obs.ability}`, before, after: keep.length, eliminated: before - keep.length });
|
|
177
|
+
}
|
|
178
|
+
else if (obs.kind === 'item') {
|
|
179
|
+
for (const c of candidates) {
|
|
180
|
+
if (c.item?.toLowerCase() === obs.item.toLowerCase())
|
|
181
|
+
keep.push(c);
|
|
182
|
+
}
|
|
183
|
+
constraints.push({ observation: `holds ${obs.item}`, before, after: keep.length, eliminated: before - keep.length });
|
|
184
|
+
}
|
|
185
|
+
else if (obs.kind === 'damageDealt') {
|
|
186
|
+
const targetSet = { ...obs.target, level: obs.target.level ?? 50 };
|
|
187
|
+
for (const c of candidates) {
|
|
188
|
+
let consistent = false;
|
|
189
|
+
try {
|
|
190
|
+
const res = damageResult(9, {
|
|
191
|
+
species: sp.name,
|
|
192
|
+
level: 50,
|
|
193
|
+
nature: c.nature,
|
|
194
|
+
evs: c.evs,
|
|
195
|
+
item: c.item,
|
|
196
|
+
ability: c.ability,
|
|
197
|
+
moves: [obs.move],
|
|
198
|
+
}, targetSet, obs.move);
|
|
199
|
+
const targetHp = res.defender.stats.hp;
|
|
200
|
+
const observedHp = (obs.percent / 100) * targetHp;
|
|
201
|
+
consistent = res.damageRange[0] <= observedHp && observedHp <= res.damageRange[1];
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
consistent = false;
|
|
205
|
+
}
|
|
206
|
+
if (consistent)
|
|
207
|
+
keep.push(c);
|
|
208
|
+
}
|
|
209
|
+
constraints.push({
|
|
210
|
+
observation: `${obs.move} did ${obs.percent}% to ${obs.target.species}`,
|
|
211
|
+
before, after: keep.length, eliminated: before - keep.length,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
const attackerSet = { ...obs.attacker, level: obs.attacker.level ?? 50 };
|
|
216
|
+
for (const c of candidates) {
|
|
217
|
+
let consistent = false;
|
|
218
|
+
try {
|
|
219
|
+
const res = damageResult(9, attackerSet, {
|
|
220
|
+
species: sp.name,
|
|
221
|
+
level: 50,
|
|
222
|
+
nature: c.nature,
|
|
223
|
+
evs: c.evs,
|
|
224
|
+
item: c.item,
|
|
225
|
+
ability: c.ability,
|
|
226
|
+
}, obs.move);
|
|
227
|
+
const targetHp = res.defender.stats.hp;
|
|
228
|
+
const observedHp = (obs.percentTaken / 100) * targetHp;
|
|
229
|
+
consistent = res.damageRange[0] <= observedHp && observedHp <= res.damageRange[1];
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
consistent = false;
|
|
233
|
+
}
|
|
234
|
+
if (consistent)
|
|
235
|
+
keep.push(c);
|
|
236
|
+
}
|
|
237
|
+
constraints.push({
|
|
238
|
+
observation: `took ${obs.percentTaken}% from ${obs.attacker.species}'s ${obs.move}`,
|
|
239
|
+
before, after: keep.length, eliminated: before - keep.length,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
candidates = keep;
|
|
243
|
+
if (!candidates.length)
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
const total = candidates.reduce((a, c) => a + c.weight, 0);
|
|
247
|
+
const ranked = [...candidates]
|
|
248
|
+
.sort((a, b) => b.weight - a.weight)
|
|
249
|
+
.slice(0, 8)
|
|
250
|
+
.map((c) => ({
|
|
251
|
+
...(c.item ? { item: c.item } : {}),
|
|
252
|
+
ability: c.ability,
|
|
253
|
+
nature: c.nature,
|
|
254
|
+
evs: c.evs,
|
|
255
|
+
speed: c.speed,
|
|
256
|
+
probability: Number(((c.weight / total) * 100).toFixed(1)),
|
|
257
|
+
}));
|
|
258
|
+
return ok({
|
|
259
|
+
species: sp.name,
|
|
260
|
+
...(set ? { regulation: set.name } : {}),
|
|
261
|
+
priorSets: priorPool.length,
|
|
262
|
+
survivingSets: candidates.length,
|
|
263
|
+
constraints,
|
|
264
|
+
candidates: ranked,
|
|
265
|
+
note: 'The engine assumes neutral abilities when unknown, no stat stages on either side, and that damage percentages are rounded by the client — a range that contains the observed value survives, which is why a single roll rarely pins one set. Speed observations are strict inequalities. For an unranked species the prior is a flat pool of plausible natures, items and spreads, so probabilities are relative within that pool, not metagame odds. At most the top 8 survivors are listed; `survivingSets` tells you when more were cut off.',
|
|
266
|
+
});
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=infer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/tools/infer.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/meta.js
CHANGED
|
@@ -5,6 +5,7 @@ import { z } from 'zod';
|
|
|
5
5
|
import { THREAT_LISTS, getThreatList, findThreat } from '../threats.js';
|
|
6
6
|
import { STATS, evsToChampionsPoints } from '../dex.js';
|
|
7
7
|
import { ok, wrap, READ_ONLY_ANNOTATIONS } from '../result.js';
|
|
8
|
+
import rawHistory from '../meta-history.data.js';
|
|
8
9
|
/** Showdown's stat labels, used when writing a paste. */
|
|
9
10
|
const STAT_LABEL = { hp: 'HP', atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe' };
|
|
10
11
|
/**
|
|
@@ -263,5 +264,82 @@ export function registerMetaTools(server) {
|
|
|
263
264
|
return ok({ sets: args.species.map(lookup) });
|
|
264
265
|
return ok(lookup(args.species));
|
|
265
266
|
}));
|
|
267
|
+
const META_HISTORY = rawHistory;
|
|
268
|
+
server.registerTool('compare_meta', {
|
|
269
|
+
title: 'Compare meta windows',
|
|
270
|
+
description: 'Report how the meta is moving: per-species usage in the last 7 days against the 7 before it, measured from the same tournament source as `list_threats`, plus the species pairs gaining the most ground ("emerging cores"). `rising` and `falling` carry each species\u2019 previous and current usage share and its delta; `emergingCores` does the same for the most common two-species pairings, so co-occurrence is measured, not asserted. The comparison is a committed build-time aggregation (scripts/build-meta-history.mjs) — the server stays a pure offline read, and the windows are rolling: regenerate to slide them forward. Use it to answer "what is becoming popular?", where `list_threats` answers "what is popular?"; pair it with `get_set` on the risers to see what they run. Read-only and offline.',
|
|
271
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
272
|
+
inputSchema: {
|
|
273
|
+
regulation: z
|
|
274
|
+
.string()
|
|
275
|
+
.optional()
|
|
276
|
+
.describe('Regulation id, e.g. "m-c" (case- and punctuation-insensitive); omitted, the single regulation with history is used.'),
|
|
277
|
+
},
|
|
278
|
+
outputSchema: {
|
|
279
|
+
regulation: z.string().describe('Display name of the regulation the comparison covers.'),
|
|
280
|
+
sourceAsOf: z.string().describe('ISO date the comparison was built.'),
|
|
281
|
+
windows: z
|
|
282
|
+
.object({
|
|
283
|
+
current: z.object({
|
|
284
|
+
start: z.string().describe('First day of the current 7-day window, ISO 8601.'),
|
|
285
|
+
end: z.string().describe('Last day of the current window, ISO 8601.'),
|
|
286
|
+
teams: z.number().describe('Team lists counted in the current window.'),
|
|
287
|
+
}),
|
|
288
|
+
previous: z.object({
|
|
289
|
+
start: z.string().describe('First day of the previous 7-day window, ISO 8601.'),
|
|
290
|
+
end: z.string().describe('Last day of the previous window, ISO 8601.'),
|
|
291
|
+
teams: z.number().describe('Team lists counted in the previous window.'),
|
|
292
|
+
}),
|
|
293
|
+
})
|
|
294
|
+
.describe('The two windows being compared.'),
|
|
295
|
+
rising: z
|
|
296
|
+
.array(z.object({
|
|
297
|
+
species: z.string().describe('Base species name.'),
|
|
298
|
+
previous: z.number().describe('Usage share in the previous window, in percent.'),
|
|
299
|
+
current: z.number().describe('Usage share in the current window, in percent.'),
|
|
300
|
+
delta: z.number().describe('`current` minus `previous`, in percentage points.'),
|
|
301
|
+
}))
|
|
302
|
+
.describe('The biggest gainers, largest delta first.'),
|
|
303
|
+
falling: z
|
|
304
|
+
.array(z.object({
|
|
305
|
+
species: z.string().describe('Base species name.'),
|
|
306
|
+
previous: z.number().describe('Usage share in the previous window, in percent.'),
|
|
307
|
+
current: z.number().describe('Usage share in the current window, in percent.'),
|
|
308
|
+
delta: z.number().describe('`current` minus `previous`, in percentage points.'),
|
|
309
|
+
}))
|
|
310
|
+
.describe('The biggest losers, most negative delta first.'),
|
|
311
|
+
emergingCores: z
|
|
312
|
+
.array(z.object({
|
|
313
|
+
core: z.array(z.string()).describe('The two base species, sorted alphabetically.'),
|
|
314
|
+
previous: z.number().describe('Share of previous-window teams carrying both, in percent.'),
|
|
315
|
+
current: z.number().describe('Share of current-window teams carrying both, in percent.'),
|
|
316
|
+
delta: z.number().describe('`current` minus `previous`, in percentage points.'),
|
|
317
|
+
}))
|
|
318
|
+
.describe('The species pairs gaining the most co-occurrence, largest delta first.'),
|
|
319
|
+
note: z.string().describe('How the numbers were computed: team counts, tournament source, and that the windows are rolling.'),
|
|
320
|
+
},
|
|
321
|
+
}, wrap(async (args) => {
|
|
322
|
+
const q = (args.regulation ?? 'm-c').toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
323
|
+
const entry = Object.values(META_HISTORY).find((h) => h.regulation.toLowerCase().replace(/[^a-z0-9]/g, '') === q);
|
|
324
|
+
if (!entry) {
|
|
325
|
+
throw new Error(`No usage history for "${args.regulation ?? 'm-c'}". Available: ${Object.values(META_HISTORY).map((h) => `${h.name} (${h.regulation})`).join(', ')}.`);
|
|
326
|
+
}
|
|
327
|
+
const deltaOf = (e) => Number((e.current - e.previous).toFixed(1));
|
|
328
|
+
const row = (e) => ({ species: e.species, previous: e.previous, current: e.current, delta: deltaOf(e) });
|
|
329
|
+
const coreRow = (e) => ({ core: e.core, previous: e.previous, current: e.current, delta: deltaOf(e) });
|
|
330
|
+
return ok({
|
|
331
|
+
regulation: entry.name,
|
|
332
|
+
sourceAsOf: entry.sourceAsOf,
|
|
333
|
+
windows: entry.windows,
|
|
334
|
+
rising: entry.species.filter((s) => deltaOf(s) > 0).slice(0, 12).map(row),
|
|
335
|
+
falling: entry.species
|
|
336
|
+
.filter((s) => deltaOf(s) < 0)
|
|
337
|
+
.sort((a, b) => deltaOf(a) - deltaOf(b))
|
|
338
|
+
.slice(0, 12)
|
|
339
|
+
.map(row),
|
|
340
|
+
emergingCores: entry.cores.filter((c) => deltaOf(c) > 0).slice(0, 8).map(coreRow),
|
|
341
|
+
note: entry.note,
|
|
342
|
+
});
|
|
343
|
+
}));
|
|
266
344
|
}
|
|
267
345
|
//# sourceMappingURL=meta.js.map
|
package/dist/tools/meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constraint-based team completion: "these slots are open, and these are the
|
|
3
|
+
* things the finished team must answer." The engine scores every legal species
|
|
4
|
+
* (and, for two open slots, every pair) against the constraints — the types
|
|
5
|
+
* nothing on the current team hits super-effectively, plus the threats named or
|
|
6
|
+
* the meta's own top threats — and reports the strongest fills with the reasons
|
|
7
|
+
* for each. Typing is the only honest currency for unranked species (their
|
|
8
|
+
* movesets are unknown), so every reason states exactly what it covers or
|
|
9
|
+
* resists; usage adds a preference, never a claim about the set.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { getDex, typeEffectiveness, TYPES18 } from '../dex.js';
|
|
13
|
+
import { REGULATION_SETS, getRegulationSet, setStatus } from '../regulations.js';
|
|
14
|
+
import { getThreatList, findThreat } from '../threats.js';
|
|
15
|
+
import { ok, wrap, READ_ONLY_ANNOTATIONS } from '../result.js';
|
|
16
|
+
import { parsedSetSchema, resolveMembers } from './team.js';
|
|
17
|
+
export function registerOptimizeTeamTool(server) {
|
|
18
|
+
server.registerTool('optimize_team', {
|
|
19
|
+
title: 'Optimize team slots',
|
|
20
|
+
description: 'Fill open team slots against constraints: "cover these types" and "answer these threats." The engine scores every legal species in the regulation against the constraint set — the types the current team never hits super-effectively (computed automatically, or supplied), and the threats named or defaulted to the meta\u2019s top five by usage — by what its typing covers, resists and hits, with a small preference for species the meta actually plays. With two open slots it scores pairs on their combined coverage, not just the sum. Every recommendation carries the reasons, so the tradeoff is visible; unranked species are scored on typing alone because their movesets are unknown. The fills respect Species Clause and stay inside the roster, so the result passes `check_legality` — verify with it once the team is assembled. Read-only and offline.',
|
|
21
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
22
|
+
inputSchema: {
|
|
23
|
+
team: z
|
|
24
|
+
.array(parsedSetSchema)
|
|
25
|
+
.min(1)
|
|
26
|
+
.max(5)
|
|
27
|
+
.describe('The team so far, in the canonical shape `parse_team` returns; the open slots are what this tool fills.'),
|
|
28
|
+
slots: z
|
|
29
|
+
.union([z.literal(1), z.literal(2)])
|
|
30
|
+
.describe('How many members to recommend: one species, or a pair whose combined coverage is scored together.'),
|
|
31
|
+
regulation: z
|
|
32
|
+
.string()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('Regulation id, e.g. "m-c"; omitted, the current set is used and its roster bounds the candidates.'),
|
|
35
|
+
coverTypes: z
|
|
36
|
+
.array(z.string())
|
|
37
|
+
.optional()
|
|
38
|
+
.describe('Types the finished team must hit super-effectively, e.g. ["Water", "Steel"]; omitted, the engine computes the types the current team cannot hit at all.'),
|
|
39
|
+
answerThreats: z
|
|
40
|
+
.array(z.string())
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Species the finished team must answer, e.g. ["Sneasler", "Gholdengo"]; omitted, the regulation\u2019s five most-used threats are used.'),
|
|
43
|
+
},
|
|
44
|
+
outputSchema: {
|
|
45
|
+
regulation: z.string().describe('The regulation whose roster the candidates came from.'),
|
|
46
|
+
constraints: z
|
|
47
|
+
.object({
|
|
48
|
+
types: z.array(z.string()).describe('Types the recommendations were scored against covering.'),
|
|
49
|
+
threats: z
|
|
50
|
+
.array(z.object({
|
|
51
|
+
species: z.string().describe('Threat species.'),
|
|
52
|
+
usage: z.number().optional().describe('Usage share in percent; present for curated threats.'),
|
|
53
|
+
}))
|
|
54
|
+
.describe('Threats the recommendations were scored against answering.'),
|
|
55
|
+
})
|
|
56
|
+
.describe('The constraint set the search was run against.'),
|
|
57
|
+
recommendations: z
|
|
58
|
+
.array(z.object({
|
|
59
|
+
members: z.array(z.string()).describe('The species to add — one, or a pair when two slots were asked for.'),
|
|
60
|
+
score: z.number().describe('The fill\u2019s score against the constraints; higher is better, absolute value has no external meaning.'),
|
|
61
|
+
reasons: z
|
|
62
|
+
.array(z.string())
|
|
63
|
+
.describe('What this fill does: the constraint types it covers super-effectively, the threats it resists, and the threats it hits super-effectively — from typing (and curated usage) alone.'),
|
|
64
|
+
}))
|
|
65
|
+
.describe('The strongest fills, best first.'),
|
|
66
|
+
note: z.string().describe('The limits: unranked species are scored on typing alone because their movesets are unknown, usage is a preference not a claim, and Species Clause is respected by construction.'),
|
|
67
|
+
},
|
|
68
|
+
}, wrap(async (args) => {
|
|
69
|
+
const dex = getDex(9);
|
|
70
|
+
const regulationId = args.regulation ?? (REGULATION_SETS.find((s) => setStatus(s) === 'current')?.id ?? 'm-c');
|
|
71
|
+
const set = getRegulationSet(regulationId);
|
|
72
|
+
if (!set) {
|
|
73
|
+
throw new Error(`Unknown regulation set "${regulationId}". Available: ${REGULATION_SETS.map((s) => s.name).join(', ')}.`);
|
|
74
|
+
}
|
|
75
|
+
const list = getThreatList(set.id);
|
|
76
|
+
const { members } = resolveMembers(args.team);
|
|
77
|
+
// --- Constraint set ---
|
|
78
|
+
const constraintTypes = args.coverTypes ?? TYPES18.filter((def) => !members.some((m) => [...new Set([...m.types, ...m.moveTypes])].some((atk) => typeEffectiveness(atk, [def], 9) > 1)));
|
|
79
|
+
const threatNames = args.answerThreats ?? list?.threats.slice(0, 5).map((t) => t.megaForm ?? t.form ?? t.species) ?? [];
|
|
80
|
+
const threats = threatNames.map((name) => {
|
|
81
|
+
const sp = dex.species.get(name);
|
|
82
|
+
if (!sp.exists)
|
|
83
|
+
throw new Error(`Unknown species "${name}".`);
|
|
84
|
+
const curated = findThreat(name, set.id);
|
|
85
|
+
return {
|
|
86
|
+
name: sp.name,
|
|
87
|
+
types: sp.types,
|
|
88
|
+
usage: curated?.threat.usage,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
// --- Candidates: legal roster, Species Clause respected ---
|
|
92
|
+
const onTeam = new Set(members.map((m) => m.baseSpecies.toLowerCase().replace(/[^a-z0-9]/g, '')));
|
|
93
|
+
const candidates = [];
|
|
94
|
+
for (const name of set.eligibleSpecies) {
|
|
95
|
+
const sp = dex.species.get(name);
|
|
96
|
+
if (!sp.exists)
|
|
97
|
+
continue;
|
|
98
|
+
if (onTeam.has((sp.baseSpecies ?? sp.name).toLowerCase().replace(/[^a-z0-9]/g, '')))
|
|
99
|
+
continue;
|
|
100
|
+
const curated = findThreat(name, set.id);
|
|
101
|
+
candidates.push({ name: sp.name, types: [...sp.types], baseSpe: sp.baseStats.spe, usage: curated?.threat.usage ?? 0 });
|
|
102
|
+
}
|
|
103
|
+
const scoreOf = (c) => {
|
|
104
|
+
const covers = constraintTypes.filter((t) => c.types.some((ct) => typeEffectiveness(ct, [t], 9) > 1));
|
|
105
|
+
const resists = threats.filter((t) => t.types.every((tt) => typeEffectiveness(tt, c.types, 9) < 1));
|
|
106
|
+
const hits = threats.filter((t) => c.types.some((ct) => typeEffectiveness(ct, t.types, 9) > 1));
|
|
107
|
+
const score = covers.length * 3 + resists.length * 2 + hits.length * 2 + c.usage / 25 + c.baseSpe / 200;
|
|
108
|
+
return { covers, resists, hits, score };
|
|
109
|
+
};
|
|
110
|
+
const scored = candidates
|
|
111
|
+
.map((c) => ({ ...c, ...scoreOf(c) }))
|
|
112
|
+
.sort((a, b) => b.score - a.score);
|
|
113
|
+
const reasonsOf = (s) => {
|
|
114
|
+
const out = [];
|
|
115
|
+
if (s.covers.length)
|
|
116
|
+
out.push(`${s.name} hits ${s.covers.join(', ')} super-effectively`);
|
|
117
|
+
if (s.resists.length)
|
|
118
|
+
out.push(`${s.name} resists ${s.resists.map((t) => t.name).join(', ')} on its typing`);
|
|
119
|
+
if (s.hits.length)
|
|
120
|
+
out.push(`${s.name} hits ${s.hits.map((t) => t.name).join(', ')} super-effectively`);
|
|
121
|
+
if (s.usage)
|
|
122
|
+
out.push(`${s.name} carries ${s.usage}% measured usage`);
|
|
123
|
+
return out;
|
|
124
|
+
};
|
|
125
|
+
const top = scored.slice(0, 30);
|
|
126
|
+
const recommendations = args.slots === 1
|
|
127
|
+
? top.slice(0, 8).map((s) => ({ members: [s.name], score: Number(s.score.toFixed(1)), reasons: reasonsOf(s) }))
|
|
128
|
+
: (() => {
|
|
129
|
+
const pairs = [];
|
|
130
|
+
for (let i = 0; i < top.length; i++) {
|
|
131
|
+
for (let j = i + 1; j < top.length; j++) {
|
|
132
|
+
const a = top[i];
|
|
133
|
+
const b = top[j];
|
|
134
|
+
const union = [...new Set([...a.types, ...b.types])];
|
|
135
|
+
const covers = constraintTypes.filter((t) => union.some((ct) => typeEffectiveness(ct, [t], 9) > 1));
|
|
136
|
+
const hits = threats.filter((t) => union.some((ct) => typeEffectiveness(ct, t.types, 9) > 1));
|
|
137
|
+
const resists = threats.filter((t) => t.types.every((tt) => typeEffectiveness(tt, union, 9) < 1));
|
|
138
|
+
const score = covers.length * 3 + resists.length * 2 + hits.length * 2 + (a.usage + b.usage) / 25 + Math.max(a.baseSpe, b.baseSpe) / 200;
|
|
139
|
+
pairs.push({ a, b, union, score });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return pairs
|
|
143
|
+
.sort((x, y) => y.score - x.score)
|
|
144
|
+
.slice(0, 6)
|
|
145
|
+
.map((p) => ({
|
|
146
|
+
members: [p.a.name, p.b.name],
|
|
147
|
+
score: Number(p.score.toFixed(1)),
|
|
148
|
+
reasons: [
|
|
149
|
+
...[...new Set([...p.a.covers, ...p.b.covers])].length
|
|
150
|
+
? `${p.a.name} + ${p.b.name} together hit ${[...new Set([...p.a.covers, ...p.b.covers])].join(', ')} super-effectively`
|
|
151
|
+
: 'no super-effective coverage added',
|
|
152
|
+
...reasonsOf(p.a).slice(0, 2),
|
|
153
|
+
...reasonsOf(p.b).slice(0, 2),
|
|
154
|
+
],
|
|
155
|
+
}));
|
|
156
|
+
})();
|
|
157
|
+
return ok({
|
|
158
|
+
regulation: set.name,
|
|
159
|
+
constraints: {
|
|
160
|
+
types: constraintTypes,
|
|
161
|
+
threats: threats.map((t) => ({ species: t.name, ...(t.usage !== undefined ? { usage: t.usage } : {}) })),
|
|
162
|
+
},
|
|
163
|
+
recommendations,
|
|
164
|
+
note: 'Candidates are scored on typing alone unless the species is ranked, because an unranked species\u2019 moveset is unknown — usage is a preference, not a claim about the set. Species Clause and roster legality are respected by construction, and every recommendation carries its reasons so the tradeoff is visible.',
|
|
165
|
+
});
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=optimize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/tools/optimize.ts"],"names":[],"mappings":"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"}
|