Skip to content

Commit ebf8151

Browse files
committed
aids
1 parent bd48b4e commit ebf8151

File tree

5 files changed

+31
-2
lines changed

5 files changed

+31
-2
lines changed

index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { getConfig } from "./lib/config"
33
import { Logger } from "./lib/logger"
44
import { createSessionState } from "./lib/state"
55
import { createPruneTool } from "./lib/strategies/prune-tool"
6-
import { createChatMessageTransformHandler } from "./lib/hooks"
6+
import { createChatMessageTransformHandler, createEventHandler } from "./lib/hooks"
77

88
const plugin: Plugin = (async (ctx) => {
99
const config = getConfig(ctx)
@@ -54,6 +54,7 @@ const plugin: Plugin = (async (ctx) => {
5454
logger.info("Added 'prune' to experimental.primary_tools via config mutation")
5555
}
5656
},
57+
event: createEventHandler(ctx.client, config, state, logger),
5758
}
5859
}) satisfies Plugin
5960

lib/hooks.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,24 @@ export function createChatMessageTransformHandler(
3131
insertPruneToolContext(state, config, logger, output.messages)
3232
}
3333
}
34+
35+
export function createEventHandler(
36+
client: any,
37+
config: PluginConfig,
38+
state: SessionState,
39+
logger: Logger
40+
) {
41+
return async (
42+
{ event }: { event: any }
43+
) => {
44+
if (state.sessionId === null || state.isSubAgent) {
45+
return
46+
}
47+
48+
if (event.type === "session.status" && event.properties.status.type === "idle") {
49+
if (!config.strategies.onIdle.enabled) {
50+
return
51+
}
52+
}
53+
}
54+
}

lib/state/state.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export function createSessionState(): SessionState {
4343
totalPruneTokens: 0,
4444
},
4545
toolParameters: new Map<string, ToolParameterEntry>(),
46-
nudgeCounter: 0
46+
nudgeCounter: 0,
47+
lastToolPrune: false
4748
}
4849
}
4950

@@ -59,6 +60,7 @@ export function resetSessionState(state: SessionState): void {
5960
}
6061
state.toolParameters.clear()
6162
state.nudgeCounter = 0
63+
state.lastToolPrune = false
6264
}
6365

6466
export async function ensureSessionInitialized(

lib/state/tool-cache.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export async function syncToolCache(
1717
): Promise<void> {
1818
try {
1919
logger.info("Syncing tool parameters from OpenCode messages")
20+
2021
for (const msg of messages) {
2122
for (const part of msg.parts) {
2223
if (part.type !== "tool" || !part.callID || state.toolParameters.has(part.callID)) {
@@ -36,6 +37,9 @@ export async function syncToolCache(
3637
if (!config.strategies.pruneTool.protectedTools.includes(part.tool)) {
3738
state.nudgeCounter++
3839
}
40+
41+
state.lastToolPrune = part.tool === "prune"
42+
logger.info("lastToolPrune=" + String(state.lastToolPrune))
3943
}
4044
}
4145

lib/state/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ export interface SessionState {
3030
stats: SessionStats
3131
toolParameters: Map<string, ToolParameterEntry>
3232
nudgeCounter: number
33+
lastToolPrune: boolean
3334
}

0 commit comments

Comments
 (0)