Skip to content

Commit a60bde2

Browse files
committed
chore(release): prepare 0.33.0
1 parent d12c505 commit a60bde2

8 files changed

Lines changed: 62 additions & 40 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ GitHub Releases page; `0.8.0` is the new starting line.
1515

1616
## Unreleased
1717

18+
## 0.33.0 (2026-06-03)
19+
20+
### What changed in this release
21+
1822
- **Three-scope config resolution (User → Project → Local).** `load_config()` now runs a five-step pipeline — Ingest → Guard → Merge → Env → Validate — merging `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` with type-based rules. Scalars use last-writer-wins; lists are concatenated (deduplication for `allowed_domains` and `extra_skill_dirs`); dicts are recursively merged. Scope-locked fields (`providers.*`, `services.*`, `feedback.api_key`) are blocked from project/local files with a clear error. The resolved config now tracks which files contributed via `source_scopes`. Local config files are auto-gitignored on first use. PYTHINKER_* environment variables overlay all file-sourced values.
1923
- **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
20-
2124
- **❓ question marker standardized across all question surfaces.** A new `QUESTION_MARKER` constant in `glyphs.py` replaces the inconsistent mix of `` (inline transcript) and `?` (interactive panel, pager, prompt) with a single `` glyph (ASCII fallback: `?`) used everywhere.
2225
- **Scratchpad isolated to current session; cleans up on interruption.** Agents no longer fast-skim all prior sessions' scratch files on startup, eliminating the post-interrupt confusion where stale planning from previous sessions was injected into a new session's context. Scratch files are now deleted on every session exit — success or interruption — so files no longer accumulate.
2326
- **`SetTodoList` gated behind explicit plan approval.** The tool description and agent system prompt now require that todos are set only after the user agrees on the plan. During planning and exploration the tool must not be called; once set, the list is the single source of truth for execution with status-only updates.
2427

28+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.0`, or use the native installer for your OS (see the README install table).
29+
2530
## 0.32.0 (2026-06-03)
2631

2732
### What changed in this release

README.md

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

53-
## 🆕 What's New in 0.32.0
53+
## 🆕 What's New in 0.33.0
5454

55-
- **`pythinker mcp add` no longer crashes on Windows and Linux native builds.** `copy_metadata()` replaces the fragile `collect_data_files()` approach in all three PyInstaller specs, so `fastmcp` and `mcp` dist-info are bundled and `importlib.metadata` resolves correctly in frozen binaries.
56-
- **Pythinker work directories are automatically gitignored on startup.** `.pythinker/`, `.pythinker-review/`, and `.pythinker-review-flow/` are silently added to the project's `.gitignore` when the agent starts inside a git repo, keeping the working tree clean.
57-
- **Old sessions and plan files are swept on startup.** Archives older than `session_retention_days` (default 30) are removed non-interactively at launch. Set `session_retention_days = 0` to disable.
58-
- **Windows upgrade version display fix.** Inno Setup now wipes `_internal` before installing new files, so in-place upgrades no longer show a stale version number or re-trigger the update prompt.
55+
- **Three-scope config resolution (User → Project → Local).** `load_config()` merges `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` through a five-step pipeline. Scope-locked fields are blocked from project/local files with a clear error; local files are auto-gitignored on first use; PYTHINKER_* env vars overlay everything.
56+
- **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
57+
- **❓ question marker standardized across all question surfaces.** A single `QUESTION_MARKER` constant replaces the inconsistent mix of glyphs used in the inline transcript, interactive panel, pager, and prompt.
58+
- **Scratchpad isolated to current session; cleans up on interruption.** Scratch files are deleted on every session exit so stale planning from previous sessions can no longer be injected into a new session's context.
59+
- **`SetTodoList` gated behind explicit plan approval.** Todos may only be set after the user agrees on the plan; the tool description and system prompt now enforce this contract.
5960

60-
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.32.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
61+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
6162

6263

6364
---
@@ -147,7 +148,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.
147148

148149
| Platform | Recommended install | Artifact source |
149150
|---|---|---|
150-
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.32.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151+
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.33.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
151152
| **<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) |
152153
| **<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 |
153154
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
@@ -175,7 +176,7 @@ pythinker # start the interactive TUI
175176

176177
### 🪟 Windows — native installer
177178

178-
`PythinkerSetup-0.32.0.exe` is a signed* Inno Setup wizard. Installs per-user
179+
`PythinkerSetup-0.33.0.exe` is a signed* Inno Setup wizard. Installs per-user
179180
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
180181
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
181182
the change. **No UAC prompt.**
@@ -186,13 +187,13 @@ irm https://pythinker.com/install.ps1 | iex
186187
187188
# Or manually download the installer + checksum from the Releases page,
188189
# verify with Get-FileHash, then run:
189-
.\PythinkerSetup-0.32.0.exe
190+
.\PythinkerSetup-0.33.0.exe
190191
191192
# Open a fresh PowerShell
192193
pythinker --version
193194
```
194195

