test(coding-agent): verified transcript component streaming and state management

- Added comprehensive unit tests for `TranscriptContainer` to verify uncommitted block tracking.
- Created integration tests ensuring `AssistantMessageComponent` correctly streams thinking and answer content into scrollback.
- Added tests verifying that expanded tool evaluation output records rows correctly without duplication after settling.
- Updated `AssistantMessageComponent` test suite to cover table streaming scenarios in the unsettled tail.
This commit is contained in:
can1357
2026-07-04 12:15:23 +02:00
parent a3e13cd5f2
commit e8d1ab005e
4 changed files with 254 additions and 9 deletions
@@ -930,6 +930,17 @@ export class InteractiveMode implements InteractiveModeContext {
pushTerminalTitle();
setSessionTerminalTitle(this.sessionManager.getSessionName(), this.sessionManager.getCwd());
this.updateEditorBorderColor();
// Single side-effect point for title changes: every setSessionName caller
// (first-input titling, /rename, extension renames, plan seeding, replan
// refresh) gets the terminal title + accent updates from here. Registered
// before initHooksAndCustomTools/#reconcileModeFromSession/#enterPlanMode —
// all of which can reach setSessionName during init.
this.#eventBusUnsubscribers.push(
this.sessionManager.onSessionNameChanged(() => {
setSessionTerminalTitle(this.sessionManager.getSessionName(), this.sessionManager.getCwd());
this.#handleSessionAccentInputsChanged();
}),
);
this.#syncEditorMaxHeight();
this.isInitialized = true;
this.ui.requestRender(true);
@@ -986,13 +997,6 @@ export class InteractiveMode implements InteractiveModeContext {
this.session.subscribe(event => {
void this.#handleGoalSessionEvent(event);
}),
this.sessionManager.onSessionNameChanged(() => {
// Single side-effect point for title changes: every setSessionName
// caller (first-input titling, /rename, plan seeding, replan refresh)
// gets the terminal title + accent updates from here.
setSessionTerminalTitle(this.sessionManager.getSessionName(), this.sessionManager.getCwd());
this.#handleSessionAccentInputsChanged();
}),
onStatusLineSessionAccentChanged(() => {
this.#syncStatusLineSettings();
this.#handleSessionAccentInputsChanged();