






























@@ -29,6 +29,22 @@ const overrideBoundaryAwareStreamFnOnce = (streamFn: StreamFn): void => {
2929);
3030};
313132+function requireRecord(value: unknown, label: string): Record<string, unknown> {
33+expect(value).toBeTypeOf("object");
34+expect(value).not.toBeNull();
35+if (!value || typeof value !== "object" || Array.isArray(value)) {
36+throw new Error(`expected ${label} to be an object`);
37+}
38+return value as Record<string, unknown>;
39+}
40+41+async function expectStreamResultRecord(
42+result: ReturnType<StreamFn>,
43+label: string,
44+): Promise<Record<string, unknown>> {
45+return requireRecord(await result, label);
46+}
47+3248afterEach(() => {
3349__testing.resetPiNativeCodexResponsesStreamFnForTest();
3450});
@@ -147,16 +163,16 @@ describe("resolveEmbeddedAgentStreamFn", () => {
147163});
148164149165expect(streamFn).not.toBe(streamSimple);
150-await expect(
166+const result = await expectStreamResultRecord(
151167streamFn(
152168{ provider: "openai-codex", id: "codex-mini-latest" } as never,
153169{ systemPrompt: `intro${SYSTEM_PROMPT_CACHE_BOUNDARY}tail` } as never,
154170{},
155171),
156-).resolves.toMatchObject({
157- context: { systemPrompt: "intro\ntail" },
158- options: { apiKey: "oauth-bearer-token" },
159-});
172+ "codex native result",
173+);
174+expect(requireRecord(result.context, "codex native context").systemPrompt).toBe("intro\ntail");
175+expect(requireRecord(result.options, "codex native options").apiKey).toBe("oauth-bearer-token");
160176expect(nativeStreamFn).toHaveBeenCalledTimes(1);
161177});
162178@@ -194,9 +210,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
194210});
195211196212expect(streamFn).not.toBe(nativeStreamFn);
197-await expect(
213+const result = await expectStreamResultRecord(
198214streamFn({ provider: "llama", id: "qwen36-35b-a3b" } as never, {} as never, {}),
199-).resolves.toMatchObject({ apiKey: "local-token" });
215+"openai compatible result",
216+);
217+expect(result.apiKey).toBe("local-token");
200218expect(innerStreamFn).toHaveBeenCalledTimes(1);
201219});
202220@@ -217,13 +235,15 @@ describe("resolveEmbeddedAgentStreamFn", () => {
217235});
218236219237expect(streamFn).not.toBe(currentStreamFn);
220-await expect(
238+const result = await expectStreamResultRecord(
221239streamFn(
222240{ provider: "cloudflare-ai-gateway", id: "claude-sonnet-4-6" } as never,
223241{} as never,
224242{},
225243),
226-).resolves.toMatchObject({ apiKey: "anthropic-runtime-key" });
244+"runtime auth result",
245+);
246+expect(result.apiKey).toBe("anthropic-runtime-key");
227247expect(currentStreamFn).not.toHaveBeenCalled();
228248expect(innerStreamFn).toHaveBeenCalledTimes(1);
229249});
@@ -246,11 +266,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
246266 authStorage,
247267});
248268249-await expect(
269+const result = await expectStreamResultRecord(
250270streamFn({ provider: "openai", id: "gpt-5.4" } as never, {} as never, {}),
251-).resolves.toMatchObject({
252- apiKey: "resolved-key",
253-});
271+ "provider-owned result",
272+);
273+expect(result.apiKey).toBe("resolved-key");
254274expect(authStorage.getApiKey).not.toHaveBeenCalled();
255275expect(providerStreamFn).toHaveBeenCalledTimes(1);
256276});
@@ -271,11 +291,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
271291resolvedApiKey: "resolved-key",
272292});
273293274-await expect(
294+const result = await expectStreamResultRecord(
275295streamFn({ provider: "github-copilot", id: "gpt-5.4" } as never, {} as never, {}),
276-).resolves.toMatchObject({
277- signal,
278-});
296+ "provider-owned signal result",
297+);
298+expect(result.signal).toBe(signal);
279299});
280300281301it("does not overwrite an explicit provider-owned stream signal", async () => {
@@ -294,13 +314,13 @@ describe("resolveEmbeddedAgentStreamFn", () => {
294314} as never,
295315});
296316297-await expect(
317+const result = await expectStreamResultRecord(
298318streamFn({ provider: "github-copilot", id: "gpt-5.4" } as never, {} as never, {
299319signal: explicitSignal,
300320}),
301-).resolves.toMatchObject({
302- signal: explicitSignal,
303-});
321+ "provider-owned explicit signal result",
322+);
323+expect(result.signal).toBe(explicitSignal);
304324});
305325306326it("injects the resolved run api key into the PI native Codex Responses fallback", async () => {
@@ -317,9 +337,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
317337resolvedApiKey: "oauth-bearer-token",
318338});
319339320-await expect(
340+const result = await expectStreamResultRecord(
321341streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, {} as never, {}),
322-).resolves.toMatchObject({ apiKey: "oauth-bearer-token" });
342+"codex api key result",
343+);
344+expect(result.apiKey).toBe("oauth-bearer-token");
323345expect(nativeStreamFn).toHaveBeenCalledTimes(1);
324346});
325347@@ -340,9 +362,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
340362 authStorage,
341363});
342364343-await expect(
365+const result = await expectStreamResultRecord(
344366streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, {} as never, {}),
345-).resolves.toMatchObject({ apiKey: "stored-bearer-token" });
367+"codex stored api key result",
368+);
369+expect(result.apiKey).toBe("stored-bearer-token");
346370expect(authStorage.getApiKey).toHaveBeenCalledWith("openai-codex");
347371});
348372@@ -362,9 +386,12 @@ describe("resolveEmbeddedAgentStreamFn", () => {
362386resolvedApiKey: "oauth-bearer-token",
363387});
364388365-await expect(
389+const result = await expectStreamResultRecord(
366390streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, {} as never, {}),
367-).resolves.toMatchObject({ signal: runSignal, apiKey: "oauth-bearer-token" });
391+"codex signal and api key result",
392+);
393+expect(result.signal).toBe(runSignal);
394+expect(result.apiKey).toBe("oauth-bearer-token");
368395});
369396370397it("does not overwrite an explicit signal on the PI native fallback path", async () => {
@@ -384,11 +411,13 @@ describe("resolveEmbeddedAgentStreamFn", () => {
384411resolvedApiKey: "oauth-bearer-token",
385412});
386413387-await expect(
414+const result = await expectStreamResultRecord(
388415streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, {} as never, {
389416signal: explicitSignal,
390417}),
391-).resolves.toMatchObject({ signal: explicitSignal });
418+"codex explicit signal result",
419+);
420+expect(result.signal).toBe(explicitSignal);
392421});
393422394423it("forwards the run signal on the sync PI native fallback path without auth credentials", async () => {
@@ -406,9 +435,11 @@ describe("resolveEmbeddedAgentStreamFn", () => {
406435} as never,
407436});
408437409-await expect(
438+const result = await expectStreamResultRecord(
410439streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, {} as never, {}),
411-).resolves.toMatchObject({ signal: runSignal });
440+"codex unauthenticated signal result",
441+);
442+expect(result.signal).toBe(runSignal);
412443});
413444414445it("strips cache boundary markers on the PI native fallback path", async () => {
@@ -426,8 +457,10 @@ describe("resolveEmbeddedAgentStreamFn", () => {
426457});
427458428459const systemPrompt = `intro${SYSTEM_PROMPT_CACHE_BOUNDARY}tail`;
429-await expect(
460+const result = await expectStreamResultRecord(
430461streamFn({ provider: "openai-codex", id: "gpt-5.5" } as never, { systemPrompt } as never, {}),
431-).resolves.toMatchObject({ systemPrompt: "intro\ntail" });
462+"codex stripped context result",
463+);
464+expect(result.systemPrompt).toBe("intro\ntail");
432465});
433466});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。