195-
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.32.0.exe /ALLUSERS`
196+
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.33.0.exe /ALLUSERS`
196197
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).
197198

198199
**Upgrade:** `pythinker update` from inside the running app — it downloads
@@ -243,26 +244,26 @@ attached to every GitHub Release.
243244

244245
```sh
245246
# Debian / Ubuntu (x86_64)
246-
sudo dpkg -i pythinker-code_0.32.0_amd64.deb
247+
sudo dpkg -i pythinker-code_0.33.0_amd64.deb
247248
sudo apt-get install -f # only if dpkg reports missing deps
248249

249250
# Debian / Ubuntu (ARM64)
250-
sudo dpkg -i pythinker-code_0.32.0_arm64.deb
251+
sudo dpkg -i pythinker-code_0.33.0_arm64.deb
251252

252253
# Fedora / RHEL / openSUSE (x86_64)
253-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm
254-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
255-
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
254+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm
255+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm.sha256
256+
sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256
256257
# Fedora / RHEL:
257-
sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
258+
sudo dnf install ./pythinker-code-0.33.0.x86_64.rpm
258259
# openSUSE:
259-
sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
260+
sudo zypper install ./pythinker-code-0.33.0.x86_64.rpm
260261

261262
# Fedora / RHEL (aarch64)
262-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm
263-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.aarch64.rpm.sha256
264-
sha256sum -c pythinker-code-0.32.0.aarch64.rpm.sha256
265-
sudo dnf install ./pythinker-code-0.32.0.aarch64.rpm
263+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm
264+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.aarch64.rpm.sha256
265+
sha256sum -c pythinker-code-0.33.0.aarch64.rpm.sha256
266+
sudo dnf install ./pythinker-code-0.33.0.aarch64.rpm
266267
```
267268

268269
Both packages drop a small `/usr/bin/pythinker` launcher that execs the real
@@ -271,8 +272,8 @@ binary under `/usr/lib/pythinker/`, so your `$PATH` stays tidy.
271272
**Verify before install:**
272273

273274
```sh
274-
sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256 # Debian/Ubuntu
275-
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256 # Fedora/RHEL
275+
sha256sum -c pythinker-code_0.33.0_amd64.deb.sha256 # Debian/Ubuntu
276+
sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256 # Fedora/RHEL
276277
```
277278

278279
**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.32.0.exe` manually from the [latest release](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
47+
You can also download `PythinkerSetup-0.33.0.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.33.0 (2026-06-03)
8+
9+
No breaking changes. This release is compatible with 0.32.0 user configuration, native installs, and session data.
10+
711
## 0.32.0 (2026-06-03)
812

913
No breaking changes. This release is compatible with 0.31.0 user configuration, native installs, and session data.

docs/en/release-notes/changelog.md

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

1818
## Unreleased
1919

