Merge 55ae82738a into 4583f88626
This commit is contained in:
commit
b8b16b3c36
@ -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,
|
||||||
|
|||||||
@ -371,3 +371,6 @@ export type { ProcessedLineMessage } from "../line/markdown-to-line.js";
|
|||||||
|
|
||||||
// Media utilities
|
// Media utilities
|
||||||
export { loadWebMedia, type WebMediaResult } from "../web/media.js";
|
export { loadWebMedia, type WebMediaResult } from "../web/media.js";
|
||||||
|
|
||||||
|
// Chat sanitization utilities
|
||||||
|
export { stripEnvelope } from "../gateway/chat-sanitize.js";
|
||||||
|
|||||||
@ -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