Improve compaction hooks: add signal, no timeout, SessionManager cleanup, docs

This commit is contained in:
Mario Zechner 2025-12-24 13:54:05 +01:00
parent a2664ba38a
commit 705ba5d4f2
19 changed files with 1236 additions and 207 deletions

View file

@ -351,7 +351,7 @@ export class InteractiveMode {
}
// Load session entries if any
const entries = this.session.sessionManager.loadEntries();
const entries = this.session.sessionManager.getEntries();
// Set TUI-based UI context for custom tools
const uiContext = this.createHookUIContext();
@ -1067,7 +1067,7 @@ export class InteractiveMode {
this.updateEditorBorderColor();
}
const compactionEntry = getLatestCompactionEntry(this.sessionManager.loadEntries());
const compactionEntry = getLatestCompactionEntry(this.sessionManager.getEntries());
for (const message of messages) {
if (isBashExecutionMessage(message)) {
@ -1137,7 +1137,7 @@ export class InteractiveMode {
this.renderMessages(state.messages, { updateFooter: true, populateHistory: true });
// Show compaction info if session was compacted
const entries = this.sessionManager.loadEntries();
const entries = this.sessionManager.getEntries();
const compactionCount = entries.filter((e) => e.type === "compaction").length;
if (compactionCount > 0) {
const times = compactionCount === 1 ? "1 time" : `${compactionCount} times`;
@ -1185,7 +1185,7 @@ export class InteractiveMode {
// Emit shutdown event to hooks
const hookRunner = this.session.hookRunner;
if (hookRunner?.hasHandlers("session")) {
const entries = this.sessionManager.loadEntries();
const entries = this.sessionManager.getEntries();
await hookRunner.emit({
type: "session",
entries,
@ -1924,7 +1924,7 @@ export class InteractiveMode {
}
private async handleCompactCommand(customInstructions?: string): Promise<void> {
const entries = this.sessionManager.loadEntries();
const entries = this.sessionManager.getEntries();
const messageCount = entries.filter((e) => e.type === "message").length;
if (messageCount < 2) {

View file

@ -28,7 +28,7 @@ export async function runPrintMode(
initialAttachments?: Attachment[],
): Promise<void> {
// Load entries once for session start events
const entries = session.sessionManager.loadEntries();
const entries = session.sessionManager.getEntries();
// Hook runner already has no-op UI context by default (set in main.ts)
// Set up hooks for print mode (no UI)

View file

@ -121,7 +121,7 @@ export async function runRpcMode(session: AgentSession): Promise<never> {
});
// Load entries once for session start events
const entries = session.sessionManager.loadEntries();
const entries = session.sessionManager.getEntries();
// Set up hooks with RPC-based UI context
const hookRunner = session.hookRunner;