mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 15:38:25 +00:00
fix(hooks): suppress main session events for silent/delivered hook turns (#20678)
* fix(hooks): suppress main session events for silent/delivered hook turns When a hook agent turn returns NO_REPLY (SILENT_REPLY_TOKEN), mark the result as delivered so the hooks handler skips enqueueSystemEvent and requestHeartbeatNow. Without this, every Gmail notification classified as NO_REPLY still injects a system event into the main agent session, causing context window growth proportional to email volume. Two-part fix: - cron/isolated-agent/run.ts: set delivered:true when synthesizedText matches SILENT_REPLY_TOKEN so callers know no notification is needed - gateway/server/hooks.ts: guard enqueueSystemEvent + requestHeartbeatNow with !result.delivered (addresses duplicate delivery, refs #20196) Refs: https://github.com/openclaw/openclaw/issues/20196 * Changelog: document hook silent-delivery suppression fix --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
This commit is contained in:
@@ -86,11 +86,13 @@ export function createGatewayHooksRequestHandler(params: {
|
||||
const summary = result.summary?.trim() || result.error?.trim() || result.status;
|
||||
const prefix =
|
||||
result.status === "ok" ? `Hook ${value.name}` : `Hook ${value.name} (${result.status})`;
|
||||
enqueueSystemEvent(`${prefix}: ${summary}`.trim(), {
|
||||
sessionKey: mainSessionKey,
|
||||
});
|
||||
if (value.wakeMode === "now") {
|
||||
requestHeartbeatNow({ reason: `hook:${jobId}` });
|
||||
if (!result.delivered) {
|
||||
enqueueSystemEvent(`${prefix}: ${summary}`.trim(), {
|
||||
sessionKey: mainSessionKey,
|
||||
});
|
||||
if (value.wakeMode === "now") {
|
||||
requestHeartbeatNow({ reason: `hook:${jobId}` });
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logHooks.warn(`hook agent failed: ${String(err)}`);
|
||||
|
||||
Reference in New Issue
Block a user