chore(vendor): import pi 1.3.0

Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
alexion committed 2026-10-15 17:58:48 -04:00
1 parent 719370c8f7
commit 6081e3e325
1743 files changed
+205459 -131704

No files matched your search

+14 -15
View File
@@ -1,10 +1,8 @@
import { afterEach, describe, expect, it, vi } from "vitest";
import { InMemoryCredentialStore } from "../src/auth/credential-store.ts";
import { openRouterOAuth } from "../src/auth/oauth/openrouter.ts";
import { createImagesModels } from "../src/images-models.ts";
import { createModels } from "../src/models.ts";
import { openrouterProvider } from "../src/providers/openrouter.ts";
import { openrouterImagesProvider } from "../src/providers/openrouter-images.ts";
const TOKEN_URL = "https://openrouter.ai/api/v1/auth/keys";
const nativeFetch = globalThis.fetch;
@@ -26,15 +24,14 @@ describe.sequential("OpenRouter OAuth", () => {
vi.unstubAllEnvs();
});
it("is exposed by both OpenRouter providers alongside API-key auth", () => {
for (const provider of [openrouterProvider(), openrouterImagesProvider()]) {
expect(provider.auth.apiKey).toBeDefined();
expect(provider.auth.oauth).toBeDefined();
expect(provider.auth.oauth?.loginLabel).toBe("Sign in with OpenRouter");
}
it("is exposed alongside API-key auth", () => {
const provider = openrouterProvider();
expect(provider.auth.apiKey).toBeDefined();
expect(provider.auth.oauth).toBeDefined();
expect(provider.auth.oauth?.loginLabel).toBe("Sign in with OpenRouter");
});
it("resolves the same stored OAuth key for text and image providers", async () => {
it("resolves the same stored OAuth key for chat and image models", async () => {
const credentials = new InMemoryCredentialStore();
await credentials.modify("openrouter", async () => ({
type: "oauth",
@@ -43,13 +40,15 @@ describe.sequential("OpenRouter OAuth", () => {
expires: Number.MAX_SAFE_INTEGER,
}));
const textModels = createModels({ credentials });
textModels.setProvider(openrouterProvider());
const imageModels = createImagesModels({ credentials });
imageModels.setProvider(openrouterImagesProvider());
const models = createModels({ credentials });
models.setProvider(openrouterProvider());
const chatModel = models.getModels("openrouter")[0];
const imageModel = models.getModelsOfType("image", "openrouter")[0];
expect(chatModel).toBeDefined();
expect(imageModel).toBeDefined();
expect((await textModels.getAuth("openrouter"))?.auth.apiKey).toBe("sk-or-stored");
expect((await imageModels.getAuth("openrouter"))?.auth.apiKey).toBe("sk-or-stored");
expect((await models.getAuth(chatModel))?.auth.apiKey).toBe("sk-or-stored");
expect((await models.getAuth(imageModel))?.auth.apiKey).toBe("sk-or-stored");
});
it("runs PKCE on a one-shot loopback callback and exchanges the code for a permanent API key", async () => {