• Will Chen's avatar
    Support compaction mid-turn (#2524) · 2ebe6208
    Will Chen 提交于
    <!-- 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: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
    Co-authored-by: 's avatarclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
    2ebe6208
名称
最后提交
最后更新
..
__snapshots__ 正在载入提交数据...
README.md 正在载入提交数据...
ai_messages_cleanup.test.ts 正在载入提交数据...
ai_messages_utils.test.ts 正在载入提交数据...
app_env_vars_utils.test.ts 正在载入提交数据...
chat_stream_handlers.test.ts 正在载入提交数据...
cleanFullResponse.test.ts 正在载入提交数据...
compaction_storage.test.ts 正在载入提交数据...
compaction_utils.test.ts 正在载入提交数据...
formatMessagesForSummary.test.ts 正在载入提交数据...
github_utils.test.ts 正在载入提交数据...
local_agent_handler.test.ts 正在载入提交数据...
local_agent_list_files_path_safety.test.ts 正在载入提交数据...
mcp_tool_utils.test.ts 正在载入提交数据...
mention_apps.test.ts 正在载入提交数据...
parseOllamaHost.test.ts 正在载入提交数据...
path_utils.test.ts 正在载入提交数据...
prepare_step_utils.test.ts 正在载入提交数据...
problem_prompt.test.ts 正在载入提交数据...
readSettings.test.ts 正在载入提交数据...
replacePromptReference.test.ts 正在载入提交数据...
retryWithRateLimit.test.ts 正在载入提交数据...
style-utils.test.ts 正在载入提交数据...
supabase_utils.test.ts 正在载入提交数据...
versioned_codebase_context.test.ts 正在载入提交数据...
xmlEscape.test.ts 正在载入提交数据...