From da7d70825e45dca581d2f365f5a9ecbedc3236f6 Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Wed, 17 Jun 2026 20:52:05 +0200 Subject: [PATCH] docs(changelog): add v1.1.4 entry (AGENTS.md autoload, settings merge, history fix) --- CHANGELOG.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bd9e9d..287538e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,60 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). ## Unreleased +## v1.1.4 — 2026-06-17 + +Patch release: config and shell-quality fixes on a preserved volume. No pi +version bump (still `0.79.6`, latest). The `pi-toolkit` ref is auto-resolved +to `main` HEAD at build, so the AGENTS.md change below lands automatically. + +### Added + +- **Global `AGENTS.md` auto-loads the pi-extensions skill.** `pi-toolkit` now + ships `pi-global-AGENTS.md` and symlinks it to `~/.pi/agent/AGENTS.md` (pi's + global-instructions file, loaded at every start). It directs the agent to + read the `pi-extensions` skill at session start and carries a core + fork/recall cheat-sheet, since on-demand skill description-matching was + leaving `pi-fork` / `pi-observational-memory` under-utilised. **Heads-up:** + on a preserved volume any pre-existing real `~/.pi/agent/AGENTS.md` is backed + up to `*.bak.` and replaced by the symlink (same behavior as + `keybindings.json`). +- **`settings.json` merge-on-recreate.** The bootstrap only ever copied the + template when `settings.json` was *absent*, so a file on a preserved volume + never picked up config added in a later image (e.g. the + `observational-memory` / `pi-fork` blocks, a newly-enabled model). The + entrypoint now deep-merges the template into an existing `settings.json` on + start with `jq -s '.[0] * .[1]'` (template first, live second): the user's + values always win and only *missing* keys are filled in. Arrays are treated + as leaves (a model the user removed is not re-added); the file is only + rewritten when the merge changes something, the original is backed up first, + and invalid JSON on either side is skipped rather than clobbered. Opt out + with `PI_SETTINGS_MERGE=0`. + +### Fixed + +- **bash history loss in nested / tmux shells.** The `DEVBOX_HIST_SET` guard + that installs the per-prompt `history -a` flush was `export`ed, so it leaked + into child processes. Any nested shell — crucially each tmux pane, which + inherits the tmux server's env — saw the guard already set and skipped + installing `history -a`, persisting history only on a clean exit. Abrupt + termination (`docker stop`, `tmux kill-server`, SIGKILL) then silently lost + that shell's in-memory history. The guard is now shell-local (no `export`), + so every new interactive shell re-installs its own flush. `zoxide` was less + affected (its hook is unguarded and writes immediately). History and zoxide + storage were never the issue — `~/.cache/bash` (`devbox-shell-history`) and + `~/.local/share/zoxide` (`devbox-zoxide`) are persistent named volumes. + **Note:** existing shells/panes keep the old behavior until restarted + (`tmux kill-server` or open fresh shells). + +### Maintainer + +- `scripts/recreate-sanity-check.sh` gained assertions for the new wiring: the + `~/.pi/agent/AGENTS.md` symlink, a nested login shell installing + `history -a`, and `settings.json` carrying the `observational-memory` + + `pi-fork` blocks after recreate. + +--- + ## v1.1.3 — 2026-06-16 Patch release: pi `0.79.4` → `0.79.5` (auto-resolved at build).