Summary
When an extension adds a slash command dynamically after session startup, Copilot CLI can show an unknown command error in the UI even though the command still executes successfully in the extension.
This looks like the local slash-command validation path is out of sync with the dynamically registered command list.
Environment
- Copilot CLI: 1.0.25
- OS: Windows
Reproduction
I reproduced this with a Telegram bridge extension that:
- joins the session with
joinSession(...)
- then registers
/telegram afterward via a follow-up session.resume request with a commands payload
- handles the command through the extension command event path
Relevant pattern in the extension:
await sess.connection.sendRequest("session.resume", {
sessionId: sess.sessionId,
commands: [{ name: "telegram", description: "Telegram bridge" }],
hooks: true,
});
sess.on("command.execute", (event) => {
const { requestId, commandName, args } = event.data;
if (commandName !== "telegram") return;
// handle command...
});
Then in Copilot CLI:
- start the CLI with the extension loaded
- run
/telegram
Actual behavior
Copilot CLI displays an unknown command style error, but the extension still receives and executes the command correctly.
So the command both:
- appears unknown in the UI
- and still works as intended
Expected behavior
One of these should happen consistently:
- the command is recognized normally with no error, or
- if dynamically added commands are not supported in this way, the command should not execute either
Notes
This seems related to extension commands being added after startup rather than being available in the initial command set.
In this case, the extension uses session.resume because joinSession(...) does not expose a direct way to provide slash commands up front.
That makes this look like either:
- a bug in Copilot CLI command discovery/validation for extension-added commands, or
- a gap in the extension API contract around dynamic slash-command registration.
If helpful, I can provide a reduced repro extension.
Summary
When an extension adds a slash command dynamically after session startup, Copilot CLI can show an
unknown commanderror in the UI even though the command still executes successfully in the extension.This looks like the local slash-command validation path is out of sync with the dynamically registered command list.
Environment
Reproduction
I reproduced this with a Telegram bridge extension that:
joinSession(...)/telegramafterward via a follow-upsession.resumerequest with acommandspayloadRelevant pattern in the extension:
Then in Copilot CLI:
/telegramActual behavior
Copilot CLI displays an
unknown commandstyle error, but the extension still receives and executes the command correctly.So the command both:
Expected behavior
One of these should happen consistently:
Notes
This seems related to extension commands being added after startup rather than being available in the initial command set.
In this case, the extension uses
session.resumebecausejoinSession(...)does not expose a direct way to provide slash commands up front.That makes this look like either:
If helpful, I can provide a reduced repro extension.