Carry protocol review fixes into release

The release branch is main-based and tracks the reviewed dev slice for PR publication. This merge carries the post-review compatibility fixes without rewriting the already-open PR history.

Constraint: PR #533 publishes dev changes through a clean release branch targeting main.

Rejected: Recreate the PR branch from scratch | unnecessary churn after green checks and review context already exist.

Confidence: high

Scope-risk: narrow

Tested: npx vitest run --root . src/server/proxy-core/responsesPreflight.test.ts src/server/proxy-core/serviceTierPolicy.test.ts src/server/routes/proxy/chat.stream.test.ts src/web/pages/settings/UpdateCenterSection.test.tsx

Tested: npm run typecheck:server

Tested: npm run typecheck:web

Tested: npm run repo:drift-check

Co-authored-by: OmX <omx@oh-my-codex.dev>
This commit is contained in:
cita-777
2026-05-08 10:43:12 +08:00
9 changed files with 163 additions and 19 deletions
@@ -4749,6 +4749,7 @@ describe('chat proxy stream behavior', () => {
expect(response.statusCode, response.body).toBe(200);
expect(fetchMock).toHaveBeenCalledTimes(1);
expect(selectChannelMock).toHaveBeenCalledWith('__search', expect.anything());
const [targetUrl, options] = fetchMock.mock.calls[0] as [string, any];
expect(targetUrl).toBe('https://upstream.example.com/v1/search');
expect(JSON.parse(options.body)).toMatchObject({
@@ -4816,6 +4817,7 @@ describe('chat proxy stream behavior', () => {
expect(response.statusCode, response.body).toBe(200);
expect(fetchMock).toHaveBeenCalledTimes(1);
expect(selectChannelMock).toHaveBeenCalledWith('__search', expect.anything());
const [targetUrl, options] = fetchMock.mock.calls[0] as [string, any];
expect(targetUrl).toBe('https://upstream.example.com/v1/search');
expect(JSON.parse(options.body)).toMatchObject({
@@ -4825,6 +4827,7 @@ describe('chat proxy stream behavior', () => {
const body = response.json();
expect(body.object).toBe('response');
expect(body.output_text).toContain('Metapi Responses');
expect(body.output?.[0]).toMatchObject({
type: 'web_search_call',
status: 'completed',