Skip to content

Commit fc76c8e

Browse files
committed
chore(release): prepare 0.40.1
1 parent 2d7b17e commit fc76c8e

8 files changed

Lines changed: 52 additions & 42 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ GitHub Releases page; `0.8.0` is the new starting line.
1515

1616
## Unreleased
1717

18+
## 0.40.1 (2026-06-10)
19+
1820
- **Windows/Linux native installers: web UI no longer 404s on `/`.** The installer CI froze the app without building the gitignored web/vis frontend bundles, so `pythinker web` opened a browser onto `GET /?token=… → 404 Not Found`. Both installer workflows now build the bundles before PyInstaller (matching the PyPI release flow — pip/wheel installs were never affected), every PyInstaller spec refuses to freeze when the bundles are missing, and a build that still lacks them serves an explanatory page on `/` (with the REST API still reachable under `/api`) instead of a bare 404.
1921
- **Startup banner renders on legacy Windows consoles.** The `pythinker web` / `pythinker vis` PYTHINKER banner raw-printed Unicode block art, which garbled on legacy code pages (e.g. PowerShell with cp1252) and raised `UnicodeEncodeError` when output was redirected. The banner now honors the existing ASCII-glyph detection (`PYTHINKER_ASCII_UI` / `PYTHINKER_TUI_GLYPHS=ascii` opt-ins included) with width-preserving ASCII fallbacks, and degrades per line instead of crashing when a stream rejects Unicode.
2022

23+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.40.1`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
24+
2125
## 0.40.0 (2026-06-10)
2226

2327
- **Web: same-origin WebSockets accepted, version banner synced to the backend, and token bootstrap race fixed.** The local-mode web server now auto-populates the allowed-origin list (an empty allowlist rejects every `Origin`-bearing request, which previously broke all WebSocket handshakes with a 403). The UI version banner prefers the version the running backend reports (via the config API) over the stale build-time constant, and a transient version-fetch failure no longer permanently disables the backend banner for the session. The initial auth-token bootstrap race that could fail the first request is resolved. `ESC` now reliably terminates only the background tasks spawned by the interrupted turn, and recall context is re-framed so prior-session snippets can't be misread as new instructions.

README.md

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,12 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
5050
5151
---
5252

53-
## 🆕 What's New in 0.40.0
53+
## 🆕 What's New in 0.40.1
5454

55-
- **Alibaba: plan-key routing fixed, live model discovery, and `qwen3.7-plus` default.** Token Plan keys (`sk-sp-`, `sk-tok-`, `sk-ws-`) now route to the correct endpoint — `sk-sp-` was previously sent to the Coding Plan host, causing 401s. Model discovery no longer filters to a hardcoded allowlist; every chat model the endpoint returns now appears, so Token Plan users see the full multi-vendor set (Qwen, DeepSeek, GLM, Kimi, MiniMax). First-login default is `qwen3.7-plus`.
56-
- **Qwen3.x models always-thinking on both Alibaba plans.** Qwen3.x/3.7 models carry the `always_thinking` capability on Alibaba Model Studio and OpenCode Go plans — no effort dial, no top-border label.
57-
- **Web: same-origin WebSockets, synced version banner, and token bootstrap fix.** An empty allowed-origin list no longer rejects all WebSocket connections with a 403; the UI banner prefers the version the running backend reports; the initial auth-token race is resolved. `ESC` reliably clears only turn-spawned background tasks.
58-
- **Security, correctness, and multi-instance hardening.** Permission gate closes awk-pipe and `xargs -L N` shell-out bypasses. Glob enforces workspace boundary via resolved symlinks. Multi-instance sessions use a per-session writer lock; the shared metadata index uses locked read-modify-write; JSONL appenders repair torn final lines. OAuth refresh carries lifetime forward on missing `expires_in`.
59-
- **Thinking effort: single top-right label, input border stays neutral.** The border no longer recolors per effort level. Effort is shown once as a level-colored dot+label flushed to the right of the input's top border, hidden for always-thinking and non-thinking models.
60-
- **TUI refinements and agent prompt overhaul.** Adaptive terminal-background probe, unified todo renderer, elapsed/tokens/t-s status line, consistent diff palette. All default agent prompts restructured with Mission / Hard Constraints / Workflow / Output Contract sections.
61-
- **Breaking: `pythinker web` / `pythinker vis` host flag is now `-H`.** `-h` is now a help alias. Scripts using `-h 0.0.0.0` must switch to `-H <ip>` or `--host <ip>`.
55+
- **Windows/Linux native installers: web UI no longer 404s on `/`.** The installer CI froze the app without building the gitignored web/vis frontend bundles, so `pythinker web` opened a browser onto `GET /?token=… → 404 Not Found`. Both installer workflows now build the bundles before PyInstaller (matching the PyPI release flow — pip/wheel installs were never affected), every PyInstaller spec refuses to freeze when the bundles are missing, and a build that still lacks them serves an explanatory 503 page instead of a bare 404.
56+
- **Startup banner renders on legacy Windows consoles.** `pythinker web` / `pythinker vis` now honor the existing ASCII-glyph detection with width-preserving fallbacks and degrade per line instead of crashing when the output stream rejects Unicode (e.g. PowerShell with cp1252).
6257

63-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.40.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
58+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.40.1`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
6459

