Skip to content

RuntimeConfigPlugin reports features.marketplace: true unconditionally — the Console is told browse is live whether or not the proxy mounted #8356

Description

@os-zhuang

Found while fixing #8343. Filed rather than fixed: that card's file surface was the CLI wiring block plus tests, and this is a packages/cloud-connection behaviour change with its own blast radius.

packages/cloud-connection/src/runtime-config-plugin.ts builds its response with marketplace hardcoded:

features: {
    installLocal: this.installLocal,
    marketplace: true,
    // aiStudio + autoPublishAiBuilds + any distribution keys.
    ...features,
},

installLocal is at least config-driven. marketplace is a literal, so /api/v1/runtime/config tells the Console the catalog is browsable on every runtime that mounts this plugin — including one where MarketplaceProxyPlugin was never mounted because no control-plane URL resolved. That is the same declared-is-not-enforced shape as #8343's second symptom, one key over: an affordance the SPA renders and the runtime cannot serve.

This is a live constraint, not a hypothetical. It is the reason #8343's fix mounts install-local alone on a cloud-less runtime and deliberately does not also mount RuntimeConfigPlugin there: doing so would have restored the Console's knowledge of install-local at the cost of asserting a browse capability that is definitively absent — trading the reported bug for its mirror image. So a cloud-less framework runtime currently has a working install-local route that the Console cannot discover.

Why it should be the plugin's own answer, not the host's

Adding a marketplace?: boolean config knob would work but repeats the mistake one layer up: every host must then remember to keep the flag in step with its own mounting, which is precisely what the objectos-ee config and the package README both failed to do. Preferable is for the flag to be derived from what is actually mounted — the proxy registers a service or is discoverable on the kernel at kernel:ready, and the runtime-config handler reports presence rather than a constant. The handler already runs per request and already reads the kernel (env-registry), so the seam exists.

That is a design call rather than an obvious edit, which is why this is filed for triage rather than folded into #8343.

Acceptance

  • features.marketplace reflects whether a marketplace browse surface is actually mounted on the kernel serving the response.
  • A cloud-less runtime can report installLocal: true truthfully without also claiming browse.
  • Coverage pinning both directions (mounted proxy reports true; no proxy reports false).

Backlink: #8343. Related: #8355.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions