Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,21 @@ GitHub Releases page; `0.8.0` is the new starting line.

## Unreleased

- Added an explicit "reduction ladder" and deliberate-shortcut guidance to the default agent prompt so the agent reaches for the simplest working solution (stdlib/native before custom code) by default.
- Added a `cleanup-audit` skill: a read-only, whole-repo pass that ranks over-engineering to delete, simplify, or replace with standard-library/platform equivalents (the repo-wide complement to `pythinker review diff --mode deslopify`).
## 0.49.0 (2026-06-20)

- **Reduction ladder in the default agent prompt.** The agent now walks an explicit,
ordered ladder before writing code — does this need to exist at all, then the standard
library, a native platform or framework feature, an already-installed dependency, one
line, and only then the minimum custom code — so it reaches for the simplest working
solution by default. The same guidance is mirrored into the `/best-practices` profile,
and deliberate shortcuts with a known ceiling are flagged with a comment naming the
ceiling and the upgrade path. Input validation, error handling, security, and
accessibility are never traded away for fewer lines.
- **New `cleanup-audit` skill.** A read-only, whole-repo pass that ranks over-engineering
— what to delete, simplify, or replace with standard-library/platform equivalents — as
the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It
applies no fixes and never proposes cutting validation, error handling, security, or
accessibility.
- **Fix: duplicate update notices at startup.** When a background install finishes
or a cached update is detected, the hint now renders only on the persistent
under-input line instead of also flashing as a footer toast.
Expand Down
44 changes: 22 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr

---

## 🆕 What's New in 0.48.0
## 🆕 What's New in 0.49.0

- **LSP code intelligence.** New `LSP` tool (go-to-definition, references, hover, symbols, call hierarchy) with plugin-backed language servers, session-scoped lifecycle, passive diagnostics after edits, and structured errors when a server lacks `implementationProvider`.
- **TUI theme and streaming overhaul.** Centralized theme system (`/theme`), 25 Hz paced streaming, syntax-highlighted diff cards, report panel polish, and smoother interactive/non-interactive live views — no preamble ghosting, mid-stream scrollback flicker, or fossilized spinners during tool transitions.
- **Proxy and tool-call hardening.** Tool results flatten for Anthropic-compatible proxies (fixes invisible GLM/z.ai outputs); `ToolSearch` is hidden from providers that cannot use deferred discovery; diff cards strip ANSI escapes; collapsed ReadFile cards show line counts and previews.
- **Cleaner code by default.** The agent now walks an explicit *reduction ladder* before writing code — does this need to exist at all, then the standard library, a native platform or framework feature, an already-installed dependency, one line, and only then the minimum custom code — so it reaches for the simplest working solution without trading away input validation, error handling, security, or accessibility. The same guidance layers into the `/best-practices` profile.
- **New `cleanup-audit` skill.** A read-only, whole-repo audit that ranks over-engineering — what to delete, simplify, or replace with standard-library/platform equivalents — as the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It applies no fixes.
- **Smoother startup.** Update notices no longer appear twice; the hint now renders once on the persistent under-input line instead of also flashing as a footer toast.

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


---
Expand Down Expand Up @@ -146,7 +146,7 @@ matches your OS — no Python, Node, or `uv` prerequisite.

| Platform | Recommended install | Artifact source |
|---|---|---|
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.48.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
| **🪟 Windows** | `irm https://pythinker.com/install.ps1 \| iex` | `PythinkerSetup-0.49.0.exe` from [Releases](https://github.com/Pythoughts-labs/pythinker-code/releases/latest) |
| **<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) |
| **<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 |
| **🐳 Docker** | `docker run --rm -it ghcr.io/pythoughts-labs/pythinker-code` | GHCR multi-arch image |
Expand Down Expand Up @@ -174,7 +174,7 @@ pythinker # start the interactive TUI

### 🪟 Windows — native installer

`PythinkerSetup-0.48.0.exe` is a signed* Inno Setup wizard. Installs per-user
`PythinkerSetup-0.49.0.exe` is a signed* Inno Setup wizard. Installs per-user
into `%LOCALAPPDATA%\Programs\Pythinker`, registers `pythinker` on your user
PATH (`HKCU\Environment`), broadcasts `WM_SETTINGCHANGE` so new shells see
the change. **No UAC prompt.**
Expand All @@ -185,13 +185,13 @@ irm https://pythinker.com/install.ps1 | iex

# Or manually download the installer + checksum from the Releases page,
# verify with Get-FileHash, then run:
.\PythinkerSetup-0.48.0.exe
.\PythinkerSetup-0.49.0.exe

# Open a fresh PowerShell
pythinker --version
```

**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.48.0.exe /ALLUSERS`
**Per-machine install** (IT-managed boxes): `.\PythinkerSetup-0.49.0.exe /ALLUSERS`
installs to `%ProgramFiles%\Pythinker` and writes PATH to HKLM (requires admin).

**Upgrade:** `pythinker update` from inside the running app — it downloads
Expand Down Expand Up @@ -249,26 +249,26 @@ attached to every GitHub Release.

