Copilot CLI hooks fail on Windows: command runs under PowerShell, which can't execute te-hook
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- github, powershell, python
- Ambito
- cli, developer-experience
Direzione di ricerca
Read plugin/hooks/copilot-hooks.json and the existing Windows handling in the Codex manifest. Check how Copilot hook commands are configured for bash and powershell, then verify the proposed shell lookup against the Windows environments in the report. Done means all six hooks run without errors on Windows and te status shows the repository.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
On Windows, every Copilot CLI hook from the plugin fails with exit code 1, so TokenEconomizer never runs (no state under ~/.tokeneconomizer/repos/...).
plugin/hooks/copilot-hooks.json uses only command:
"command": "\"${PLUGIN_ROOT}/scripts/te-hook\" --host copilot"
Per the Copilot hooks reference, command is copied to both bash and powershell. On Windows, Copilot CLI runs the powershell variant, and PowerShell can't execute the extensionless POSIX script te-hook (Cannot run a document in the middle of a pipeline: ...\plugin\scripts\te-hook).
docs/PLUGIN.md already notes that Copilot CLI on Windows is untested, so this may be expected. I'm filing it with a verified workaround.
Environment
- Windows 11, Copilot CLI 1.0.107 (standalone
copilot.exe) - Git for Windows (
C:\Program Files\Git); itsbin\is not on the machine PATH by default (onlyGit\cmd) - Python 3.15 via the Python install manager
- Plugin installed from a local clone at
main(marketplace add +copilot plugin install tokeneconomizer@tokeneconomizer)
Repro
- Install the plugin on Windows as above.
- In any git repo:
copilot -p "Reply with just: ok" ~/.copilot/logs/process-*.logshows, once per hook:
[ERROR] [rust:hooks] Hook from "tokeneconomizer@tokeneconomizer" execution failed: Error: Hook command failed with code 1
What I tested
| Variant | Normal user PATH | PATH with Git bin on it |
|---|---|---|
Original command |
❌ 4 hook failures | ❌ 4 hook failures |
"command": "sh \"${PLUGIN_ROOT}/scripts/te-hook\" ..." |
❌ (sh not on PATH) |
✅ |
Split bash + powershell with sh lookup (below) |
✅ | ✅ |
A plain sh prefix isn't enough, because Git for Windows doesn't put sh.exe on PATH by default. Deriving it from git.exe alone isn't enough either: some hosts bundle a Git whose sh.exe is under usr\bin instead of bin.
Suggested fix
Keep the POSIX command as bash, and add a powershell entry that locates sh.exe (PATH first, then next to git.exe):
{
"type": "command",
"bash": "\"${PLUGIN_ROOT}/scripts/te-hook\" --host copilot",
"powershell": "$s=(Get-Command sh.exe -ErrorAction SilentlyContinue).Source; if(-not $s){$g=Split-Path (Split-Path (Get-Command git.exe -ErrorAction SilentlyContinue).Source); $s=@(\"$g\\bin\\sh.exe\",\"$g\\usr\\bin\\sh.exe\") | Where-Object {Test-Path $_} | Select-Object -First 1}; & $s \"${PLUGIN_ROOT}/scripts/te-hook\" --host copilot",
"timeoutSec": 30
}
With this applied to all 6 events, I get no hook errors, te status shows the repo, and toolprune records the catalog. A small te-hook.ps1 wrapper would be cleaner than the inline one-liner. The Codex manifest's commandWindows handling looks like the equivalent of this for Codex.
Possibly related: #167 (te launcher on Windows/Git Bash).
- Lingua principale
- Python
- Stelle
- 5.6k
- Fork
- 344
- Merge medio
- 17h 41m
- PR unite (30g)
- 73
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/TokenEconomizer
-
trace: Pi's 1-hour cache writes are priced at 1.25x, but billed at 2xForse già presa @Shizoqua l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
microsoft/TokenEconomizer#221 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
microsoft/TokenEconomizer#219 ·
I maintainer di solito rispondono entro 1 giorno
-
CommandCode supportAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
microsoft/TokenEconomizer#205 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
microsoft/TokenEconomizer#193 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
microsoft/TokenEconomizer#186 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/TokenEconomizer
Issue simili
-
Input: placeholder drawn in the text colour when the empty Input is focused but not yet editedAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pierreaubert/gpui-toolkit#114 ·
I maintainer di solito rispondono entro 1 giorno
-
intake mcp-intake needs-human-review priority:high type:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Ikalus1988/MisakaNet#4903 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
FinanceFlash/unvibecode#819 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno