# Changelog

All notable changes to this project are documented here.

## Unreleased

## 0.3.0 - 2026-09-11

- Add validated `avatar.png` primary avatars with bounded dimensions and file size, while retaining one `avatar.ansi` or `avatar.txt` fallback.
- Carry PNG avatars through personal import/removal, portable v1 character packages, and the backward-compatible v1 companion UI snapshot.

## 0.2.0 - 2026-09-09

- Keep unselected keyboard-menu options readable across light/dark terminal mismatches by using the terminal foreground in bold instead of forcing a theme text color.
- Add an eight-scenario persona evaluation plan and isolated real-Pi RPC runner with scenario filtering and repeated sampling.
- Inject only the active mood preset at runtime instead of exposing every preset definition to the model, and make active mood expression explicit but bounded.
- Refine Mira's playful preset toward shorter, higher-information conversational turns with a restrained visible playful cue.
- Make the main menu state-aware and reorganize character resources into focused add/restore, edit, and manage/export groups while preserving all direct subcommands.
- Add a real-entry companion integration gate covering both extension load orders, state transitions, protocol privacy, unknown versions, and missing-package degradation.
- Remove the unused `claim-v1` event; the v1 UI protocol now consists only of request-state and state events.
- Move all on-screen avatar presentation to the optional `pi-incarnate-ui` companion; core now only publishes sanitized character presentation data.
- Add `auto`, `full`, `compact`, and `off` presentation preferences for companion UIs, all using the same avatar asset.
- Add `avatar.ansi` support with a strict SGR color allowlist, per-line resets, a 64 KiB limit, and a 16-line display limit.
- Add a versioned, read-only UI state protocol so companion extensions can render presentation without duplicating character or ANSI parsing.
- Show normal usage help instead of an error when `/incarnate` is invoked without an interactive UI.
- Turn bare `/incarnate` into a keyboard-navigable menu for character, mood, avatar, status, and disable actions.
- Add guided character creation and editing with Pi's multiline editor, full validation, and atomic saves.
- Ask for the display name first, suggest a safe character id, normalize common id formatting, and retry invalid input in place.
- Store personal characters outside the npm package and let them override same-id built-in characters.
- Add a keyboard-driven repair flow for malformed or missing personal `CHARACTER.md` files, with the same validation and atomic-save guarantees as normal edits.
- Reject symbolic-link `CHARACTER.md` files before reading them.
- Add keyboard-driven avatar import and removal for personal characters, including safe path normalization, ANSI sanitization, lossless bounds checks, and built-in character overrides.
- Add explicit TUI creation and editing for declared Markdown preference forms, with bounded UTF-8 reads, atomic writes, path containment, and built-in character overrides.
- Group card, repair, avatar-file, and preference-form actions under a compact character-resources submenu.
- Add personal-character rename plus recoverable archive and restore flows, with collision checks, active-session synchronization, and no permanent-delete action.
- Add reviewable, versioned character-package export and import for cards, preferred avatars, and available declared forms, with strict file allowlisting, size bounds, and no-overwrite installation.
- Add guided, one-section-at-a-time character-card editing while preserving fenced pseudo-headings, custom sections, and all unselected content; keep complete Markdown editing available for advanced changes.

## 0.1.0 - 2026-09-04

Initial release.

- Add strict Markdown character discovery and loading.
- Add session-scoped character activation and safe prompt injection.
- Add `/incarnate` list, use, off, status, mood, and avatar commands.
- Add sanitized, width-limited persistent ASCII avatar widgets.
- Add validated mood presets and explicitly declared preference forms.
- Add the original example character Mira with three blank preference forms.
- Add automated tests, RPC integration coverage, and a real Pi TUI smoke checklist.
