Repository navigation
v1.0.24
Your messages line up with the answers
In the claude-code preset, your messages now start with the prompt's ❯, and their text lines up with the answers below them, as in Claude Code. The welcome card's !! tip now says what it does.
Fixed
- Inline chrome: your messages didn't line up with the answers. With
messages.assistantMarkeron (theclaude-codepreset), an answer starts with●on Pi's gutter and its text begins two columns later. Pi draws your message itself, with the text on the gutter, so your text started two columns left of the answer's. Pi without the theme has both at the same column; the shift came from the theme's marker.- Your messages now start with the prompt's
❯in the marker column. Their text, wrapped lines included, starts in the same column as the answer's. - Pi's band, colors, and prompt zone (OSC 133) are kept. The glyph is the editor's prompt glyph:
❯,>in ASCII mode, or yourtheme.glyphs.prompt. - Without the assistant marker, your messages are untouched.
- Your messages now start with the prompt's
Changed
- The
!!tip. The welcome card read!! bash, no context, taken from Pi's startup hint. That could be read as a note about context files such asAGENTS.md, and it is fixed text that never looked at them.!!commandruns a command and shows its output without sending it to the model;!commandincludes the output in the conversation. The tip now readsbash, not sent to model, the way Pi's usage guide puts it. The gallery images show the new wording.
How it stays contained
- The theme decorates Pi's
UserMessageComponent.rebuildonly when it recognizes the native method, the same check every other decorated surface goes through. It recognizes Pi 0.85 (a bandBoxaround the Markdown), Pi 1.1 (a Markdown that paints its own band), and Pi's bundled build. Anything else keeps Pi's own rendering. - It installs only when the assistant marker is on.
- Pi's lines are rendered two columns narrower and widened again right after their left padding. The inserted cells sit inside the band's background, so every row keeps its full width.
Verification
- CI: this repository has no configured GitHub Actions workflows, check-runs, or commit-status contexts for the release commit. The local release gates below all passed.
npm ciandnpm run check: typecheck, 431 unit/integration/golden tests, dependency boundaries, production build, and package smoke.- 5 tests are new for the prompt marker. They use Pi 0.85's real component and Pi 1.1's shape rebuilt from pi-tui's Markdown, and they check:
- the same text column as an answer;
- hanging wrapped rows;
- the full-width band and the OSC 133 zone;
outputPad0;- Pi's output untouched without markers;
- installation only alongside the assistant marker.
- One assertion pins the new
!!wording. - Each intermediate commit passes
npm run checkon its own.
- 5 tests are new for the prompt marker. They use Pi 0.85's real component and Pi 1.1's shape rebuilt from pi-tui's Markdown, and they check:
npm run test:e2e:readonly-tools: 25/25 packed-package CLI/RPC cases on Pi 0.99.1 withpi-hashline-edit-pro4.5.1.npm publish --dry-run: the expected 7-file npm artifact (151.6 kB packed).- Real TUI on Pi 1.1.0 (bundled build), with the Titanium theme and an isolated agent directory. Columns and colors were read back from the terminal buffer.
claude-code: the prompt's❯sits at column 1, and its text and wrapped row start at column 3, the same column as● Check the file first.. The band's background runs through the marker cells.default: no marker, and your text and the answer's both start at column 1, as before.- The tips row reads
!! bash, not sent to model.
Tested on Windows x64 with Node 24.11.1. Linux/macOS runs were not part of this verification.
Install / update
Published on npm. Verified:
- the registry
latesttag,gitHead(the release commit), tarball shasum, and thepi.imagegallery URL; - a clean install whose files match the release build byte for byte;
- a real Pi 1.1.0 run of the installed package. In the
claude-codeanddefaultpresets, the transcript renders exactly as the pre-release build did, apart from run timings.
pi install npm:@nguyenquangthai/pi-omp-theme@1.0.24
# For an existing unpinned installation:
pi update npm:@nguyenquangthai/pi-omp-theme