Support compaction mid-turn (#2524)
<!-- devin-review-badge-begin -->
---
<a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2524"
target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
<img
src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
alt="Open with Devin">
</picture>
</a>
<!-- devin-review-badge-end -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes local-agent streaming/history rebuilding and compaction
timing/persistence, which can impact message ordering, UI rendering, and
tool-loop continuity if edge cases are missed.
>
> **Overview**
> **Enables mid-turn context compaction in local-agent mode** by
triggering compaction between AI SDK steps (when token usage crosses the
threshold and the step included tool calls) so the agent can finish the
same user turn.
>
> Updates `handleLocalAgentStream` to rebuild message history after
compaction while preserving in-flight tool-loop messages, inline the
compaction indicator into the active assistant response, hide
newly-inserted compaction-summary DB rows from streamed message lists,
and persist only the post-compaction `aiMessagesJson` slice. Also
hardens compaction output by XML-escaping the stored summary, adds
`createdAtStrategy` handling for compaction insertion timing, and
includes new unit/E2E coverage (fixture + snapshots) plus expanded git
workflow documentation.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ac3ccb6e1221012141954ba6560ef2426bf07253. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Enables mid-turn context compaction in local-agent tool loops so the
agent can finish the same user turn. Improves history rebuilding, inline
compaction messaging, streaming behavior, scheduling, and safe
persistence.
- **New Features**
- Triggers mid-turn compaction when per-step tokens cross the threshold
and tool calls exist; schedules in onStepFinish and applies before the
next step.
- Centralizes history via buildChatMessageHistory, preserving in-flight
assistant/tool messages, hiding mid-turn compaction DB rows from
streaming, and placing the summary after the triggering user.
- Streams a compaction preview over current content and inlines the
final compaction summary into the current assistant turn; selects
createdAtStrategy ("now" mid-turn, "before-latest-user" pre-turn) with a
1-second margin to keep turn order.
- Persists only post-compaction AI messages when compaction happens
mid-turn, slicing correctly with 0-indexed stepNumber.
- **Bug Fixes**
- Escapes compaction summary in both the live preview and the persisted
DB message to prevent XSS.
- Re-queries chat only on successful compaction and filters hidden
compaction summaries out of streaming payloads.
- Clears injected messages after mid-turn compaction to avoid stale
insertion indices; prevents repeat attempts and skips further compaction
checks in the same turn after success.
- Always runs checkAndMarkForCompaction in onStepFinish to mark
next-turn compaction when appropriate.
<sup>Written for commit ac3ccb6e1221012141954ba6560ef2426bf07253.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
---------
Co-authored-by:
Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by:
claude[bot] <41898282+claude[bot]@users.noreply.github.com>
正在显示
请
注册
或者
登录
后发表评论