Skip to content

Releases: BotMakerDev/botmaker-cli

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 17:09

Build

  • JavaFX 27 (2026-10-18), from 25.0.4, the contract's version; compile-only, as before.

Added

  • The validator knows a set of nested classes (contract ofClasses, 2026-10-16): such a set passes when its
    classes' setup type is one a host writes, and a part of its field type (or of its element, when referred to by
    name) counts as writable, since the host writes it as a reference (Screens.MARKET.beerBuy).
  • botmaker mcp-bridge: Studio's MCP tools over stdio, across Studio's restarts. An MCP client configured
    with Studio's HTTP endpoint marked it failed each time Studio stopped, until the user reconnected it by hand.
    The bridge is the client's server for its whole session: it reads Studio's port and token from Studio's
    mcp.json, forwards each call while Studio runs, answers that Studio is not running while it does not, and
    sends notifications/tools/list_changed when Studio comes back or restarts. Claude Code:
    claude mcp add botmaker-studio -- botmaker mcp-bridge.
  • The bridge checks it talks to Studio before it sends the token. A process that took Studio's port while
    Studio was down is asked for /mcp-hello's proof first and gets no token.
  • start_studio starts Studio from the bridge while it is down: --studio <command> ($BOTMAKER_STUDIO), or
    --umbrella <dir> ($BOTMAKER_UMBRELLA) for a dev Studio run by Maven. Its output goes to Studio's cache,
    studio-run.log. The tool is listed whether Studio runs or not.

v0.3.6

Choose a tag to compare

@github-actions github-actions released this 12 Oct 21:11

Fixed

  • --gamebot makes its tag a GitHub Release, which is what New Project copies. Tags alone left the
    template's latest release at v0.1.1 (SDK 1.2.3) through v0.2.7.

Removed

  • A release opens no plugin-registry pull request. Moving a released plugin's verifiedVersion waited on the
    registry's gate, and the ones for SDK v1.4.3 and v1.4.4 failed it and sat unmerged. Studio installs a plugin
    at JitPack's newest build instead.

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 12 Oct 20:29

Fixed

  • --gamebot pins the SDK's newest tag, or the SDK the run cuts, and is released when its tag pins an older
    one. Its gate compiles it at that tag and names --sdk when its main needs SDK code no release has.

Removed

  • A gallery entry has no requires. bot publish no longer writes the plugins a bot's pom declares, and the
    gallery gate no longer checks them: the copy went stale at the repository's next release (gamebot's said SDK
    1.2.3 while v0.2.7 pinned 1.4.4). Studio reads them off the release's pom. An old entry's requires is read
    past and dropped from the catalog.

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:31

Fixed

  • A release refuses a tag that would pin a release JitPack never built. PinsResolveGate asks JitPack for
    every pin a cut module's tag carries on an upstream outside the release, and names the flag to add. On
    2026-10-12 SDK v1.4.3, Studio v1.4.3 and dashboard v0.3.1 were cut pinning botmaker-shared v0.2.4, which never
    built, and all three were broken for good.
  • A release refuses a module that does not compile against the releases its tag pins. BuildsAtPinsGate
    compiles a clean worktree of the module with every upstream outside the release pinned to its newest tag, and
    quotes the compiler. SDK v1.4.3 called a shared method no shared release had; CI, building against shared's
    main, was green.
  • Releasing shared forces the dashboard, which pins it; every pin is a forcing edge now, which a test derives
    from the modules' pins.
  • A module whose tag would pin a newer upstream is released when named, not skipped as "only docs": its
    published pom differs (ChangeKind.pinsMove).
  • A gate whose Maven run could not find an upstream's -SNAPSHOT in ~/.m2 skips with the install command
    instead of refusing the module: the redirect-pointer, plugin, template and builds-at-pins gates all read the
    failure through MissingSnapshot. It also names the missing artifact, not the project Maven was building, and
    reads a miss Maven cached ("was not found in … during a previous attempt").
  • --no-wait-jitpack stops before tagging on top of an upstream JitPack already failed to build, asked once
    per upstream this run tagged.

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:56

