feat(plugins): wire up compaction hooks with summary data
- Extend PluginHookAfterCompactionEvent with summary, sessionId, sessionKey - Call runBeforeCompaction before session.compact() - Call runAfterCompaction after (fire-and-forget pattern) - Enables memory plugins like Supermemory to store compacted summaries Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b861a0bd73
commit
787dfa5279
@ -69,6 +69,7 @@ import type { EmbeddedPiCompactResult } from "./types.js";
|
|||||||
import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "../date-time.js";
|
import { formatUserTime, resolveUserTimeFormat, resolveUserTimezone } from "../date-time.js";
|
||||||
import { describeUnknownError, mapThinkingLevel, resolveExecToolDefaults } from "./utils.js";
|
import { describeUnknownError, mapThinkingLevel, resolveExecToolDefaults } from "./utils.js";
|
||||||
import { buildTtsSystemPromptHint } from "../../tts/tts.js";
|
import { buildTtsSystemPromptHint } from "../../tts/tts.js";
|
||||||
|
import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js";
|
||||||
|
|
||||||
export type CompactEmbeddedPiSessionParams = {
|
export type CompactEmbeddedPiSessionParams = {
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
@ -424,6 +425,22 @@ export async function compactEmbeddedPiSessionDirect(
|
|||||||
if (limited.length > 0) {
|
if (limited.length > 0) {
|
||||||
session.agent.replaceMessages(limited);
|
session.agent.replaceMessages(limited);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run before_compaction hooks
|
||||||
|
const hookRunner = getGlobalHookRunner();
|
||||||
|
const messageCountBefore = session.messages.length;
|
||||||
|
if (hookRunner?.hasHooks("before_compaction")) {
|
||||||
|
await hookRunner.runBeforeCompaction(
|
||||||
|
{ messageCount: messageCountBefore, tokenCount: undefined },
|
||||||
|
{
|
||||||
|
agentId: sessionAgentId,
|
||||||
|
sessionKey: params.sessionKey,
|
||||||
|
workspaceDir: effectiveWorkspace,
|
||||||
|
messageProvider: runtimeChannel,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const result = await session.compact(params.customInstructions);
|
const result = await session.compact(params.customInstructions);
|
||||||
// Estimate tokens after compaction by summing token estimates for remaining messages
|
// Estimate tokens after compaction by summing token estimates for remaining messages
|
||||||
let tokensAfter: number | undefined;
|
let tokensAfter: number | undefined;
|
||||||
@ -440,6 +457,27 @@ export async function compactEmbeddedPiSessionDirect(
|
|||||||
// If estimation fails, leave tokensAfter undefined
|
// If estimation fails, leave tokensAfter undefined
|
||||||
tokensAfter = undefined;
|
tokensAfter = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run after_compaction hooks (fire-and-forget)
|
||||||
|
if (hookRunner?.hasHooks("after_compaction")) {
|
||||||
|
void hookRunner.runAfterCompaction(
|
||||||
|
{
|
||||||
|
messageCount: session.messages.length,
|
||||||
|
tokenCount: tokensAfter,
|
||||||
|
compactedCount: messageCountBefore - session.messages.length,
|
||||||
|
summary: result.summary,
|
||||||
|
sessionId: params.sessionId,
|
||||||
|
sessionKey: params.sessionKey,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
agentId: sessionAgentId,
|
||||||
|
sessionKey: params.sessionKey,
|
||||||
|
workspaceDir: effectiveWorkspace,
|
||||||
|
messageProvider: runtimeChannel,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
ok: true,
|
ok: true,
|
||||||
compacted: true,
|
compacted: true,
|
||||||
|
|||||||
@ -339,6 +339,12 @@ export type PluginHookAfterCompactionEvent = {
|
|||||||
messageCount: number;
|
messageCount: number;
|
||||||
tokenCount?: number;
|
tokenCount?: number;
|
||||||
compactedCount: number;
|
compactedCount: number;
|
||||||
|
/** Compacted summary text - essential for memory plugins */
|
||||||
|
summary: string;
|
||||||
|
/** Session identifier */
|
||||||
|
sessionId?: string;
|
||||||
|
/** Session key for context */
|
||||||
|
sessionKey?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Message context
|
// Message context
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user