Skip to content

Commit 9c3cb2b

Browse files
authored
feat(shell): welcome banner redesign + TUI polish, update orchestrator, release-orchestration plans (#37)
* docs: add 3-repo release orchestration design spec Approved design for finishing the GitHub App/OIDC migration, a self-owned release.py single-source-of-truth tool, fail-loud promotion, and broadened distribution (Scoop/GHCR/Nix/WinGet). Phased P0->P2 roadmap. Produced via a multi-agent design workflow, ground-truthed against the live repos. * docs: add welcome banner redesign spec (footer chip) * docs: add welcome banner redesign implementation plan * test: lock welcome banner redesign (footer chip, no pipe, split strapline) * feat(shell): redesign welcome banner with footer chip layout * docs: add P0-P2 release-orchestration implementation plans (draft) Write-stage plans recovered from the plan-writing workflow, each with its automated review punch-list embedded. Finalize pass (applying the punch-lists) pending after a session-limit interruption. * docs: finalize P0-P2 release-orchestration plans Applied the automated review punch-lists (finalize pass): P0 fixes the invalid gh api --jq, the $GITHUB_ENV bottleneck plumbing, semver-ordered readiness-issue auto-close, and the changelog-gate verification; P1 wires the PYTHINKER_MANAGED hook end-to-end; P2 fixes the Scoop extract_dir/bin nesting and the Docker ancestor-check dry-run. Removed draft banners and embedded punch-lists. * feat(shell): TUI redesign, update orchestrator, release-orchestration docs Broad checkpoint of the welcome-banner-redesign branch: - Shell/TUI: welcome banner footer-chip layout, design system, glyphs, motion, prompt, slash, tool renderers, MCP status, activity tree, live view, worklog, theme tokens. - Update flow: new update_orchestrator module + CLI wiring; terminal capability detection (terminal_capabilities) with tests. - Feedback: structured feedback repo (feedback_repo) and slash command. - Auth/config/llm: OpenAI auth + platform/config/llm adjustments. - Docs: welcome-banner spec/plan and P0–P2 release-orchestration plans. - Web: subagent-steps component update. - Address CodeRabbit review: -> None on update CLI handlers, drop a duplicate test assertion, correct the backoff verification budget (7 retries / 364s), and de-hardcode uv paths in the P2 plan. * test(shell): follow-up tweaks to update, feedback, and TUI tests Adjust update_orchestrator, mcp_status, feedback_repo, and live_view alongside their tests; add update CLI test coverage. * fix(ci): make UI tests terminal-agnostic, fix docs build, add changelog CI runs the suite with TERM=dumb and NO_COLOR=1 to keep logs clean. The new terminal_capabilities module correctly degrades the TUI to ASCII glyphs and no-color under those, but ~115 pre-existing UI-contract tests assert the rich (Unicode + color + motion) appearance and only ever ran in UTF-8 dev shells. - tests/conftest.py: pin a capable terminal (drop NO_COLOR/CLICOLOR/glyph/motion overrides, set TERM=xterm-256color) before any pythinker import freezes the glyph constants in ui.shell.glyphs. The degraded fallbacks stay covered by tests/ui_and_conv/test_terminal_capabilities.py. Verified: full tests/ run green under NO_COLOR=1 TERM=dumb PYTHONUTF8=1. - docs p0-quick-wins: wrap inline-code GitHub Actions ${{ ... }} in <code v-pre> so VitePress's Vue SSR stops evaluating them as template interpolation. Fixes the docs build crash on PYTHINKER_HOME_REPO_DISPATCH_TOKEN. Verified with a local build over the committed doc set. - CHANGELOG.md (+ synced docs mirror): add Unreleased entries for the welcome banner redesign and terminal-aware rendering, satisfying the changelog gate. * fix: address CodeRabbit review (null guard, ASCII glyphs, annotations) - slash.py: guard provider.api_key (SecretStr | None) before get_secret_value() to avoid AttributeError when no API key is configured. - mcp_status.py + glyphs.py: add an ASCII-aware LIST_BULLET glyph and use it for the MCP startup/inventory bullets instead of a hardcoded "•", so they degrade with the rest of the TUI under TERM=dumb / legacy code pages. - _blocks.py: build changed-paths via a list comprehension (PERF401). - test_update_cli.py, test_update_orchestrator.py: add -> None on the _isolate_update_files helpers. - p0-quick-wins plan: scope the release-bot App secrets to --visibility selected --repos pythinker-code instead of org-wide. * docs: use repo-relative paths in release-orchestration design spec * docs: address CodeRabbit doc nits (relative paths, telemetry wording, fence langs, plan note) * fix(ci): resolve PR 37 review failures * test(cli): normalize export help output * docs(ci): tighten release tag filters
1 parent 25c2f20 commit 9c3cb2b

74 files changed

Lines changed: 7541 additions & 356 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/homebrew-tap.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Update Homebrew tap
33
on:
44
push:
55
tags:
6-
- "v[0-9]+.[0-9]+.[0-9]+"
6+
- "v+([0-9]).+([0-9]).+([0-9])"
77
workflow_dispatch:
88
inputs:
99
version:

.github/workflows/linux-installer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
tags:
66
# Same scheme as release-pythinker-cli.yml and windows-installer.yml.
7-
- "v[0-9]+.[0-9]+.[0-9]+"
7+
- "v+([0-9]).+([0-9]).+([0-9])"
88
workflow_dispatch:
99
inputs:
1010
version:

.github/workflows/promote-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ name: Promote release
1616
on:
1717
push:
1818
tags:
19-
- "v[0-9]+.[0-9]+.[0-9]+"
19+
- "v+([0-9]).+([0-9]).+([0-9])"
2020
workflow_dispatch:
2121
inputs:
2222
tag:

.github/workflows/release-pythinker-cli.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Release (pythinker-code)
33
on:
44
push:
55
tags:
6-
- "v[0-9]+.[0-9]+.[0-9]+"
6+
- "v+([0-9]).+([0-9]).+([0-9])"
77

88
permissions:
99
contents: write

.github/workflows/windows-installer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
tags:
66
# Match the existing PyPI release workflow's tag scheme: v<MAJOR>.<MINOR>.<PATCH>.
7-
- "v[0-9]+.[0-9]+.[0-9]+"
7+
- "v+([0-9]).+([0-9]).+([0-9])"
88
workflow_dispatch:
99
inputs:
1010
version:

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ static/
5656
.memo/
5757
.entire
5858
.claude
59+
.pythinker/
5960
.worktrees/
6061
blackbox/
6162

CHANGELOG.md

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

1616
## Unreleased
1717

18+
- **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged.
19+
- **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals.
1820
- **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured.
1921

2022
## 0.27.0 (2026-05-31)

PRODUCT.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Product
2+
3+
## Register
4+
5+
Use a product-engineering register: concise, practical, and confident. Write for developers who value clear terminal workflows; prefer precise verbs, concrete outcomes, and short examples over marketing slogans.
6+
7+
## Users
8+
9+
Developers using Pythinker inside terminal workflows, including PowerShell, Windows Terminal, macOS Terminal, iTerm2, GNOME Terminal, CI logs, SSH sessions, and low-color or no-color shells. They are reviewing code, diagnosing failures, running commands, approving changes, and switching between AI and shell work.
10+
11+
## Product Purpose
12+
13+
Pythinker Code is a review-first AI engineering CLI. The interface should help users understand what the agent is doing, trust approvals and results, move quickly through repeated terminal actions, and keep context visible without leaving the shell.
14+
15+
## Brand Personality
16+
17+
Disciplined, terminal-native, precise.
18+
19+
## Anti-references
20+
21+
Do not make the TUI feel like a neon dashboard, glassmorphism mockup, emoji-heavy chat toy, or novelty terminal skin. Avoid fragile color-only semantics, excessive borders, box-heavy layouts, decorative motion, AI-purple gradients, and UI effects that slow repeated keyboard workflows.
22+
23+
## Design Principles
24+
25+
1. Standardize first: core structure, labels, states, and colors must behave consistently across shells and terminal capabilities.
26+
2. Text is the UI: layout, copy, hierarchy, and semantic labels should remain usable in no-color and narrow-width environments.
27+
3. Speed over spectacle: feedback should be immediate, short, and interruptible; repeated keyboard actions should not animate.
28+
4. State must be explicit: approvals, background work, errors, warnings, and tool execution need clear shape and wording, not just color.
29+
5. Compatibility is craft: PowerShell, Windows Terminal, Unix terminals, SSH, CI, and screen readers should all get a coherent experience.
30+
31+
## Accessibility & Inclusion
32+
33+
Target WCAG-minded contrast within ANSI limitations, colorblind-safe state semantics, reduced-motion behavior, keyboard-first operation, graceful no-color fallback, and responsive rendering from narrow split panes to wide terminals.

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,4 +801,8 @@ Distributed under the **Apache-2.0 License**. See [`LICENSE`](https://github.com
801801
[🧩 ACP](https://github.com/agentclientprotocol/agent-client-protocol) &nbsp;·&nbsp;
802802
[🔌 MCP](https://modelcontextprotocol.io/)
803803

804+
<p align="center">
805+
<em>Thanks for visiting ✨ Pythinker! Viewing this README does not trigger telemetry.</em>
806+
</p>
807+
804808
</div>

docs/en/release-notes/changelog.md

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

1818
## Unreleased
1919

20+
- **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged.
21+
- **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals.
22+
- **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured.
23+
2024
## 0.27.0 (2026-05-31)
2125

2226
### What changed in this release

0 commit comments

Comments
 (0)