fix(windows): ConPTY + kernel32 metrics + agent loop cap (v0.7.6) #14
Reference in New Issue
Block a user
Delete Branch "release/v0.7.6"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Trois bugs Windows + une amélioration agent
1. Dashboard CPU/RAM/Réseau tous à 0
handleSystemMetricslisait exclusivement/proc/*— ces fichiers n'existent pas sur Windows, donc tous les compteurs restaient à zéro.Fix : split en
metrics_unix.go(!windows, code existant) etmetrics_windows.go:kernel32!GetSystemTimes— ratio dIdle/dTotal entre deux samples FILETIMEkernel32!GlobalMemoryStatusEx— TotalPhys / AvailPhysAppels directs au kernel via
golang.org/x/sys/windows, pas de spawn PowerShell, ~50 µs par appel.2. Terminal écran noir sur Windows
creack/pty/v2retourne "operating system not supported" sur Windows. Le fallback pipes (v0.7.1) ne porte pas de signaux TTY, donc cmd/pwsh/wsl détectent l'absence de TTY et passent silencieux ou attendent.Fix : implémentation ConPTY native via
kernel32!CreatePseudoConsole(internal/api/terminal_conpty_windows.go) :CreatePseudoConsole+ 2 pipes anonymesSTARTUPINFOEX+PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLEviawindows.NewProcThreadAttributeListCreateProcessWlance le shell avec le PC attaché → ANSI / cursor / line discipline completsResizePseudoConsolecâblé sur les events xterm.jscanUseConPTY()probe une fois au démarrage (Win 10 1809+ requis), cachedpipeSessionconservé pour les hosts trop vieux ou si la création échoueRestructure :
terminal_session.go(interface + structs uniquement),terminal_session_unix.go(creack/pty),terminal_session_windows.go(ConPTY puis pipe),terminal_conpty_windows.go(impl).3. Agent s'arrête après 15 outils
Fix :
MaxToolIterations15 → 500 danschat_engine.go. Cap conservé pour éviter les boucles infinies en cas de bug modèle, mais 500 itérations couvre largement les cas réels (refactor multi-fichiers, debug exploratoire). Doc inline ajoutée.Versioning
Test plan
Three issues reported on Windows + one user-requested limit bump: 1. Dashboard CPU/RAM/Network all at 0 handleSystemMetrics read /proc/* exclusively. Replaced with a platform-split: - metrics_unix.go (!windows): existing /proc reading code. - metrics_windows.go: kernel32!GetSystemTimes for CPU (delta of idle vs kernel+user FILETIMEs) and kernel32!GlobalMemoryStatusEx for memory. Network left at zero for now — MIB_IF_ROW2 is too version-sensitive to parse by hand. handlers_info.go::handleSystemMetrics reduced to one delegating call. 2. Terminal black screen on Windows creack/pty/v2 returns "unsupported" on Windows; the v0.7.1 pipe fallback works but pipes don't carry TTY signals, so cmd/pwsh/wsl go silent. Implemented native ConPTY: - terminal_conpty_windows.go: CreatePseudoConsole + STARTUPINFOEX + PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE wiring via windows.NewProcThreadAttributeList. CreateProcessW launches child with the PC attached, full ANSI / line discipline / resize. - canUseConPTY() probes once at startup (Win10 1809+ check). - Restructure: terminal_session.go now holds just the interface + ptySession + pipeSession structs. terminal_session_unix.go wires creack/pty. terminal_session_windows.go tries ConPTY first, falls back to pipeSession. 3. Agent stops after 15 tool calls MaxToolIterations bumped 15 → 500. Doc comment explains why the cap exists at all (infinite-loop safety) and that 500 is well above realistic usage. - internal/version/version.go: 0.7.5 → 0.7.6 - CHANGELOG.md: v0.7.6 entry covers the three fixes