Skip to content

Commit 093fa92

Browse files
committed
fix: remove isInternalAgent flag due to hook ordering race condition
The isInternalAgent flag was causing a race condition where concurrent internal agents (title/summary generators) would set the flag to true, and normal session message transforms would see the stale value and skip injecting the prunable-tools list. This happened because messages.transform runs before system.transform, so the flag set by system.transform was always stale by the time messages.transform checked it. Fix: Remove the flag entirely and only skip system prompt injection for internal agents (detected in system.transform where it works reliably).
1 parent 3267d9f commit 093fa92

File tree

4 files changed

+2
-9
lines changed

4 files changed

+2
-9
lines changed

index.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,10 @@ const plugin: Plugin = (async (ctx) => {
3737
"Summarize what was done in this conversation",
3838
]
3939
if (internalAgentSignatures.some((sig) => systemText.includes(sig))) {
40-
logger.info("Skipping DCP injection for internal agent")
41-
state.isInternalAgent = true
40+
logger.info("Skipping DCP system prompt injection for internal agent")
4241
return
4342
}
4443

45-
// Reset flag for normal sessions
46-
state.isInternalAgent = false
47-
4844
const discardEnabled = config.tools.discard.enabled
4945
const extractEnabled = config.tools.extract.enabled
5046

lib/hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function createChatMessageTransformHandler(
1515
return async (input: {}, output: { messages: WithParts[] }) => {
1616
await checkSession(client, state, logger, output.messages)
1717

18-
if (state.isSubAgent || state.isInternalAgent) {
18+
if (state.isSubAgent) {
1919
return
2020
}
2121

lib/state/state.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export function createSessionState(): SessionState {
4343
return {
4444
sessionId: null,
4545
isSubAgent: false,
46-
isInternalAgent: false,
4746
prune: {
4847
toolIds: [],
4948
},
@@ -63,7 +62,6 @@ export function createSessionState(): SessionState {
6362
export function resetSessionState(state: SessionState): void {
6463
state.sessionId = null
6564
state.isSubAgent = false
66-
state.isInternalAgent = false
6765
state.prune = {
6866
toolIds: [],
6967
}

lib/state/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export interface Prune {
2727
export interface SessionState {
2828
sessionId: string | null
2929
isSubAgent: boolean
30-
isInternalAgent: boolean
3130
prune: Prune
3231
stats: SessionStats
3332
toolParameters: Map<string, ToolParameterEntry>

0 commit comments

Comments
 (0)