Skip to content

Releases: mriver15/getcompetitive

v8.0.4

Choose a tag to compare

@github-actions github-actions released this 21 Sep 21:00

Changed

  • calculate teaches 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
    calculate description, the calculate_stats and check_speed descriptions,
    and the shared evs/championsPoints field 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

Choose a tag to compare

@github-actions github-actions released this 21 Sep 19:07

Changed

  • The App hands off to the user, and degrades gracefully when a host drops
    structured content.
    The initialize instructions and 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 no structuredContent, so it renders and stays interactive on
    hosts that have not implemented complete structured result delivery.

v8.0.2

Choose a tag to compare

@github-actions github-actions released this 21 Sep 17:57

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: the mode enum plus every field each mode
    accepts, unioned where a name is shared across modes (e.g. species is a
    string in lookup/species and an array in lookup/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 its mode
    enum and fields.

v8.0.1

Choose a tag to compare

@github-actions github-actions released this 21 Sep 17:29

Fixed

  • optimize_team pair recommendations split the first reason into single
    characters.
    The two-slot path spread a string (...condition ? … : …) where
    it meant to place one reason element, so reasons[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

Choose a tag to compare

@github-actions github-actions released this 21 Sep 16:29

Added

  • The MCP App workspace. The server now exposes one portable MCP App —
    a single bundled HTML resource registered at ui://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_team synergy/diagnose — six sets, labelled heuristic score,
    stacked weaknesses, coverage, speed and top fixes), Team Builder
    (optimize_team — select a proposed member, validate with team_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.mjs with 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's app-with-deps bundle. 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 structuredContent in a versioned
    envelope.
    analyze_team, optimize_team and prepare_matchup now return
    { schemaVersion: 1, view, tool, mode, regulation, data } in
    structuredContent, where data is the unchanged analytics payload at the
    requested detail level. The model-facing text (the compact JSON summary) is
    byte-for-byte the same; only structuredContent consumers migrate their
    reads to …structuredContent.data.<field>. schemaVersion is the migration
    hook: a View that does not recognise the number renders an unsupported-schema
    state instead of guessing. Every other tool's structuredContent is
    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 through resources/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 request detail: "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

Choose a tag to compare

@github-actions github-actions released this 21 Sep 00:58

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), so check_legality and
    team_io rejected 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.ts stores
    M-A in full (base) plus each later set's additions, 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 — and extract-regs.mjs now fails without writing on any
    drop or source disagreement. Ingesting M-D is three steps: add the set to
    the script and to METADATA, run the script, run npm test. The golden
    tests pin the official roster sizes, Kingambit's M-C membership, and the
    no-drops invariant.

v6.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 20:55

Added

  • The server now introduces itself. initialize returns a titled, described
    serverInfo (name, title, description, websiteUrl) plus instructions that
    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 eight mode-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

Choose a tag to compare

@github-actions github-actions released this 19 Sep 21:34

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

Choose a tag to compare

@mriver15 mriver15 released this 19 Sep 21:33

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.

v6.2.0

Choose a tag to compare

@mriver15 mriver15 released this 19 Sep 21:30

Added