Skip to content

Docs/readme migrate#78

Open
siri666942 wants to merge 409 commits intomainfrom
docs/readme-migrate
Open

Docs/readme migrate#78
siri666942 wants to merge 409 commits intomainfrom
docs/readme-migrate

Conversation

@siri666942
Copy link
Copy Markdown
Collaborator

Summary

Describe the problem and fix in 2–5 bullets:

  • Problem:
  • Why it matters:
  • What changed:
  • What did NOT change (scope boundary):

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #
  • Related #

User-visible / Behavior Changes

List user-visible changes (including defaults/config).
If none, write None.

Security Impact (required)

  • New permissions/capabilities? (Yes/No)
  • Secrets/tokens handling changed? (Yes/No)
  • New/changed network calls? (Yes/No)
  • Command/tool execution surface changed? (Yes/No)
  • Data access scope changed? (Yes/No)
  • If any Yes, explain risk + mitigation:

Repro + Verification

Environment

  • OS:
  • Runtime/container:
  • Model/provider:
  • Integration/channel (if any):
  • Relevant config (redacted):

Steps

Expected

Actual

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios:
  • Edge cases checked:
  • What you did not verify:

Compatibility / Migration

  • Backward compatible? (Yes/No)
  • Config/env changes? (Yes/No)
  • Migration needed? (Yes/No)
  • If yes, exact upgrade steps:

Failure Recovery (if this breaks)

  • How to disable/revert this change quickly:
  • Files/config to restore:
  • Known bad symptoms reviewers should watch for:

Risks and Mitigations

List only real risks for this PR. Add/remove entries as needed. If none, write None.

  • Risk:
    • Mitigation:

byungsker and others added 30 commits February 24, 2026 14:22
…-in catalog

When a built-in provider model has reasoning:true (e.g. MiniMax-M2.5) and
the user explicitly sets reasoning:false in their config, mergeProviderModels
unconditionally overwrote the user's value with the built-in catalog value.

The merge code refreshes capability metadata (input, contextWindow, maxTokens,
reasoning) from the implicit catalog. This is correct for fields like
contextWindow and maxTokens — the catalog has authoritative values that
shouldn't be stale. But reasoning is a user preference, not just a
capability descriptor: users may need to disable it to avoid 'Message
ordering conflict' errors with certain models or backends.

Fix: check whether 'reasoning' is present in the explicit (user-supplied)
model entry. If the user has set it (even to false), honour that value.
If the user hasn't set it, fall back to the built-in catalog default.

This allows users to configure tools.models.providers.minimax.models with
reasoning:false for MiniMax-M2.5 without being silently overridden.

Fixes openclaw#25244
resolveAgentModelPrimary() only checks the agent-level model config and
does not fall back to the system-wide default. When users configure a
non-Anthropic provider (e.g. Gemini, Minimax) as their global default
without setting it at the agent level, the slug-generator falls through
to DEFAULT_PROVIDER (anthropic) and fails with a missing API key error.

Switch to resolveAgentEffectiveModelPrimary() which correctly respects
the full model resolution chain including global defaults.

Fixes openclaw#25365
Kimi K2 models use automatic prefix caching and return cache stats in
a nested field: usage.prompt_tokens_details.cached_tokens

This fixes issue openclaw#7073 where cacheRead was showing 0 for K2.5 users.

Also adds cached_tokens (top-level) for moonshot-v1 explicit caching API.

Closes openclaw#7073
Add @icesword760/openclaw-wechat to the community plugins page.
This plugin connects OpenClaw to WeChat personal accounts via
WeChatPadPro (iPad protocol) with support for text, image, and
file exchange.

Co-authored-by: Cursor <cursoragent@cursor.com>
When an assistant message with toolCalls has stopReason 'aborted' or 'error',
the guard should not add those tool call IDs to the pending map. Creating
synthetic tool results for incomplete/aborted tool calls causes API 400 errors:
'unexpected tool_use_id found in tool_result blocks'

This aligns the WRITE path (session-tool-result-guard.ts) with the READ path
(session-transcript-repair.ts) which already skips aborted messages.

Fixes: orphaned tool_result causing session corruption

Tests added:
- does NOT create synthetic toolResult for aborted assistant messages
- does NOT create synthetic toolResult for errored assistant messages
…am media fetch on IPv6-broken hosts

On hosts where IPv6 is configured but not routed (common on cloud VMs),
Telegram media downloads fail because the pinned DNS lookup may return
IPv6 addresses first. Even though autoSelectFamily (Happy Eyeballs) is
enabled, the round-robin pinned lookup serves individual IPv6 addresses
that fail before IPv4 is attempted.

Sort resolved addresses so IPv4 comes first, ensuring both Happy Eyeballs
and single-address round-robin try the working address family first.

Fixes openclaw#23975

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… (thanks @Glucksberg)

Co-Authored-By: Glucksberg <80581902+Glucksberg@users.noreply.github.com>
When a third-party channel plugin declares a channel ID that differs from
its plugin ID (e.g. plugin id="apn-channel", channels=["apn"]), the
doctor plugin auto-enable logic was using the channel ID ("apn") as the
key for plugins.entries, producing an entry that fails config validation:
  Error: plugins.entries.apn: plugin not found: apn

Root cause: resolveConfiguredPlugins iterated over cfg.channels keys and
used each key directly as both the channel ID (for isChannelConfigured)
and the plugin ID (for plugins.entries). For built-in channels these are
always the same, but for third-party plugins they can differ.

Fix: load the installed plugin manifest registry and build a reverse map
from channel ID to plugin ID. When a cfg.channels key does not resolve to
a built-in channel, look up the declaring plugin's manifest ID and use
that as the pluginId in the PluginEnableChange, so registerPluginEntry
writes the correct plugins.entries["apn-channel"] key.

The applyPluginAutoEnable function now accepts an optional manifestRegistry
parameter for testing, avoiding filesystem access in unit tests.

Fixes openclaw#25261

Co-Authored-By: Claude <noreply@anthropic.com>
Brian Mendonca and others added 28 commits February 25, 2026 04:45
…ng fails (openclaw#26109)

* fix(followup): fall back to dispatcher when same-channel origin routing fails

When routeReply fails for an originating channel that matches the
session's messageProvider, the onBlockReply callback was created by
that same channel's handler and can safely deliver the reply.
Previously the payload was silently dropped on any routeReply failure,
causing Feishu DM replies to never reach the user.

Cross-channel fallback (origin ≠ provider) still drops the payload to
preserve origin isolation.

Closes openclaw#25767

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: allow same-channel followup fallback routing (openclaw#26109) (thanks @Sid-Qin)

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
…penclaw#26106)

* fix(agents): continue fallback loop for unrecognized provider errors

When a provider returns an error that coerceToFailoverError cannot
classify (e.g., custom error messages without standard HTTP status
codes), the fallback loop threw immediately instead of trying the
next candidate. This caused fallback to stop after 2 models even
when 17 were configured.

Only rethrow unrecognized errors when they occur on the last
candidate. For intermediate candidates, record the error as an
attempt and continue to the next model.

Closes openclaw#25926

Co-authored-by: Cursor <cursoragent@cursor.com>

* test: cover unknown-error fallback telemetry and land openclaw#26106 (thanks @Sid-Qin)

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
…enclaw#26105)

* fix(markdown): require paired || delimiters for spoiler detection

An unpaired || (odd count across all inline tokens) would open a
spoiler that never closes, causing closeRemainingStyles to extend it
to the end of the text. This made all content after an unpaired ||
appear as hidden/spoiler in Telegram.

Pre-count || delimiters across the entire inline token group and skip
spoiler injection entirely when the count is less than 2 or odd. This
prevents single | characters and unpaired || from triggering spoiler
formatting.

Closes openclaw#26068

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: preserve valid spoiler pairs with trailing unmatched delimiters (openclaw#26105) (thanks @Sid-Qin)

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
…ata (openclaw#26115)

* fix(hooks): include guildId and channelName in message_received metadata

The message_received hook (both plugin and internal) already exposes
sender identity fields (senderId, senderName, senderUsername, senderE164)
but omits the guild/channel context. Plugins that track per-channel
activity receive NULL values for channel identification.

Add guildId (ctx.GroupSpace) and channelName (ctx.GroupChannel) to the
metadata block in both the plugin hook and internal hook dispatch paths.
These properties are already populated by channel providers (e.g. Discord
sets GroupSpace to the guild ID and GroupChannel to #channel-name) and
used elsewhere in the codebase (channels/conversation-label.ts).

* test: cover guild/channel hook metadata propagation (openclaw#26115) (thanks @davidrudduck)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
…ions (openclaw#26119)

* Discord: gate component command authorization

* test: cover allowlisted guild component authorization path (openclaw#26119) (thanks @bmendonca3)

---------

Co-authored-by: Brian Mendonca <brianmendonca@Brians-MacBook-Air.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
openclaw#25130)

* fix(brave-search): swap ui_lang and search_lang formats (openclaw#23826)

* fix(web-search): normalize Brave ui_lang/search_lang params

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
…t modelProvider (openclaw#25874)

Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: f0953a7
Co-authored-by: lbo728 <72309817+lbo728@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
When a Slack message contains only files/audio (no text) and every file
download fails, `resolveSlackMedia` returns null and `rawBody` becomes
empty, causing `prepareSlackMessage` to silently drop the message.

Build a fallback placeholder from the original file names so the agent
still receives the message, matching the pattern already used in
`resolveSlackThreadHistory` for file-only thread entries.

Closes openclaw#25064
Replace the hardcoded limit of 5 with the existing
MAX_SLACK_MEDIA_FILES constant (8) from media.ts for consistency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @siri666942, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on updating the core and extensions to version 2026.2.25, incorporating numerous bug fixes, security enhancements, and user experience improvements. The changes span across multiple areas, including Android app UX, security protocols, dependency updates, and model fallback mechanisms, aiming to provide a more stable and secure experience.

Highlights

  • Version Alignment: The core and extension versions have been bumped to 2026.2.25 to maintain consistency across the project.
  • Android App UX Improvements: The Android app has been significantly enhanced with a new onboarding flow and a reorganized tab structure for improved navigation.
  • Security Hardening: Several security vulnerabilities have been addressed, including those related to Nextcloud Talk, IRC, Microsoft Teams, LINE, and various sandbox escapes.
  • Dependency Updates: Key runtime and tooling packages have been refreshed, ensuring the project benefits from the latest features and security patches.
  • Model Fallback Improvements: Enhanced model fallback mechanisms ensure more reliable operation even when primary models are unavailable.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .gitignore
    • Added Xcode build directories to the ignore list.
  • .mailmap
    • Added canonical contributor identity mappings for cherry-picked commits.
  • AGENTS.md
    • Added a beta release guardrail for npm publishing with beta Git tags.
  • CHANGELOG.md
    • Updated changelog with detailed fixes, changes, and breaking changes for versions 2026.2.25, 2026.2.24, and 2026.2.23.
  • CONTRIBUTING.md
    • Added Val Alexander to the list of core team members.
  • PR_STATUS.md
    • Added a PR status table to track the progress and verification of multiple PRs.
  • SECURITY.md
    • Clarified the trusted plugin concept and out-of-scope security reports.
  • appcast.xml
    • Updated appcast feed with the latest version (2026.2.24) and release notes.
  • apps/android/README.md
    • Updated the Android app's README with current status, rebuild checklist, and connection instructions.
  • apps/android/THIRD_PARTY_LICENSES/MANROPE_OFL.txt
    • Added license file for Manrope font.
  • apps/android/app/build.gradle.kts
    • Modified the Android app's build configuration to update versions and dependencies.
  • apps/android/app/src/main/java/ai/openclaw/android/MainActivity.kt
    • Modified MainActivity to remove permission requests and update imports.
  • apps/android/app/src/main/java/ai/openclaw/android/MainViewModel.kt
    • Added new state flows and functions to MainViewModel for canvas and gateway auth.
  • apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt
    • Modified NodeRuntime to handle canvas rehydration and gateway auth state.
  • apps/android/app/src/main/java/ai/openclaw/android/SecurePrefs.kt
    • Modified SecurePrefs to add support for gateway password and onboarding completion.
  • apps/android/app/src/main/java/ai/openclaw/android/chat/ChatController.kt
    • Modified ChatController to improve streaming delivery handling and markdown rendering quality.
  • apps/android/app/src/main/java/ai/openclaw/android/gateway/GatewaySession.kt
    • Modified GatewaySession to handle heartbeat delivery and improve gateway auth.
  • apps/android/app/src/main/java/ai/openclaw/android/node/CanvasController.kt
    • Modified CanvasController to add support for canvas detachment and URL tracking.
  • apps/android/app/src/main/java/ai/openclaw/android/node/InvokeDispatcher.kt
    • Modified InvokeDispatcher to add support for canvas A2UI push and reset actions.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/CanvasScreen.kt
    • Added CanvasScreen composable for displaying the canvas.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/ConnectTabScreen.kt
    • Added ConnectTabScreen composable for managing gateway connections.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/GatewayConfigResolver.kt
    • Added GatewayConfigResolver for resolving gateway connection configurations.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/MobileUiTokens.kt
    • Added MobileUiTokens for defining UI styles.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/OnboardingFlow.kt
    • Added OnboardingFlow composable for guiding users through the initial setup.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/PostOnboardingTabs.kt
    • Added PostOnboardingTabs composable for managing post-onboarding tabs.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/RootScreen.kt
    • Modified RootScreen to implement onboarding flow and post-onboarding tabs.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/SettingsSheet.kt
    • Modified SettingsSheet to update UI components and remove old settings.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/StatusPill.kt
    • Removed StatusPill.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatComposer.kt
    • Modified ChatComposer to update UI and remove session selection.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatMarkdown.kt
    • Modified ChatMarkdown to improve markdown rendering and add table support.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatMessageListCard.kt
    • Modified ChatMessageListCard to update chat message list UI.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatMessageViews.kt
    • Modified ChatMessageViews to update chat message bubble UI.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatSessionsDialog.kt
    • Removed ChatSessionsDialog.
  • apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatSheetContent.kt
    • Modified ChatSheetContent to update chat sheet content UI.
  • apps/android/app/src/main/java/ai/openclaw/android/voice/TalkModeManager.kt
    • Modified TalkModeManager to add talk provider config selection logic.
  • apps/android/app/src/test/java/ai/openclaw/android/voice/TalkModeConfigParsingTest.kt
    • Added TalkModeConfigParsingTest for talk mode config parsing tests.
  • apps/android/build.gradle.kts
    • Modified build configuration to update versions and dependencies.
  • apps/android/gradle.properties
    • Modified gradle properties to update versions and add new Android DSL properties.
  • apps/android/gradle/gradle-daemon-jvm.properties
    • Added Gradle daemon JVM properties.
  • apps/android/style.md
    • Added Android UI style guide.
  • apps/ios/Sources/Device/DeviceInfoHelper.swift
    • Added DeviceInfoHelper for sharing device and platform information.
  • apps/ios/Sources/Device/DeviceStatusService.swift
    • Modified DeviceStatusService to use DeviceInfoHelper for device information.
  • apps/ios/Sources/Device/NetworkStatusService.swift
    • Modified NetworkStatusService to update the dispatch queue label.
  • apps/ios/Sources/Gateway/GatewayConnectionController.swift
    • Modified GatewayConnectionController to remove redundant device info methods.
  • apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift
    • Modified GatewayDiscoveryModel to update the dispatch queue label.
  • apps/ios/Sources/Gateway/GatewaySettingsStore.swift
    • Modified GatewaySettingsStore to update talk API key storage to be provider-agnostic.
  • apps/ios/Sources/Info.plist
    • Modified Info.plist to update app version.
  • apps/ios/Sources/Model/NodeAppModel+WatchNotifyNormalization.swift
    • Added NodeAppModel+WatchNotifyNormalization for normalizing watch notification parameters.
  • apps/ios/Sources/Model/NodeAppModel.swift
    • Modified NodeAppModel to normalize watch notification parameters and actions.
  • apps/ios/Sources/OpenClawApp.swift
    • Modified OpenClawApp to handle watch prompt actions with multiple actions.
  • apps/ios/Sources/Screen/ScreenRecordService.swift
    • Modified ScreenRecordService to update the dispatch queue label.
  • apps/ios/Sources/Settings/SettingsTab.swift
    • Modified SettingsTab to use DeviceInfoHelper for device information.
  • apps/ios/Sources/Voice/TalkModeManager.swift
    • Modified TalkModeManager to add talk provider config selection logic and update subsystem logger.
  • apps/ios/SwiftSources.input.xcfilelist
    • Modified SwiftSources.input.xcfilelist to include new DeviceInfoHelper files.
  • apps/ios/Tests/GatewayConnectionSecurityTests.swift
    • Added import for OpenClawKit.
  • apps/ios/Tests/GatewaySettingsStoreTests.swift
    • Modified GatewaySettingsStoreTests to add tests for talk provider API key storage.
  • apps/ios/Tests/Info.plist
    • Modified Info.plist to update app version.
  • apps/ios/Tests/KeychainStoreTests.swift
    • Modified KeychainStoreTests to update service name.
  • apps/ios/Tests/NodeAppModelInvokeTests.swift
    • Modified NodeAppModelInvokeTests to add tests for handling watch notification parameters and actions.
  • apps/ios/Tests/TalkModeConfigParsingTests.swift
    • Added TalkModeConfigParsingTests for testing talk mode config parsing.
  • apps/macos/Package.resolved
    • Modified Package.resolved to update Sparkle and Swift-Log dependencies.
  • apps/macos/Sources/OpenClaw/AgentWorkspace.swift
    • Modified AgentWorkspace to improve workspace path validation.
  • apps/macos/Sources/OpenClaw/AppState.swift
    • Modified AppState to refactor remote gateway config updates.
  • apps/macos/Sources/OpenClaw/AudioInputDeviceObserver.swift
    • Modified AudioInputDeviceObserver to add a check for usable default input device.
  • apps/macos/Sources/OpenClaw/CommandResolver.swift
    • Modified CommandResolver to prefer an available openclaw binary before pnpm/node runtime fallback.
  • apps/macos/Sources/OpenClaw/ExecAllowlistMatcher.swift
    • Modified ExecAllowlistMatcher to improve allowlist matching.
  • apps/macos/Sources/OpenClaw/ExecApprovals.swift
    • Modified ExecApprovals to improve security and harden against prototype-chain pollution.
  • apps/macos/Sources/OpenClaw/ExecApprovalsSocket.swift
    • Modified ExecApprovalsSocket to update ExecHostRequest and ExecHostError visibility and add ExecHostRequestEvaluator.
  • apps/macos/Sources/OpenClaw/ExecHostRequestEvaluator.swift
    • Added ExecHostRequestEvaluator for evaluating exec host requests.
  • apps/macos/Sources/OpenClaw/ExecShellWrapperParser.swift
    • Modified ExecShellWrapperParser to improve shell command parsing.
  • apps/macos/Sources/OpenClaw/ExecSystemRunCommandValidator.swift
    • Added ExecSystemRunCommandValidator for validating system run commands.
  • apps/macos/Sources/OpenClaw/GeneralSettings.swift
    • Modified GeneralSettings to update direct mode URL validation message.
  • apps/macos/Sources/OpenClaw/MenuBar.swift
    • Modified MenuBar to remove @preconcurrency from SPUUpdaterDelegate extension.
  • apps/macos/Sources/OpenClaw/MenuSessionsInjector.swift
    • Modified MenuSessionsInjector to stop reusing the injector delegate for the 'Usage cost (30 days)' submenu.
  • apps/macos/Sources/OpenClaw/MicLevelMonitor.swift
    • Modified MicLevelMonitor to guard against missing default microphones.
  • apps/macos/Sources/OpenClaw/OnboardingView+Pages.swift
    • Modified OnboardingView+Pages to refactor gateway discovery and advanced connection sections.
  • apps/macos/Sources/OpenClaw/OnboardingView+Workspace.swift
    • Modified OnboardingView+Workspace to simplify workspace safety check.
  • apps/macos/Sources/OpenClaw/Resources/Info.plist
    • Modified Info.plist to update app version.
  • apps/macos/Sources/OpenClaw/SystemRunSettingsView.swift
    • Modified SystemRunSettingsView to improve allowlist pattern validation.
  • apps/macos/Sources/OpenClaw/TalkModeRuntime.swift
    • Modified TalkModeRuntime to add talk provider config selection logic and guard against missing default microphones.
  • apps/macos/Sources/OpenClaw/VoicePushToTalk.swift
    • Modified VoicePushToTalk to guard against missing default microphones.
  • apps/macos/Sources/OpenClaw/VoiceWakeForwarder.swift
    • Modified VoiceWakeForwarder to default forwarded voice-wake transcripts to the webchat channel.
  • apps/macos/Sources/OpenClaw/VoiceWakeOverlayTextViews.swift
    • Modified VoiceWakeOverlayTextViews to keep IME candidate confirmation behavior.
  • apps/macos/Sources/OpenClaw/VoiceWakeRuntime.swift
    • Modified VoiceWakeRuntime to guard against missing default microphones.
  • apps/macos/Sources/OpenClaw/VoiceWakeTester.swift
    • Modified VoiceWakeTester to guard against missing default microphones.
  • apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift
    • Modified WebChatSwiftUI to fix rounded-corner clipping and improve visual effect blending.
  • apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
    • Modified GatewayModels to add nodeid to ExecApprovalRequestParams.
  • apps/macos/Tests/OpenClawIPCTests/AgentWorkspaceTests.swift
    • Modified AgentWorkspaceTests to simplify workspace safety check assertions.
  • apps/macos/Tests/OpenClawIPCTests/AudioInputDeviceObserverTests.swift
    • Added AudioInputDeviceObserverTests for audio input device observer tests.
  • apps/macos/Tests/OpenClawIPCTests/CommandResolverTests.swift
    • Modified CommandResolverTests to prefer openclaw binary over pnpm.
  • apps/macos/Tests/OpenClawIPCTests/ExecHostRequestEvaluatorTests.swift
    • Added ExecHostRequestEvaluatorTests for evaluating exec host requests.
  • apps/macos/Tests/OpenClawIPCTests/ExecSystemRunCommandValidatorTests.swift
    • Added ExecSystemRunCommandValidatorTests for validating system run commands.
  • apps/macos/Tests/OpenClawIPCTests/MenuSessionsInjectorTests.swift
    • Modified MenuSessionsInjectorTests to ensure cost usage submenu does not use injector delegate.
  • apps/macos/Tests/OpenClawIPCTests/TalkModeConfigParsingTests.swift
    • Added TalkModeConfigParsingTests for talk mode config parsing tests.
  • apps/macos/Tests/OpenClawIPCTests/VoiceWakeForwarderTests.swift
    • Modified VoiceWakeForwarderTests to update default forwarded voice-wake transcripts channel.
  • apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatComposer.swift
    • Modified ChatComposer to keep IME candidate confirmation behavior.
  • apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift
    • Modified GatewayModels to add nodeid to ExecApprovalRequestParams.
  • apps/shared/OpenClawKit/Tools/CanvasA2UI/bootstrap.js
    • Modified CanvasA2UI bootstrap.js to add responsive styles for a2ui-row, a2ui-column, and a2ui-card.
  • assets/chrome-extension/background.js
    • Modified Chrome extension background.js to improve debugger detach handling and add reattach pending state.
  • assets/chrome-extension/options-validation.js
    • Added Chrome extension options validation.
  • assets/chrome-extension/options.js
    • Modified Chrome extension options.js to use new options validation logic.
  • docs/automation/cron-vs-heartbeat.md
    • Modified cron-vs-heartbeat.md to update heartbeat target default.
  • docs/channels/discord.md
    • Modified discord.md to add DAVE encryption and decryption failure tolerance options.
  • docs/channels/groups.md
    • Modified groups.md to include Zalo in group chat surfaces and update groupAllowFrom notes.
  • docs/channels/synology-chat.md
    • Modified synology-chat.md to add warning for empty allowedUserIds in allowlist mode.
  • docs/channels/zalo.md
    • Modified zalo.md to update Zalo status, add group policy controls, and expand capabilities table.
  • docs/cli/configure.md
    • Modified configure.md to correct section name from models to model.
  • docs/cli/devices.md
    • Modified devices.md to add remove and clear commands, and clarify pairing fallback.
  • docs/cli/doctor.md
    • Modified doctor.md to add memory search readiness check and sandbox Docker warning.
  • docs/cli/index.md
    • Modified index.md to update memory search and pairing commands, and add devices commands.
  • docs/cli/memory.md
    • Modified memory.md to add --query option and clarify query input.
  • docs/cli/pairing.md
    • Modified pairing.md to update pairing commands and add notes on channel/account input.
  • docs/cli/security.md
    • Modified security.md to clarify personal assistant trust model and expand dangerous flags summary.
  • docs/concepts/session-tool.md
    • Modified session-tool.md to clarify runTimeoutSeconds default for sessions_spawn.
  • docs/concepts/session.md
    • Modified session.md to expand standalone abort phrases.
  • docs/gateway/configuration-reference.md
    • Modified configuration-reference.md to add DAVE encryption options, update heartbeat target default, and clarify sandbox Docker network modes.
  • docs/gateway/configuration.md
    • Modified configuration.md to update heartbeat target default.
  • docs/gateway/heartbeat.md
    • Modified heartbeat.md to update heartbeat target default and clarify DM blocking.
  • docs/gateway/remote-gateway-readme.md
    • Modified remote-gateway-readme.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/gateway/sandboxing.md
    • Modified sandboxing.md to add security defaults for Docker network modes.
  • docs/gateway/troubleshooting.md
    • Modified troubleshooting.md to update pairing list command and add heartbeat DM blocking reason.
  • docs/gateway/trusted-proxy-auth.md
    • Modified trusted-proxy-auth.md to add Control UI pairing behavior notes.
  • docs/help/faq.md
    • Modified faq.md to replace bot.molt with ai.openclaw in service names and expand standalone abort phrases.
  • docs/help/troubleshooting.md
    • Modified troubleshooting.md to update pairing list command.
  • docs/install/docker.md
    • Modified docker.md to add security defaults for Docker network modes and clarify dangerouslyAllowContainerNamespaceJoin.
  • docs/install/nix.md
    • Modified nix.md to replace bot.molt.mac with ai.openclaw.mac.
  • docs/install/uninstall.md
    • Modified uninstall.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/install/updating.md
    • Modified updating.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/platforms/index.md
    • Modified platforms/index.md to replace bot.molt with ai.openclaw in service targets.
  • docs/platforms/mac/bundled-gateway.md
    • Modified bundled-gateway.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/platforms/mac/child-process.md
    • Modified child-process.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/platforms/mac/dev-setup.md
    • Modified dev-setup.md to replace bot.molt.mac.debug with ai.openclaw.mac.debug.
  • docs/platforms/mac/logging.md
    • Modified logging.md to replace bot.molt with ai.openclaw in logging subsystem.
  • docs/platforms/mac/permissions.md
    • Modified permissions.md to replace bot.molt.mac with ai.openclaw.mac.
  • docs/platforms/mac/release.md
    • Modified release.md to update bundle ID, app version, and appcast entry.
  • docs/platforms/mac/voice-overlay.md
    • Modified voice-overlay.md to replace bot.molt with ai.openclaw in logging subsystem.
  • docs/platforms/mac/webchat.md
    • Modified webchat.md to replace bot.molt with ai.openclaw in logging subsystem.
  • docs/platforms/macos.md
    • Modified macos.md to replace bot.molt with ai.openclaw in launchd labels.
  • docs/plugins/community.md
    • Modified community.md to add WeChat plugin.
  • docs/reference/prompt-caching.md
    • Modified prompt-caching.md to add explanation of prompt caching.
  • docs/reference/test.md
    • Modified test.md to add local PR gate instructions.
  • docs/start/openclaw.md
    • Modified openclaw.md to clarify heartbeat DM blocking.
  • docs/tools/chrome-extension.md
    • Modified chrome-extension.md to add custom gateway ports section.
  • docs/tools/exec-approvals.md
    • Modified exec-approvals.md to clarify safe bin trusted directories and shell wrapper unwrapping.
  • docs/tools/exec.md
    • Modified exec.md to add PowerShell 7 preference and clarify safe bin trusted directories.
  • docs/tools/index.md
    • Modified index.md to clarify runTimeoutSeconds default for sessions_spawn.
  • docs/tools/subagents.md
    • Modified subagents.md to clarify runTimeoutSeconds default for sessions_spawn.
  • docs/web/control-ui.md
    • Modified control-ui.md to expand standalone abort phrases.
  • extensions/bluebubbles/package.json
    • Modified package.json to update version.
  • extensions/bluebubbles/src/account-resolve.ts
    • Modified account-resolve.ts to add allowPrivateNetwork to resolved account.
  • extensions/bluebubbles/src/attachments.test.ts
    • Modified attachments.test.ts to add tests for allowPrivateNetwork in SSRF policy.
  • extensions/bluebubbles/src/attachments.ts
    • Modified attachments.ts to pass allowPrivateNetwork to SSRF policy.
  • extensions/bluebubbles/src/config-schema.ts
    • Modified config-schema.ts to add allowPrivateNetwork to schema.
  • extensions/bluebubbles/src/types.ts
    • Modified types.ts to add allowPrivateNetwork to config type.
  • extensions/copilot-proxy/package.json
    • Modified package.json to update version.
  • extensions/diagnostics-otel/package.json
    • Modified package.json to update version and OpenTelemetry exporter packages.
  • extensions/diagnostics-otel/src/service.test.ts
    • Modified service.test.ts to update OpenTelemetry exporter mocks.
  • extensions/diagnostics-otel/src/service.ts
    • Modified service.ts to update OpenTelemetry exporter imports.
  • extensions/discord/package.json
    • Modified package.json to update version.
  • extensions/feishu/package.json
    • Modified package.json to update version.
  • extensions/feishu/src/bot.ts
    • Modified bot.ts to add parentPeer for topic-scoped sessions.
  • extensions/feishu/src/media.test.ts
    • Modified media.test.ts to use resolvePreferredOpenClawTmpDir.
  • extensions/google-gemini-cli-auth/package.json
    • Modified package.json to update version.
  • extensions/googlechat/package.json
    • Modified package.json to update version and google-auth-library dependency.
  • extensions/imessage/package.json
    • Modified package.json to update version.
  • extensions/irc/package.json
    • Modified package.json to update version.
  • extensions/irc/src/inbound.authz.test.ts
    • Added inbound.authz.test.ts for IRC inbound authorization tests.
  • extensions/irc/src/inbound.ts
    • Modified inbound.ts to refine effective allowlist resolution.
  • extensions/line/package.json
    • Modified package.json to update version.
  • extensions/llm-task/package.json
    • Modified package.json to update version.
  • extensions/llm-task/src/llm-task-tool.ts
    • Modified llm-task-tool.ts to use resolvePreferredOpenClawTmpDir.
  • extensions/lobster/package.json
    • Modified package.json to update version.
  • extensions/matrix/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/matrix/package.json
    • Modified package.json to update version.
  • extensions/matrix/src/matrix/monitor/events.test.ts
    • Added events.test.ts for Matrix monitor events tests.
  • extensions/matrix/src/matrix/monitor/events.ts
    • Modified events.ts to send read receipts immediately.
  • extensions/matrix/src/matrix/monitor/handler.ts
    • Modified handler.ts to remove explicit read receipt sending.
  • extensions/matrix/src/matrix/monitor/replies.test.ts
    • Modified replies.test.ts to add tests for skipping reasoning-only replies.
  • extensions/matrix/src/matrix/monitor/replies.ts
    • Modified replies.ts to skip reasoning-only messages.
  • extensions/matrix/src/matrix/send-queue.test.ts
    • Added send-queue.test.ts for Matrix send queue tests.
  • extensions/matrix/src/matrix/send-queue.ts
    • Added send-queue.ts for serializing Matrix sends per room.
  • extensions/matrix/src/matrix/send.ts
    • Modified send.ts to use send queue for Matrix messages.
  • extensions/mattermost/package.json
    • Modified package.json to update version.
  • extensions/mattermost/src/mattermost/monitor.ts
    • Modified monitor.ts to add typing callbacks to reply dispatcher.
  • extensions/memory-core/package.json
    • Modified package.json to update version.
  • extensions/memory-lancedb/package.json
    • Modified package.json to update version and openai dependency.
  • extensions/minimax-portal-auth/package.json
    • Modified package.json to update version.
  • extensions/msteams/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/msteams/package.json
    • Modified package.json to update version.
  • extensions/msteams/src/monitor-handler/message-handler.authz.test.ts
    • Added message-handler.authz.test.ts for MS Teams inbound authorization tests.
  • extensions/msteams/src/monitor-handler/message-handler.ts
    • Modified message-handler.ts to refine effective allowlist resolution for groups.
  • extensions/msteams/src/reply-dispatcher.ts
    • Modified reply-dispatcher.ts to add typing callbacks to reply dispatcher.
  • extensions/nextcloud-talk/package.json
    • Modified package.json to update version.
  • extensions/nextcloud-talk/src/inbound.authz.test.ts
    • Added inbound.authz.test.ts for Nextcloud Talk inbound authorization tests.
  • extensions/nextcloud-talk/src/inbound.ts
    • Modified inbound.ts to refine effective allowlist resolution for groups.
  • extensions/nextcloud-talk/src/monitor.auth-order.test.ts
    • Added monitor.auth-order.test.ts for Nextcloud Talk webhook auth order tests.
  • extensions/nextcloud-talk/src/monitor.ts
    • Modified monitor.ts to reject unsigned webhook traffic before full body reads.
  • extensions/nextcloud-talk/src/types.ts
    • Modified types.ts to add readBody to webhook server options.
  • extensions/nostr/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/nostr/package.json
    • Modified package.json to update version.
  • extensions/open-prose/package.json
    • Modified package.json to update version.
  • extensions/signal/package.json
    • Modified package.json to update version.
  • extensions/slack/package.json
    • Modified package.json to update version.
  • extensions/synology-chat/package.json
    • Modified package.json to update version.
  • extensions/synology-chat/src/channel.integration.test.ts
    • Added channel.integration.test.ts for Synology Chat channel integration tests.
  • extensions/synology-chat/src/channel.test.ts
    • Modified channel.test.ts to add warnings for empty allowedUserIds and improve route registration.
  • extensions/synology-chat/src/channel.ts
    • Modified channel.ts to add warnings for empty allowedUserIds and improve route registration.
  • extensions/synology-chat/src/security.test.ts
    • Modified security.test.ts to update checkUserAllowed logic and add authorizeUserForDm tests.
  • extensions/synology-chat/src/security.ts
    • Modified security.ts to update checkUserAllowed logic and add authorizeUserForDm function.
  • extensions/synology-chat/src/webhook-handler.test.ts
    • Modified webhook-handler.test.ts to add tests for empty allowedUserIds in allowlist mode.
  • extensions/synology-chat/src/webhook-handler.ts
    • Modified webhook-handler.ts to use authorizeUserForDm for DM policy authorization.
  • extensions/telegram/package.json
    • Modified package.json to update version.
  • extensions/tlon/package.json
    • Modified package.json to update version.
  • extensions/twitch/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/twitch/package.json
    • Modified package.json to update version.
  • extensions/voice-call/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/voice-call/package.json
    • Modified package.json to update version.
  • extensions/voice-call/src/providers/telnyx.test.ts
    • Modified telnyx.test.ts to add replay detection tests.
  • extensions/voice-call/src/providers/telnyx.ts
    • Modified telnyx.ts to return replay status.
  • extensions/voice-call/src/webhook-security.test.ts
    • Modified webhook-security.test.ts to add Telnyx webhook replay detection tests.
  • extensions/voice-call/src/webhook-security.ts
    • Modified webhook-security.ts to add Telnyx webhook replay cache.
  • extensions/whatsapp/package.json
    • Modified package.json to update version.
  • extensions/zalo/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/zalo/package.json
    • Modified package.json to update version.
  • extensions/zalo/src/channel.ts
    • Modified channel.ts to add group chat capabilities and warnings.
  • extensions/zalo/src/config-schema.ts
    • Modified config-schema.ts to add group policy and group allow from to schema.
  • extensions/zalo/src/group-access.ts
    • Added group-access.ts for Zalo group access logic.
  • extensions/zalo/src/monitor.group-policy.test.ts
    • Added monitor.group-policy.test.ts for Zalo group policy access tests.
  • extensions/zalo/src/monitor.ts
    • Modified monitor.ts to use new webhook handler and group access logic.
  • extensions/zalo/src/monitor.webhook.ts
    • Added monitor.webhook.ts for Zalo webhook handling.
  • extensions/zalo/src/types.ts
    • Modified types.ts to add group policy and group allow from to config type.
  • extensions/zalouser/CHANGELOG.md
    • Modified CHANGELOG.md to update changelog for version alignment.
  • extensions/zalouser/package.json
    • Modified package.json to update version.
  • package.json
    • Modified package.json to update project name, version, and scripts.
  • scripts/check-no-random-messaging-tmp.mjs
    • Added script to check for os.tmpdir() usage.
  • scripts/check-no-raw-window-open.mjs
    • Added script to check for window.open usage.
  • scripts/e2e/gateway-network-docker.sh
    • Modified gateway-network-docker.sh to improve Docker container startup and logging.
  • scripts/ios-team-id.sh
    • Modified ios-team-id.sh to improve Xcode 16+ support and add actionable guidance.
  • scripts/restart-mac.sh
    • Modified restart-mac.sh to update launch agent plist path.
  • scripts/test-live-gateway-models-docker.sh
    • Modified test-live-gateway-models-docker.sh to update default models and add max models option.
  • scripts/test-live-models-docker.sh
    • Modified test-live-models-docker.sh to update default models and add max models option.
  • scripts/test-parallel.mjs
    • Modified test-parallel.mjs to adjust worker budget and move setup-heavy test suites.
  • scripts/update-clawtributors.ts
    • Modified update-clawtributors.ts to improve contributor data handling.
  • src/agents/agent-scope.test.ts
    • Modified agent-scope.test.ts to add tests for fallback agent ID and model fallbacks.
  • src/agents/agent-scope.ts
    • Modified agent-scope.ts to strip null bytes from workspace paths and add model fallback resolution helpers.
  • src/agents/auth-profiles.markauthprofilefailure.test.ts
    • Modified auth-profiles.markauthprofilefailure.test.ts to prevent cooldowns for OpenRouter profiles.
  • src/agents/auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.test.ts
    • Modified auth-profiles.resolve-auth-profile-order.does-not-prioritize-lastgood-round-robin-ordering.test.ts to keep OpenRouter explicit order even with cooldown fields.
  • src/agents/auth-profiles/order.ts
    • Modified auth-profiles/order.ts to use isProfileInCooldown for cooldown checks.
  • src/agents/auth-profiles/usage.test.ts
    • Modified auth-profiles/usage.test.ts to add tests for OpenRouter cooldown bypass.
  • src/agents/auth-profiles/usage.ts
    • Modified auth-profiles/usage.ts to bypass cooldown for OpenRouter profiles.
  • src/agents/bash-tools.exec-approval-request.test.ts
    • Modified bash-tools.exec-approval-request.test.ts to implement two-phase approval registration and decision waiting.
  • src/agents/bash-tools.exec-approval-request.ts
    • Modified bash-tools.exec-approval-request.ts to implement two-phase approval registration and decision waiting.
  • src/agents/bash-tools.exec-host-gateway.ts
    • Modified bash-tools.exec-host-gateway.ts to use two-phase approval registration and decision waiting.
  • src/agents/bash-tools.exec-host-node.ts
    • Modified bash-tools.exec-host-node.ts to use two-phase approval registration and decision waiting.
  • src/agents/bash-tools.exec-runtime.ts
    • Modified bash-tools.exec-runtime.ts to sanitize inherited host environment variables and improve exit status handling.
  • src/agents/bash-tools.exec.path.test.ts
    • Modified bash-tools.exec.path.test.ts to add tests for unregistered absolute SHELL and dangerous inherited env vars.
  • src/agents/bash-tools.exec.ts
    • Modified bash-tools.exec.ts to sanitize inherited host environment variables.
  • src/agents/bash-tools.process.ts
    • Modified bash-tools.process.ts to ensure setTimeout delay is non-negative.
  • src/agents/bash-tools.test.ts
    • Modified bash-tools.test.ts to improve PATH handling assertions.
  • src/agents/model-auth.test.ts
    • Modified model-auth.test.ts to normalize Bedrock provider aliases.
  • src/agents/model-compat.test.ts
    • Modified model-compat.test.ts to normalize Anthropic baseUrl.
  • src/agents/model-compat.ts
    • Modified model-compat.ts to normalize Anthropic baseUrl.
  • src/agents/model-fallback.test.ts
    • Modified model-fallback.test.ts to improve fallback logic for unrecognized errors and configured fallbacks.
  • src/agents/model-fallback.ts
    • Modified model-fallback.ts to improve fallback candidate collection and logic for configured fallbacks.
  • src/agents/model-selection.test.ts
    • Modified model-selection.test.ts to normalize Bedrock provider aliases and add tests for inferring unique provider.
  • src/agents/model-selection.ts
    • Modified model-selection.ts to normalize Bedrock provider aliases and add inferUniqueProviderFromConfiguredModels.
  • src/agents/models-config.preserves-explicit-reasoning-override.test.ts
    • Added models-config.preserves-explicit-reasoning-override.test.ts for testing explicit reasoning override.
  • src/agents/models-config.providers.ts
    • Modified models-config.providers.ts to clarify OpenRouter reasoning default.
  • src/agents/models-config.ts
    • Modified models-config.ts to preserve explicit reasoning overrides.
  • src/agents/models.profiles.live.test.ts
    • Modified models.profiles.live.test.ts to add max models option and improve failure preview.
  • src/agents/openclaw-tools.camera.test.ts
    • Modified openclaw-tools.camera.test.ts to include nodeId in exec approval request.
  • src/agents/openclaw-tools.subagents.sessions-spawn-default-timeout-absent.test.ts
    • Added openclaw-tools.subagents.sessions-spawn-default-timeout-absent.test.ts for sessions_spawn default timeout tests.
  • src/agents/openclaw-tools.subagents.sessions-spawn-default-timeout.test.ts
    • Added openclaw-tools.subagents.sessions-spawn-default-timeout.test.ts for sessions_spawn default timeout tests.
  • src/agents/openclaw-tools.subagents.sessions-spawn.lifecycle.test.ts
    • Modified openclaw-tools.subagents.sessions-spawn.lifecycle.test.ts to update deliver and channel parameters in agent calls.
  • src/agents/pi-embedded-helpers.isbillingerrormessage.test.ts
    • Modified pi-embedded-helpers.isbillingerrormessage.test.ts to refine billing error detection for long responses.
  • src/agents/pi-embedded-helpers/errors.ts
    • Modified pi-embedded-helpers/errors.ts to refine billing error detection and add new rate limit/auth error patterns.
  • src/agents/pi-embedded-helpers/extra-params.ts
    • Modified pi-embedded-helpers/extra-params.ts to normalize thinking=off for SiliconFlow Pro models and sanitize Google thinking budgets.
  • src/agents/pi-embedded-payloads.ts
    • Modified pi-embedded-payloads.ts to add isReasoning to BlockReplyPayload.
  • src/agents/pi-embedded-runner-extraparams.live.test.ts
    • Modified pi-embedded-runner-extraparams.live.test.ts to add Gemini live tests for thinking payload sanitization.
  • src/agents/pi-embedded-runner-extraparams.test.ts
    • Modified pi-embedded-runner-extraparams.test.ts to normalize thinking=off for SiliconFlow Pro models and sanitize Google thinking budgets.
  • src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.test.ts
    • Modified pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.test.ts to add tests for agent-level fallbacks.
  • src/agents/pi-embedded-runner.sanitize-session-history.test.ts
    • Modified pi-embedded-runner.sanitize-session-history.test.ts to synthesize missing tool results for openai-responses.
  • src/agents/pi-embedded-runner/extra-params.ts
    • Modified pi-embedded-runner/extra-params.ts to normalize thinking=off for SiliconFlow Pro models and sanitize Google thinking budgets.
  • src/agents/pi-embedded-runner/run.ts
    • Modified pi-embedded-runner/run.ts to use hasConfiguredModelFallbacks for fallback checks.
  • src/agents/pi-embedded-runner/run/attempt.test.ts
    • Modified pi-embedded-runner/run/attempt.test.ts to add tests for prompt mode and fs workspace only resolution.
  • src/agents/pi-embedded-runner/run/attempt.ts
    • Modified pi-embedded-runner/run/attempt.ts to add resolvePromptModeForSession and resolveAttemptFsWorkspaceOnly.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Activity
  • Updated core and extension versions to 2026.2.25.
  • Improved Android app UX with a new onboarding flow and reorganized tab structure.
  • Addressed several security vulnerabilities, including those related to Nextcloud Talk, IRC, Microsoft Teams, LINE, and various sandbox escapes.
  • Refreshed key runtime and tooling packages, ensuring the project benefits from the latest features and security patches.
  • Enhanced model fallback mechanisms to ensure more reliable operation even when primary models are unavailable.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a vast number of changes across the repository, including documentation updates, dependency upgrades, a major UI refactoring for the Android app, and numerous security enhancements and bug fixes. The PR title seems to be a misnomer given the broad scope of these changes. Key improvements include a more robust and user-friendly Android app experience, enhanced markdown rendering, and significant hardening of the command execution security model. I've identified a critical compilation issue in a Swift file and some areas for improvement regarding code duplication and performance on Android. Overall, this is a substantial and valuable set of updates.

Comment on lines 63 to 72
private static func extractPayload(command: [String], spec: WrapperSpec) -> String? {
switch spec.kind {
case .posix:
return self.extractPosixInlineCommand(command)
self.extractPosixInlineCommand(command)
case .cmd:
return self.extractCmdInlineCommand(command)
self.extractCmdInlineCommand(command)
case .powershell:
return self.extractPowerShellInlineCommand(command)
self.extractPowerShellInlineCommand(command)
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

This function is declared to return a String?, but the case statements inside the switch do not return a value. This will cause a compilation error. You should add return statements to each case.

Suggested change
private static func extractPayload(command: [String], spec: WrapperSpec) -> String? {
switch spec.kind {
case .posix:
return self.extractPosixInlineCommand(command)
self.extractPosixInlineCommand(command)
case .cmd:
return self.extractCmdInlineCommand(command)
self.extractCmdInlineCommand(command)
case .powershell:
return self.extractPowerShellInlineCommand(command)
self.extractPowerShellInlineCommand(command)
}
}
private static func extractPayload(command: [String], spec: WrapperSpec) -> String? {
switch spec.kind {
case .posix:
return self.extractPosixInlineCommand(command)
case .cmd:
return self.extractCmdInlineCommand(command)
case .powershell:
return self.extractPowerShellInlineCommand(command)
}
}

Comment thread CHANGELOG.md
Comment on lines +117 to +138
- Telegram/Media fetch: prioritize IPv4 before IPv6 in SSRF pinned DNS address ordering so media downloads still work on hosts with broken IPv6 routing. (#24295, #23975) Thanks @Glucksberg.
- Telegram/Outbound API: replace Node 22's global undici dispatcher when applying Telegram `autoSelectFamily` decisions so outbound `fetch` calls inherit IPv4 fallback instead of staying pinned to stale dispatcher settings. (#25682, #25676) Thanks @lairtonlelis.
- Agents/Billing classification: prevent long assistant/user-facing text from being rewritten as billing failures while preserving explicit `status/code/http 402` detection for oversized structured error payloads. (#25680, #25661) Thanks @lairtonlelis.
- Telegram/Replies: when markdown formatting renders to empty HTML (for example syntax-only chunks in threaded replies), retry delivery with plain text, and fail loud when both formatted and plain payloads are empty to avoid false delivered states. (#25096, #25091) Thanks @Glucksberg.
- Sessions/Tool-result guard: avoid generating synthetic `toolResult` entries for assistant turns that ended with `stopReason: "aborted"` or `"error"`, preventing orphaned tool-use IDs from triggering downstream API validation errors. (#25429) Thanks @mikaeldiakhate-cell.
- Gateway/Sessions: preserve `modelProvider` on `sessions.reset` and avoid incorrect provider prefixes for legacy session models. (#25874) Thanks @lbo728.
- Usage accounting: parse Moonshot/Kimi `cached_tokens` fields (including `prompt_tokens_details.cached_tokens`) into normalized cache-read usage metrics. (#25436) Thanks @Elarwei001.
- Doctor/Sandbox: when sandbox mode is enabled but Docker is unavailable, surface a clear actionable warning (including failure impact and remediation) instead of a mild “skip checks” note. (#25438) Thanks @mcaxtr.
- Config/Meta: accept numeric `meta.lastTouchedAt` timestamps and coerce them to ISO strings, preserving compatibility with agent edits that write `Date.now()` values. (#25491) Thanks @mcaxtr.
- Auto-reply/Reset hooks: guarantee native `/new` and `/reset` flows emit command/reset hooks even on early-return command paths, with dedupe protection to avoid double hook emission. (#25459) Thanks @chilu18.
- Hooks/Slug generator: resolve session slug model from the agent’s effective model (including defaults/fallback resolution) instead of raw agent-primary config only. (#25485) Thanks @SudeepMalipeddi.
- Slack/DM routing: treat `D*` channel IDs as direct messages even when Slack sends an incorrect `channel_type`, preventing DM traffic from being misclassified as channel/group chats. (#25479) Thanks @mcaxtr.
- Models/Providers: preserve explicit user `reasoning` overrides when merging provider model config with built-in catalog metadata, so `reasoning: false` is no longer overwritten by catalog defaults. (#25314) Thanks @lbo728.
- Exec approvals: treat bare allowlist `*` as a true wildcard for parsed executables, including unresolved PATH lookups, so global opt-in allowlists work as configured. (#25250) Thanks @widingmarcus-cyber.
- Gateway/Auth: allow trusted-proxy authenticated Control UI websocket sessions to skip device pairing when device identity is absent, preventing false `pairing required` failures behind trusted reverse proxies. (#25428) Thanks @SidQin-cyber.
- Agents/Tool dispatch: await block-reply flush before tool execution starts so buffered block replies preserve message ordering around tool calls. (#25427) Thanks @SidQin-cyber.
- iOS/Signing: improve `scripts/ios-team-id.sh` for Xcode 16+ by falling back to Xcode-managed provisioning profiles, add actionable guidance when an Apple account exists but no Team ID can be resolved, and ignore Xcode `xcodebuild` output directories (`apps/ios/build`, `apps/shared/OpenClawKit/build`, `Swabble/build`). (#22773) Thanks @brianleach.
- macOS/Menu bar: stop reusing the injector delegate for the "Usage cost (30 days)" submenu to prevent recursive submenu injection loops when opening cost history. (#25341) Thanks @yingchunbai.
- Control UI/Chat images: route image-click opens through a shared safe-open helper (allowing only safe URL schemes) and open new tabs with opener isolation to block tabnabbing. (#18685, #25444, #25847) Thanks @Mariana-Codebase and @shakkernerd.
- CLI/Doctor: correct stale recovery hints to use valid commands (`openclaw gateway status --deep` and `openclaw configure --section model`). (#24485) Thanks @chilu18.
- CLI/Memory search: accept `--query <text>` for `openclaw memory search` (while keeping positional query support), and emit a clear error when neither form is provided. (#25904, #25857) Thanks @niceysam and @stakeswky.
- Security/Sandbox: canonicalize bind-mount source paths via existing-ancestor realpath so symlink-parent + non-existent-leaf paths cannot bypass allowed-source-roots or blocked-path checks. Thanks @tdjackey.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This block of changelog entries appears to be a duplicate of the entries from lines 63-85. Please remove this duplicated block to keep the changelog clean and accurate.

Comment on lines 154 to +158
fun setGatewayToken(value: String) {
prefs.edit { putString("gateway.manual.token", value) }
_gatewayToken.value = value
val trimmed = value.trim()
prefs.edit(commit = true) { putString("gateway.manual.token", trimmed) }
_gatewayToken.value = trimmed
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using commit = true performs a synchronous write to disk, which can block the main thread and potentially lead to an Application Not Responding (ANR) error. It is generally recommended to use apply() for asynchronous writes, which is the default for the edit KTX extension. If a synchronous write is not strictly necessary here, please consider removing commit = true to default to apply().

Suggested change
fun setGatewayToken(value: String) {
prefs.edit { putString("gateway.manual.token", value) }
_gatewayToken.value = value
val trimmed = value.trim()
prefs.edit(commit = true) { putString("gateway.manual.token", trimmed) }
_gatewayToken.value = trimmed
}
fun setGatewayToken(value: String) {
val trimmed = value.trim()
prefs.edit { putString("gateway.manual.token", trimmed) }
_gatewayToken.value = trimmed
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.