Added

  • JitpackScriptGate: a release refuses a JitPack module whose .jitpack/build.sh or statx.c differs
    from the umbrella's tools/jitpack/ or is not committed, or whose jitpack.yml's install does not start
    with it (--force overrides).
  • A JitPack failure names a rate limit. When the build log shows Maven Central's 429 Too Many Requests,
    the release's error says so: a rate limit on JitPack's builders, not the module.

Changed

  • GatePlan.JITPACK_MAVEN is 3.9.9, the Maven every JitPack build now runs, so JitpackPluginsGate holds
    plugin prerequisites to it, falling back to JitPack's own 3.6.1 for a module whose script gate was forced or
    skipped.

Build

  • JitPack builds with .jitpack/build.sh, the umbrella's tools/jitpack/build.sh: Maven 3.9.9 and every
    dependency from Google's mirror of Maven Central first, with backoff and Maven's 429 retry, so Central's
    429 Too Many Requests no longer loses a tag. The statx shim comes with it.

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 12 Oct 12:03

Added

  • plugin validate's value-types check reads a deprecated type's replacedBy(): it refuses a pointer on a type
    whose class is not @Deprecated, one naming the type itself or another deprecated type, one on a type that is
    neither a call nor an enum (nothing to map), one naming an enum for a call or a call for an enum (Studio pairs
    only like with like), and one naming a type no plugin on the classpath lists in
    types() (compared by name); a @Deprecated declared type with no pointer passes with a note.

  • plugin validate reads a plugin's own parameters (ManagedValue.param). It checks that a generic one starts
    as a value of its type.

  • A plugin may change a managed value's shape between releases. Nothing checks it against the previous
    release: Studio's upgrade repairs a bot's values like the rest of its code.

Fixed

  • plugin validate's types check accepts a Class<…> part when a loaded plugin declares a grouped open set
    (ofEnums(…).groupedAs(…)) whose element fits it: the host writes it as a class literal of one of the bot's
    nested enums (Activities.Collect.class). It refused the SDK's Flow.activity(Activities.Collect.class, …),
    which stopped a release at the SDK's validation gate.

No source changes since v0.3.0; re-released for updated upstream pins.

Changed

  • plugin validate's managed check takes typed ids only (ManagedValue.method(SdkValue.Id.FLOW)), as
    the contract now does: their spelling is the enum's, so the lowercase-words pattern for string ids is gone.
    Two declarations of one id still fail.
  • plugin validate's types check knows withers: a call's factory is checked against the parts before the
    withers', and each wither's argument must be a type a host writes.
  • A release whose push fails says what git said, and still moves the pins of that module's dependents and
    records its pointer: its tag and back-to-snapshot commit are local by then. Before, the dashboard kept
    pinning a cli snapshot nobody built, and every later release was refused over it.

Added

  • botmaker release --sync-pins moves every botmaker.*.version on main to its upstream's main version
    — what the versions gate refuses, which now names the command — one commit per pin, plus the umbrella
    pointer commit. Previews unless --execute; pushes nothing.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 10 Oct 15:21

No source changes since v0.3.0; re-released for updated upstream pins.

Changed

  • plugin validate's managed check takes typed ids only (ManagedValue.method(SdkValue.Id.FLOW)), as
    the contract now does: their spelling is the enum's, so the lowercase-words pattern for string ids is gone.
    Two declarations of one id still fail.
  • plugin validate's types check knows withers: a call's factory is checked against the parts before the
    withers', and each wither's argument must be a type a host writes.
  • A release whose push fails says what git said, and still moves the pins of that module's dependents and
    records its pointer: its tag and back-to-snapshot commit are local by then. Before, the dashboard kept
    pinning a cli snapshot nobody built, and every later release was refused over it.

Added

  • botmaker release --sync-pins moves every botmaker.*.version on main to its upstream's main version
    — what the versions gate refuses, which now names the command — one commit per pin, plus the umbrella
    pointer commit. Previews unless --execute; pushes nothing.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 15:46

No source changes since v0.1.4; re-released for updated upstream pins.

