Skip to content

v0.3.0

Latest

Choose a tag to compare

@jonmast jonmast released this 19 Sep 00:10

Changed

  • Breaking: Migrated to the provider/model registries OpenCode 2.0.4
    introduced in #48901, which
    removed the catalog plugin domain. Provider and model registration now runs
    through ctx.provider.transform, and revalidation reloads via
    ctx.provider.reload(). This release requires OpenCode 2.0.4 or newer; on
    2.0.0–2.0.3 it fails to load with
    undefined is not an object (evaluating 'ctx.provider.transform'). Stay on
    0.2.x for those versions.

  • A startup with no cached catalog now waits for the first discovery before
    handing control back to OpenCode, capped by the new coldWaitMs option
    (default 3000). Stale-while-revalidate previously returned immediately even
    with nothing to serve, so OpenCode activated the plugin against an empty
    catalog. Short-lived invocations such as opencode run -m cliproxyapi-.../...
    failed with Model unavailable and exited before the discovery that would
    have populated the cache ever completed, leaving every subsequent run equally
    cold. A warm cache still registers immediately and revalidates in the
    background, and discovery that outlives the cap still registers when it
    lands.

  • A model metadata outage can no longer degrade the cached catalog. With a
    healthy CLIProxyAPI and an unreachable models.dev, every model fell back to
    default names, limits, modalities, and protocol, and that reading was written
    to the cache, so the loss survived a restart until metadata happened to come
    back. Models that metadata did not describe now keep their last enriched
    definition, matching how reasoning variants are already preserved.

  • Discovery failures are now reported to OpenCode's logs when discovery starts
    failing and again when it recovers. A failure is otherwise invisible by
    design, since the cached catalog keeps serving, which left a stale catalog
    with nothing explaining it. Only the transitions are logged, so a server that
    stays down does not add an entry per poll.

  • The plugin now builds against the published @opencode/plugin package
    (OpenCode 2's own plugin package) instead of the @opencode-ai/plugin
    prerelease, so the V2 domains are properly typed.