Repository navigation
Releases: mriver15/getcompetitive
Releases · mriver15/getcompetitive
Release list
v8.0.4
Changed
calculateteaches the spread rules instead of bouncing the model off
them. The CP economy (8 EVs = 1 CP, each stat 0-32, 66 CP total) and a
worked example (252 HP / 252 Atk / 4 SpD = 32 / 32 / 1 CP) now appear in the
calculatedescription, thecalculate_statsandcheck_speeddescriptions,
and the sharedevs/championsPointsfield descriptions. Validation errors
are now self-correcting: the "both scales" error names each scale and the
conversion, the range error repeats the value sent ("you sent 40"), and the
cap error shows the breakdown and a concrete fix ("you sent 32 hp + 32 atk +
32 spa = 96; drop to 66 or less, e.g. 32/32/1 = 65"). Also fixed the mangled
"Pok00e9mon" lead-in in the compound tool descriptions. The principle: a
validator that rejects without teaching is a token multiplier — ranges, caps,
conversions and exclusivity belong in the description (and ideally the schema)
before the validator enforces them.
v8.0.3
Changed
- The App hands off to the user, and degrades gracefully when a host drops
structured content. The initializeinstructionsand the three App-linked
workflow prompts (/team-doctor,/matchup-prep,/build-around) now tell
the model to end its turn after an App tool call and let the user explore the
board instead of summarizing and moving on. The View also rebuilds its
envelope from the compact JSON text plus the host's reported tool context when
a host delivers nostructuredContent, so it renders and stays interactive on
hosts that have not implemented complete structured result delivery.
v8.0.2
Fixed
- The six compound tools published an empty input schema. Their
z.union
of per-mode objects serialized to{"type":"object","properties":{}}— the
SDK only converts object schemas and raw shapes to JSON Schema, and a union
is neither — so an Apps host had no fields to render a form. The compound
layer now registers a flat shape: themodeenum plus every field each mode
accepts, unioned where a name is shared across modes (e.g.speciesis a
string inlookup/speciesand an array inlookup/sprites), with the
per-mode object re-enforcing the real required-field contract inside the
handler. The smoke suite pins that every compound tool publishes itsmode
enum and fields.
v8.0.1
Fixed
optimize_teampair recommendations split the first reason into single
characters. The two-slot path spread a string (...condition ? … : …) where
it meant to place one reason element, soreasons[0]became one character per
entry and the output rendered a letter per line. The stray spread is removed;
the smoke suite now asserts every reason is a multi-character string so the
regression cannot return.
v8.0.0
Added
- The MCP App workspace. The server now exposes one portable MCP App —
a single bundled HTML resource registered atui://getcompetitive/workspace
(text/html;profile=mcp-app) and linked from the three App tools. It renders
three Views over the existing deterministic engine: Team Doctor
(analyze_teamsynergy/diagnose — six sets, labelled heuristic score,
stacked weaknesses, coverage, speed and top fixes), Team Builder
(optimize_team— select a proposed member, validate withteam_io
legality, export the paste), and Matchup Board (prepare_matchup—
bring four, speed races, calculated damage and heuristic leads, with the
opponent's set assumptions shown beside each roll). The bundle is built by
scripts/build-app.mjswith esbuild and embedded in the compiled server JS,
so the stdio, HTTP and serverless Worker entrypoints serve byte-identical
markup with no runtime filesystem read, no external CDN, fonts or scripts. - A pinned App SDK.
@modelcontextprotocol/ext-apps@1.7.5(the release
line that pairs with this server's@modelcontextprotocol/sdk@^1.30.0) is
used for resource registration and App-side messages; the App itself imports
the SDK'sapp-with-depsbundle. Host support is negotiated through the
extension capability where the SDK requires it, and ordinary text output is
preserved unchanged for hosts without Apps support.
Changed
- Breaking: the three App tools wrap
structuredContentin a versioned
envelope.analyze_team,optimize_teamandprepare_matchupnow return
{ schemaVersion: 1, view, tool, mode, regulation, data }in
structuredContent, wheredatais the unchanged analytics payload at the
requesteddetaillevel. The model-facing text (the compact JSON summary) is
byte-for-byte the same; onlystructuredContentconsumers migrate their
reads to…structuredContent.data.<field>.schemaVersionis the migration
hook: a View that does not recognise the number renders an unsupported-schema
state instead of guessing. Every other tool'sstructuredContentis
untouched, and no tool's analytics field was renamed or reshaped. - The evidence app and the App are now distinct surfaces. The HTTP
entrypoint's/page (the model-converses browser page) is unchanged; the
MCP App is the sandboxed iframe served throughresources/read.
Not included
- App-only tools (
_meta.ui.visibility: ["app"]) are deferred: every View
interaction uses the existing public tools, so the model catalog stays at
nine tools and app-initiated drilldowns requestdetail: "evidence"without
adding to the model's history. Private endpoints (e.g.ui_get_team_detail)
will only be added if a focused drilldown needs one.
v6.3.1
Fixed
- Kingambit was reported illegal in Regulation Set M-C. The Bulbapedia
page the rosters were scraped from omits Kingambit from its M-C eligible
list (it appears in no revision of the page), socheck_legalityand
team_iorejected a species with 29% measured M-C usage. The roster is
restored from the official Pokémon Champions event pages (231 species;
M-C adds 23 over M-B, not 29 as the notes claimed).
Changed
- Regulation rosters are now cumulative. The M series builds each set on
the previous one, and the data reflects that:regulations.data.tsstores
M-A in full (base) plus each later set'sadditions, and the full
per-set lists are derived at load. Eligible species come straight from the
official event pages — the Bulbapedia dependency that caused the Kingambit
omission is gone — andextract-regs.mjsnow fails without writing on any
drop or source disagreement. Ingesting M-D is three steps: add the set to
the script and toMETADATA, run the script, runnpm test. The golden
tests pin the official roster sizes, Kingambit's M-C membership, and the
no-drops invariant.
v6.3.0
Added
- The server now introduces itself.
initializereturns a titled, described
serverInfo(name, title, description, websiteUrl) plusinstructionsthat
tell the client's model the server is exclusively about Pokémon Champions —
doubles, level 50, Mega Evolution, 66 stat points, Regulation Sets M-A–M-C —
and how the eightmode-dispatching tools and six prompts hang together.
Every tool description now names the game too, so a client that only
surfaces the tool list still knows what it is connected to, and the npm
description says so for directory listings.
v6.2.2
Changed
- The release guard has its first recorded catch. 6.2.1 tagged before its
changelog heading was promoted, and the new workflow step refused to create
a GitHub release for it (npm had already published); the heading was
promoted and the release created with the same command the workflow runs.
This release exercises the full loop end to end.
v6.2.1
Changed
- The release workflow mirrors npm to GitHub. Every tag now publishes the
npm package and creates the GitHub Release with the matching CHANGELOG
section as its body — the two "latest" pointers can no longer drift apart,
and a version without a changelog section fails the run instead of shipping
an unlabeled release.