Compare commits
4 Commits
v0.7.6
...
v0.7.8-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5fd8cceabd | ||
|
|
a3487392c0 | ||
|
|
af5fbf9324 | ||
|
|
29953bde6d |
@@ -152,12 +152,15 @@ jobs:
|
|||||||
echo ""
|
echo ""
|
||||||
echo "**Windows (x86_64)** — sans privilèges admin, crée les raccourcis Bureau + Menu Démarrer + commande \`muyue\` dans la session courante :"
|
echo "**Windows (x86_64)** — sans privilèges admin, crée les raccourcis Bureau + Menu Démarrer + commande \`muyue\` dans la session courante :"
|
||||||
echo "\`\`\`powershell"
|
echo "\`\`\`powershell"
|
||||||
|
echo "Get-Process muyue, muyue-windows-amd64 -ErrorAction SilentlyContinue | Stop-Process -Force; Start-Sleep -Milliseconds 500"
|
||||||
echo "\$dest = \"\$env:LOCALAPPDATA\\Muyue\"; New-Item -ItemType Directory -Force -Path \$dest | Out-Null"
|
echo "\$dest = \"\$env:LOCALAPPDATA\\Muyue\"; New-Item -ItemType Directory -Force -Path \$dest | Out-Null"
|
||||||
echo "Invoke-WebRequest -Uri \"${DL_URL}/muyue-windows-amd64.zip\" -OutFile \"\$env:TEMP\\muyue.zip\""
|
echo "Invoke-WebRequest -Uri \"${DL_URL}/muyue-windows-amd64.zip\" -OutFile \"\$env:TEMP\\muyue.zip\""
|
||||||
echo "Expand-Archive -Path \"\$env:TEMP\\muyue.zip\" -DestinationPath \$dest -Force"
|
echo "Expand-Archive -Path \"\$env:TEMP\\muyue.zip\" -DestinationPath \$dest -Force"
|
||||||
echo "& \"\$dest\\muyue-windows-amd64.exe\" install-shortcuts"
|
echo "& \"\$dest\\muyue-windows-amd64.exe\" install-shortcuts"
|
||||||
echo "\$env:Path += \";\$dest\""
|
echo "\$env:Path += \";\$dest\""
|
||||||
echo "\`\`\`"
|
echo "\`\`\`"
|
||||||
|
echo ""
|
||||||
|
echo "Le 1ʳᵉ ligne tue toute instance Muyue déjà lancée (sinon Windows refuse d'écraser le \`.exe\` verrouillé et l'install échoue silencieusement). Si vous mettez à jour depuis une version précédente, c'est obligatoire."
|
||||||
} > /tmp/stable_changelog.md
|
} > /tmp/stable_changelog.md
|
||||||
echo "path=/tmp/stable_changelog.md" >> $GITHUB_OUTPUT
|
echo "path=/tmp/stable_changelog.md" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
|||||||
36
CHANGELOG.md
36
CHANGELOG.md
@@ -4,6 +4,42 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||||
|
|
||||||
|
## v0.7.8
|
||||||
|
|
||||||
|
### Fix régression v0.7.6 : terminaux ouverts en fenêtre externe
|
||||||
|
|
||||||
|
Symptôme rapporté : depuis v0.7.6, cliquer sur PowerShell / cmd dans l'onglet Terminal ouvre une **fenêtre console séparée** au lieu de s'afficher dans le tab xterm.js (régression — v0.7.5 fonctionnait).
|
||||||
|
|
||||||
|
**Cause** : le binding ConPTY introduit en v0.7.6 passait `&hPC` (pointeur vers la variable Go locale) à `UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, …)`. Or cet attribut est un quirk de l'API Win32 : `lpValue` doit être la **valeur du handle** (cast en `PVOID`), **pas** un pointeur vers la variable. Avec `&hPC`, le kernel lisait des octets aléatoires, l'attribut PSEUDOCONSOLE était silencieusement ignoré, et `CreateProcessW` créait une nouvelle console pour l'enfant — d'où la fenêtre externe.
|
||||||
|
|
||||||
|
**Fix** (1 ligne) :
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Avant
|
||||||
|
unsafe.Pointer(&hPC)
|
||||||
|
|
||||||
|
// Après
|
||||||
|
unsafe.Pointer(uintptr(hPC)) // le HPCON value comme PVOID
|
||||||
|
```
|
||||||
|
|
||||||
|
Référence : Microsoft EchoCon sample + bibliothèques Go ConPTY existantes (`UserExistsError/conpty`, `aymanbagabas/go-pty`) utilisent toutes la valeur du handle directement.
|
||||||
|
|
||||||
|
Conséquence : terminaux PowerShell / cmd / WSL s'ouvrent à nouveau **dans** le tab xterm.js avec TTY complet (ANSI, prompt couleur, vim, etc.).
|
||||||
|
|
||||||
|
## v0.7.7
|
||||||
|
|
||||||
|
### Fix : install Windows échoue silencieusement quand une version précédente tourne
|
||||||
|
|
||||||
|
Symptôme rapporté en mettant à jour de v0.7.5 → v0.7.6 : `Expand-Archive ... -Force` semble réussir mais le `.exe` n'est en réalité pas écrasé (Windows refuse de remplacer un fichier verrouillé), donc après l'install, `muyue` lance toujours l'ancienne version. Aucun message d'erreur visible — d'où le côté traître.
|
||||||
|
|
||||||
|
**Fix** : ajout d'une 1ʳᵉ ligne au snippet d'install qui tue toute instance Muyue déjà lancée :
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Get-Process muyue, muyue-windows-amd64 -ErrorAction SilentlyContinue | Stop-Process -Force; Start-Sleep -Milliseconds 500
|
||||||
|
```
|
||||||
|
|
||||||
|
`-ErrorAction SilentlyContinue` rend l'étape idempotente (pas d'erreur si rien ne tourne, cas d'install propre). Le `Start-Sleep` 500ms laisse Windows libérer le file handle. Le snippet officiel passe à 6 lignes ; une note explicative est ajoutée dans la section *Install* du changelog généré.
|
||||||
|
|
||||||
## v0.7.6
|
## v0.7.6
|
||||||
|
|
||||||
### Trois fixes Windows + une amélioration agent
|
### Trois fixes Windows + une amélioration agent
|
||||||
|
|||||||
@@ -80,9 +80,15 @@ func startConptySession(cmd *exec.Cmd) (termSession, error) {
|
|||||||
windows.CloseHandle(outRead)
|
windows.CloseHandle(outRead)
|
||||||
return nil, fmt.Errorf("NewProcThreadAttributeList: %w", err)
|
return nil, fmt.Errorf("NewProcThreadAttributeList: %w", err)
|
||||||
}
|
}
|
||||||
|
// PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE is a quirk of the Win32 API: lpValue
|
||||||
|
// is the HPCON *value* (cast to PVOID), not a pointer to the handle. If
|
||||||
|
// we pass &hPC the kernel reads garbage, the PC attribute is silently
|
||||||
|
// ignored, and cmd/pwsh get their own external console window — which is
|
||||||
|
// exactly the regression v0.7.6 introduced. The cbSize stays the size of
|
||||||
|
// the handle (8 bytes on amd64). Reference: Microsoft EchoCon sample.
|
||||||
if err := attrList.Update(
|
if err := attrList.Update(
|
||||||
procThreadAttributePseudoconsole,
|
procThreadAttributePseudoconsole,
|
||||||
unsafe.Pointer(&hPC),
|
unsafe.Pointer(uintptr(hPC)),
|
||||||
unsafe.Sizeof(hPC),
|
unsafe.Sizeof(hPC),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
attrList.Delete()
|
attrList.Delete()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
Name = "muyue"
|
Name = "muyue"
|
||||||
Version = "0.7.6"
|
Version = "0.7.8"
|
||||||
Author = "La Légion de Muyue"
|
Author = "La Légion de Muyue"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user