From f43350e60004af6819f599785b09e8af536524fb Mon Sep 17 00:00:00 2001 From: claude-code-best Date: Wed, 22 Apr 2026 22:52:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=204=20=E4=B8=AA?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=A4=B1=E8=B4=A5=EF=BC=88=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96=E3=80=81SDK=20=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E3=80=81=E7=A9=BA=E6=B6=88=E6=81=AF=E9=98=B2?= =?UTF-8?q?=E6=8A=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - projectContext.test.ts: 使用 realpathSync 处理 macOS /var→/private/var 符号链接 - bedrockClient.test.ts: 适配 Bedrock SDK v0.80 Bearer 认证(原 AWS4-HMAC-SHA256) - bridge.ts: forwardSessionUpdates 添加 null guard 防止空消息导致 TypeError Co-Authored-By: Claude Opus 4.7 --- src/services/acp/bridge.ts | 2 ++ src/services/api/__tests__/bedrockClient.test.ts | 7 ++++++- .../skillLearning/__tests__/projectContext.test.ts | 6 +++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/services/acp/bridge.ts b/src/services/acp/bridge.ts index edf9102d3..c6cdd612e 100644 --- a/src/services/acp/bridge.ts +++ b/src/services/acp/bridge.ts @@ -587,6 +587,8 @@ export async function forwardSessionUpdates( if (nextResult.done || abortSignal.aborted) break const msg = nextResult.value + if (msg == null) continue + const type = msg.type as string switch (type) { diff --git a/src/services/api/__tests__/bedrockClient.test.ts b/src/services/api/__tests__/bedrockClient.test.ts index f6668bdc9..3ab1471fe 100644 --- a/src/services/api/__tests__/bedrockClient.test.ts +++ b/src/services/api/__tests__/bedrockClient.test.ts @@ -111,7 +111,12 @@ describe('BedrockClient.buildRequest body.anthropic_beta cleanup', () => { const c = get() expect(c).not.toBeNull() expect(c!.headers.authorization).toBeDefined() - expect(c!.headers.authorization.startsWith('AWS4-HMAC-SHA256')).toBe(true) + // SDK >= 0.80 uses Bearer auth; older versions used AWS4-HMAC-SHA256 SigV4. + // Either way the header must be present (i.e. signing was not broken). + expect( + c!.headers.authorization!.startsWith('AWS4-HMAC-SHA256') || + c!.headers.authorization!.startsWith('Bearer '), + ).toBe(true) }) test('FIX does not disturb requests that never had anthropic_beta', async () => { diff --git a/src/services/skillLearning/__tests__/projectContext.test.ts b/src/services/skillLearning/__tests__/projectContext.test.ts index 7b36b9ca3..0dfeba471 100644 --- a/src/services/skillLearning/__tests__/projectContext.test.ts +++ b/src/services/skillLearning/__tests__/projectContext.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeEach, describe, expect, test } from 'bun:test' -import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync } from 'fs' +import { existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync } from 'fs' import { tmpdir } from 'os' import { join } from 'path' import { execFileSync } from 'child_process' @@ -56,7 +56,7 @@ describe('resolveProjectContext', () => { expect(context.source).toBe('claude_project_dir') expect(context.scope).toBe('project') - expect(context.projectRoot).toBe(projectDir) + expect(context.projectRoot).toBe(realpathSync(projectDir)) expect(context.projectName).toBe(lastPathSegment(projectDir)) expect(context.storageDir).toContain(context.projectId) @@ -99,7 +99,7 @@ describe('resolveProjectContext', () => { expect(context.source).toBe('git_root') expect(context.scope).toBe('project') - expect(context.projectRoot).toBe(repo) + expect(context.projectRoot).toBe(realpathSync(repo)) expect(context.projectName).toBe(lastPathSegment(repo)) })