Skip to content

Releases: Yivas/pi-output-styles

v0.6.2

Choose a tag to compare

@Yivas Yivas released this 24 Sep 22:37

Version 0.6.2 closes a terminal-injection hole in style content and makes the status bar, the forced banner and the selection tell the truth.

Security

  • Style content is untrusted text for the terminal, and it is now stripped of terminal escape sequences and invisible formatting before the plugin paints or notifies it (menu, plain listing, status messages and turn reminders): a repository-provided .pi/output-styles/*.md can no longer clear the screen, move the cursor, spoof the title, inject links or write the clipboard. The text sent to the model is unchanged, and the plugin does not claim the terminal is clean for content produced by other extensions.

Fixed

  • The status bar follows the effective style while a plugin forces one, and repaints when the force is applied or released; the forced banner appears as soon as a force exists instead of waiting for a key press; and /output-style also accepts the name the menu shows (the id wins on ties), reporting an ambiguous name with the candidate ids.
  • A subscriber that fails can no longer break the force API: force(), release() and resolve() keep working, and the failure is logged; a state change made from a subscriber triggers another notification pass instead of dropping the notice.
  • Two tests that spawn extra processes no longer time out at the five-second default under load (test-only; nothing of it ships).

Upgrade

  • Install or update to pi-response-styles@0.6.2 (see below). The selected style is stored in <agentDir>/pi-output-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (29 test files, 184 passed, 1 skipped) pass; npm pack contains 27 files with shasum 582c336d9358ed4871b1a3dbd06c152517a61183.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute.
  • Mouse-wheel scrolling of the instruction body follows Pi's input routing and reaches the menu only in Pi's fullscreen TUI mode; the footer keys are the portable path.
  • On terminals shorter than about ten rows the menu keeps its eight-row budget and can exceed the screen by a few rows.
  • The sanitization covers what this plugin paints and notifies; it does not filter content produced by other extensions, and the menu's own colours and Pi's rendering still use terminal sequences.

Compare

v0.6.1

Choose a tag to compare

@Yivas Yivas released this 24 Sep 21:30

Version 0.6.1 draws the insight block of Explanatory and Learning as a box with a star, the Insight title and a rule line, and moves the last wording borrowed from the reference out of the built-in styles.

Changed

  • The insight block in Explanatory and the closing one in Learning are now drawn as a box (star, Insight title, a rule line above and below the points) instead of a Markdown quote, so the gesture stands out from the reply. The mechanism is unchanged: one block before and one after writing code, 2-3 points, in the conversation and never in the code.
  • Learning's request fields, its closing idea and its category list are written in our own words, and the fourth Proactive rule is renamed the same way, so no heading of the reference remains in the built-ins.

Upgrade

  • Install or update to pi-response-styles@0.6.1 (see below). The selected style is stored in <agentDir>/pi-output-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 166 passed, 1 skipped) pass; npm pack contains 26 files with shasum ba6c7113d0fb76611d6230ca9f361ad5a4145482.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute.
  • Mouse-wheel scrolling of the instruction body follows Pi's input routing and reaches the menu only in Pi's fullscreen TUI mode; the footer keys are the portable path.
  • Short functional phrases shared with the reference (five words or fewer) stay in the prompts: they name the mechanism's own vocabulary.

Compare

v0.6.0

Choose a tag to compare

@Yivas Yivas released this 24 Sep 20:37

Version 0.6.0 makes the /output-style menu readable and navigable without relying on colour, and keeps the flags that describe each style visible on narrow terminals.

Changed

  • Every row carries a > cursor glyph and a * active glyph, so the cursor and the persisted style stay distinguishable in monochrome terminals, with NO_COLOR, and while a plugin forces a style (when every row is muted). The forced banner now also states Enter disabled.
  • The menu names itself with a Select an output style header and explains the active glyph (* active) in the footer.
  • The list column is sized to its widest row instead of a fixed 40% of the terminal, and the style origin is shown only for custom styles, so the detail panel gets the room the rows do not need.
  • Below 80 columns the metadata line (turn reminder, keep-coding, from <path>) stays visible at the bottom of the list and is dropped only when the row budget cannot hold it.
  • The menu keeps a floor of eight rows in its height budget, so the dialog renders within the rows it reserves.

Upgrade

  • Install or update to pi-response-styles@0.6.0 (see below). The selected style is stored in <agentDir>/pi-output-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 166 passed, 1 skipped) pass; npm pack contains 26 files with shasum 7206a4710a448f8e36c9892783c32074875eba14.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute.
  • Mouse-wheel scrolling of the instruction body follows Pi's input routing and reaches the menu only in Pi's fullscreen TUI mode; the footer keys are the portable path.
  • On terminals shorter than about ten rows the menu keeps its eight-row budget and can exceed the screen by a few rows.

Compare

v0.5.2

Choose a tag to compare

@Yivas Yivas released this 24 Sep 18:39

Version 0.5.2 opens the /output-style menu as a native dialog in the editor slot — the same place as Pi's own dialogs like the model picker — instead of a floating overlay.

Changed

  • The menu mounts through the modal custom path without overlay, so it behaves like the rest of Pi's TUI dialogs and restores the editor on close. It sizes to its content (one row per style plus detail room and the menu chrome) with a screen cap. The layout, keyboard, states, scrolling and the style: status indicator are unchanged.

Upgrade

  • Install or update to pi-response-styles@0.5.2 (see below). The selected style is stored in <agentDir>/pi-response-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 160 passed, 1 skipped) pass; npm pack contains 26 files with shasum 4f715505d289b4eac796aca70c72d2342ca64c21.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute.
  • Mouse-wheel scrolling of the instruction body follows Pi's input routing and reaches the menu only in Pi's fullscreen TUI mode; the footer keys are the portable path.
  • On terminals of five rows or fewer the menu keeps at least one style row and can exceed the screen cap by one row.

Compare

v0.5.1

Choose a tag to compare

@Yivas Yivas released this 24 Sep 00:53

Version 0.5.1 anchors the /output-style menu overlay at the bottom above the input line, like the rest of Pi's TUI panels, instead of centering it mid-screen.

Changed

  • The /output-style menu overlay now opens bottom-centered with a one-row margin above the input (anchor: "bottom-center", margin: { bottom: 1 }). The layout, keyboard, states, scrolling, and the style: status indicator are unchanged.

Upgrade

  • Install or update to pi-response-styles@0.5.1 (see below). The selected style is stored in <agentDir>/pi-response-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 160 passed, 1 skipped) pass; npm pack contains 26 files with shasum acc35f8ac9c4a003860c9a12877f7a005385e4be.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute. Implementing it requires a new version of Pi.
  • The style menu keeps Pi's input routing: the mouse wheel reaches the menu in fullscreen TUI mode (tuiMode: "fullscreen"); in the default regular mode the footer keys (PgUp/PgDn/Home/End) are the portable scroll path.
  • Terminals shorter than about 8 rows can clip the menu.

Compare

v0.5.0

Choose a tag to compare

@Yivas Yivas released this 24 Sep 00:23

Version 0.5.0 adds five new built-in response styles — Reviewer, Diagrams first, STE, Caveman, and ELI5 — raising the catalog to ten selectable styles.

Highlights

  • Reviewer: a critical code-review lens on any code you read or write — correctness bugs, unhandled edge cases, security and performance risks, risky assumptions, and what could break plus how to verify it after each change.
  • Diagrams first: structure, architecture, control-flow, and request-path explanations open with a bounded mermaid diagram, then continue in prose, mirroring the real code.
  • STE: replies in ASD-STE100 Simplified Technical English with an action-first shape — the next action on the first line, short sentences, numbered steps, and an explicit self-check.
  • Caveman: ultra-terse telegraphic replies that keep code, commands, paths, JSON, and error output exact, with full language reserved for safety warnings and irreversible actions.
  • ELI5: plain short words for a tired reader — what you did, whether it worked, what to do now — with decisions capped at two options and a recommendation.

Each new style declares its own turn-start reminder and keeps keep-coding-instructions on; none declares a waiting reminder, which stays fail-closed on Pi 0.87.0. Selection, persistence, injection, and the /output-style menu are unchanged.

Upgrade

  • Install or update to pi-response-styles@0.5.0 (see below). The selected style is stored in <agentDir>/pi-response-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 160 passed, 1 skipped) pass; npm pack contains 26 files with shasum fdaac46ef8e118cdb737104996a4d637617a2a68.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute. Implementing it requires a new version of Pi.
  • The style menu keeps Pi's input routing: the mouse wheel reaches the menu in fullscreen TUI mode (tuiMode: "fullscreen"); in the default regular mode the footer keys (PgUp/PgDn/Home/End) are the portable scroll path.
  • Terminals shorter than about 8 rows can clip the menu.

Compare

v0.4.0

Choose a tag to compare

@Yivas Yivas released this 23 Sep 22:43

Version 0.4.0 adds an interactive style menu to /output-style in TUI sessions — a navigable style list beside a live detail panel with real mouse-wheel and keyboard scrolling — and a style: indicator in the status bar that follows the effective style.

Added

  • /output-style with no arguments now opens an interactive menu in TUI sessions: a navigable style list (active marker and origin) beside a live detail panel with the description, the style's real metadata (turn reminder, keep-coding, waiting reminder: unavailable (Pi) when Pi cannot deliver it, and from <path> for custom styles), and the instruction body with real scrolling. The menu fits the terminal height — borders, banner, list, detail and footer share one row budget, so the status line stays on screen — and the body scrolls with the mouse wheel and with PgUp/PgDn/Home/End, listed in the menu footer next to ↑↓ · Enter · Esc. Enter applies and persists the selection; Esc cancels.
  • A style: <name> indicator in the status bar follows the effective style: muted for default, accent otherwise, painted at session start and after every selection change.

Changed

  • The menu surfaces the live forced, warning, and fallback states: while another plugin forces a style it shows Forced by <plugin> — selection overridden with every row muted and Enter disabled until the force is released, load warnings keep reporting at session start, and a persisted selection that no longer exists falls back to default in both the menu marker and the indicator.
  • The responsive layout collapses the detail panel below 80 columns, moving the active row's description inline. Only the no-argument TUI route changed: /output-style <id> and /output-style status keep their previous behavior, and RPC, JSON and print modes keep the plain-text listing without dialogs.
  • Built-in style wording: four sentences were rewritten in original wording and three received wording fixes, with no semantic change to the styles.

Upgrade

  • Install or update to pi-response-styles@0.4.0 (see below). The selected style is stored in <agentDir>/pi-response-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0).
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (28 test files, 155 passed, 1 skipped) pass; npm audit reports 0 vulnerabilities; npm pack contains 26 files with shasum 0bd6d03abd620d013e126ec6e21fee77c7ae782e.

Installation

npm install pi-response-styles

Known limitations

  • Mouse-wheel scrolling follows Pi's input routing: the wheel reaches the menu in Pi's fullscreen TUI mode (tuiMode: "fullscreen"); in the default regular mode the terminal keeps the wheel for its scrollback, so the footer keys are the portable scroll path.
  • Terminals shorter than about 8 rows can clip the menu.
  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute. Implementing it requires a new version of Pi.

Compare

v0.3.0

Choose a tag to compare

@Yivas Yivas released this 23 Sep 16:12

Version 0.3.0 delivers cross-plugin style interoperability over Pi's shared event bus, ships the changelog inside the npm package, and aligns the public documentation with what has been verified.

Added

  • Cross-plugin force delivery: another extension receives the live ForcedStyleController through Pi's shared event bus on pi-response-styles:style-controller after emitting pi-response-styles:style-controller-request; integration tests cover both extension load orders and release.

Changed

  • The npm package ships CHANGELOG.md: the tarball allowlist includes it, so pi-response-styles@0.3.0 carries the release history (pi-response-styles@0.2.0 predates this change).

Fixed

  • The compatibility document and the README status now record what has actually been verified: the npm registry installation of 0.2.0 and the cross-plugin force delivery over pi.events, replacing the previous not-run statements for both.

Upgrade

  • Install or update to pi-response-styles@0.3.0 (see below). The selected style is stored in <agentDir>/pi-output-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0) on Node.js v24.9.0.
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (25 test files, 93 passed, 1 skipped) pass; npm audit reports 0 vulnerabilities; npm pack contains 24 files with shasum 6c9cc8a9ea2e92d2a735e1a2524f16eaf6bc06b4.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no public waiting-only hook, so it fails closed with no polling, timer, or prompt substitute. Implementing it needs a new version of Pi.
  • No third-party plugin itself has been tested against the event bus; the bus payload is untyped, so a receiver must verify the shape it gets.
  • Cross-plugin force delivery claims no priority over or isolation from other extensions.

Compare

v0.2.0

Choose a tag to compare

@Yivas Yivas released this 23 Sep 11:41

Version 0.2.0 raises the five built-in style texts to the depth of the approved output-style specification, makes default a pure style, declares turn-start reminders, and closes the open development-only dependency alerts. It is the first version of the package published to npm.

Added

  • Turn-start style reminders: Proactive and Concise emit one notification at the start of each turn; default, Explanatory, and Learning stay silent.

Changed

  • All five built-in style texts were rewritten from scratch in English with the depth of the approved output-style specification: Proactive gains an active-style section with six numbered rules, Concise six numbered rules plus a final precedence clause, Explanatory an educational frame with an in-conversation insight block of 2-3 key points, and Learning a human-contribution protocol with 2-10/20+ line thresholds, TODO(human) markers, a three-field request block, three worked examples, and an insight closing.
  • default is now pure: empty instructions and keepCodingInstructions: false, so selecting it leaves Pi's system prompt untouched instead of appending the base coding block (previously every built-in appended it).

Fixed

  • Version and channel claims now match the verified registries: the release lives on GitHub as v0.2.0 and on npm as pi-response-styles@0.2.0, its first npm version (compatibility document, README, contributing guide, and the issue and pull request templates).

Security

  • Closed the development-only advisories GHSA-5xrq-8626-4rwp and GHSA-82fw-gwwq-j7x9 by raising vitest from 3.2.4 to 4.1.11 and declaring vite-node 6.0.0 explicitly; npm audit reports 0 vulnerabilities for runtime and development dependencies. @earendil-works/pi-coding-agent remains pinned at 0.87.0.

Upgrade

  • Install pi-response-styles@0.2.0 from npm (see below). The selected style is stored in <agentDir>/pi-output-styles.selection.json; that store is unchanged in this release, so the current selection carries over without migration.

Compatibility

  • Verified against Pi 0.87.0 (local dependency @earendil-works/pi-coding-agent 0.87.0) on Node.js v24.9.0.
  • Other Pi versions have not been run.

Verification

  • npm run lint, npm run typecheck, and the full suite (24 test files, 91 passed, 1 skipped) pass; npm audit reports 0 vulnerabilities; npm pack contains 22 files with shasum dc628ca872524343ba818f88c00e5bb9e62dc52e.

Installation

npm install pi-response-styles

Known limitations

  • The Proactive waitingTurnReminder is declared but never emitted: Pi 0.87.0 exposes no waiting-only hook, so it fails closed with no polling, timer, or prompt substitute.
  • Cross-plugin force interoperability has not been run and is not provided as a claim.

Compare

v0.1.0

Choose a tag to compare

@Yivas Yivas released this 22 Sep 23:16

First release of the Pi response-styles extension: switchable built-in and custom response styles, selected by command, persisted between sessions, and injected into Pi's chained system prompt.

Highlights

  • Five built-in styles: default, Proactive, Concise, Explanatory, and Learning.
  • The /output-style command for listing, inspecting, and selecting styles.
  • Active-style injection into Pi's chained system prompt.
  • Atomic, lock-protected persistence in the extension-owned <agentDir>/pi-output-styles.selection.json file.
  • Turn-start reminders and keep-coding-instructions composition.
  • User and project custom styles with the precedence built-in < user < project.
  • A process-local API for temporarily forcing a style.

Compatibility

  • Verified against Pi 0.87.0. Other Pi versions have not been run.
  • Checks ran on the local Node.js v24.9.0 installation.
  • Published on npm as pi-response-styles. The repository and product keep the name pi-output-styles; the npm name pi-output-styles belongs to an unrelated third-party package, so install this project only from pi-response-styles.

Known limitations

  • The waiting-turn reminder is fail-closed: Pi 0.87.0 exposes no verified waiting-only hook, and the extension does not substitute one with polling, timers, or another workaround.
  • Cross-plugin force interoperability has not been run and is not provided as a claim.
  • Later before_agent_start handlers can still replace the prompt, so the extension does not claim priority over other extensions.

Security

Runtime dependencies report no vulnerabilities (npm audit --omit=dev). Three development-only dependency alerts remain open on Vitest and @vitest/mocker (GHSA-5xrq-8626-4rwp critical, GHSA-82fw-gwwq-j7x9 moderate, aggregated by npm audit as one critical and one moderate). These development dependencies were not changed in this preparation.

Install

npm install pi-response-styles