fix(continuation): skip internal user turns

This commit is contained in:
YeonGyu-Kim
2026-05-15 23:16:23 +09:00
parent c580b8f2ce
commit be25109f6d
10 changed files with 275 additions and 8 deletions
@@ -0,0 +1,70 @@
/// <reference types="bun-types" />
import { afterEach, beforeEach, describe, expect, test } from "bun:test"
import { OMO_INTERNAL_INITIATOR_MARKER } from "../../shared/internal-initiator-marker"
import { handleNonIdleEvent } from "./non-idle-events"
import { createSessionStateStore, type SessionStateStore } from "./session-state"
describe("handleNonIdleEvent", () => {
let sessionStateStore: SessionStateStore
beforeEach(() => {
sessionStateStore = createSessionStateStore()
})
afterEach(() => {
sessionStateStore.shutdown()
})
test("given synthetic user message update, keeps continuation countdown state intact", () => {
// given
const sessionID = "ses_synthetic_user_event"
const state = sessionStateStore.getState(sessionID)
state.countdownStartedAt = Date.now() - 10_000
state.wasCancelled = true
state.tokenLimitDetected = true
// when
handleNonIdleEvent({
eventType: "message.updated",
properties: {
sessionID,
info: { role: "user" },
parts: [{ type: "text", text: "internal wake", synthetic: true }],
},
sessionStateStore,
})
// then
expect(state.countdownStartedAt).toBeDefined()
expect(state.wasCancelled).toBe(true)
expect(state.tokenLimitDetected).toBe(true)
})
test("given internally marked user message update, keeps continuation countdown state intact", () => {
// given
const sessionID = "ses_internal_user_event"
const state = sessionStateStore.getState(sessionID)
state.countdownStartedAt = Date.now() - 10_000
state.wasCancelled = true
state.tokenLimitDetected = true
// when
handleNonIdleEvent({
eventType: "message.updated",
properties: {
sessionID,
info: { role: "user" },
parts: [
{ type: "text", text: `internal wake\n${OMO_INTERNAL_INITIATOR_MARKER}` },
],
},
sessionStateStore,
})
// then
expect(state.countdownStartedAt).toBeDefined()
expect(state.wasCancelled).toBe(true)
expect(state.tokenLimitDetected).toBe(true)
})
})