No source changes since v0.1.3; re-released for updated upstream pins.

Changed

  • A release of --sdk or --plugin-basics opens a pull request on botmaker-plugin-registry moving that
    plugin's verifiedVersion to the new tag, and the registry's gate runs over it there. Studio installs a
    ticked plugin at that version, and nothing moved it after plugin publish, so New Project offered SDK
    v1.1.7 and basics v0.0.1. A pull request that cannot be opened warns; the release is not failed.

  • plugin validate's value-types check walks every part a component type's factory declares, through the
    host's containers to each leaf, and fails a part no host could write — part 0 (java.util.List<p.Step>) holds p.Step, which no loaded plugin declares. The fresh-value round trip alone passed a type whose fresh
    value held empty lists, and the first filled one was a value Studio silently could not write.

  • plugin validate's managed check judges an open set's element type (openSet(id).of(E.class)): a class
    no loaded plugin declares fails, since no host could write a constant of it.

  • A --studio-api release moves Studio's CONTRACT_FALLBACK_VERSION to the contract tag it cuts, as
    --sdk moves SDK_FALLBACK_VERSION, and the fallback gate refuses a Studio release whose constant names
    no published contract tag.

  • Built against botmaker-studio-api 0.4.0 and botmaker-plugin-host 0.2.2: plugin validate reads a palette
    with no @Palette.order, which that contract release deleted.

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 05 Oct 14:51

No source changes since v0.1.3; re-released for updated upstream pins.

Changed

  • A release of --sdk or --plugin-basics opens a pull request on botmaker-plugin-registry moving that
    plugin's verifiedVersion to the new tag, and the registry's gate runs over it there. Studio installs a
    ticked plugin at that version, and nothing moved it after plugin publish, so New Project offered SDK
    v1.1.7 and basics v0.0.1. A pull request that cannot be opened warns; the release is not failed.

  • plugin validate's value-types check walks every part a component type's factory declares, through the
    host's containers to each leaf, and fails a part no host could write — part 0 (java.util.List<p.Step>) holds p.Step, which no loaded plugin declares. The fresh-value round trip alone passed a type whose fresh
    value held empty lists, and the first filled one was a value Studio silently could not write.

  • plugin validate's managed check judges an open set's element type (openSet(id).of(E.class)): a class
    no loaded plugin declares fails, since no host could write a constant of it.

  • A --studio-api release moves Studio's CONTRACT_FALLBACK_VERSION to the contract tag it cuts, as
    --sdk moves SDK_FALLBACK_VERSION, and the fallback gate refuses a Studio release whose constant names
    no published contract tag.

  • Built against botmaker-studio-api 0.4.0 and botmaker-plugin-host 0.2.2: plugin validate reads a palette
    with no @Palette.order, which that contract release deleted.

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 05 Oct 14:44

Changed

  • A release of --sdk or --plugin-basics opens a pull request on botmaker-plugin-registry moving that
    plugin's verifiedVersion to the new tag, and the registry's gate runs over it there. Studio installs a
    ticked plugin at that version, and nothing moved it after plugin publish, so New Project offered SDK
    v1.1.7 and basics v0.0.1. A pull request that cannot be opened warns; the release is not failed.

  • plugin validate's value-types check walks every part a component type's factory declares, through the
    host's containers to each leaf, and fails a part no host could write — part 0 (java.util.List<p.Step>) holds p.Step, which no loaded plugin declares. The fresh-value round trip alone passed a type whose fresh
    value held empty lists, and the first filled one was a value Studio silently could not write.

  • plugin validate's managed check judges an open set's element type (openSet(id).of(E.class)): a class
    no loaded plugin declares fails, since no host could write a constant of it.

  • A --studio-api release moves Studio's CONTRACT_FALLBACK_VERSION to the contract tag it cuts, as
    --sdk moves SDK_FALLBACK_VERSION, and the fallback gate refuses a Studio release whose constant names
    no published contract tag.

  • Built against botmaker-studio-api 0.4.0 and botmaker-plugin-host 0.2.2: plugin validate reads a palette
    with no @Palette.order, which that contract release deleted.