惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
Jina AI
Jina AI
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Last Week in AI
Last Week in AI
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
WordPress大学
WordPress大学
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix: harden GPT-5 runtime paths · openclaw/openclaw@40be5ad
100yenadmin · 2026-04-24 · via Recent Commits to openclaw:main

@@ -10,6 +10,10 @@ const state = vi.hoisted(() => ({

1010

clearAgentRunContextMock: vi.fn(),

1111

updateSessionStoreAfterAgentRunMock: vi.fn(),

1212

deliverAgentCommandResultMock: vi.fn(),

13+

clearSessionAuthProfileOverrideMock: vi.fn(),

14+

authProfileStoreMock: { profiles: {} } as { profiles: Record<string, unknown> },

15+

sessionEntryMock: undefined as unknown,

16+

sessionStoreMock: undefined as unknown,

1317

}));

14181519

vi.mock("./model-fallback.js", () => ({

@@ -57,12 +61,12 @@ vi.mock("./command/session.js", () => ({

5761

resolveSession: () => ({

5862

sessionId: "session-1",

5963

sessionKey: "agent:main",

60-

sessionEntry: {

64+

sessionEntry: state.sessionEntryMock ?? {

6165

sessionId: "session-1",

6266

updatedAt: Date.now(),

6367

skillsSnapshot: { prompt: "", skills: [], version: 0 },

6468

},

65-

sessionStore: undefined,

69+

sessionStore: state.sessionStoreMock,

6670

storePath: undefined,

6771

isNewSession: false,

6872

persistedThinking: undefined,

@@ -250,8 +254,13 @@ vi.mock("./auth-profiles.js", () => ({

250254

ensureAuthProfileStore: () => ({ profiles: {} }),

251255

}));

252256257+

vi.mock("./auth-profiles/store.js", () => ({

258+

ensureAuthProfileStore: () => state.authProfileStoreMock,

259+

}));

260+253261

vi.mock("./auth-profiles/session-override.js", () => ({

254-

clearSessionAuthProfileOverride: vi.fn(),

262+

clearSessionAuthProfileOverride: (...args: unknown[]) =>

263+

state.clearSessionAuthProfileOverrideMock(...args),

255264

}));

256265257266

vi.mock("./defaults.js", () => ({

@@ -269,7 +278,12 @@ vi.mock("./model-catalog.js", () => ({

269278270279

vi.mock("./model-selection.js", () => ({

271280

buildAllowedModelSet: () => ({

272-

allowedKeys: new Set<string>(["anthropic/claude", "openai/claude", "openai/gpt-5.4"]),

281+

allowedKeys: new Set<string>([

282+

"anthropic/claude",

283+

"codex-cli/gpt-5.4",

284+

"openai/claude",

285+

"openai/gpt-5.4",

286+

]),

273287

allowedCatalog: [],

274288

allowAny: false,

275289

}),

@@ -281,6 +295,12 @@ vi.mock("./model-selection.js", () => ({

281295

resolveThinkingDefault: () => "low",

282296

}));

283297298+

vi.mock("./provider-auth-aliases.js", () => ({

299+

resolveProviderAuthAliasMap: () => ({}),

300+

resolveProviderIdForAuth: (provider: string) =>

301+

provider.trim().toLowerCase() === "codex-cli" ? "openai-codex" : provider.trim().toLowerCase(),

302+

}));

303+284304

vi.mock("./skills.js", () => ({

285305

buildWorkspaceSkillSnapshot: () => ({}),

286306

}));

@@ -376,6 +396,9 @@ function expectFallbackOverrideCalls(first: boolean, second: boolean) {

376396

describe("agentCommand – LiveSessionModelSwitchError retry", () => {

377397

beforeEach(() => {

378398

vi.clearAllMocks();

399+

state.authProfileStoreMock = { profiles: {} };

400+

state.sessionEntryMock = undefined;

401+

state.sessionStoreMock = undefined;

379402

state.deliverAgentCommandResultMock.mockResolvedValue(undefined);

380403

state.updateSessionStoreAfterAgentRunMock.mockResolvedValue(undefined);

381404

});

@@ -450,6 +473,48 @@ describe("agentCommand – LiveSessionModelSwitchError retry", () => {

450473

expect(state.runWithModelFallbackMock).toHaveBeenCalledTimes(2);

451474

});

452475476+

it("keeps aliased session auth profiles for codex-cli runs", async () => {

477+

let capturedAuthProfileProvider: string | undefined;

478+

const sessionEntry = {

479+

sessionId: "session-1",

480+

updatedAt: Date.now(),

481+

providerOverride: "codex-cli",

482+

modelOverride: "gpt-5.4",

483+

authProfileOverride: "openai-codex:work",

484+

authProfileOverrideSource: "user",

485+

skillsSnapshot: { prompt: "", skills: [], version: 0 },

486+

};

487+

state.sessionEntryMock = sessionEntry;

488+

state.authProfileStoreMock = {

489+

profiles: {

490+

"openai-codex:work": {

491+

type: "api_key",

492+

provider: "openai-codex",

493+

key: "sk-test",

494+

},

495+

},

496+

};

497+

state.runWithModelFallbackMock.mockImplementation(async (params: FallbackRunnerParams) => {

498+

const result = await params.run(params.provider, params.model);

499+

return {

500+

result,

501+

provider: params.provider,

502+

model: params.model,

503+

attempts: [],

504+

};

505+

});

506+

state.runAgentAttemptMock.mockImplementation(async (...args: unknown[]) => {

507+

const attemptParams = args[0] as { authProfileProvider?: string } | undefined;

508+

capturedAuthProfileProvider = attemptParams?.authProfileProvider;

509+

return makeSuccessResult("codex-cli", "gpt-5.4");

510+

});

511+512+

await runBasicAgentCommand();

513+514+

expect(capturedAuthProfileProvider).toBe("codex-cli");

515+

expect(state.clearSessionAuthProfileOverrideMock).not.toHaveBeenCalled();

516+

});

517+453518

it("updates hasSessionModelOverride for fallback resolution after switch", async () => {

454519

setupModelSwitchRetry({

455520

provider: "openai",