From 6822691a81a6229532a376d8f23aed4d748150ff Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Fri, 6 Feb 2026 11:59:25 +0100 Subject: [PATCH] fix(coding-agent): tighten session_before emit typing and test env filtering --- .../src/core/extensions/runner.ts | 47 ++++++++++++++----- test.sh | 2 + 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/packages/coding-agent/src/core/extensions/runner.ts b/packages/coding-agent/src/core/extensions/runner.ts index 63862731..4b69c6eb 100644 --- a/packages/coding-agent/src/core/extensions/runner.ts +++ b/packages/coding-agent/src/core/extensions/runner.ts @@ -38,6 +38,8 @@ import type { ResourcesDiscoverEvent, ResourcesDiscoverResult, SessionBeforeCompactResult, + SessionBeforeForkResult, + SessionBeforeSwitchResult, SessionBeforeTreeResult, ToolCallEvent, ToolCallEventResult, @@ -108,6 +110,27 @@ type RunnerEmitEvent = Exclude< | InputEvent >; +type SessionBeforeEvent = Extract< + RunnerEmitEvent, + { type: "session_before_switch" | "session_before_fork" | "session_before_compact" | "session_before_tree" } +>; + +type SessionBeforeEventResult = + | SessionBeforeSwitchResult + | SessionBeforeForkResult + | SessionBeforeCompactResult + | SessionBeforeTreeResult; + +type RunnerEmitResult = TEvent extends { type: "session_before_switch" } + ? SessionBeforeSwitchResult | undefined + : TEvent extends { type: "session_before_fork" } + ? SessionBeforeForkResult | undefined + : TEvent extends { type: "session_before_compact" } + ? SessionBeforeCompactResult | undefined + : TEvent extends { type: "session_before_tree" } + ? SessionBeforeTreeResult | undefined + : undefined; + export type ExtensionErrorListener = (error: ExtensionError) => void; export type NewSessionHandler = (options?: { @@ -480,20 +503,18 @@ export class ExtensionRunner { }; } - private isSessionBeforeEvent( - type: string, - ): type is "session_before_switch" | "session_before_fork" | "session_before_compact" | "session_before_tree" { + private isSessionBeforeEvent(event: RunnerEmitEvent): event is SessionBeforeEvent { return ( - type === "session_before_switch" || - type === "session_before_fork" || - type === "session_before_compact" || - type === "session_before_tree" + event.type === "session_before_switch" || + event.type === "session_before_fork" || + event.type === "session_before_compact" || + event.type === "session_before_tree" ); } - async emit(event: RunnerEmitEvent): Promise { + async emit(event: TEvent): Promise> { const ctx = this.createContext(); - let result: SessionBeforeCompactResult | SessionBeforeTreeResult | undefined; + let result: SessionBeforeEventResult | undefined; for (const ext of this.extensions) { const handlers = ext.handlers.get(event.type); @@ -503,10 +524,10 @@ export class ExtensionRunner { try { const handlerResult = await handler(event, ctx); - if (this.isSessionBeforeEvent(event.type) && handlerResult) { - result = handlerResult as SessionBeforeCompactResult | SessionBeforeTreeResult; + if (this.isSessionBeforeEvent(event) && handlerResult) { + result = handlerResult as SessionBeforeEventResult; if (result.cancel) { - return result; + return result as RunnerEmitResult; } } } catch (err) { @@ -522,7 +543,7 @@ export class ExtensionRunner { } } - return result; + return result as RunnerEmitResult; } async emitToolResult(event: ToolResultEvent): Promise { diff --git a/test.sh b/test.sh index df683f06..e65fe87d 100755 --- a/test.sh +++ b/test.sh @@ -35,6 +35,8 @@ unset ZAI_API_KEY unset MISTRAL_API_KEY unset MINIMAX_API_KEY unset MINIMAX_CN_API_KEY +unset KIMI_API_KEY +unset HF_TOKEN unset AI_GATEWAY_API_KEY unset OPENCODE_API_KEY unset COPILOT_GITHUB_TOKEN