github / github/copilot-cli

Dynamically registered extension slash commands show `unknown command` even when they execute successfully

Ouverte
#2,674 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
area:plugins
Langage dominant
Shell
Étoiles
11.2k
Forks
1.9k
Merge moyen
14 h 16 min
PR mergées (30 j)
6

Description

## 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:

1. joins the session with `joinSession(...)`
2. then registers `/telegram` afterward via a follow-up `session.resume` request with a `commands` payload
3. handles the command through the extension command event path

Relevant pattern in the extension:

```js
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:

1. start the CLI with the extension loaded
2. 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:

1. the command is recognized normally with no error, or
2. 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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

No source file or test is named. Start by tracing the CLI's local slash-command validation and how the session.resume commands payload updates the registered command list, then reproduce the issue with the Telegram bridge pattern. Done means dynamically registered commands are either recognized without a UI error or rejected consistently with their execution behavior.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, shell
Domaine
api, cli, developer-experience
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.