Skip to content
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@

### Fixed

- The composer's context gauge now falls back to its localized `Usage` label
instead of holding the pre-compaction figure after a compaction: no provider
has tokenized the replacement prompt yet, so the last real count is stale.
A `context_compaction_applied` row marks the boundary the moment a
compaction lands — the `context_compacted` note stays the settlement-time
display row — and only a measurement that completed after the boundary
restores the figure, so a mid-turn compaction recovers as soon as the next
step settles. A failed-open compaction is not a boundary: that request went
out with its full raw history.
- Fixed a renderer crash dialog reporting React error #185 ("Maximum update depth
exceeded") coming from the composer's prompt-history inline completion (#4117): the
offer engine the 0.1.11 composer fed could flip-flop its announcement state on
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/src/main/__tests__/conversation-owner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import type { DesktopSessionSummary } from '../../shared/desktop-session-project
import { createSessionCatalogController, SessionCatalogContext } from '../../renderer/application/contracts/session-catalog/session-catalog-state.js';
import { ConversationProvider, ConversationServicesProvider, ConversationLifecycle, ConversationTranscriptRegion, ConversationComposerRegion, useAppShellSessionUiState, type ConversationObservationServices, type ConversationServices } from '../../renderer/features/conversation/index.js';
import { renderConversationMarkdown, stubComposerGateInputs, stubConversationServices, useConversationOwner } from '../../renderer/features/conversation/testing.js';
import type { LatestRequestUsage } from '../../renderer/application/contracts/session-inspector/latest-request-usage.js';
import { cleanupFakeDom, installReactRenderer } from './fake-dom.js';
import { withComposerSubmission } from './composer-submission-fixture.js';

Expand Down Expand Up @@ -96,7 +97,7 @@ function harness(options: {
let lifecycleCommits = 0;
let setVisible!: (visible: boolean) => void;
function Transcript(props: NonNullable<typeof transcript>) { transcript = props; transcriptRenders += 1; return null; }
function Composer(_props: { processing: boolean; pendingMessages?: readonly TransientUserMessageProjection[]; latestRequestUsageTokens?: number }) {
function Composer(_props: { processing: boolean; pendingMessages?: readonly TransientUserMessageProjection[]; latestRequestUsage?: LatestRequestUsage }) {
composerRenders += 1;
useEffect(() => { composerMounts += 1; return () => { composerUnmounts += 1; }; }, []);
return null;
Expand Down
Loading