6560

6661
---
@@ -150,7 +145,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
150145

151146
| Platform | Recommended install | Artifact source |
152147
|---|---|---|
153-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.40.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
148+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.40.1.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
154149
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> / <img src="https://img.shields.io/badge/-Linux-FCC624?style=flat-square&logo=linux&logoColor=black" alt="Linux">** | `curl -fsSL https://pythinker.com/install.sh \| bash` | native tarball from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
155150
| **<img src="https://img.shields.io/badge/-macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS"> — Homebrew** | `brew install Pythoughts-labs/pythinker/pythinker-code` | auto-published Homebrew tap |
156151
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -178,7 +173,7 @@ pythinker # start the interactive TUI
178173

179174
### 🪟 Windows — native installer
180175

181-
`PythinkerSetup-0.40.0.exe` is a signed* Inno Setup wizard. Installs per-user
176+
`PythinkerSetup-0.40.1.exe` is a signed* Inno Setup wizard. Installs per-user
182177
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
183178
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
184179
the change. **No UAC prompt.**
@@ -189,13 +184,13 @@ irm https://pythinker.com/install.ps1 | iex
189184
190185
# Or manually download the installer + checksum from the Releases page,
191186
# verify with Get-FileHash, then run:
192-
.\PythinkerSetup-0.40.0.exe
187+
.\PythinkerSetup-0.40.1.exe
193188
194189
# Open a fresh PowerShell
195190
pythinker --version
196191
```
197192

198-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.40.0.exe /ALLUSERS`
193+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.40.1.exe /ALLUSERS`
199194
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
200195

201196
**Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -246,26 +241,26 @@ attached to every GitHub Release.
246241

247242
```sh
248243
# Debian / Ubuntu (x86_64)
249-
sudo dpkg -i pythinker-code_0.40.0_amd64.deb
244+
sudo dpkg -i pythinker-code_0.40.1_amd64.deb
250245
sudo apt-get install -f # only if dpkg reports missing deps
251246

252247
# Debian / Ubuntu (ARM64)
253-
sudo dpkg -i pythinker-code_0.40.0_arm64.deb
248+
sudo dpkg -i pythinker-code_0.40.1_arm64.deb
254249

255250
# Fedora / RHEL / openSUSE (x86_64)
256-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm
257-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm.sha256
258-
sha256sum -c pythinker-code-0.40.0.x86_64.rpm.sha256
251+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.x86_64.rpm
252+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.x86_64.rpm.sha256
253+
sha256sum -c pythinker-code-0.40.1.x86_64.rpm.sha256
259254
# Fedora / RHEL:
260-
sudo dnf install ./pythinker-code-0.40.0.x86_64.rpm
255+
sudo dnf install ./pythinker-code-0.40.1.x86_64.rpm
261256
# openSUSE:
262-
sudo zypper install ./pythinker-code-0.40.0.x86_64.rpm
257+
sudo zypper install ./pythinker-code-0.40.1.x86_64.rpm
263258

264259
# Fedora / RHEL (aarch64)
265-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.aarch64.rpm
266-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.aarch64.rpm.sha256
267-
sha256sum -c pythinker-code-0.40.0.aarch64.rpm.sha256
268-
sudo dnf install ./pythinker-code-0.40.0.aarch64.rpm
260+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.aarch64.rpm
261+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.aarch64.rpm.sha256
262+
sha256sum -c pythinker-code-0.40.1.aarch64.rpm.sha256
263+
sudo dnf install ./pythinker-code-0.40.1.aarch64.rpm
269264
```
270265

271266
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -274,8 +269,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
274269
**Verify before install:**
275270

276271
```sh
277-
sha256sum -c pythinker-code_0.40.0_amd64.deb.sha256 # Debian/Ubuntu
278-
sha256sum -c pythinker-code-0.40.0.x86_64.rpm.sha256 # Fedora/RHEL
272+
sha256sum -c pythinker-code_0.40.1_amd64.deb.sha256 # Debian/Ubuntu
273+
sha256sum -c pythinker-code-0.40.1.x86_64.rpm.sha256 # Fedora/RHEL
279274
```
280275

281276
**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /

docs/en/guides/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ On Windows, run the PowerShell bootstrap. It downloads the native installer, ver
4444
irm https://pythinker.com/install.ps1 | iex
4545
```
4646

47-
You can also download `PythinkerSetup-0.40.0.exe` manually from the [latest release](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
47+
You can also download `PythinkerSetup-0.40.1.exe` manually from the [latest release](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
4848

4949
Verify the installation:
5050

docs/en/release-notes/breaking-changes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ This page documents breaking changes in Pythinker Code releases and provides mig
44

55
## Unreleased
66

7+
## 0.40.1 (2026-06-10)
8+
9+
No breaking changes. This release is compatible with 0.40.0 user configuration, native installs, and session data.
10+
711
## 0.40.0 (2026-06-10)
812

913
**`pythinker web` / `pythinker vis` `-h` host flag renamed to `-H`.** The short flag `-h` is now a help alias on both subcommands (matching the root CLI); previously `-h <ip>` bound the host. Scripts using `-h 0.0.0.0` must switch to `-H <ip>` or `--host <ip>`.

docs/en/release-notes/changelog.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ GitHub Releases page; `0.8.0` is the new starting line.
1717

1818
## Unreleased
1919

20+
## 0.40.1 (2026-06-10)
21+
22+
- **Windows/Linux native installers: web UI no longer 404s on `/`.** The installer CI froze the app without building the gitignored web/vis frontend bundles, so `pythinker web` opened a browser onto `GET /?token=… → 404 Not Found`. Both installer workflows now build the bundles before PyInstaller (matching the PyPI release flow — pip/wheel installs were never affected), every PyInstaller spec refuses to freeze when the bundles are missing, and a build that still lacks them serves an explanatory page on `/` (with the REST API still reachable under `/api`) instead of a bare 404.
23+
- **Startup banner renders on legacy Windows consoles.** The `pythinker web` / `pythinker vis` PYTHINKER banner raw-printed Unicode block art, which garbled on legacy code pages (e.g. PowerShell with cp1252) and raised `UnicodeEncodeError` when output was redirected. The banner now honors the existing ASCII-glyph detection (`PYTHINKER_ASCII_UI` / `PYTHINKER_TUI_GLYPHS=ascii` opt-ins included) with width-preserving ASCII fallbacks, and degrades per line instead of crashing when a stream rejects Unicode.
24+
25+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.40.1`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
26+
2027
## 0.40.0 (2026-06-10)
2128

2229
- **Web: same-origin WebSockets accepted, version banner synced to the backend, and token bootstrap race fixed.** The local-mode web server now auto-populates the allowed-origin list (an empty allowlist rejects every `Origin`-bearing request, which previously broke all WebSocket handshakes with a 403). The UI version banner prefers the version the running backend reports (via the config API) over the stale build-time constant, and a transient version-fetch failure no longer permanently disables the backend banner for the session. The initial auth-token bootstrap race that could fail the first request is resolved. `ESC` now reliably terminates only the background tasks spawned by the interrupted turn, and recall context is re-framed so prior-session snippets can't be misread as new instructions.

packages/linux-installer/README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ End-user install from the current GitHub Release:
88

99
```sh
1010
# Debian / Ubuntu
11-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code_0.40.0_amd64.deb
12-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code_0.40.0_amd64.deb.sha256
13-
sha256sum -c pythinker-code_0.40.0_amd64.deb.sha256
14-
sudo dpkg -i pythinker-code_0.40.0_amd64.deb
11+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code_0.40.1_amd64.deb
12+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code_0.40.1_amd64.deb.sha256
13+
sha256sum -c pythinker-code_0.40.1_amd64.deb.sha256
14+
sudo dpkg -i pythinker-code_0.40.1_amd64.deb
1515
sudo apt-get install -f # only needed if dependencies fail to resolve
1616

1717
# Fedora / RHEL / openSUSE
18-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm
19-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.0/pythinker-code-0.40.0.x86_64.rpm.sha256
20-
sha256sum -c pythinker-code-0.40.0.x86_64.rpm.sha256
21-
sudo dnf install ./pythinker-code-0.40.0.x86_64.rpm
18+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.x86_64.rpm
19+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.40.1/pythinker-code-0.40.1.x86_64.rpm.sha256
20+
sha256sum -c pythinker-code-0.40.1.x86_64.rpm.sha256
21+
sudo dnf install ./pythinker-code-0.40.1.x86_64.rpm
2222
# or, on openSUSE:
23-
sudo zypper install ./pythinker-code-0.40.0.x86_64.rpm
23+
sudo zypper install ./pythinker-code-0.40.1.x86_64.rpm
2424
```
2525

2626
The package drops a single executable at `/usr/bin/pythinker` and a license
@@ -36,17 +36,17 @@ file at `/usr/share/doc/pythinker-code/LICENSE`.
3636
## Build
3737

3838
```sh
39-
bash packages/linux-installer/build.sh 0.40.0
39+
bash packages/linux-installer/build.sh 0.40.1
4040
```
4141

4242
Outputs to `dist/`:
4343

44-
- `pythinker-code_0.40.0_amd64.deb`
45-
- `pythinker-code-0.40.0.x86_64.rpm`
44+
- `pythinker-code_0.40.1_amd64.deb`
45+
- `pythinker-code-0.40.1.x86_64.rpm`
4646

4747
The portable tarball used by `scripts/install-native.sh` is published by
4848
the existing `release-pythinker-cli.yml` workflow under the cargo-dist
49-
target-triple naming (e.g. `pythinker-0.40.0-x86_64-unknown-linux-gnu.tar.gz`).
49+
target-triple naming (e.g. `pythinker-0.40.1-x86_64-unknown-linux-gnu.tar.gz`).
5050

5151
## CI
5252

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "pythinker-code"
3-
version = "0.40.0"
3+
version = "0.40.1"
44
description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
55
readme = "README.md"
66
requires-python = ">=3.12"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)