fix: expose abort signal to extensions closes #2660

This commit is contained in:
Mario Zechner
2026-03-28 22:25:06 +01:00
parent e773527b3a
commit 7d4faa080d
10 changed files with 76 additions and 0 deletions

View File

@@ -71,6 +71,7 @@ describe("ExtensionRunner", () => {
const extensionContextActions: ExtensionContextActions = {
getModel: () => undefined,
isIdle: () => true,
getSignal: () => undefined,
abort: () => {},
hasPendingMessages: () => false,
shutdown: () => {},
@@ -399,6 +400,26 @@ describe("ExtensionRunner", () => {
});
});
describe("context creation", () => {
it("exposes the current abort signal on ExtensionContext", async () => {
const result = await discoverAndLoadExtensions([], tempDir, tempDir);
const runner = new ExtensionRunner(result.extensions, result.runtime, tempDir, sessionManager, modelRegistry);
const controller = new AbortController();
runner.bindCore(extensionActions, {
...extensionContextActions,
getSignal: () => controller.signal,
});
const ctx = runner.createContext();
expect(ctx.signal).toBe(controller.signal);
expect(ctx.signal?.aborted).toBe(false);
controller.abort();
expect(ctx.signal?.aborted).toBe(true);
});
});
describe("error handling", () => {
it("calls error listeners when handler throws", async () => {
const extCode = `

View File

@@ -11,6 +11,7 @@ function createContext(tokens: number | null, compact = vi.fn()): ExtensionConte
modelRegistry: {} as ExtensionContext["modelRegistry"],
model: undefined,
isIdle: () => true,
signal: undefined,
abort: vi.fn(),
hasPendingMessages: () => false,
shutdown: vi.fn(),