• 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
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
.storybook 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
rules 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.npmrc 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...
windowsSign.ts 正在载入提交数据...