Audited changelog entries for recent commits.
UnderstandUpdated missing changelog entries.
EditAttempted to commit and push changes.
VerifyEncountered push failure due to remote updates and unstaged changes.
UnderstandAudit changelog entries for all commits since the last release.
Find the last release tag:
git tag --sort=-version:refname | head -1List all commits since that tag:
git log <tag>..HEAD --onelineRead each package's [Unreleased] section:
For each commit, check:
git show <hash> --stat)Description ([#N](url) by [@user](url))Cross-package duplication rule:
Changes in ai, agent or tui that affect end users should be duplicated to coding-agent changelog, since coding-agent is the user-facing package that depends on them.
Add New Features section after changelog fixes:
### New Features section at the start of ## [Unreleased] in packages/coding-agent/CHANGELOG.md.Report:
Sections (in order):
### Breaking Changes - API changes requiring migration### Added - New features### Changed - Changes to existing functionality### Fixed - Bug fixes### Removed - Removed featuresAttribution:
Fixed foo ([#123](https://github.com/badlogic/pi-mono/issues/123))Added bar ([#456](https://github.com/badlogic/pi-mono/pull/456) by [@user](https://github.com/user))Preparing to audit commands
I'm planning to gather git metadata to support auditing missing entries, focusing on reading necessary files fully before editing.
>git tag --sort=-version:refname | head -1v0.50.7>git log v0.50.7..HEAD --oneline39d69f42 Merge branch 'merge/pr-940'
7d632ba1 chore: update changelog and docs for qwen extension
993c45a0 feat(coding-agent): add Qwen CLI OAuth provider
c2716884 test(tui): cover non-qwerty kitty base layout fallback
5bb37007 fix(tui): prevent Kitty protocol base layout key from causing false shortcut matches
6e4508f1 feat(coding-agent): threaded sort mode and compact format for /resume (#1124)
2a631a24 feat(coding-agent): threaded sort mode and compact format for /resume
030a61d8 feat: add maxDelayMs setting to cap server-requested retry delays
1bd68327 fix: make pre-commit hook fail on lint warnings, fix template literal warnings
7eae0a7d fix(coding-agent): make setThinkingLevel idempotent
c9fa28e6 fix: override fast-xml-parser to 5.3.4 to resolve CVE
178e1e11 feat(coding-agent): compact one-line format for /resume session list
0ece01b5 chore(coding-agent): add dev script for watch mode
38ed9e86 fix(coding-agent): convert clipboard BMP images to PNG on paste
42d54e0d feat(coding-agent): add threaded sort mode to /resume with tree display
6f2d0663 feat(coding-agent): add keybinding actions for /tree, /fork, and /new
d075291b feat(tui): add sticky column for vertical cursor navigation (#1120)
675136f0 chore: approve contributor pasky
7a505261 chore: approve contributor liby
f0eda2df Add [Unreleased] section for next cycleNoticing duplicate merges and changelog needs
I see many duplicate merge commits and will need to inspect each commit fully along with changelog files to clarify the unique changes.
Analyzing commit impact on changelog
I'm reviewing each recent commit's stats and messages to classify their impact on the changelog, planning to skip doc-only, changelog-only, and likely test-only commits while confirming feature and fix commits require entries.
Verifying duplicate and missing changelog entries
I'm identifying duplicate commits related to the same /resume feature and confirming they share a single changelog entry while checking other commits for missing or needed entries, especially cross-package features and fixes.
>git show 993c45a0 --statcommit 993c45a059b723ce31c2107d0928b297ee76f44f
Author: 4h9fbZ <[REDACTED]>
Date: Sun Jan 25 03:06:57 2026 +0100
feat(coding-agent): add Qwen CLI OAuth provider
package.json | 3 +-
packages/ai/README.md | 2 +-
packages/ai/src/providers/openai-completions.ts | 3 +
packages/ai/src/types.ts | 4 +-
.../coding-agent/examples/extensions/README.md | 1 +
.../extensions/custom-provider-qwen-cli/.gitignore | 1 +
.../extensions/custom-provider-qwen-cli/index.ts | 345 +++++++++++++++++++++
.../custom-provider-qwen-cli/package.json | 16 +
packages/coding-agent/src/core/model-registry.ts | 10 +-
9 files changed, 380 insertions(+), 5 deletions(-)Confirming AI and coding-agent changelog updates
>git show c2716884 --statcommit c27168840c8be347ea72e1ea56840c54cc023451
Author: Mario Zechner <[REDACTED]>
Date: Sun Feb 1 01:33:28 2026 +0100
test(tui): cover non-qwerty kitty base layout fallback
packages/coding-agent/CHANGELOG.md | 1 +
packages/tui/CHANGELOG.md | 4 ++++
packages/tui/test/keys.test.ts | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 39 insertions(+)Updating changelog entries
>git show 5bb37007 --statcommit 5bb3700717159ab386be245cf6bb6ab3935209d8
Author: Ryota <[REDACTED]>
Date: Fri Jan 30 13:20:35 2026 +0000
fix(tui): prevent Kitty protocol base layout key from causing false shortcut matches
With the Kitty keyboard protocol (flag 4), terminals report both the
logical key codepoint and the physical base layout key (PC-101 QWERTY
position). The key matching logic in matchesKittySequence matched
against both unconditionally, which caused a single keypress to match
multiple shortcuts on remapped keyboard layouts.
For example, on a Dvorak layout with xremap, pressing Ctrl+K sends
CSI 107::118;5u (codepoint=107 'k', base layout=118 'v'). The
unconditional base layout match made this also match Ctrl+V, which is
bound to pasteImage. Since CustomEditor checks app-level keybindings
(pasteImage) before editor keybindings (deleteToLineEnd), Ctrl+K was
silently intercepted by the paste image handler instead of deleting
to end of line. The same issue affects symbol keys, as Dvorak also
remaps symbols to different physical positions (e.g., '/' sits where
'[' is on QWERTY).
The fix restricts base layout key matching to cases where the codepoint
is not a recognized Latin letter (a-z) or symbol (/, -, [, ;, etc.).
When the codepoint is already a recognized key, it is authoritative and
the base layout key is ignored. This preserves non-Latin layout support
(Ctrl+К on a Russian layout still matches Ctrl+K via base layout key
107) while preventing false matches from differing physical key
positions on remapped layouts.
Both matchesKittySequence and parseKey are updated with the same logic.
packages/tui/src/keys.ts | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)Checking duplicate changelog entries
I'm verifying whether multiple commits correspond to duplicate changelog entries, ensuring all relevant changes are properly covered without redundancy.
>git show d075291b --statcommit d075291b08856e8aefa0709152512385855d0e59
Author: Sviatoslav Abakumov <[REDACTED]>
Date: Sun Feb 1 01:52:47 2026 +0400
feat(tui): add sticky column for vertical cursor navigation (#1120)
When moving up/down through lines of varying lengths, the editor now
remembers the original column position and restores it when reaching a
line long enough to accommodate it.
Example: cursor at column 10, move up to a shorter line (cursor clamps
to end), move up again to a longer line - cursor returns to column 10.
Implementation:
- Add preferredVisualCol instance property (nullable)
- Set it when moving to a shorter line during vertical navigation
- Clear it when arriving at a line that fits the preferred column
- Clear it on any horizontal movement or editing via setCursorCol()
- Detect line rewrap by checking if cursor is in middle of line
- When pressing right at end of prompt, set preferredVisualCol so
subsequent up/down navigation uses that column position
packages/tui/src/components/editor.ts | 221 +++++++++++------
packages/tui/test/editor.test.ts | 439 ++++++++++++++++++++++++++++++++++
2 files changed, 592 insertions(+), 68 deletions(-)Adding changelog entries across packages
Noticed missing changelog entries for tui and coding-agent as per cross-package rules; planning to add them under Unreleased sections and verify the coding-agent changelog against commit 030a61d8.
>git show 030a61d8 --statcommit 030a61d88c665e688f75f5149a8a50ea971d3470
Author: Mario Zechner <[REDACTED]>
Date: Sun Feb 1 00:50:41 2026 +0100
feat: add maxDelayMs setting to cap server-requested retry delays
When a provider (e.g., Google Gemini CLI) requests a retry delay longer
than maxDelayMs (default: 60s), the request fails immediately with an
informative error instead of waiting silently for hours.
The error is then handled by agent-level auto-retry, which shows the
delay to the user and allows aborting with Escape.
- Add maxRetryDelayMs to StreamOptions (packages/ai)
- Add maxRetryDelayMs to AgentOptions (packages/agent)
- Add retry.maxDelayMs to settings (packages/coding-agent)
- Update _isRetryableError to match 'retry delay' errors
fixes #1123
packages/agent/CHANGELOG.md | 4 ++++
packages/agent/src/agent.ts | 26 ++++++++++++++++++++++
packages/ai/CHANGELOG.md | 4 ++++
packages/ai/src/providers/google-gemini-cli.ts | 10 +++++++++
packages/ai/src/providers/simple-options.ts | 1 +
packages/ai/src/types.ts | 8 +++++++
packages/coding-agent/CHANGELOG.md | 1 +
packages/coding-agent/docs/settings.md | 6 ++++-
packages/coding-agent/src/core/agent-session.ts | 4 ++--
packages/coding-agent/src/core/sdk.ts | 1 +
packages/coding-agent/src/core/settings-manager.ts | 4 +++-
11 files changed, 65 insertions(+), 4 deletions(-)Confirming changelog and package scope
>git show 1bd68327 --statcommit 1bd68327f37c95c8edd6c8e9008e4bb570262a4f
Author: Mario Zechner <[REDACTED]>
Date: Sun Feb 1 00:25:49 2026 +0100
fix: make pre-commit hook fail on lint warnings, fix template literal warnings
- Add --error-on-warnings to biome check in root and web-ui package.json
- Convert string concatenation to template literals in daxnuts.ts
- Convert string concatenation to template literals in test file
Fixes #1103
package.json | 2 +-
packages/coding-agent/src/modes/interactive/components/daxnuts.ts | 2 +-
packages/tui/test/bug-regression-isimageline-startswith-bug.test.ts | 4 ++--
packages/web-ui/package.json | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)Skipping changelog for tooling commit
>git show 7eae0a7d --statcommit 7eae0a7d30da907f686ae3eea61aec01fce0f773
Author: Mario Zechner <[REDACTED]>
Date: Sun Feb 1 00:14:49 2026 +0100
fix(coding-agent): make setThinkingLevel idempotent
switchSession() was appending spurious thinking_level_change entries
to session log on resume because setThinkingLevel() unconditionally
persisted. Now only persists if the level actually changes.
fixes #1118
packages/coding-agent/CHANGELOG.md | 1 +
packages/coding-agent/src/core/agent-session.ts | 13 ++++++++++---
2 files changed, 11 insertions(+), 3 deletions(-)Confirming existing changelog entry
>git show c9fa28e6 --statcommit c9fa28e6267568baa6fa726b890da163b7167e37
Author: Mario Zechner <[REDACTED]>
Date: Sat Jan 31 23:48:22 2026 +0100
fix: override fast-xml-parser to 5.3.4 to resolve CVE
package-lock.json | 6 +++---
package.json | 3 +++
2 files changed, 6 insertions(+), 3 deletions(-)Assessing changelog need for root dependency update
The commit modifies the root package.json affecting dependencies potentially used by multiple packages, including coding-agent; since no changelog entry exists, I’ll verify which packages use the updated dependency to determine if a changelog addition is needed.
>rg "fast-xml-parser" -npackage.json:51: "fast-xml-parser": "5.3.4"
package-lock.json:809: "fast-xml-parser": "5.2.5",
package-lock.json:5470: "node_modules/fast-xml-parser": {
package-lock.json:5472: "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.4.tgz",Assessing changelog entry duplication
I'm confirming that AI-related changes like Qwen thinking support appear only in the AI package but likely need duplication in the coding-agent package since it uses AI and affects end users; currently, coding-agent lacks this entry, so adding it makes sense.
Deciding changelog updates for cross-package features and dependency fixes
I’m confirming to add AI Qwen thinking support and TUI sticky column features as added entries in both their packages and coding-agent to reflect user-facing updates. For the root dependency security fix, despite uncertainty about direct package usage, I’m leaning toward adding a fixed entry in coding-agent’s changelog since it affects end users and satisfies audit needs, but I’ll first verify coding-agent’s dependencies by reading its package.json.
Clarifying root dependency impact
fast-xml-parser is only in the root package.json with no changelog or direct coding-agent usage found; I'll raise this as a missing changelog entry, likely adding it to coding-agent for visibility since instructions require noting affected packages but root isn't listed.
>rg "fast-xml-parser" packages -g"*.ts"(no output)
Command exited with code 1Reviewing changelog entries for recent commits
I've verified some recent commits and noted which already have corresponding changelog entries in the external format. The minor template literal change doesn't need an entry. I'll add missing entries only for substantial code changes like the AI enable_thinking update affecting multiple packages.
Resolving large changelog reading and author lookup
I'm clarifying the conflict between reading large changelog files fully without offset despite truncation limits and confirming partial read suffices since only the Unreleased section is needed. Next, I plan to add entries to tui and coding-agent changelogs, including an external-format entry for the tui feature linked to PR #1120, requiring author username lookup from the PR metadata.
>gh pr view 1120 --json author,url{"author":{"id":"MDQ6VXNlcjEwNDQzMDA=","is_bot":false,"login":"Perlence","name":"Sviatoslav Abakumov"},"url":"https://github.com/badlogic/pi-mono/pull/1120"}Planning changelog updates and new features section
Noticed external contributions requiring properly formatted entries in changelogs, including for coding-agent with linked PRs and authors. The coding-agent changelog also needs a new "New Features" section inserted after fixing missing entries in Unreleased. This section's content should be proposed for user confirmation before adding. Next, I'll prepare fixes for missing entries and then propose the top new features for confirmation before inserting that section.
Finalizing missing changelog entries before proposing new features
Decided to add missing changelog entries now in tui and coding-agent for sticky column and Qwen thinking support with proper formatting and cross-package duplication. Will not add the "New Features" section yet but propose its content for user confirmation next.
Preparing precise edit chunk
I'm extracting the exact oldText snippet from the file to create an edit block that includes the last entry for appending the new list at the top.
Summarizing missing entries with notes
I'm preparing a report listing commits that previously lacked changelog entries, noting that issues like sticky columns and duplication have been fixed. I'll include specific commits and clarify if some need no user-facing entry, marking them accordingly. I'll also propose key new features from Unreleased with linked docs and ask for user confirmation before writing full entries.
Drafting feature proposal with doc links
I'm gathering top new features from coding-agent Unreleased, identifying related docs for each like README or settings and keybindings files. I'll list candidate features with relevant doc anchors and ask for user confirmation before adding a New Features section. Also finalizing the missing-entries report with fixed commits and notes on no-entry-needed cases.
>rg "resume" -n packages/coding-agent/README.md packages/coding-agent/docs -g"*.md"packages/coding-agent/README.md:141:| `/resume` | Pick from previous sessions |
packages/coding-agent/README.md:453:| `-r`, `--resume` | Browse and select session |
packages/coding-agent/docs/session.md:17:Pi also supports deleting sessions interactively from `/resume` (select a session and press `Ctrl+D`, then confirm). When available, pi uses the `trash` CLI to avoid permanent deletion.
packages/coding-agent/docs/session.md:291:The session name is displayed in the session selector (`/resume`) instead of the first message when set.
packages/coding-agent/docs/extensions.md:257:/new (new session) or /resume (switch session)
packages/coding-agent/docs/extensions.md:296:Fired when starting a new session (`/new`) or switching sessions (`/resume`).
packages/coding-agent/docs/extensions.md:300: // event.reason - "new" or "resume"
packages/coding-agent/docs/extensions.md:301: // event.targetSessionFile - session we're switching to (only for "resume")
packages/coding-agent/docs/extensions.md:310: // event.reason - "new" or "resume"Planning documentation links
I'll propose linking features to existing docs when available, starting with session docs for /resume and specific sections like retry max delay by locating relevant headings with search.
>rg "maxDelayMs|retry" -n packages/coding-agent/docs/settings.md77:| `retry.enabled` | boolean | `true` | Enable automatic retry on transient errors |
78:| `retry.maxRetries` | number | `3` | Maximum retry attempts |
79:| `retry.baseDelayMs` | number | `2000` | Base delay for exponential backoff (2s, 4s, 8s) |
80:| `retry.maxDelayMs` | number | `60000` | Max server-requested delay before failing (60s) |
82:When a provider requests a retry delay longer than `maxDelayMs` (e.g., Google's "quota will reset after 5h"), the request fails immediately with an informative error instead of waiting silently. Set to `0` to disable the cap.
86: "retry": {
90: "maxDelayMs": 60000
191: "retry": {Searching keybindings for target actions
>rg "tree|fork|newSession" -n packages/coding-agent/docs/keybindings.md83:| `newSession` | *(none)* | Start a new session (`/new`) |
84:| `tree` | *(none)* | Open session tree navigator (`/tree`) |
85:| `fork` | *(none)* | Fork current session (`/fork`) |Checking Qwen CLI OAuth docs location
I'm searching for references to the Qwen CLI OAuth provider extension in the examples or docs to find the best link, focusing on examples/extensions/README.md and docs/extensions.md for a suitable anchor or section.
>rg "Qwen|qwen" -n packages/coding-agent/examples/extensions/README.md111:| `custom-provider-qwen-cli/` | Qwen CLI provider with OAuth device flow and OpenAI-compatible models |Outlining new features and changelog updates
I'm preparing to propose a concise New Features section highlighting recent key additions like the modifyModels hook, resume threaded mode, retry max delay, new keybindings, and Qwen CLI OAuth provider example, all linked appropriately. I'll also confirm that cross-package duplication issues are resolved, note fixed missing changelog entries, avoid em dashes, and provide a clear summary of all relevant changelog changes.
Preparing changelog summary and new features proposal
I'm compiling a response listing updated changelog files and fixed missing entries from specific commits, confirming cross-package duplication is resolved, and proposing a New Features section with linked highlights like threaded resume, retry delay cap, keybinding actions, and Qwen CLI OAuth example. I'll ask for confirmation on these items and placement before proceeding.
Summary:
Report:
New Features section proposal for packages/coding-agent/CHANGELOG.md:
Please confirm if you want these listed under a new ### New Features section at the start of ## [Unreleased]:
/resume session picker with tree view and compact one-line format. Docs: packages/coding-agent/docs/session.md.retry.maxDelayMs. Docs: packages/coding-agent/docs/settings.md./new, /tree, and /fork. Docs: packages/coding-agent/docs/keybindings.md.If you want different items or wording, tell me what to adjust and I will update the changelog.
no looks good, commit and push the CHAGNELOG.md changes, don't touch anything else.
Preparing commit and push commands
>git status --shortM packages/coding-agent/CHANGELOG.md
M packages/coding-agent/examples/sdk/12-full-control.ts
M packages/coding-agent/src/core/agent-session.ts
M packages/coding-agent/src/core/extensions/index.ts
M packages/coding-agent/src/core/extensions/runner.ts
M packages/coding-agent/src/core/extensions/types.ts
M packages/coding-agent/src/core/resource-loader.ts
M packages/coding-agent/src/modes/interactive/interactive-mode.ts
M packages/coding-agent/test/sdk-skills.test.ts
M packages/coding-agent/test/utilities.ts
M packages/mom/src/agent.ts
M packages/tui/CHANGELOG.mdCommitting changelog updates
I'm staging only the two modified changelog files to ensure no other changes are included, then committing and pushing them with an appropriate message.
>git add packages/tui/CHANGELOG.md packages/coding-agent/CHANGELOG.md(no output)>git commit -m "chore: audit changelog entries"Running formatting, linting, and type checking...
> pi-monorepo@0.0.3 check
> biome check --write --error-on-warnings . && tsgo --noEmit && cd packages/web-ui && npm run check
Checked 452 files in 298ms. No fixes applied.
> @mariozechner/pi-web-ui@0.50.7 check
> biome check --write --error-on-warnings . && tsc --noEmit && cd example && biome check --write --error-on-warnings . && tsc --noEmit
Checked 73 files in 40ms. No fixes applied.
Checked 3 files in 8ms. No fixes applied.
✅ All pre-commit checks passed!
[main eccf8380] chore: audit changelog entries
2 files changed, 6 insertions(+)Completing pre-commit and pushing changes
>git pushTo https://github.com/badlogic/pi-mono.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/badlogic/pi-mono.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Command exited with code 1Executing pull with rebase and conflict check
I'm pulling with rebase and will abort and report if conflicts arise in files not modified locally to avoid unintended merge issues.
>git pull --rebaseerror: cannot pull with rebase: You have unstaged changes.
error: Please commit or stash them.
Command exited with code 128Requesting user coordination due to unstaged changes
Push is rejected because a rebase is needed, but the working tree has unstaged changes from other agents that cannot be stashed or touched. The user must coordinate or clean the worktree before pulling or rebasing.
Push failed because the remote has new commits. I need to run git pull --rebase before pushing, but the worktree has unstaged changes from other files, so rebase is blocked and I cannot stash per rules.
Please let me know how you want to proceed. Options:
git tag --sort=-version:refname | head -1git log <tag>..HEAD --oneline