feat(coding-agent): add InlineExtension type for named inline extension factories (#6267)

* feat(coding-agent): add InlineExtension type for named inline extension factories

* test(coding-agent): update utilities and add regression test for InlineExtension
This commit is contained in:
Victor Araújo
2026-07-06 15:59:37 -03:00
committed by GitHub
parent c8ada4e76e
commit b3dff19a04
13 changed files with 164 additions and 19 deletions
+15 -5
View File
@@ -11,7 +11,12 @@ import { getOAuthApiKey } from "@earendil-works/pi-ai/oauth";
import { AgentSession } from "../src/core/agent-session.ts";
import { AuthStorage } from "../src/core/auth-storage.ts";
import { createEventBus } from "../src/core/event-bus.ts";
import type { Extension, ExtensionFactory, LoadExtensionsResult } from "../src/core/extensions/index.ts";
import type {
Extension,
ExtensionFactory,
InlineExtension,
LoadExtensionsResult,
} from "../src/core/extensions/index.ts";
import { createExtensionRuntime, loadExtensionFromFactory } from "../src/core/extensions/loader.ts";
import { ModelRegistry } from "../src/core/model-registry.ts";
import type { ResourceLoader } from "../src/core/resource-loader.ts";
@@ -181,8 +186,10 @@ export interface CreateTestExtensionsResultInput {
path?: string;
}
type TestExtensionInput = InlineExtension | CreateTestExtensionsResultInput;
export async function createTestExtensionsResult(
inputs: Array<ExtensionFactory | CreateTestExtensionsResultInput>,
inputs: TestExtensionInput[],
cwd = process.cwd(),
): Promise<LoadExtensionsResult> {
const runtime = createExtensionRuntime();
@@ -190,9 +197,12 @@ export async function createTestExtensionsResult(
const extensions: Extension[] = [];
for (const [index, input] of inputs.entries()) {
const factory = typeof input === "function" ? input : input.factory;
const extensionPath =
typeof input === "function" ? `<inline:${index + 1}>` : (input.path ?? `<inline:${index + 1}>`);
const isObject = typeof input !== "function";
const hasName = isObject && "name" in input;
const hasPath = isObject && "path" in input && typeof input.path === "string" && input.path !== "";
const factory = isObject ? input.factory : input;
const extensionPath = hasName ? `<inline:${input.name}>` : hasPath ? input.path : `<inline:${index + 1}>`;
extensions.push(await loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath));
}