From 313d8c4b6e311d69e136252631f90e8a7871c1e2 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 21:45:08 -0400 Subject: [PATCH 01/10] docs: replace README architecture mermaid diagram with image --- README.md | 27 +++------------------------ docs/media/Architecture.webp | Bin 92392 -> 73768 bytes 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 887b48f9..14f98796 100644 --- a/README.md +++ b/README.md @@ -227,30 +227,9 @@ See the [configuration docs](https://pythoughts-labs.github.io/pythinker-code/co Pythinker Code is a **pnpm monorepo**. The CLI consumes capabilities through the SDK and never depends directly on internal engine packages. -```mermaid -flowchart LR - subgraph Apps - CLI["pythinker-code
(CLI / TUI)"] - WEB["pythinker-web
(Browser UI)"] - DASH["dashboard
(Session replay)"] - end - - subgraph Packages - SDK["node-sdk"] - CORE["agent-core"] - ANYLLM["Any LLM
(provider abstraction)"] - KAOS["kaos
(Execution env)"] - SERVER["server
(REST + WebSocket)"] - end - - CLI --> SDK - WEB --> SERVER - DASH --> SERVER - SDK --> CORE - SERVER --> CORE - CORE --> ANYLLM - CORE --> KAOS -``` +

+ Pythinker Code architecture +

| Package | Role | |---------|------| diff --git a/docs/media/Architecture.webp b/docs/media/Architecture.webp index ee11c0fafbf8d6c0b0aec9bcf161c621d4f47ddc..a05f4aabdace6c6013018033df4133dfedd6d5ac 100644 GIT binary patch literal 73768 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 K5604itpEU*E_Ap6 literal 92392 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

5BxX=eUXfV>@-R=LI5dH@&lnv-I&n6 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

=_J#f`Y5nI-HI|ECynUF3a5 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 PKL7v&n*aa;NB{r;2d3fR From 5da97d702bccb1407c0120a589db3dc37a157dd2 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 21:55:35 -0400 Subject: [PATCH 02/10] fix: point native install scripts at real release assets install.sh and install.ps1 were carried over from the Python pythinker-cli repo: they resolved v-prefixed tags and downloaded pythinker-VERSION-.tar.gz / PythinkerSetup-.exe assets that this repo never publishes, so both installers polled GitHub for ~6 minutes and failed without downloading. Resolve the version from the CDN latest file (GitHub API fallback), download pythinker-code-.zip from the @pythoughts/pythinker-code@X.Y.Z release tag, verify SHA-256, and install the extracted binary. Windows now extracts pythinker.exe to LOCALAPPDATA\Programs\Pythinker and persists it on the user PATH instead of running the removed Inno Setup installer. --- apps/pythinker-web/public/install.ps1 | 145 ++++++++++++------------- apps/pythinker-web/public/install.sh | 147 ++++++++++++++------------ 2 files changed, 151 insertions(+), 141 deletions(-) diff --git a/apps/pythinker-web/public/install.ps1 b/apps/pythinker-web/public/install.ps1 index d47771ec..54f9337c 100644 --- a/apps/pythinker-web/public/install.ps1 +++ b/apps/pythinker-web/public/install.ps1 @@ -1,16 +1,18 @@ -# Pythinker Code — native Windows installer bootstrap. +# Pythinker Code — native Windows installer. # -# Downloads the latest PythinkerSetup-x.y.z.exe from GitHub Releases, verifies -# its SHA-256 file, and runs the per-user Inno Setup installer silently. +# Downloads the native single-file binary (pythinker-code-win32-.zip) +# from the GitHub Release matching the CDN's latest version, verifies its +# SHA-256, and installs pythinker.exe to %LOCALAPPDATA%\Programs\Pythinker +# (added to the user PATH). # # Usage: # irm https://pythinker.com/install.ps1 | iex # # To pin a version when running the hosted script, set: -# $env:PYTHINKER_VERSION = "0.27.0"; irm https://pythinker.com/install.ps1 | iex +# $env:PYTHINKER_VERSION = "0.6.0"; irm https://pythinker.com/install.ps1 | iex # # Or run the script directly: -# .\install.ps1 -Version 0.27.0 +# .\install.ps1 -Version 0.6.0 [CmdletBinding()] param( @@ -21,6 +23,9 @@ param( $ErrorActionPreference = "Stop" $Repo = "Pythoughts-labs/pythinker-code" +# CDN source of truth for the latest published version — same endpoint the +# in-app updater reads, so a fresh install and an auto-update always agree. +$CdnLatestUrl = "https://code.pythinker.com/pythinker-code/latest" $InstallShUrl = "https://pythinker.com/install.sh" $InstallPs1Url = "https://pythinker.com/install.ps1" $NoColor = $env:NO_COLOR @@ -60,19 +65,21 @@ $script:AntennaSpinActive = $false function Show-Usage { @" -Pythinker Code — native Windows installer bootstrap. +Pythinker Code — native Windows installer. -Downloads the latest PythinkerSetup-x.y.z.exe from GitHub Releases, verifies -its SHA-256 file, and runs the per-user Inno Setup installer silently. +Downloads the native single-file binary (pythinker-code-win32-.zip) +from the GitHub Release matching the CDN's latest version, verifies its +SHA-256, and installs pythinker.exe to %LOCALAPPDATA%\Programs\Pythinker +(added to the user PATH). Usage: irm $InstallPs1Url | iex # Pin a version: - `$env:PYTHINKER_VERSION = "0.27.0"; irm $InstallPs1Url | iex + `$env:PYTHINKER_VERSION = "0.6.0"; irm $InstallPs1Url | iex # Or run directly: - .\install.ps1 -Version 0.27.0 + .\install.ps1 -Version 0.6.0 Unix / macOS / Linux users: curl -fsSL $InstallShUrl | bash @@ -257,10 +264,10 @@ function Write-Logo { if ($useAnim) { Write-LogoAnimated } else { Write-LogoStatic } } -function Print-Intro($version, $asset) { +function Print-Intro($version, $platformDisplay, $asset) { Write-Logo Write-Host (" {0,-11} {1}" -f "Version", $version) - Write-Host (" {0,-11} {1}" -f "Platform", "Windows x64") + Write-Host (" {0,-11} {1}" -f "Platform", $platformDisplay) Write-Host (" {0,-11} {1}" -f "Package", $asset) Write-Host "" } @@ -367,15 +374,15 @@ function Print-Done { } } -function Test-ReleaseHasInstaller($release) { - if ($release.draft -or $release.prerelease) { return $null } - $tag = [string]$release.tag_name - if (-not $tag) { return $null } - $candidate = $tag.TrimStart('v') - $exe = "PythinkerSetup-$candidate.exe" +# Releases are tagged "@pythoughts/pythinker-code@X.Y.Z"; the "@" and "/" +# must be percent-encoded in download and API URLs. +function Get-ReleaseTag($version) { return "@pythoughts/pythinker-code@$version" } +function Get-EncodedReleaseTag($version) { return [uri]::EscapeDataString((Get-ReleaseTag $version)) } + +function Test-ReleaseHasAsset($release, $asset) { + if ($release.draft -or $release.prerelease) { return $false } $names = @($release.assets | ForEach-Object { [string]$_.name }) - if (($names -contains $exe) -and ($names -contains "$exe.sha256")) { return $candidate } - return $null + return (($names -contains $asset) -and ($names -contains "$asset.sha256")) } function Format-ReleaseApiError($Uri, $ErrorRecord) { @@ -387,57 +394,36 @@ function Format-ReleaseApiError($Uri, $ErrorRecord) { } function Get-LatestVersion { + # The CDN is the source of truth (same endpoint the in-app updater reads). + # Fall back to the GitHub API if the CDN is unreachable. + try { + $raw = (Invoke-RestMethod -UseBasicParsing -Uri $CdnLatestUrl) + $candidate = ([string]$raw).Trim() + if ($candidate -match '^\d+\.\d+\.\d+$') { return $candidate } + } catch {} $latestApi = "https://api.github.com/repos/$Repo/releases/latest" - $listApi = "https://api.github.com/repos/$Repo/releases?per_page=100" - $delay = 4 - $elapsed = 0 - $maxElapsed = 360 - $lastApiError = $null - while ($true) { - try { - $latest = Invoke-RestMethod -UseBasicParsing -Uri $latestApi - $found = Test-ReleaseHasInstaller $latest - if ($found) { return $found } - } catch { - $lastApiError = Format-ReleaseApiError $latestApi $_ - } - try { - $releases = Invoke-RestMethod -UseBasicParsing -Uri $listApi - foreach ($release in @($releases)) { - $found = Test-ReleaseHasInstaller $release - if ($found) { return $found } - } - } catch { - $lastApiError = Format-ReleaseApiError $listApi $_ - } - if ($elapsed -ge $maxElapsed) { - $detail = if ($lastApiError) { " Last API error: $lastApiError" } else { "" } - Fail "no published release has a ready Windows installer asset after ~${maxElapsed}s; try again shortly or pin `$env:PYTHINKER_VERSION.$detail" - } - if ($useAnim) { - Write-Host -NoNewline ("${ESC}[$($script:ProgressRow);1H${ESC}[K ${DIM}Waiting${RESET} release assets, retrying in ${BAR}${delay}s${RESET}") - } else { - Write-Host " Waiting for release assets, retrying in ${delay}s" - } - Start-Sleep -Seconds $delay - $elapsed += $delay - $delay = [Math]::Min($delay * 2, 120) + try { + $latest = Invoke-RestMethod -UseBasicParsing -Uri $latestApi + $tag = [string]$latest.tag_name + if ($tag -match '^@pythoughts/pythinker-code@(\d+\.\d+\.\d+)$') { return $Matches[1] } + Fail "could not parse latest release tag '$tag' from $latestApi" + } catch { + Fail "could not resolve the latest version: $(Format-ReleaseApiError $latestApi $_)" } } function Wait-ReleaseAssets($version, $asset) { - $api = "https://api.github.com/repos/$Repo/releases/tags/v$version" + $api = "https://api.github.com/repos/$Repo/releases/tags/$(Get-EncodedReleaseTag $version)" $delay = 4 $elapsed = 0 $maxElapsed = 360 while ($true) { try { $release = Invoke-RestMethod -UseBasicParsing -Uri $api - $names = @($release.assets | ForEach-Object { [string]$_.name }) - if (($names -contains $asset) -and ($names -contains "$asset.sha256")) { return } + if (Test-ReleaseHasAsset $release $asset) { return } } catch {} if ($elapsed -ge $maxElapsed) { - Fail "release assets for v$version are not available after ~${maxElapsed}s: https://github.com/$Repo/releases/download/v$version/$asset`nThe latest release may still be publishing. Try again shortly, or pin a known-good version with -Version X.Y.Z" + Fail "release assets for $version are not available after ~${maxElapsed}s: https://github.com/$Repo/releases/download/$(Get-EncodedReleaseTag $version)/$asset`nThe latest release may still be publishing. Try again shortly, or pin a known-good version with -Version X.Y.Z" } if ($useAnim) { Write-Host -NoNewline ("${ESC}[$($script:ProgressRow);1H${ESC}[K ${DIM}Waiting${RESET} release assets, retrying in ${BAR}${delay}s${RESET}") @@ -469,12 +455,15 @@ if ([System.Environment]::OSVersion.Platform -ne [System.PlatformID]::Win32NT) { if (-not $Version) { $Version = Get-LatestVersion } $Version = $Version.TrimStart('v') -$asset = "PythinkerSetup-$Version.exe" -$baseUrl = "https://github.com/$Repo/releases/download/v$Version" +$archLabel = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64) { 'arm64' } else { 'x64' } +$target = "win32-$archLabel" + +$asset = "pythinker-code-$target.zip" +$baseUrl = "https://github.com/$Repo/releases/download/$(Get-EncodedReleaseTag $Version)" $installerUrl = "$baseUrl/$asset" $shaUrl = "$installerUrl.sha256" -Print-Intro $Version $asset +Print-Intro $Version "Windows $archLabel" $asset Wait-ReleaseAssets $Version $asset if ($useAnim) { Write-Host -NoNewline ("${ESC}[$($script:ProgressRow);1H${ESC}[K") } @@ -495,24 +484,28 @@ try { } Phase-Ok "Verifying" - $installerArgs = @( - '/SILENT', - '/NORESTART', - '/CURRENTUSER', - '/CLOSEAPPLICATIONS', - '/NORESTARTAPPLICATIONS' - ) - $process = Start-Process -FilePath $installerPath -ArgumentList $installerArgs -Wait -PassThru - if ($process.ExitCode -ne 0) { - Fail "installer exited with code $($process.ExitCode)" + # The release zip contains a single pythinker.exe at its root. + $extractDir = Join-Path $tempDir "extracted" + Expand-Archive -LiteralPath $installerPath -DestinationPath $extractDir -Force + $binary = Join-Path $extractDir "pythinker.exe" + if (-not (Test-Path $binary)) { + Fail "archive did not contain pythinker.exe" } - Phase-Ok "Installing" $installDir = Join-Path $env:LOCALAPPDATA "Programs\Pythinker" - if (Test-Path (Join-Path $installDir "pythinker.exe")) { - if (($env:PATH -split ';') -notcontains $installDir) { - $env:PATH = "$installDir;$env:PATH" - } + New-Item -ItemType Directory -Path $installDir -Force | Out-Null + Copy-Item -LiteralPath $binary -Destination (Join-Path $installDir "pythinker.exe") -Force + Phase-Ok "Installing" + + # Persist the install dir on the user PATH, and make it available in + # this session so `pythinker` works without reopening the shell. + $userPath = [Environment]::GetEnvironmentVariable('Path', 'User') + if (($userPath -split ';') -notcontains $installDir) { + $newPath = if ($userPath) { "$installDir;$userPath" } else { $installDir } + [Environment]::SetEnvironmentVariable('Path', $newPath, 'User') + } + if (($env:PATH -split ';') -notcontains $installDir) { + $env:PATH = "$installDir;$env:PATH" } Print-Done diff --git a/apps/pythinker-web/public/install.sh b/apps/pythinker-web/public/install.sh index 21f0c70f..0032b487 100755 --- a/apps/pythinker-web/public/install.sh +++ b/apps/pythinker-web/public/install.sh @@ -1,26 +1,27 @@ #!/usr/bin/env bash # Pythinker Code — native curl-bash installer. # -# Downloads the PyInstaller-built single-file binary for your OS + arch from -# the latest GitHub Release, verifies its SHA-256, and installs it at +# Downloads the native single-file binary (Node SEA) for your OS + arch from +# the GitHub Release matching the CDN's latest version, verifies its SHA-256, +# and installs it at # ~/.local/bin/pythinker # # Usage: # curl -fsSL https://pythinker.com/install.sh | bash # # # Pin a specific version: -# curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.27.0 +# curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.6.0 # # # Custom install prefix (default $HOME/.local): # curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker # -# Supported targets (target triples — matches existing release artifacts): -# x86_64-unknown-linux-gnu (Linux x86_64) -# aarch64-unknown-linux-gnu (Linux ARM64) -# aarch64-apple-darwin (macOS Apple Silicon) -# x86_64-apple-darwin (macOS Intel) +# Supported targets (matches release artifact names pythinker-code-.zip): +# linux-x64 (Linux x86_64) +# linux-arm64 (Linux ARM64) +# darwin-arm64 (macOS Apple Silicon) +# darwin-x64 (macOS Intel) # -# Windows users: download PythinkerSetup-x.y.z.exe from the Releases page. +# Windows users: irm https://pythinker.com/install.ps1 | iex set -euo pipefail VERSION="" @@ -31,26 +32,27 @@ usage() { cat <<'EOF' Pythinker Code — native curl-bash installer. -Downloads the PyInstaller-built single-file binary for your OS + arch from -the latest GitHub Release, verifies its SHA-256, and installs it at +Downloads the native single-file binary for your OS + arch from the GitHub +Release matching the CDN's latest version, verifies its SHA-256, and +installs it at ~/.local/bin/pythinker Usage: curl -fsSL https://pythinker.com/install.sh | bash # Pin a specific version: - curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.27.0 + curl -fsSL https://pythinker.com/install.sh | bash -s -- --version 0.6.0 # Custom install prefix (default $HOME/.local): curl -fsSL https://pythinker.com/install.sh | bash -s -- --prefix /opt/pythinker -Supported targets (target triples — matches existing release artifacts): - x86_64-unknown-linux-gnu (Linux x86_64) - aarch64-unknown-linux-gnu (Linux ARM64) - aarch64-apple-darwin (macOS Apple Silicon) - x86_64-apple-darwin (macOS Intel) +Supported targets (matches release artifact names pythinker-code-.zip): + linux-x64 (Linux x86_64) + linux-arm64 (Linux ARM64) + darwin-arm64 (macOS Apple Silicon) + darwin-x64 (macOS Intel) -Windows users: download PythinkerSetup-x.y.z.exe from the Releases page. +Windows users: irm https://pythinker.com/install.ps1 | iex EOF } @@ -70,17 +72,20 @@ while [[ $# -gt 0 ]]; do done REPO="Pythoughts-labs/pythinker-code" +# CDN source of truth for the latest published version — same endpoint the +# in-app updater reads, so a fresh install and an auto-update always agree. +CDN_LATEST_URL="https://code.pythinker.com/pythinker-code/latest" if [ -t 1 ] && [ -z "$NO_COLOR" ] && [ "${TERM:-}" != "dumb" ]; then NAVY=$'\033[38;5;24m'; FACE=$'\033[38;5;255m' ACCENT=$'\033[38;5;147m'; TIP=$'\033[38;5;216m' EYE=$'\033[38;5;189m'; BAR=$'\033[38;5;250m'; DIM=$'\033[2m' BOLD=$'\033[1m'; RESET=$'\033[0m' - # Shimmer / pulse tones for the "piece landed" + "leading edge" beats. - SHINE=$'\033[38;5;231m'; SOFT=$'\033[38;5;111m' + # Shimmer tone for the "piece landed" + "leading edge" beats. + SHINE=$'\033[38;5;231m' else NAVY=""; FACE=""; ACCENT=""; TIP=""; EYE=""; BAR=""; DIM=""; BOLD=""; RESET="" - SHINE=""; SOFT="" + SHINE="" fi _anim="" @@ -269,7 +274,7 @@ print_intro() { fi printf ' %-11s %s\n' "Version" "$VERSION" printf ' %-11s %s\n' "Platform" "$platform_display" - printf ' %-11s %s\n' "Package" "$tarball" + printf ' %-11s %s\n' "Package" "$archive" # Reserve the progress row one line below the metadata. The cursor # is now on that row; save it so the "Waiting" retry and the # download progress bar can absolute-position to it without @@ -432,14 +437,14 @@ print_logo_animated() { _render "$target_r" "$target_c" "0,0,─,$EYE" sleep 0.05 # Commit the closed eye and hold one beat so the blink registers. - _set_cell $target_r $target_c "─" "$EYE" + _set_cell "$target_r" "$target_c" "─" "$EYE" _render "" "" sleep 0.04 # Frame 3: open with a shine flash, then settle to the final color. - _set_cell $target_r $target_c "$eye_ch" "$SHINE" + _set_cell "$target_r" "$target_c" "$eye_ch" "$SHINE" _render "" "" sleep 0.06 - _set_cell $target_r $target_c "$eye_ch" "$EYE" + _set_cell "$target_r" "$target_c" "$eye_ch" "$EYE" _render "" "" } @@ -453,13 +458,13 @@ print_logo_animated() { _render "$r" "$target_c" "${cells[@]}" sleep "$FRAME_DELAY" done - _set_cell $target_r $target_c "●" "$TIP" + _set_cell "$target_r" "$target_c" "●" "$TIP" _render "$target_r" "$target_c" "0,0,●,$SHINE" sleep 0.07 - _set_cell $target_r $target_c "●" "$SHINE" + _set_cell "$target_r" "$target_c" "●" "$SHINE" _render "" "" sleep 0.05 - _set_cell $target_r $target_c "●" "$TIP" + _set_cell "$target_r" "$target_c" "●" "$TIP" _render "" "" } @@ -571,44 +576,55 @@ os="$(uname -s)" arch="$(uname -m)" case "$os/$arch" in Linux/x86_64|Linux/amd64) - target="x86_64-unknown-linux-gnu" + target="linux-x64" platform_display="Linux x64" ;; Linux/aarch64|Linux/arm64) - target="aarch64-unknown-linux-gnu" + target="linux-arm64" platform_display="Linux arm64" ;; Darwin/arm64) - target="aarch64-apple-darwin" + target="darwin-arm64" platform_display="macOS arm64" ;; Darwin/x86_64) - target="x86_64-apple-darwin" + target="darwin-x64" platform_display="macOS x64" ;; MINGW*/*|MSYS*/*|CYGWIN*/*) - fail "On Windows, download PythinkerSetup-x.y.z.exe from: -https://github.com/${REPO}/releases/latest - -PowerShell installer: + fail "On Windows, use the PowerShell installer: powershell -c \"irm https://pythinker.com/install.ps1 | iex\"" ;; *) fail "unsupported target: $os/$arch" ;; esac # --- resolve version ----------------------------------------------------- -if [ -z "$VERSION" ]; then - api="https://api.github.com/repos/${REPO}/releases/latest" +_fetch() { if command -v curl >/dev/null 2>&1; then - payload="$(curl -fsSL "$api")" + curl -fsSL "$1" elif command -v wget >/dev/null 2>&1; then - payload="$(wget -qO- "$api")" + wget -qO- "$1" else - fail "need curl or wget to fetch the release index" + return 127 + fi +} + +if [ -z "$VERSION" ]; then + command -v curl >/dev/null 2>&1 || command -v wget >/dev/null 2>&1 \ + || fail "need curl or wget to fetch the release index" + # The CDN is the source of truth (same endpoint the in-app updater reads). + # Fall back to the GitHub API if the CDN is unreachable. + VERSION="$(_fetch "$CDN_LATEST_URL" 2>/dev/null | tr -d '[:space:]' || true)" + if ! printf '%s' "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'; then + api="https://api.github.com/repos/${REPO}/releases/latest" + payload="$(_fetch "$api")" || fail "could not reach $CDN_LATEST_URL or $api" + VERSION="$(printf '%s' "$payload" | sed -nE 's/.*"tag_name": *"@pythoughts\/pythinker-code@([0-9]+\.[0-9]+\.[0-9]+)".*/\1/p' | head -n 1)" + [ -z "$VERSION" ] && fail "could not parse latest release tag from $api" fi - VERSION="$(printf '%s' "$payload" | sed -nE 's/.*"tag_name": *"v([0-9]+\.[0-9]+\.[0-9]+)".*/\1/p' | head -n 1)" - [ -z "$VERSION" ] && fail "could not parse latest release tag from $api" fi -tarball="pythinker-${VERSION}-${target}.tar.gz" -tarball_url="https://github.com/${REPO}/releases/download/v${VERSION}/${tarball}" -sha_url="${tarball_url}.sha256" +# Releases are tagged "@pythoughts/pythinker-code@X.Y.Z"; the "@" and "/" +# must be percent-encoded in download and API URLs. +tag_encoded="%40pythoughts%2Fpythinker-code%40${VERSION}" +archive="pythinker-code-${target}.zip" +archive_url="https://github.com/${REPO}/releases/download/${tag_encoded}/${archive}" +sha_url="${archive_url}.sha256" print_intro @@ -619,14 +635,10 @@ print_intro # checksum are attached (via the GitHub API, like the in-app updater) before # downloading, so a release caught mid-publish does not 404. release_has_assets() { - _api="https://api.github.com/repos/${REPO}/releases/tags/v${VERSION}" - if command -v curl >/dev/null 2>&1; then - _body="$(curl -fsSL "$_api" 2>/dev/null)" || return 1 - else - _body="$(wget -qO- "$_api" 2>/dev/null)" || return 1 - fi - printf '%s' "$_body" | grep -Fq "\"${tarball}\"" \ - && printf '%s' "$_body" | grep -Fq "\"${tarball}.sha256\"" + _api="https://api.github.com/repos/${REPO}/releases/tags/${tag_encoded}" + _body="$(_fetch "$_api" 2>/dev/null)" || return 1 + printf '%s' "$_body" | grep -Fq "\"${archive}\"" \ + && printf '%s' "$_body" | grep -Fq "\"${archive}.sha256\"" } # Exponential backoff: the GitHub Release can briefly advertise a version # whose assets are still uploading. Wait 4,8,16,...,120s (capped), ~6m total, @@ -638,7 +650,7 @@ max_elapsed=360 until release_has_assets; do attempt=$((attempt + 1)) if [ "$elapsed" -ge "$max_elapsed" ]; then - fail "release assets for v${VERSION} are not available after ~${max_elapsed}s: ${tarball_url} + fail "release assets for ${VERSION} are not available after ~${max_elapsed}s: ${archive_url} The latest release may still be publishing. Try again shortly, or pin a known-good version with --version X.Y.Z" fi if [ -n "$_anim" ]; then @@ -657,14 +669,14 @@ done tmpdir="$(mktemp -d -t pythinker-install.XXXXXX)" # Layer: keep the cursor-show on every exit path, then clean up tmpdir. trap 'printf "\033[?25h" 2>/dev/null || true; rm -rf "$tmpdir"' EXIT -_download_with_progress "$tarball_url" "$tmpdir/$tarball" || fail "download failed: $tarball_url" -_download_quiet "$sha_url" "$tmpdir/$tarball.sha256" || fail "sha256 missing: $sha_url" +_download_with_progress "$archive_url" "$tmpdir/$archive" || fail "download failed: $archive_url" +_download_quiet "$sha_url" "$tmpdir/$archive.sha256" || fail "sha256 missing: $sha_url" -expected="$(awk '{print $1}' "$tmpdir/$tarball.sha256")" +expected="$(awk '{print $1}' "$tmpdir/$archive.sha256")" if command -v sha256sum >/dev/null 2>&1; then - actual="$(sha256sum "$tmpdir/$tarball" | awk '{print $1}')" + actual="$(sha256sum "$tmpdir/$archive" | awk '{print $1}')" elif command -v shasum >/dev/null 2>&1; then - actual="$(shasum -a 256 "$tmpdir/$tarball" | awk '{print $1}')" + actual="$(shasum -a 256 "$tmpdir/$archive" | awk '{print $1}')" else fail "need sha256sum or shasum to verify the download" fi @@ -674,12 +686,17 @@ phase_ok "Verifying" # --- install ----------------------------------------------------------- bin_dir="$INSTALL_PREFIX/bin" mkdir -p "$bin_dir" -# The existing release tarball contains a single `pythinker` file at the -# tarball root (PyInstaller --onefile output). -tar -C "$tmpdir" -xzf "$tmpdir/$tarball" -[ -x "$tmpdir/pythinker" ] || fail "tarball did not contain an executable named 'pythinker'" +# The release zip contains a single `pythinker` executable at its root. +if command -v unzip >/dev/null 2>&1; then + unzip -oq "$tmpdir/$archive" -d "$tmpdir" +elif tar -tf "$tmpdir/$archive" >/dev/null 2>&1; then + # bsdtar (macOS default) reads zip archives; GNU tar does not. + tar -C "$tmpdir" -xf "$tmpdir/$archive" +else + fail "need unzip (or bsdtar) to extract $archive" +fi +[ -e "$tmpdir/pythinker" ] || fail "archive did not contain an executable named 'pythinker'" install -m 0755 "$tmpdir/pythinker" "$bin_dir/pythinker" -printf 'pythinker-native-build\n' > "$bin_dir/.pythinker-native" phase_ok "Installing" # --- PATH guidance -------------------------------------------------------- From 82db68a7ada9e304dc0e07ab3b8efa048fe0dd36 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 21:59:44 -0400 Subject: [PATCH 03/10] fix: prompt for API key when catalog provider env var is unset Catalog provider login (TUI /login and /provider, and openai-api / anthropic-api which route through the same path) failed with 'Environment variable X is not set or is empty' instead of asking for a key. Fall back to the API key dialog and store the literal key via applyCatalogProvider's existing apiKey field. The CLI command 'pythinker provider catalog add' gains --api-key for the same case. --- .changeset/catalog-provider-api-key-prompt.md | 5 + apps/pythinker-code/src/cli/sub/provider.ts | 37 +++-- apps/pythinker-code/src/tui/commands/auth.ts | 29 ++-- apps/pythinker-code/test/cli/provider.test.ts | 59 ++++++++ .../test/tui/commands/auth.test.ts | 126 ++++++++++++++++++ .../test/tui/pythinker-tui-startup.test.ts | 58 +++++++- 6 files changed, 282 insertions(+), 32 deletions(-) create mode 100644 .changeset/catalog-provider-api-key-prompt.md create mode 100644 apps/pythinker-code/test/tui/commands/auth.test.ts diff --git a/.changeset/catalog-provider-api-key-prompt.md b/.changeset/catalog-provider-api-key-prompt.md new file mode 100644 index 00000000..c3a559b7 --- /dev/null +++ b/.changeset/catalog-provider-api-key-prompt.md @@ -0,0 +1,5 @@ +--- +'@pythoughts/pythinker-code': patch +--- + +Prompt for an API key when connecting a catalog provider whose environment variable is not set, instead of failing with "Environment variable is not set or is empty". Applies to `/login`, `/provider`, and `pythinker provider catalog add`, which now also accepts `--api-key `. diff --git a/apps/pythinker-code/src/cli/sub/provider.ts b/apps/pythinker-code/src/cli/sub/provider.ts index b9c49145..79899f11 100644 --- a/apps/pythinker-code/src/cli/sub/provider.ts +++ b/apps/pythinker-code/src/cli/sub/provider.ts @@ -65,6 +65,7 @@ interface CatalogListOptions { } interface CatalogAddOptions { + readonly apiKey?: string; readonly apiKeyEnv?: string; readonly defaultModel?: string; readonly url?: string; @@ -331,19 +332,24 @@ export async function handleCatalogAdd( deps.exit(1); } + const literalApiKey = opts.apiKey?.trim(); const apiKeyEnvVar = (opts.apiKeyEnv ?? entry.env?.[0])?.trim(); - if (apiKeyEnvVar === undefined || apiKeyEnvVar.length === 0) { - deps.stderr.write( - `Provider "${providerId}" does not declare an API key environment variable.\n`, - ); - deps.exit(1); - } - const apiKey = deps.env[apiKeyEnvVar]?.trim(); - if (apiKey === undefined || apiKey.length === 0) { - deps.stderr.write( - `Environment variable "${apiKeyEnvVar}" is not set or is empty.\n`, - ); - deps.exit(1); + let useEnvVar = false; + if (literalApiKey === undefined || literalApiKey.length === 0) { + if (apiKeyEnvVar === undefined || apiKeyEnvVar.length === 0) { + deps.stderr.write( + `Provider "${providerId}" does not declare an API key environment variable. Pass --api-key .\n`, + ); + deps.exit(1); + } + const envValue = deps.env[apiKeyEnvVar]?.trim(); + if (envValue === undefined || envValue.length === 0) { + deps.stderr.write( + `Environment variable "${apiKeyEnvVar}" is not set or is empty. Set it or pass --api-key .\n`, + ); + deps.exit(1); + } + useEnvVar = true; } const models = catalogProviderModels(entry); @@ -386,7 +392,8 @@ export async function handleCatalogAdd( catalogUrl: url, wire, baseUrl, - apiKeyEnvVar, + apiKey: useEnvVar ? undefined : literalApiKey, + apiKeyEnvVar: useEnvVar ? apiKeyEnvVar : undefined, models, selectedModelId: opts.defaultModel ?? '', thinking: false, @@ -519,17 +526,19 @@ export function registerProviderCommand(parent: Command, deps?: Partial') .description('Import a known provider from the catalog by id.') + .option('--api-key ', 'Provider API key to store in config.toml (takes precedence over --api-key-env).') .option('--api-key-env ', 'Environment variable containing the provider API key.') .option('--default-model ', 'Mark the imported model as default_model after import.') .option('--url ', `Override catalog URL. Defaults to ${DEFAULT_CATALOG_URL}.`) .action( async ( providerId: string, - options: { apiKeyEnv?: string; defaultModel?: string; url?: string }, + options: { apiKey?: string; apiKeyEnv?: string; defaultModel?: string; url?: string }, ) => { const resolved = resolveDeps(deps); await runAction(resolved, () => handleCatalogAdd(resolved, providerId, { + apiKey: options.apiKey, apiKeyEnv: options.apiKeyEnv, defaultModel: options.defaultModel, url: options.url, diff --git a/apps/pythinker-code/src/tui/commands/auth.ts b/apps/pythinker-code/src/tui/commands/auth.ts index 8c19c999..40ce31f7 100644 --- a/apps/pythinker-code/src/tui/commands/auth.ts +++ b/apps/pythinker-code/src/tui/commands/auth.ts @@ -250,18 +250,24 @@ export async function connectCatalogProvider( return; } + const baseUrl = catalogBaseUrl(catalogEntry, wire); + const platformName = displayName ?? catalogEntry.name ?? providerId; + const apiKeyEnvVar = catalogEntry.env?.[0]?.trim(); - if (apiKeyEnvVar === undefined || apiKeyEnvVar.length === 0) { - host.showError(`Catalog provider "${providerId}" does not declare an API key environment variable.`); - return; - } - if (process.env[apiKeyEnvVar]?.trim().length === 0 || process.env[apiKeyEnvVar] === undefined) { - host.showError(`Environment variable "${apiKeyEnvVar}" is not set or is empty.`); - return; + const envVarHasValue = + apiKeyEnvVar !== undefined && + apiKeyEnvVar.length > 0 && + (process.env[apiKeyEnvVar]?.trim().length ?? 0) > 0; + let apiKey: string | undefined; + if (!envVarHasValue) { + const subtitleLines = [ + ...(baseUrl === undefined ? [] : [`${'base_url'.padEnd(12)}${baseUrl}`]), + `${'saved to'.padEnd(12)}~/.pythinker-code/config.toml`, + ]; + apiKey = await promptApiKey(host, platformName, subtitleLines); + if (apiKey === undefined) return; } - const baseUrl = catalogBaseUrl(catalogEntry, wire); - const platformName = displayName ?? catalogEntry.name ?? providerId; const models = catalogProviderModels(catalogEntry); if (models.length === 0) { host.showError('No models available for this platform.'); @@ -282,7 +288,8 @@ export async function connectCatalogProvider( catalogUrl: DEFAULT_CATALOG_URL, wire, baseUrl, - apiKeyEnvVar, + apiKey, + apiKeyEnvVar: envVarHasValue ? apiKeyEnvVar : undefined, models, selectedModelId: selection.model.id, thinking: selection.effort !== 'off', @@ -296,7 +303,7 @@ export async function connectCatalogProvider( }); await host.authFlow.refreshConfigAfterLogin(); - host.track('login', { provider: providerId, method: 'api_key_env' }); + host.track('login', { provider: providerId, method: envVarHasValue ? 'api_key_env' : 'api_key' }); host.showStatus(`Setup complete: ${platformName} · ${selection.model.id}`); } diff --git a/apps/pythinker-code/test/cli/provider.test.ts b/apps/pythinker-code/test/cli/provider.test.ts index 1c02c477..32df66a5 100644 --- a/apps/pythinker-code/test/cli/provider.test.ts +++ b/apps/pythinker-code/test/cli/provider.test.ts @@ -1009,4 +1009,63 @@ describe('pythinker provider catalog add', () => { 'CUSTOM_ANTHROPIC_API_KEY', ); }); + + it('stores a literal --api-key when the environment variable is unset', async () => { + mockRegistryFetch(CATALOG_BODY); + const { harness, current } = makeHarness({ providers: {} } as PythinkerConfig); + const { deps, exitCodes } = makeDeps(harness, { env: {} }); + + await tryRun(() => handleCatalogAdd(deps, 'anthropic', { apiKey: 'sk-literal' })); + + expect(exitCodes).toEqual([]); + expect(current().providers['anthropic']?.apiKey).toBe('sk-literal'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); + + it('prefers a literal --api-key over a set environment variable', async () => { + mockRegistryFetch(CATALOG_BODY); + const { harness, current } = makeHarness({ providers: {} } as PythinkerConfig); + const { deps, exitCodes } = makeDeps(harness, { + env: { ANTHROPIC_API_KEY: 'from-env' }, + }); + + await tryRun(() => handleCatalogAdd(deps, 'anthropic', { apiKey: 'sk-literal' })); + + expect(exitCodes).toEqual([]); + expect(current().providers['anthropic']?.apiKey).toBe('sk-literal'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); + + it('stores a literal --api-key even when the catalog declares no credential name', async () => { + mockRegistryFetch({ + anthropic: { ...CATALOG_BODY.anthropic, env: undefined }, + }); + const { harness, current } = makeHarness({ providers: {} } as PythinkerConfig); + const { deps, exitCodes } = makeDeps(harness, { env: {} }); + + await tryRun(() => handleCatalogAdd(deps, 'anthropic', { apiKey: 'sk-literal' })); + + expect(exitCodes).toEqual([]); + expect(current().providers['anthropic']?.apiKey).toBe('sk-literal'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); + + it('routes --api-key through Commander', async () => { + mockRegistryFetch(CATALOG_BODY); + const { harness, current } = makeHarness({ providers: {} } as PythinkerConfig); + const { deps, exitCodes } = makeDeps(harness, { env: {} }); + const program = new Command('pythinker'); + registerProviderCommand(program, deps); + + await tryRun(() => + program.parseAsync( + ['node', 'pythinker', 'provider', 'catalog', 'add', 'anthropic', '--api-key', 'sk-flag'], + { from: 'node' }, + ), + ); + + expect(exitCodes).toEqual([]); + expect(current().providers['anthropic']?.apiKey).toBe('sk-flag'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); }); diff --git a/apps/pythinker-code/test/tui/commands/auth.test.ts b/apps/pythinker-code/test/tui/commands/auth.test.ts new file mode 100644 index 00000000..d96e0f9c --- /dev/null +++ b/apps/pythinker-code/test/tui/commands/auth.test.ts @@ -0,0 +1,126 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import type { CatalogProviderEntry, PythinkerConfig } from '@pythoughts/pythinker-code-sdk'; + +import { connectCatalogProvider } from '#/tui/commands/auth'; +import type { SlashCommandHost } from '#/tui/commands/dispatch'; + +vi.mock('#/tui/commands/prompts', () => ({ + promptApiKey: vi.fn(), + promptLogoutProviderSelection: vi.fn(), + promptModelSelectionForCatalog: vi.fn(), + promptModelSelectionForOpenPlatform: vi.fn(), + promptPlatformSelection: vi.fn(), +})); + +const { promptApiKey, promptModelSelectionForCatalog } = await import('#/tui/commands/prompts'); + +const CATALOG_ENTRY: CatalogProviderEntry = { + id: 'anthropic', + name: 'Anthropic', + npm: '@ai-sdk/anthropic', + api: 'https://api.anthropic.com', + env: ['TEST_CATALOG_API_KEY'], + models: { + 'claude-opus-4-7': { + id: 'claude-opus-4-7', + name: 'Claude Opus 4.7', + limit: { context: 200_000, output: 64_000 }, + tool_call: true, + reasoning: true, + modalities: { input: ['text', 'image'], output: ['text'] }, + }, + }, +} as CatalogProviderEntry; + +function makeHost(initial: PythinkerConfig) { + let config = initial; + const errors: string[] = []; + const host = { + harness: { + getConfig: vi.fn(async () => config), + setConfig: vi.fn(async (patch: Partial) => { + config = { ...config, ...patch }; + }), + removeProvider: vi.fn(async (id: string) => { + delete config.providers[id]; + return config; + }), + }, + authFlow: { refreshConfigAfterLogin: vi.fn(async () => undefined) }, + showError: vi.fn((msg: string) => errors.push(msg)), + showStatus: vi.fn(), + track: vi.fn(), + restoreEditor: vi.fn(), + mountEditorReplacement: vi.fn(), + cancelInFlight: undefined, + } as unknown as SlashCommandHost; + return { host, errors, current: () => config }; +} + +describe('connectCatalogProvider credential acquisition', () => { + beforeEach(() => { + vi.mocked(promptModelSelectionForCatalog).mockResolvedValue({ + model: { id: 'claude-opus-4-7' } as never, + effort: 'off', + }); + }); + + afterEach(() => { + vi.unstubAllEnvs(); + vi.mocked(promptApiKey).mockReset(); + vi.mocked(promptModelSelectionForCatalog).mockReset(); + }); + + it('uses the env var without prompting when it is set', async () => { + vi.stubEnv('TEST_CATALOG_API_KEY', 'from-env'); + const { host, current } = makeHost({ providers: {} } as PythinkerConfig); + + await connectCatalogProvider(host, 'anthropic', CATALOG_ENTRY); + + expect(promptApiKey).not.toHaveBeenCalled(); + expect(current().providers['anthropic']).toMatchObject({ + apiKeyEnvVar: 'TEST_CATALOG_API_KEY', + }); + expect(current().providers['anthropic']?.apiKey).toBeUndefined(); + }); + + it('prompts for a key and stores it literally when the env var is unset', async () => { + vi.stubEnv('TEST_CATALOG_API_KEY', ''); + vi.mocked(promptApiKey).mockResolvedValue('sk-typed-in'); + const { host, errors, current } = makeHost({ providers: {} } as PythinkerConfig); + + await connectCatalogProvider(host, 'anthropic', CATALOG_ENTRY); + + expect(errors).toEqual([]); + expect(promptApiKey).toHaveBeenCalledWith( + host, + 'Anthropic', + expect.arrayContaining([expect.stringContaining('config.toml')]), + ); + expect(current().providers['anthropic']?.apiKey).toBe('sk-typed-in'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); + + it('prompts for a key when the catalog entry declares no env var', async () => { + vi.mocked(promptApiKey).mockResolvedValue('sk-typed-in'); + const entry = { ...CATALOG_ENTRY, env: undefined } as CatalogProviderEntry; + const { host, errors, current } = makeHost({ providers: {} } as PythinkerConfig); + + await connectCatalogProvider(host, 'anthropic', entry); + + expect(errors).toEqual([]); + expect(current().providers['anthropic']?.apiKey).toBe('sk-typed-in'); + expect(current().providers['anthropic']?.apiKeyEnvVar).toBeUndefined(); + }); + + it('aborts without writing config when the key prompt is cancelled', async () => { + vi.stubEnv('TEST_CATALOG_API_KEY', ''); + vi.mocked(promptApiKey).mockResolvedValue(undefined); + const { host, current } = makeHost({ providers: {} } as PythinkerConfig); + + await connectCatalogProvider(host, 'anthropic', CATALOG_ENTRY); + + expect(current().providers['anthropic']).toBeUndefined(); + expect(promptModelSelectionForCatalog).not.toHaveBeenCalled(); + }); +}); diff --git a/apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts b/apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts index 5029b17c..dcf60215 100644 --- a/apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts +++ b/apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts @@ -1785,7 +1785,7 @@ describe('PythinkerTUI startup', () => { } }); - it('requires a non-empty environment API key for catalog providers', async () => { + it('prompts for an API key when the catalog provider environment variable is unset', async () => { const setConfig = vi.fn(async (patch: unknown) => patch); const harness = makeHarness(makeSession(), { getConfig: vi.fn(async () => ({ providers: {}, models: {} })), @@ -1793,6 +1793,7 @@ describe('PythinkerTUI startup', () => { setConfig, }); const driver = makeDriver(harness, makeStartupInput()); + vi.spyOn((driver as any).authFlow, 'refreshConfigAfterLogin').mockResolvedValue(undefined); const showError = vi.spyOn(driver as any, 'showError').mockImplementation(() => {}); vi.mocked(promptPlatformSelection).mockResolvedValue({ platformId: `${CATALOG_PLATFORM_VALUE_PREFIX}deepseek`, @@ -1810,20 +1811,63 @@ describe('PythinkerTUI startup', () => { }, }); vi.mocked(promptApiKey).mockClear(); - vi.mocked(promptModelSelectionForCatalog).mockClear(); + vi.mocked(promptApiKey).mockResolvedValue('typed-in-secret'); + vi.mocked(promptModelSelectionForCatalog).mockImplementation( + async (_host, _providerId, models) => ({ model: models[0]!, effort: 'off' }), + ); try { vi.stubEnv('DEEPSEEK_API_KEY', ''); await handleLoginCommand(driver as any); + expect(showError).not.toHaveBeenCalled(); + expect(promptApiKey).toHaveBeenCalledTimes(1); + const configPatch = setConfig.mock.calls[0]?.[0] as { + providers: Record; + }; + expect(configPatch.providers['deepseek']?.apiKey).toBe('typed-in-secret'); + expect(configPatch.providers['deepseek']?.apiKeyEnvVar).toBeUndefined(); + expect(harness.track).toHaveBeenCalledWith('login', { + provider: 'deepseek', + method: 'api_key', + }); + } finally { + vi.unstubAllEnvs(); + } + }); + + it('aborts catalog provider login when the API key prompt is cancelled', async () => { + const setConfig = vi.fn(async (patch: unknown) => patch); + const harness = makeHarness(makeSession(), { + getConfig: vi.fn(async () => ({ providers: {}, models: {} })), + removeProvider: vi.fn(), + setConfig, + }); + const driver = makeDriver(harness, makeStartupInput()); + vi.mocked(promptPlatformSelection).mockResolvedValue({ + platformId: `${CATALOG_PLATFORM_VALUE_PREFIX}deepseek`, + catalog: { + deepseek: { + id: 'deepseek', + name: 'Example provider', + npm: '@ai-sdk/openai-compatible', + api: 'https://api.example.test', + env: ['DEEPSEEK_API_KEY'], + models: { + chat: { id: 'example-chat', limit: { context: 128_000 } }, + }, + }, + }, + }); + vi.mocked(promptApiKey).mockClear(); + vi.mocked(promptApiKey).mockResolvedValue(undefined); + vi.mocked(promptModelSelectionForCatalog).mockClear(); + + try { vi.stubEnv('DEEPSEEK_API_KEY', undefined); await handleLoginCommand(driver as any); - expect(showError).toHaveBeenCalledTimes(2); - expect(showError).toHaveBeenCalledWith( - 'Environment variable "DEEPSEEK_API_KEY" is not set or is empty.', - ); - expect(promptApiKey).not.toHaveBeenCalled(); + expect(promptApiKey).toHaveBeenCalledTimes(1); expect(promptModelSelectionForCatalog).not.toHaveBeenCalled(); expect(setConfig).not.toHaveBeenCalled(); } finally { From e951b5ef9bbf75b25f847e5b02bcec792da6888e Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 21:59:52 -0400 Subject: [PATCH 04/10] docs: explain that Homebrew installs do not auto-update Homebrew is deliberately excluded from background auto-install (canAutoInstall), matching gh and Claude Code, but /update and the startup notice implied auto-update exists. Both now state the brew upgrade command and point to the native installer for automatic background updates. ManualUpdateResult carries the install source so the TUI can branch on it. --- .changeset/homebrew-update-hint.md | 5 +++++ apps/pythinker-code/src/cli/update/preflight.ts | 17 +++++++++++++++-- apps/pythinker-code/src/tui/commands/info.ts | 10 ++++++++-- .../test/cli/update/preflight.test.ts | 1 + 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 .changeset/homebrew-update-hint.md diff --git a/.changeset/homebrew-update-hint.md b/.changeset/homebrew-update-hint.md new file mode 100644 index 00000000..a491a429 --- /dev/null +++ b/.changeset/homebrew-update-hint.md @@ -0,0 +1,5 @@ +--- +'@pythoughts/pythinker-code': patch +--- + +Explain in `/update` and the startup update notice that Homebrew installs do not auto-update, and point to the native installer for automatic background updates. diff --git a/apps/pythinker-code/src/cli/update/preflight.ts b/apps/pythinker-code/src/cli/update/preflight.ts index dfdfdf43..e9d467e8 100644 --- a/apps/pythinker-code/src/cli/update/preflight.ts +++ b/apps/pythinker-code/src/cli/update/preflight.ts @@ -168,11 +168,17 @@ export function renderManualUpdateMessage( sourceDesc = 'unsupported package manager or layout.'; break; } + const homebrewHint = + source === 'homebrew' + ? `Homebrew installs do not auto-update. For automatic background updates, ` + + `switch to the native installer: ${NATIVE_INSTALL_COMMAND_UNIX}\n` + : ''; return ( `A newer version of ${NPM_PACKAGE_NAME} is available ` + `(${currentVersion} -> ${target.version}).\n` + `Detected install source: ${sourceDesc}\n` + - `To update manually, run: ${installCommand}\n` + `To update manually, run: ${installCommand}\n` + + homebrewHint ); } @@ -717,7 +723,12 @@ export type ManualUpdateResult = | { readonly status: 'check-failed'; readonly message: string } | { readonly status: 'started'; readonly version: string } | { readonly status: 'in-progress'; readonly version: string } - | { readonly status: 'manual'; readonly version: string; readonly command: string }; + | { + readonly status: 'manual'; + readonly version: string; + readonly command: string; + readonly source: InstallSource; + }; /** * Explicit user-requested update (TUI `/update`). Unlike the passive @@ -746,6 +757,7 @@ export async function startManualUpdate( status: 'manual', version: target.version, command: installCommandFor(source, target.version, platform), + source, }; } @@ -763,6 +775,7 @@ export async function startManualUpdate( status: 'manual', version: target.version, command: installCommandFor(source, target.version, platform), + source, }; } diff --git a/apps/pythinker-code/src/tui/commands/info.ts b/apps/pythinker-code/src/tui/commands/info.ts index cce9dfb8..ab95d375 100644 --- a/apps/pythinker-code/src/tui/commands/info.ts +++ b/apps/pythinker-code/src/tui/commands/info.ts @@ -10,7 +10,7 @@ import type { import { handleDoctor } from '#/cli/sub/doctor'; import { startManualUpdate } from '#/cli/update/preflight'; -import { PYTHINKER_CODE_CHANGELOG_URL } from '#/constant/app'; +import { NATIVE_INSTALL_COMMAND_UNIX, PYTHINKER_CODE_CHANGELOG_URL } from '#/constant/app'; import { openUrl } from '#/utils/open-url'; import { buildMcpStatusReportLines } from '../components/messages/mcp-status-panel'; import { buildStatusReportLines } from '../components/messages/status-panel'; @@ -323,7 +323,13 @@ export async function handleUpdateCommand( ); return; case 'manual': - host.showNotice(`Update available — v${result.version}`, `Run: ${result.command}`); + host.showNotice( + `Update available — v${result.version}`, + result.source === 'homebrew' + ? `Homebrew installs do not auto-update. Run: ${result.command}\n` + + `For automatic background updates, switch to the native installer: ${NATIVE_INSTALL_COMMAND_UNIX}` + : `Run: ${result.command}`, + ); return; case 'check-failed': host.showError(`Update check failed: ${result.message}`); diff --git a/apps/pythinker-code/test/cli/update/preflight.test.ts b/apps/pythinker-code/test/cli/update/preflight.test.ts index 9e99e808..646b12e7 100644 --- a/apps/pythinker-code/test/cli/update/preflight.test.ts +++ b/apps/pythinker-code/test/cli/update/preflight.test.ts @@ -1502,6 +1502,7 @@ describe('startManualUpdate', () => { status: 'manual', version: '0.5.0', command: 'brew upgrade pythinker-code', + source: 'homebrew', }); expect(mocks.spawn).not.toHaveBeenCalled(); }); From 8b9f904a039cf83c06fc8f90ccd06b92582bb479 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:07:43 -0400 Subject: [PATCH 05/10] feat(site): highlight Python download milestone --- apps/site/src/App.vue | 10 + apps/site/src/components/AgentLoop.vue | 2 + apps/site/src/components/InstallCommand.vue | 2 +- .../src/components/LegacyDownloadsPopup.vue | 190 ++++++++++++++++++ 4 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 apps/site/src/components/LegacyDownloadsPopup.vue diff --git a/apps/site/src/App.vue b/apps/site/src/App.vue index 57a3dceb..ec267581 100644 --- a/apps/site/src/App.vue +++ b/apps/site/src/App.vue @@ -2,6 +2,7 @@ import { onMounted, onUnmounted, ref } from 'vue'; import AgentLoop from './components/AgentLoop.vue'; import InstallCommand from './components/InstallCommand.vue'; +import LegacyDownloadsPopup from './components/LegacyDownloadsPopup.vue'; import PythinkerMascot from './components/PythinkerMascot.vue'; const version = __PYTHINKER_VERSION__; @@ -229,6 +230,9 @@ onUnmounted(() => {

+
+ +

Free and open source. MIT licensed. macOS, Linux, and Windows.

@@ -629,6 +633,12 @@ onUnmounted(() => { margin: 36px auto 0; } +.hero-download-milestone { + display: flex; + margin-top: 14px; + justify-content: center; +} + .hero-caption { margin-top: 12px; color: var(--ink-subtle); diff --git a/apps/site/src/components/AgentLoop.vue b/apps/site/src/components/AgentLoop.vue index 0356d1fb..77d8147a 100644 --- a/apps/site/src/components/AgentLoop.vue +++ b/apps/site/src/components/AgentLoop.vue @@ -19,10 +19,12 @@ From 3d237a4ad257e9adc97df1c70bd2990b7ae600f0 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:10:19 -0400 Subject: [PATCH 06/10] chore: add changeset for native install script fix --- .changeset/native-install-script-assets.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/native-install-script-assets.md diff --git a/.changeset/native-install-script-assets.md b/.changeset/native-install-script-assets.md new file mode 100644 index 00000000..0ac6aa11 --- /dev/null +++ b/.changeset/native-install-script-assets.md @@ -0,0 +1,5 @@ +--- +'@pythoughts/pythinker-code': patch +--- + +Point the native install scripts at the published release assets. From 0a01fd0beea6caf239f0129fc1fc3a84be9c5bb8 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:13:48 -0400 Subject: [PATCH 07/10] ci: fix typos allowlist and install-script syntax check Allowlist 'iterm' (iTerm2 identifier) for the whole-repo spell check, and initialize the pwsh error variable in the install-script smoke so ParseFile's [ref] argument is valid. --- .github/workflows/install-smoke.yml | 2 +- _typos.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/install-smoke.yml b/.github/workflows/install-smoke.yml index 9a233e4f..93a383ee 100644 --- a/.github/workflows/install-smoke.yml +++ b/.github/workflows/install-smoke.yml @@ -36,4 +36,4 @@ jobs: - name: Check PowerShell syntax run: | - pwsh -NoProfile -Command '[void][System.Management.Automation.Language.Parser]::ParseFile("apps/pythinker-web/public/install.ps1", [ref]$null, [ref]$errs); if ($errs.Count) { $errs; exit 1 }' + pwsh -NoProfile -Command '$errs = $null; [void][System.Management.Automation.Language.Parser]::ParseFile("apps/pythinker-web/public/install.ps1", [ref]$null, [ref]$errs); if ($errs.Count) { $errs; exit 1 }' diff --git a/_typos.toml b/_typos.toml index 01953df8..1089fc23 100644 --- a/_typos.toml +++ b/_typos.toml @@ -25,3 +25,4 @@ nd = "nd" # ndJsonStream, `Nd` cron interval token dows = "dows" # formatDows — days-of-week (cron) fo = "fo" # `/FO` flag of Windows schtasks pn = "pn" # "PNGs" tokenized as PN by the checker +iterm = "iterm" # iTerm2 terminal app identifier From a661a10c0a9a35bb153ddebdc9fb5ede4333e72b Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:20:30 -0400 Subject: [PATCH 08/10] fix: address PR review findings Reject unsupported Windows architectures in the install script instead of defaulting to x64, and assert that cancelling the API key prompt writes no configuration. --- apps/pythinker-code/test/tui/commands/auth.test.ts | 1 + apps/pythinker-web/public/install.ps1 | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/pythinker-code/test/tui/commands/auth.test.ts b/apps/pythinker-code/test/tui/commands/auth.test.ts index d96e0f9c..c1f7587d 100644 --- a/apps/pythinker-code/test/tui/commands/auth.test.ts +++ b/apps/pythinker-code/test/tui/commands/auth.test.ts @@ -121,6 +121,7 @@ describe('connectCatalogProvider credential acquisition', () => { await connectCatalogProvider(host, 'anthropic', CATALOG_ENTRY); expect(current().providers['anthropic']).toBeUndefined(); + expect(host.harness.setConfig).not.toHaveBeenCalled(); expect(promptModelSelectionForCatalog).not.toHaveBeenCalled(); }); }); diff --git a/apps/pythinker-web/public/install.ps1 b/apps/pythinker-web/public/install.ps1 index 54f9337c..ea32dbb9 100644 --- a/apps/pythinker-web/public/install.ps1 +++ b/apps/pythinker-web/public/install.ps1 @@ -455,7 +455,12 @@ if ([System.Environment]::OSVersion.Platform -ne [System.PlatformID]::Win32NT) { if (-not $Version) { $Version = Get-LatestVersion } $Version = $Version.TrimStart('v') -$archLabel = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64) { 'arm64' } else { 'x64' } +$architecture = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture +$archLabel = switch ($architecture) { + ([System.Runtime.InteropServices.Architecture]::Arm64) { 'arm64' } + ([System.Runtime.InteropServices.Architecture]::X64) { 'x64' } + default { Fail "unsupported Windows architecture: $architecture (need x64 or arm64)" } +} $target = "win32-$archLabel" $asset = "pythinker-code-$target.zip" From 5da2e54f6f120d1f1af5fcfcdba51b3c629abb38 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:28:37 -0400 Subject: [PATCH 09/10] fix: fail with a clear message when launched on Node.js older than 26.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit npm installs the CLI on any Node version (engines is a warning for consumers), but the TUI requires node:ffi via --experimental-ffi, which Node 24 does not have — the re-exec died with 'bad option'. Check the runtime version before re-exec and print the requirement plus the native-installer alternative. --- .changeset/old-node-launch-guard.md | 5 +++++ apps/pythinker-code/src/launcher.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 .changeset/old-node-launch-guard.md diff --git a/.changeset/old-node-launch-guard.md b/.changeset/old-node-launch-guard.md new file mode 100644 index 00000000..55cbaea5 --- /dev/null +++ b/.changeset/old-node-launch-guard.md @@ -0,0 +1,5 @@ +--- +'@pythoughts/pythinker-code': patch +--- + +Show a clear requirement message with the native-installer alternative when the CLI is launched on Node.js older than 26.4, instead of failing with a cryptic flag error. diff --git a/apps/pythinker-code/src/launcher.ts b/apps/pythinker-code/src/launcher.ts index ed99c4a9..3ef188d9 100644 --- a/apps/pythinker-code/src/launcher.ts +++ b/apps/pythinker-code/src/launcher.ts @@ -4,6 +4,24 @@ const FFI_FLAG = '--experimental-ffi'; const FFI_WARNING_FLAG = '--disable-warning=ExperimentalWarning'; const FFI_CHILD_ENV = 'PYTHINKER_CODE_FFI_CHILD'; const REQUIRED_RUNTIME = 'Node.js 26.4.0 or newer with experimental FFI support'; +const MINIMUM_NODE = [26, 4, 0] as const; +const NATIVE_INSTALL_HINT = + 'Alternatively, use the native installer (no Node.js required): https://code.pythinker.com'; + +/** + * Older Node (e.g. 24 LTS) has no `--experimental-ffi`, so the re-exec below + * would die with a cryptic `bad option` error. npm installs the package on any + * Node version (engines is only a warning for consumers), so guard here with + * an actionable message instead. + */ +function isRuntimeTooOld(): boolean { + const parts = process.versions.node.split('.').map(Number); + const [major = 0, minor = 0, patch = 0] = parts; + const [reqMajor, reqMinor, reqPatch] = MINIMUM_NODE; + if (major !== reqMajor) return major < reqMajor; + if (minor !== reqMinor) return minor < reqMinor; + return patch < reqPatch; +} function isFfiProcess(): boolean { // Only execArgv decides: a stale env marker must never bypass the FFI re-exec. @@ -66,6 +84,15 @@ function launchWindowsFallback( } async function launch(): Promise { + if (isRuntimeTooOld()) { + process.stderr.write( + `Pythinker Code requires ${REQUIRED_RUNTIME}; you are running Node.js ${process.versions.node}.\n` + + `${NATIVE_INSTALL_HINT}\n`, + ); + process.exitCode = 1; + return; + } + if (isFfiProcess()) { await import(new URL('./main.mjs', import.meta.url).href); return; From f9a25e7477965b8d5679575304f36b797be447b5 Mon Sep 17 00:00:00 2001 From: elkaix Date: Mon, 3 Aug 2026 22:34:38 -0400 Subject: [PATCH 10/10] fix: detect native Windows architecture under x64 emulation An x64-emulated PowerShell on Windows ARM64 reports OSArchitecture=X64 and would install the x64 build. Read the machine architecture from the Session Manager registry key (with env-var fallback), which reports the hardware architecture regardless of process emulation. --- apps/pythinker-web/public/install.ps1 | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/pythinker-web/public/install.ps1 b/apps/pythinker-web/public/install.ps1 index ea32dbb9..c595be19 100644 --- a/apps/pythinker-web/public/install.ps1 +++ b/apps/pythinker-web/public/install.ps1 @@ -455,11 +455,23 @@ if ([System.Environment]::OSVersion.Platform -ne [System.PlatformID]::Win32NT) { if (-not $Version) { $Version = Get-LatestVersion } $Version = $Version.TrimStart('v') -$architecture = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -$archLabel = switch ($architecture) { - ([System.Runtime.InteropServices.Architecture]::Arm64) { 'arm64' } - ([System.Runtime.InteropServices.Architecture]::X64) { 'x64' } - default { Fail "unsupported Windows architecture: $architecture (need x64 or arm64)" } +# The machine's native architecture, independent of process emulation: an +# x64-emulated PowerShell on Windows ARM64 reports OSArchitecture=X64, but the +# registry value below always holds the real hardware architecture. +function Get-NativeArchitecture { + try { + $reg = Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' -ErrorAction Stop + if ($reg.PROCESSOR_ARCHITECTURE) { return [string]$reg.PROCESSOR_ARCHITECTURE } + } catch {} + if ($env:PROCESSOR_ARCHITEW6432) { return $env:PROCESSOR_ARCHITEW6432 } + return [string]$env:PROCESSOR_ARCHITECTURE +} + +$nativeArchitecture = Get-NativeArchitecture +$archLabel = switch ($nativeArchitecture) { + 'ARM64' { 'arm64' } + 'AMD64' { 'x64' } + default { Fail "unsupported Windows architecture: $nativeArchitecture (need x64 or arm64)" } } $target = "win32-$archLabel"