20+
## 0.33.0 (2026-06-03)
21+
22+
### What changed in this release
23+
24+
- **Three-scope config resolution (User → Project → Local).** `load_config()` now runs a five-step pipeline — Ingest → Guard → Merge → Env → Validate — merging `~/.pythinker/config.toml`, `.pythinker/config.toml`, and `.pythinker/config.local.toml` with type-based rules. Scalars use last-writer-wins; lists are concatenated (deduplication for `allowed_domains` and `extra_skill_dirs`); dicts are recursively merged. Scope-locked fields (`providers.*`, `services.*`, `feedback.api_key`) are blocked from project/local files with a clear error. The resolved config now tracks which files contributed via `source_scopes`. Local config files are auto-gitignored on first use. PYTHINKER_* environment variables overlay all file-sourced values.
25+
- **Pythinker identity: developed by Pythoughts-labs.** Package metadata, `--version` output, and `pythinker info` now reflect Pythoughts-labs as the author organisation.
26+
- **❓ question marker standardized across all question surfaces.** A new `QUESTION_MARKER` constant in `glyphs.py` replaces the inconsistent mix of `` (inline transcript) and `?` (interactive panel, pager, prompt) with a single `` glyph (ASCII fallback: `?`) used everywhere.
27+
- **Scratchpad isolated to current session; cleans up on interruption.** Agents no longer fast-skim all prior sessions' scratch files on startup, eliminating the post-interrupt confusion where stale planning from previous sessions was injected into a new session's context. Scratch files are now deleted on every session exit — success or interruption — so files no longer accumulate.
28+
- **`SetTodoList` gated behind explicit plan approval.** The tool description and agent system prompt now require that todos are set only after the user agrees on the plan. During planning and exploration the tool must not be called; once set, the list is the single source of truth for execution with status-only updates.
29+
30+
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.33.0`, or use the native installer for your OS (see the README install table).
31+
2032
## 0.32.0 (2026-06-03)
2133

2234
### What changed in this release

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.32.0/pythinker-code_0.32.0_amd64.deb
12-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code_0.32.0_amd64.deb.sha256
13-
sha256sum -c pythinker-code_0.32.0_amd64.deb.sha256
14-
sudo dpkg -i pythinker-code_0.32.0_amd64.deb
11+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code_0.33.0_amd64.deb
12+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code_0.33.0_amd64.deb.sha256
13+
sha256sum -c pythinker-code_0.33.0_amd64.deb.sha256
14+
sudo dpkg -i pythinker-code_0.33.0_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.32.0/pythinker-code-0.32.0.x86_64.rpm
19-
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.32.0/pythinker-code-0.32.0.x86_64.rpm.sha256
20-
sha256sum -c pythinker-code-0.32.0.x86_64.rpm.sha256
21-
sudo dnf install ./pythinker-code-0.32.0.x86_64.rpm
18+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm
19+
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.33.0/pythinker-code-0.33.0.x86_64.rpm.sha256
20+
sha256sum -c pythinker-code-0.33.0.x86_64.rpm.sha256
21+
sudo dnf install ./pythinker-code-0.33.0.x86_64.rpm
2222
# or, on openSUSE:
23-
sudo zypper install ./pythinker-code-0.32.0.x86_64.rpm
23+
sudo zypper install ./pythinker-code-0.33.0.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.32.0
39+
bash packages/linux-installer/build.sh 0.33.0
4040
```
4141

4242
Outputs to `dist/`:
4343

44-
- `pythinker-code_0.32.0_amd64.deb`
45-
- `pythinker-code-0.32.0.x86_64.rpm`
44+
- `pythinker-code_0.33.0_amd64.deb`
45+
- `pythinker-code-0.33.0.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.32.0-x86_64-unknown-linux-gnu.tar.gz`).
49+
target-triple naming (e.g. `pythinker-0.33.0-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.32.0"
3+
version = "0.33.0"
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)