Describe the bug
An enabled marketplace-installed plugin extension is missing from client.rpc.extensions.discover() both before and after session creation, even though the extension runs in the session, appears in current tool metadata, and its tool executes successfully. In the same isolated environment, discovery does return a user-global extension.
The Copilot SDK extensions.discover() API contract describes discovery of user and enabled installed-plugin extensions from persisted Copilot home state. It also explicitly excludes launch-scoped additional plugins.
Affected version
- GitHub Copilot CLI:
1.0.88 (Windows x64)
- Node.js:
v24.18.0 in the SDK harness
- SDK:
1.0.14-preview.1, identified from SDK source-path labels in the CLI bundle. I did not independently verify package-resolution metadata.
- Reproduction uses a fresh, isolated
COPILOT_HOME.
Steps to reproduce
- Create a fresh
COPILOT_HOME and a local marketplace containing a minimal plugin with one extension and one deterministic tool.
- Install the marketplace plugin and confirm it is enabled:
copilot plugin marketplace add <local-marketplace-path>
copilot plugin install minimal-discovery@<marketplace-name>
copilot plugin list --json
- Configure the SDK client to use the same Copilot home and CLI. Call
client.rpc.extensions.discover().
- Create a session with extension loading enabled. Call
client.rpc.extensions.discover() again, then inspect session.rpc.extensions.list() and session.rpc.tools.getCurrentMetadata().
- Execute the plugin’s deterministic tool from the session.
- As a control, add a user-global extension to the same isolated home and repeat discovery.
Expected behavior
The enabled marketplace-installed plugin extension should appear in global extensions.discover(), because it is an enabled installed-plugin extension persisted in the same Copilot home used by the SDK client. Launch-scoped additions are excluded by the documented contract; this marketplace fixture is installed in the isolated home, not supplied as a launch-scoped plugin directory.
Additional context
Observed results:
| Fixture |
extensions.discover() |
Session/tool result |
| User-global extension |
Present |
Running; tool succeeds |
| Launch-scoped startup plugin |
Empty |
Running; tool succeeds |
| Minimal marketplace plugin |
Empty before and after session creation |
Enabled; extension running; tool metadata present; tool succeeds |
The launch-scoped result is consistent with the SDK contract. The discrepancy is that the enabled marketplace plugin is also absent from discovery despite being active and usable in-session.
The reproduction observed load_and_augment with an empty discovery list; this does not establish the cause of the discrepancy. The evidence identifies the behavior but not its internal cause.
Related history: github/copilot-cli#3023 concerned plugin extensions not loading properly. In this reproduction, the plugin extension loads and executes; global discovery omits it.
Describe the bug
An enabled marketplace-installed plugin extension is missing from
client.rpc.extensions.discover()both before and after session creation, even though the extension runs in the session, appears in current tool metadata, and its tool executes successfully. In the same isolated environment, discovery does return a user-global extension.The Copilot SDK
extensions.discover()API contract describes discovery of user and enabled installed-plugin extensions from persisted Copilot home state. It also explicitly excludes launch-scoped additional plugins.Affected version
1.0.88(Windows x64)v24.18.0in the SDK harness1.0.14-preview.1, identified from SDK source-path labels in the CLI bundle. I did not independently verify package-resolution metadata.COPILOT_HOME.Steps to reproduce
COPILOT_HOMEand a local marketplace containing a minimal plugin with one extension and one deterministic tool.client.rpc.extensions.discover().client.rpc.extensions.discover()again, then inspectsession.rpc.extensions.list()andsession.rpc.tools.getCurrentMetadata().Expected behavior
The enabled marketplace-installed plugin extension should appear in global
extensions.discover(), because it is an enabled installed-plugin extension persisted in the same Copilot home used by the SDK client. Launch-scoped additions are excluded by the documented contract; this marketplace fixture is installed in the isolated home, not supplied as a launch-scoped plugin directory.Additional context
Observed results:
extensions.discover()The launch-scoped result is consistent with the SDK contract. The discrepancy is that the enabled marketplace plugin is also absent from discovery despite being active and usable in-session.
The reproduction observed
load_and_augmentwith an empty discovery list; this does not establish the cause of the discrepancy. The evidence identifies the behavior but not its internal cause.Related history:
github/copilot-cli#3023concerned plugin extensions not loading properly. In this reproduction, the plugin extension loads and executes; global discovery omits it.