github / github/copilot-cli

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

Aperta
#2,674 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
area:plugins
Lingua principale
Shell
Stelle
11.2k
Fork
1.9k
Merge medio
14h 16m
PR unite (30g)
6

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Non sono indicati file sorgente né test. Inizia tracciando la validazione locale di slash-command della CLI e il modo in cui la payload session.resume commands aggiorna l’elenco dei comandi registrati; quindi riproduci il problema con il pattern del bridge Telegram. Il lavoro è completato quando i comandi registrati dinamicamente vengono riconosciuti senza un errore dell’UI oppure rifiutati in modo coerente con il loro comportamento di esecuzione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, shell
Ambito
api, cli, developer-experience
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.