fix(coding-agent): prevent duplicate rendering of extension messages on startup, closes #765

This commit is contained in:
Mario Zechner 2026-01-16 12:16:57 +01:00
commit 0b625b66b7
2 changed files with 9 additions and 1 deletions

View file

@ -6,6 +6,10 @@
- Added bash-style argument slicing for prompt templates ([#770](https://github.com/badlogic/pi-mono/pull/770) by [@airtonix](https://github.com/airtonix)) - Added bash-style argument slicing for prompt templates ([#770](https://github.com/badlogic/pi-mono/pull/770) by [@airtonix](https://github.com/airtonix))
### Fixed
- Fixed extension messages rendering twice on startup when `pi.sendMessage({ display: true })` is called during `session_start` ([#765](https://github.com/badlogic/pi-mono/pull/765) by [@dannote](https://github.com/dannote))
## [0.47.0] - 2026-01-16 ## [0.47.0] - 2026-01-16
### Breaking Changes ### Breaking Changes

View file

@ -145,6 +145,7 @@ export class InteractiveMode {
private keybindings: KeybindingsManager; private keybindings: KeybindingsManager;
private version: string; private version: string;
private isInitialized = false; private isInitialized = false;
private hasRenderedInitialMessages = false;
private onInputCallback?: (text: string) => void; private onInputCallback?: (text: string) => void;
private loadingAnimation: Loader | undefined = undefined; private loadingAnimation: Loader | undefined = undefined;
private readonly defaultWorkingMessage = "Working..."; private readonly defaultWorkingMessage = "Working...";
@ -619,7 +620,9 @@ export class InteractiveMode {
this.session this.session
.sendCustomMessage(message, options) .sendCustomMessage(message, options)
.then(() => { .then(() => {
if (!wasStreaming && message.display) { // Don't rebuild if initial render hasn't happened yet
// (renderInitialMessages will handle it)
if (!wasStreaming && message.display && this.hasRenderedInitialMessages) {
this.rebuildChatFromMessages(); this.rebuildChatFromMessages();
} }
}) })
@ -2007,6 +2010,7 @@ export class InteractiveMode {
} }
renderInitialMessages(): void { renderInitialMessages(): void {
this.hasRenderedInitialMessages = true;
// Get aligned messages and entries from session context // Get aligned messages and entries from session context
const context = this.sessionManager.buildSessionContext(); const context = this.sessionManager.buildSessionContext();
this.renderSessionContext(context, { this.renderSessionContext(context, {