From 43a5447a806ad379f2f87a3da5699615a2801348 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 24 Dec 2025 12:28:51 +0100 Subject: [PATCH] Add resolveApiKey to before_compact hook event --- packages/coding-agent/CHANGELOG.md | 4 ++++ packages/coding-agent/docs/hooks.md | 1 + packages/coding-agent/src/core/agent-session.ts | 2 ++ packages/coding-agent/src/core/hooks/types.ts | 2 ++ 4 files changed, 9 insertions(+) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 330f907c..d7de4402 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +- **Compaction hook `resolveApiKey`**: The `before_compact` session event now includes `resolveApiKey` function to resolve API keys for any model (checks settings, OAuth, env vars). Useful for hooks that need to call different models during custom compaction. + ## [0.27.5] - 2025-12-24 ### Added diff --git a/packages/coding-agent/docs/hooks.md b/packages/coding-agent/docs/hooks.md index b9e062a6..60316a91 100644 --- a/packages/coding-agent/docs/hooks.md +++ b/packages/coding-agent/docs/hooks.md @@ -184,6 +184,7 @@ For `before_compact` events, additional fields are available: - `event.tokensBefore`: Current context token count - `event.model`: Model to use for summarization - `event.apiKey`: API key for the model +- `event.resolveApiKey`: Function to resolve API key for any model (checks settings, OAuth, env vars) - `event.customInstructions`: Optional custom focus for summary (from `/compact` command) Return `{ compactionEntry }` to provide a custom summary instead of the default. The `compactionEntry` must have: `type: "compaction"`, `timestamp`, `summary`, `firstKeptEntryIndex` (from `cutPoint`), `tokensBefore`. diff --git a/packages/coding-agent/src/core/agent-session.ts b/packages/coding-agent/src/core/agent-session.ts index f55435f1..6c394b2d 100644 --- a/packages/coding-agent/src/core/agent-session.ts +++ b/packages/coding-agent/src/core/agent-session.ts @@ -772,6 +772,7 @@ export class AgentSession { customInstructions, model: this.model, apiKey, + resolveApiKey: this._resolveApiKey, })) as SessionEventResult | undefined; if (result?.cancel) { @@ -922,6 +923,7 @@ export class AgentSession { customInstructions: undefined, model: this.model, apiKey, + resolveApiKey: this._resolveApiKey, })) as SessionEventResult | undefined; if (hookResult?.cancel) { diff --git a/packages/coding-agent/src/core/hooks/types.ts b/packages/coding-agent/src/core/hooks/types.ts index 9f8d7746..2653c26d 100644 --- a/packages/coding-agent/src/core/hooks/types.ts +++ b/packages/coding-agent/src/core/hooks/types.ts @@ -135,6 +135,8 @@ export type SessionEvent = customInstructions?: string; model: Model; apiKey: string; + /** Resolve API key for any model (checks settings, OAuth, env vars) */ + resolveApiKey: (model: Model) => Promise; }) | (SessionEventBase & { reason: "compact";