Alice 0.23.1
Windows portability batch
Validated end-to-end on a Windows 11 VM (Python 3.13, full test suite via the official per-file runner). Every fix verified green on Linux with scripts/run_tests.sh — no regressions.
Windows fixes
- Image routing: local image-path regex now accepts Windows drive-letter paths (
C:\.../C:/...), same anchor the gateway'sextract_local_files()uses; expanded~/x.pngmatches are normalized withnormpath()so they print as native paths. - File safety: sandbox-mirror classifier returns POSIX
inner_path/mirror_root(mirrorsclassify_container_mirror_target's existing contract). - Shell hooks: on Windows, shebang scripts (
#!/usr/bin/env bash) resolve through_shebang_interpreter()— bash from PATH or the standard Git-for-Windows install dirs — and commands re-tokenize withshlex posix=FalsesoC:\paths keep their backslashes. - Skills:
_find_windows_bash()locates Git-bash off-PATH for inline-shell snippets (!\echo ...``), with a cmd.exe fallback when no bash exists. - Subdirectory hints / verification evidence:
shlex.split(posix=False)for commands containing Windows paths — backslash paths are no longer eaten, so sub-dir hints register and ad-hoc verification scripts are recognized. - Learning graph:
%-d(glibc-only) replaced with portablef"{dt.day}". - Test runner: forces UTF-8 stdout/stderr — cp1252 consoles no longer crash on progress glyphs (✓/✗).
Test-suite portability
USERPROFILEmocked alongsideHOME(Windowsexpanduser()prefers the former)tempfile.gettempdir()instead of hardcoded/tmpshutil.which()instead ofwhichsubprocess calls- Explicit
utf-8read_text()(Windows default is cp1252 — em-dashes became mojibake) - Path assertions compare parts instead of raw strings
- Case-insensitive env-var key match (Windows
os.environis case-insensitive)
Also in this release
- Repo URLs rebranded from the internal Gitea host to
github.com/Stuko0/alice-agent(banner, auth, updater, Telegram adapter, installers, osint UA). - README fixes: providers link points to the actual
/docs/providers/page; broken 404 links and internal IPs removed from badges.
Full changelog: v0.23.0...v0.23.1