Skip to content

fix: migrate advisor_review to SDK 0.4.16 presentation labels - #3

Open
jonolee-kr wants to merge 2 commits into
salemsayed:mainfrom
jonolee-kr:fix/sdk-0.4.16-presentation-labels
Open

fix: migrate advisor_review to SDK 0.4.16 presentation labels#3
jonolee-kr wants to merge 2 commits into
salemsayed:mainfrom
jonolee-kr:fix/sdk-0.4.16-presentation-labels

Conversation

@jonolee-kr

Copy link
Copy Markdown

Problem

Advisor fails to load on a bb host running plugin SDK 0.4.16 or later:

plugin "advisor" reload failed: registerTool: "experimental_statusLabels" was folded into "presentation" (labels) in SDK 0.4.16 (tool "advisor_review")

SDK 0.4.16 folded experimental_statusLabels into presentation (labels). The host rejects the old field, so the whole plugin stays in error state. Reproduced on bb 0.40.0.

Change

  • server.ts — move the two advisor_review labels to presentation.label. The label text is unchanged.
  • types/bb-plugin-sdk.d.ts — add PluginAgentToolLabels and PluginAgentToolPresentation, and replace the registration field. PluginAgentToolExperimentalStatusLabels stays as a deprecated alias, because the SDK's bundled testing declarations still import it.
  • package.json — raise engines.bbPluginSdk to >=0.4.16. presentation does not exist before that release.
  • server.test.ts — add a regression test. It reads the raw registration, asserts presentation.label, and asserts that experimental_statusLabels is absent. The test fails on the current main.
  • dist/ — regenerated. The app-bundle diff is a minification artifact of the newer builder, not a code change.

Verification

  • npx tsc -p tsconfig.json — clean.
  • npx vitest run — 84 passed, 0 failed.
  • bb plugin build — succeeds.
  • The plugin loads and runs on bb 0.40.0.

Known limitation, out of scope here

bb plugin types --check reports the vendored declarations as stale against bb 0.40. A full refresh produces 21 further type errors that are unrelated to this field, mostly the supportedPermissionModes to permissionModes rename and test fixtures that now need provider.capabilities. That breakage exists on main today. This PR does not touch it, so the diff stays scoped to the registration failure.

🤖 Generated with Claude Code

jonolee-kr and others added 2 commits August 26, 2026 03:07
SDK 0.4.16 folded `experimental_statusLabels` into `presentation`
(labels). A host on that SDK or later rejects the old field, so the
plugin fails to load with:

  registerTool: "experimental_statusLabels" was folded into
  "presentation" (labels) in SDK 0.4.16 (tool "advisor_review")

Move the two labels to `presentation.label` and keep their text
unchanged. Teach the vendored declarations the new contract, and keep
`PluginAgentToolExperimentalStatusLabels` as a deprecated alias so the
SDK's bundled testing declarations still resolve.

Raise `engines.bbPluginSdk` to `>=0.4.16`, because `presentation` does
not exist before that release.

Add a regression test that reads the raw registration and asserts the
new shape.

Regenerate dist/. The app bundle diff is a minification artifact of the
newer builder, not a code change.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
bb 0.40 renamed provider.capabilities.supportedPermissionModes to
permissionModes and removed the readonly value. server.ts still read the
old name, so narrowestReviewMode called .find on undefined. Every
connected machine reported 'Could not load models: TypeError: Cannot read
properties of undefined (reading find)', and a saved advisor model looked
unavailable because the option list came back empty.

- Migrate off the vendored 0.4.2 declarations to @get-bb/plugin-sdk 0.4.21,
  which is what let the rename go unnoticed.
- Read capabilities.permissionModes at the three call sites.
- Drop the removed readonly value from the mode preference and type the
  preference as the host's own permission-mode union.
- Rebuild the fake catalogs in server.test.ts against the bb 0.40 shape.
- Add a regression test for the settings panel catalog, plus a reuse
  control and a respawn test for sessions stored under readonly.
- Correct the README: current bb has no read-only mode, so the reviewer
  runs in accept-edits and can write to the workspace.
@ChrBoebel

Copy link
Copy Markdown

I hit the same failure independently and had opened #4 for it before spotting this PR. Yours is the more complete fix — declarations rather than a spread workaround, plus a regression test — so I've closed mine in favour of it. Two things I verified along the way that may be useful here.

Reproduced on bb 0.41.0 as well (you note 0.40.0). Installing main at bd4b6ae from git:, from ~/.bb/logs/server.1.log:

18:19:18.010Z  install of bd4b6ae recorded
18:19:18.476Z  plugin advisor failed to load: registerTool: "experimental_statusLabels"
               was folded into "presentation" (labels) in SDK 0.4.16 (tool "advisor_review")
18:19:21.736Z  plugin advisor failed to load: <same>
18:20:36.584Z  plugin advisor failed to load: <same>
18:20:40.988Z  plugin advisor failed to load: <same>

466 ms after the install completed. Worth noting for anyone reading this thread: the rejection comes from the host, not from the SDK bundled into dist/, so rebuilding the artifact against an older SDK does not avoid it.

A data point for the engines.bbPluginSdk bump to >=0.4.16. I went looking for whether the swap mirrors the breakage onto older runtimes, expecting it would, and it does not. The SDK 0.4.2 validator is a chain of hand-written per-field checks with no unknown-key rejection — registering a tool with presentation, and separately with an arbitrary made-up key, both succeed without throwing. The ≥ 0.4.16 error is a targeted deprecation guard for the removed name (it names the old key, the new key and the version, which a generic strict-object check could not produce), and there is no symmetric check in the other direction.

So below 0.4.16 the tool registers normally and simply renders no status label. Concretely, with this repo's own bb-app@0.36.0 toolchain: the regenerated declarations contain zero hits for presentation, and npx tsc -p tsconfig.json plus bb plugin build both still pass.

That makes >=0.4.16 a policy choice — advertise only runtimes that render the label — rather than a correctness requirement. Perfectly defensible either way; I mention it only so the floor is raised deliberately rather than out of caution. Caveat on my end: I exercised the 0.4.2 test harness and the 0.36.0 builder, not a live bb 0.35–0.40 host.

Unrelated: I have a second PR (#5) that needs some form of this fix in order to load, so it currently carries a minimal version of it. I'll rebase onto whichever lands.

dillonzq commented Sep 4, 2026

Copy link
Copy Markdown

Independent verification on bb 0.41.0 / plugin SDK 0.4.34:

  • reproduced the original experimental_statusLabels load failure on main (bd4b6ae)
  • applied both commits from this PR, preserving their authorship
  • npm run typecheck: passed
  • npm test: 86/86 passed
  • bb plugin build .: passed with the current 0.41.0 builder
  • installed from a local path: plugin reports running, registers advisor_review, exposes its settings, and bb advisor status succeeds

Verified branch: https://github.com/dillonzq/bb-plugin-advisor/tree/fix/sdk-tool-presentation

One maintenance note: bb plugin types --check on 0.41.0 reports the PR's @get-bb/plugin-sdk 0.4.21 pin as stale versus 0.4.34 and asks for the current host-shim type dependencies. Syncing those produced no additional source-level API errors; the existing code changes are sufficient for runtime compatibility.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants