fix: check done flag at top of event loop
state.done = true → все последующие события пропускаются на уровне цикла, до любых handlers. Включая text.ended, step.started, reasoning.*, tool.*.
This commit is contained in:
parent
650fa4a631
commit
a91cac7131
6
index.ts
6
index.ts
|
|
@ -147,6 +147,10 @@ async function runPlugin(ctx: any, options: any, dataDir: string) {
|
||||||
const sessionId = eventData?.data?.sessionID || ""
|
const sessionId = eventData?.data?.sessionID || ""
|
||||||
const assistantMsgID = eventData?.data?.assistantMessageID || ""
|
const assistantMsgID = eventData?.data?.assistantMessageID || ""
|
||||||
|
|
||||||
|
// Skip all events after session is done
|
||||||
|
const state = sessionsBySessionID.get(sessionId)
|
||||||
|
if (state?.done) continue
|
||||||
|
|
||||||
// ── Step lifecycle ──────────────────────────────────────────────
|
// ── Step lifecycle ──────────────────────────────────────────────
|
||||||
|
|
||||||
if (eventType === "session.step.started") {
|
if (eventType === "session.step.started") {
|
||||||
|
|
@ -242,6 +246,8 @@ async function runPlugin(ctx: any, options: any, dataDir: string) {
|
||||||
|
|
||||||
if (eventType === "session.text.ended" && assistantMsgID) {
|
if (eventType === "session.text.ended" && assistantMsgID) {
|
||||||
const state = sessionsBySessionID.get(sessionId)
|
const state = sessionsBySessionID.get(sessionId)
|
||||||
|
// Skip text events after final step
|
||||||
|
if (state?.done) continue
|
||||||
const step = state?.steps.get(assistantMsgID)
|
const step = state?.steps.get(assistantMsgID)
|
||||||
if (step) {
|
if (step) {
|
||||||
step.text = eventData?.data?.text || ""
|
step.text = eventData?.data?.text || ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue