Skip to content

Commit 1ad50a3

Browse files
committed
chore(release): forward-port 2026.4.29 fixes and bump 2026.4.30
1 parent 52bf20b commit 1ad50a3

31 files changed

Lines changed: 220 additions & 68 deletions

apps/android/app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ android {
6565
applicationId = "ai.openclaw.app"
6666
minSdk = 31
6767
targetSdk = 36
68-
versionCode = 2026042700
69-
versionName = "2026.4.27"
68+
versionCode = 2026043000
69+
versionName = "2026.4.30"
7070
ndk {
7171
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
7272
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")

apps/ios/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# OpenClaw iOS Changelog
22

3+
## 2026.4.30 - 2026-04-30
4+
5+
Maintenance update for the current OpenClaw development release.
6+
37
## 2026.4.27 - 2026-04-27
48

59
Maintenance update for the current OpenClaw development release.

apps/ios/Config/Version.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// Source of truth: apps/ios/version.json
33
// Generated by scripts/ios-sync-versioning.ts.
44

5-
OPENCLAW_IOS_VERSION = 2026.4.27
6-
OPENCLAW_MARKETING_VERSION = 2026.4.27
5+
OPENCLAW_IOS_VERSION = 2026.4.30
6+
OPENCLAW_MARKETING_VERSION = 2026.4.30
77
OPENCLAW_BUILD_VERSION = 1
88

99
#include? "../build/Version.xcconfig"

apps/ios/version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"version": "2026.4.27"
2+
"version": "2026.4.30"
33
}

apps/macos/Sources/OpenClaw/Resources/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
<key>CFBundlePackageType</key>
1616
<string>APPL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2026.4.27</string>
18+
<string>2026.4.30</string>
1919
<key>CFBundleVersion</key>
20-
<string>2026042700</string>
20+
<string>2026043000</string>
2121
<key>CFBundleIconFile</key>
2222
<string>OpenClaw</string>
2323
<key>CFBundleURLTypes</key>

extensions/codex/src/app-server/config.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,12 @@ const codexAppServerApprovalPolicySchema = z.enum([
120120
]);
121121
const codexAppServerSandboxSchema = z.enum(["read-only", "workspace-write", "danger-full-access"]);
122122
const codexAppServerApprovalsReviewerSchema = z.enum(["user", "auto_review", "guardian_subagent"]);
123-
const codexAppServerServiceTierSchema = z.preprocess(
124-
(value) => (value === null ? null : resolveServiceTier(value)),
125-
z.enum(["fast", "flex"]).nullable().optional(),
126-
);
123+
const codexAppServerServiceTierSchema = z
124+
.preprocess(
125+
(value) => (value === null ? null : resolveServiceTier(value)),
126+
z.enum(["fast", "flex"]).nullable().optional(),
127+
)
128+
.optional();
127129

128130
const codexPluginConfigSchema = z
129131
.object({

extensions/discord/src/test-support/provider.test-support.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,8 @@ vi.mock("openclaw/plugin-sdk/error-runtime", async () => {
451451

452452
vi.mock(buildDiscordSourceModuleId("accounts.js"), () => ({
453453
resolveDiscordAccount: resolveDiscordAccountMock,
454+
resolveDiscordAccountAllowFrom: () => undefined,
455+
resolveDiscordAccountDmPolicy: () => undefined,
454456
}));
455457

456458
vi.mock(buildDiscordSourceModuleId("probe.js"), () => ({

extensions/google/transport-stream.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ let buildGoogleGenerativeAiParams: typeof import("./transport-stream.js").buildG
1818
let createGoogleGenerativeAiTransportStreamFn: typeof import("./transport-stream.js").createGoogleGenerativeAiTransportStreamFn;
1919
let createGoogleVertexTransportStreamFn: typeof import("./transport-stream.js").createGoogleVertexTransportStreamFn;
2020
let hasGoogleVertexAuthorizedUserAdcSync: typeof import("./vertex-adc.js").hasGoogleVertexAuthorizedUserAdcSync;
21+
let resetGoogleVertexAuthorizedUserTokenCacheForTest: typeof import("./vertex-adc.js").resetGoogleVertexAuthorizedUserTokenCacheForTest;
2122

2223
const MODEL_PROVIDER_REQUEST_TRANSPORT_SYMBOL = Symbol.for(
2324
"openclaw.modelProviderRequestTransport",
@@ -91,13 +92,15 @@ describe("google transport stream", () => {
9192
createGoogleGenerativeAiTransportStreamFn,
9293
createGoogleVertexTransportStreamFn,
9394
} = await import("./transport-stream.js"));
94-
({ hasGoogleVertexAuthorizedUserAdcSync } = await import("./vertex-adc.js"));
95+
({ hasGoogleVertexAuthorizedUserAdcSync, resetGoogleVertexAuthorizedUserTokenCacheForTest } =
96+
await import("./vertex-adc.js"));
9597
});
9698

9799
beforeEach(() => {
98100
buildGuardedModelFetchMock.mockReset();
99101
guardedFetchMock.mockReset();
100102
buildGuardedModelFetchMock.mockReturnValue(guardedFetchMock);
103+
resetGoogleVertexAuthorizedUserTokenCacheForTest();
101104
});
102105

103106
afterEach(() => {
@@ -377,7 +380,7 @@ describe("google transport stream", () => {
377380
}),
378381
"utf8",
379382
);
380-
vi.stubEnv("GOOGLE_APPLICATION_CREDENTIALS", undefined);
383+
vi.stubEnv("GOOGLE_APPLICATION_CREDENTIALS", "");
381384
vi.stubEnv("HOME", homeDir);
382385
vi.stubEnv("APPDATA", appDataDir);
383386
vi.stubEnv("GOOGLE_CLOUD_PROJECT", "vertex-project");

extensions/google/vertex-adc.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ const GOOGLE_OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token";
2222

2323
let cachedGoogleVertexAuthorizedUserToken: GoogleVertexAuthorizedUserToken | undefined;
2424

25+
export function resetGoogleVertexAuthorizedUserTokenCacheForTest(): void {
26+
cachedGoogleVertexAuthorizedUserToken = undefined;
27+
}
28+
2529
function normalizeOptionalString(value: unknown): string | undefined {
2630
return typeof value === "string" && value.trim() ? value.trim() : undefined;
2731
}

extensions/openai/openai-provider.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,11 @@ describe("buildOpenAIProvider", () => {
785785
payload,
786786
});
787787

788-
expect(mocks.openAIResponsesTransportStreamFn).toHaveBeenCalledTimes(1);
788+
expect(mocks.openAIResponsesTransportStreamFn).not.toHaveBeenCalled();
789+
expect(result.options?.headers).toMatchObject({
790+
originator: "openclaw",
791+
"User-Agent": expect.stringMatching(/^openclaw\//u),
792+
});
789793
expect(result.payload.store).toBe(false);
790794
expect(result.payload.service_tier).toBe("priority");
791795
expect(result.payload.text).toEqual({ verbosity: "high" });

0 commit comments

Comments
 (0)