fix(todo-continuation): gate idle prompts

This commit is contained in:
YeonGyu-Kim
2026-05-15 11:30:20 +09:00
parent b0b61182b4
commit a524754eca
@@ -21,7 +21,7 @@ import {
getAgentConfigKey, getAgentConfigKey,
normalizeAgentForPromptKey, normalizeAgentForPromptKey,
} from "../../shared/agent-display-names" } from "../../shared/agent-display-names"
import { isSessionActive } from "../shared/session-idle-settle" import { promptAsyncAfterSessionIdle } from "../shared/prompt-async-gate"
import { import {
CONTINUATION_PROMPT, CONTINUATION_PROMPT,
@@ -166,11 +166,6 @@ ${todoList}`
return return
} }
if (await isSessionActive(ctx.client, sessionID)) {
log(`[${HOOK_NAME}] Skipped injection: session is active before prompt`, { sessionID })
return
}
if (injectionState) { if (injectionState) {
injectionState.inFlight = true injectionState.inFlight = true
} }
@@ -190,7 +185,12 @@ ${todoList}`
: undefined : undefined
const launchVariant = model?.variant const launchVariant = model?.variant
await ctx.client.session.promptAsync({ const promptResult = await promptAsyncAfterSessionIdle({
client: ctx.client,
sessionID,
source: HOOK_NAME,
settleMs: 0,
input: {
path: { id: sessionID }, path: { id: sessionID },
body: { body: {
agent: launchAgent ?? promptAgent, agent: launchAgent ?? promptAgent,
@@ -200,7 +200,18 @@ ${todoList}`
parts: [createInternalAgentContinuationTextPart(prompt)], parts: [createInternalAgentContinuationTextPart(prompt)],
}, },
query: { directory: ctx.directory }, query: { directory: ctx.directory },
},
}) })
if (promptResult.status === "failed") {
throw promptResult.error
}
if (promptResult.status !== "dispatched") {
log(`[${HOOK_NAME}] Injection skipped by promptAsync gate`, { sessionID, status: promptResult.status })
if (injectionState) {
injectionState.inFlight = false
}
return
}
log(`[${HOOK_NAME}] Injection successful`, { sessionID }) log(`[${HOOK_NAME}] Injection successful`, { sessionID })
if (injectionState) { if (injectionState) {