```sh
# Debian / Ubuntu (x86_64)
sudo dpkg -i pythinker-code_0.48.0_amd64.deb
sudo dpkg -i pythinker-code_0.49.0_amd64.deb
sudo apt-get install -f # only if dpkg reports missing deps

# Debian / Ubuntu (ARM64)
sudo dpkg -i pythinker-code_0.48.0_arm64.deb
sudo dpkg -i pythinker-code_0.49.0_arm64.deb

# Fedora / RHEL / openSUSE (x86_64)
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm.sha256
sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm.sha256
sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256
# Fedora / RHEL:
sudo dnf install ./pythinker-code-0.48.0.x86_64.rpm
sudo dnf install ./pythinker-code-0.49.0.x86_64.rpm
# openSUSE:
sudo zypper install ./pythinker-code-0.48.0.x86_64.rpm
sudo zypper install ./pythinker-code-0.49.0.x86_64.rpm

# Fedora / RHEL (aarch64)
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.aarch64.rpm.sha256
sha256sum -c pythinker-code-0.48.0.aarch64.rpm.sha256
sudo dnf install ./pythinker-code-0.48.0.aarch64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.aarch64.rpm.sha256
sha256sum -c pythinker-code-0.49.0.aarch64.rpm.sha256
sudo dnf install ./pythinker-code-0.49.0.aarch64.rpm
```

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

```sh
sha256sum -c pythinker-code_0.48.0_amd64.deb.sha256 # Debian/Ubuntu
sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256 # Fedora/RHEL
sha256sum -c pythinker-code_0.49.0_amd64.deb.sha256 # Debian/Ubuntu
sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256 # Fedora/RHEL
```

**Upgrade:** download the new `.deb`/`.rpm` from Releases and `dpkg -i` /
Expand Down
4 changes: 2 additions & 2 deletions docs/en/guides/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Run the native installation script to complete the installation. The canonical e
curl -fsSL https://pythinker.com/install.sh | bash

# Pin a specific version
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.48.0
curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.49.0

# Custom prefix (defaults to $HOME/.local)
curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker
Expand All @@ -44,7 +44,7 @@ On Windows, run the PowerShell bootstrap. It downloads the native installer, ver
irm https://pythinker.com/install.ps1 | iex
```

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

Verify the installation:

Expand Down
4 changes: 4 additions & 0 deletions docs/en/release-notes/breaking-changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ This page documents breaking changes in Pythinker Code releases and provides mig

## Unreleased

## 0.49.0 (2026-06-20)

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

## 0.48.0 (2026-06-17)

No breaking changes. This release is compatible with 0.47.0 user configuration, native installs, and session data.
Expand Down
19 changes: 19 additions & 0 deletions docs/en/release-notes/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,25 @@ GitHub Releases page; `0.8.0` is the new starting line.

## Unreleased

## 0.49.0 (2026-06-20)

- **Reduction ladder in the default agent prompt.** The agent now walks an explicit,
ordered ladder before writing code — does this need to exist at all, then the standard
library, a native platform or framework feature, an already-installed dependency, one
line, and only then the minimum custom code — so it reaches for the simplest working
solution by default. The same guidance is mirrored into the `/best-practices` profile,
and deliberate shortcuts with a known ceiling are flagged with a comment naming the
ceiling and the upgrade path. Input validation, error handling, security, and
accessibility are never traded away for fewer lines.
- **New `cleanup-audit` skill.** A read-only, whole-repo pass that ranks over-engineering
— what to delete, simplify, or replace with standard-library/platform equivalents — as
the repo-wide complement to the diff-scoped `pythinker review diff --mode deslopify`. It
applies no fixes and never proposes cutting validation, error handling, security, or
accessibility.
- **Fix: duplicate update notices at startup.** When a background install finishes
or a cached update is detected, the hint now renders only on the persistent
under-input line instead of also flashing as a footer toast.

## 0.48.0 (2026-06-17)

- **Fix: tool outputs invisible on Anthropic-compatible proxies (GLM-5.2 via z.ai).**
Expand Down
26 changes: 13 additions & 13 deletions packages/linux-installer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ End-user install from the current GitHub Release:

```sh
# Debian / Ubuntu
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code_0.48.0_amd64.deb
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code_0.48.0_amd64.deb.sha256
sha256sum -c pythinker-code_0.48.0_amd64.deb.sha256
sudo dpkg -i pythinker-code_0.48.0_amd64.deb
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code_0.49.0_amd64.deb
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code_0.49.0_amd64.deb.sha256
sha256sum -c pythinker-code_0.49.0_amd64.deb.sha256
sudo dpkg -i pythinker-code_0.49.0_amd64.deb
sudo apt-get install -f # only needed if dependencies fail to resolve

# Fedora / RHEL / openSUSE
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.48.0/pythinker-code-0.48.0.x86_64.rpm.sha256
sha256sum -c pythinker-code-0.48.0.x86_64.rpm.sha256
sudo dnf install ./pythinker-code-0.48.0.x86_64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm
curl -LO https://github.com/Pythoughts-labs/pythinker-code/releases/download/v0.49.0/pythinker-code-0.49.0.x86_64.rpm.sha256
sha256sum -c pythinker-code-0.49.0.x86_64.rpm.sha256
sudo dnf install ./pythinker-code-0.49.0.x86_64.rpm
# or, on openSUSE:
sudo zypper install ./pythinker-code-0.48.0.x86_64.rpm
sudo zypper install ./pythinker-code-0.49.0.x86_64.rpm
```

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

```sh
bash packages/linux-installer/build.sh 0.48.0
bash packages/linux-installer/build.sh 0.49.0
```

Outputs to `dist/`:

- `pythinker-code_0.48.0_amd64.deb`
- `pythinker-code-0.48.0.x86_64.rpm`
- `pythinker-code_0.49.0_amd64.deb`
- `pythinker-code-0.49.0.x86_64.rpm`

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

## CI

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "pythinker-code"
version = "0.48.0"
version = "0.49.0"
description = "Pythinker — an agentic CLI developed by Pythoughts-labs."
readme = "README.md"
requires-python = ">=3.12"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading