Files
bot/apps/macos/Tests/BotIPCTests/ChannelsSettingsSmokeTests.swift
zooqueen 4a86b4d9b9 Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	.dockerignore
#	.github/actionlint.yaml
#	.github/actions/setup-node-env/action.yml
#	.github/workflows/auto-response.yml
#	.github/workflows/ci.yml
#	.github/workflows/docker-release.yml
#	.github/workflows/install-smoke.yml
#	.gitignore
#	AGENTS.md
#	CHANGELOG.md
#	CONTRIBUTING.md
#	Dockerfile
#	README.md
#	SECURITY.md
#	appcast.xml
#	apps/android/README.md
#	apps/android/app/build.gradle.kts
#	apps/android/app/src/main/AndroidManifest.xml
#	apps/android/app/src/main/java/ai/hanzo/bot/android/MainViewModel.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/NodeRuntime.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/SecurePrefs.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/gateway/GatewaySession.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/CalendarHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/CameraCaptureManager.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/ConnectionManager.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/ContactsHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/DeviceHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/InvokeDispatcher.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/MotionHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/NodeUtils.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/PhotosHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/ScreenRecordManager.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/node/SystemHandler.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/ui/OnboardingFlow.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/ui/VoiceTabScreen.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/ui/chat/Base64ImageState.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/voice/ElevenLabsStreamingTts.kt
#	apps/android/app/src/main/java/ai/hanzo/bot/android/voice/TalkModeManager.kt
#	apps/android/app/src/main/java/ai/openclaw/android/node/InvokeCommandRegistry.kt
#	apps/android/app/src/main/java/ai/openclaw/android/protocol/OpenClawProtocolConstants.kt
#	apps/android/app/src/main/java/ai/openclaw/android/ui/SettingsSheet.kt
#	apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatMarkdown.kt
#	apps/android/app/src/main/java/ai/openclaw/android/ui/chat/ChatMessageViews.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/gateway/GatewaySessionInvokeTimeoutTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/CalendarHandlerTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/ContactsHandlerTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/MotionHandlerTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/NodeHandlerRobolectricTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/PhotosHandlerTest.kt
#	apps/android/app/src/test/java/ai/hanzo/bot/android/node/SystemHandlerTest.kt
#	apps/android/app/src/test/java/ai/openclaw/android/gateway/GatewaySessionInvokeTest.kt
#	apps/android/app/src/test/java/ai/openclaw/android/node/InvokeCommandRegistryTest.kt
#	apps/android/app/src/test/java/ai/openclaw/android/protocol/OpenClawProtocolConstantsTest.kt
#	apps/android/benchmark/build.gradle.kts
#	apps/ios/Config/Signing.xcconfig
#	apps/ios/Sources/Camera/CameraController.swift
#	apps/ios/Sources/Contacts/ContactsService.swift
#	apps/ios/Sources/Gateway/GatewayConnectionController.swift
#	apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift
#	apps/ios/Sources/Gateway/GatewayServiceResolver.swift
#	apps/ios/Sources/Gateway/GatewaySettingsStore.swift
#	apps/ios/Sources/Gateway/KeychainStore.swift
#	apps/ios/Sources/Info.plist
#	apps/ios/Sources/Location/LocationService.swift
#	apps/ios/Sources/Model/NodeAppModel+Canvas.swift
#	apps/ios/Sources/Model/NodeAppModel.swift
#	apps/ios/Sources/OpenClawApp.swift
#	apps/ios/Sources/Screen/ScreenController.swift
#	apps/ios/Sources/Screen/ScreenRecordService.swift
#	apps/ios/Sources/Services/WatchMessagingService.swift
#	apps/ios/Sources/Voice/TalkModeManager.swift
#	apps/ios/Tests/DeepLinkParserTests.swift
#	apps/ios/Tests/GatewayConnectionControllerTests.swift
#	apps/ios/Tests/GatewayConnectionSecurityTests.swift
#	apps/ios/Tests/GatewaySettingsStoreTests.swift
#	apps/ios/Tests/Info.plist
#	apps/ios/Tests/NodeAppModelInvokeTests.swift
#	apps/ios/Tests/VoiceWakeManagerExtractCommandTests.swift
#	apps/ios/project.yml
#	apps/macos/Sources/Bot/AgentWorkspaceConfig.swift
#	apps/macos/Sources/Bot/AudioInputDeviceObserver.swift
#	apps/macos/Sources/Bot/CanvasA2UIActionMessageHandler.swift
#	apps/macos/Sources/Bot/CanvasFileWatcher.swift
#	apps/macos/Sources/Bot/CanvasWindowController.swift
#	apps/macos/Sources/Bot/ColorHexSupport.swift
#	apps/macos/Sources/Bot/DurationFormattingSupport.swift
#	apps/macos/Sources/Bot/ExecApprovals.swift
#	apps/macos/Sources/Bot/ExecEnvOptions.swift
#	apps/macos/Sources/Bot/GatewayDiscoveryMenu.swift
#	apps/macos/Sources/Bot/GatewayDiscoverySelectionSupport.swift
#	apps/macos/Sources/Bot/GatewayEndpointStore.swift
#	apps/macos/Sources/Bot/GatewayPushSubscription.swift
#	apps/macos/Sources/Bot/GatewayRemoteConfig.swift
#	apps/macos/Sources/Bot/GeneralSettings.swift
#	apps/macos/Sources/Bot/JSONObjectExtractionSupport.swift
#	apps/macos/Sources/Bot/Logging/BotLogging.swift
#	apps/macos/Sources/Bot/MenuHeaderCard.swift
#	apps/macos/Sources/Bot/MenuItemHighlightColors.swift
#	apps/macos/Sources/Bot/MenuSessionsHeaderView.swift
#	apps/macos/Sources/Bot/MicRefreshSupport.swift
#	apps/macos/Sources/Bot/NodeMode/MacNodeLocationService.swift
#	apps/macos/Sources/Bot/OnboardingView+Pages.swift
#	apps/macos/Sources/Bot/OverlayPanelFactory.swift
#	apps/macos/Sources/Bot/PeekabooBridgeHostCoordinator.swift
#	apps/macos/Sources/Bot/PermissionMonitoringSupport.swift
#	apps/macos/Sources/Bot/PlatformLabelFormatter.swift
#	apps/macos/Sources/Bot/RemotePortTunnel.swift
#	apps/macos/Sources/Bot/Resources/Info.plist
#	apps/macos/Sources/Bot/ScreenRecordService.swift
#	apps/macos/Sources/Bot/SelectableRow.swift
#	apps/macos/Sources/Bot/SettingsRefreshButton.swift
#	apps/macos/Sources/Bot/SettingsSidebarCard.swift
#	apps/macos/Sources/Bot/SettingsSidebarScroll.swift
#	apps/macos/Sources/Bot/SimpleFileWatcher.swift
#	apps/macos/Sources/Bot/SimpleFileWatcherOwner.swift
#	apps/macos/Sources/Bot/SimpleTaskSupport.swift
#	apps/macos/Sources/Bot/SystemSettingsURLSupport.swift
#	apps/macos/Sources/Bot/TextSummarySupport.swift
#	apps/macos/Sources/Bot/TrackingAreaSupport.swift
#	apps/macos/Sources/Bot/VoiceOverlayTextFormatting.swift
#	apps/macos/Sources/Bot/VoiceWakeRecognitionDebugSupport.swift
#	apps/macos/Sources/BotDiscovery/GatewayDiscoveryModel.swift
#	apps/macos/Sources/BotDiscovery/TailscaleServeGatewayDiscovery.swift
#	apps/macos/Sources/BotMacCLI/CLIArgParsingSupport.swift
#	apps/macos/Sources/BotMacCLI/WizardCommand.swift
#	apps/macos/Sources/BotProtocol/GatewayModels.swift
#	apps/macos/Sources/OpenClaw/OnboardingView+Actions.swift
#	apps/macos/Sources/OpenClaw/OnboardingView+Monitoring.swift
#	apps/macos/Tests/BotIPCTests/AgentEventStoreTests.swift
#	apps/macos/Tests/BotIPCTests/AnyCodableEncodingTests.swift
#	apps/macos/Tests/BotIPCTests/CameraCaptureServiceTests.swift
#	apps/macos/Tests/BotIPCTests/CameraIPCTests.swift
#	apps/macos/Tests/BotIPCTests/CanvasIPCTests.swift
#	apps/macos/Tests/BotIPCTests/CanvasWindowSmokeTests.swift
#	apps/macos/Tests/BotIPCTests/CommandResolverTests.swift
#	apps/macos/Tests/BotIPCTests/ExecApprovalHelpersTests.swift
#	apps/macos/Tests/BotIPCTests/ExecApprovalsSocketPathGuardTests.swift
#	apps/macos/Tests/BotIPCTests/ExecApprovalsStoreRefactorTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayChannelConfigureTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayChannelConnectTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayChannelRequestTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayChannelShutdownTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayConnectionControlTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayDiscoveryModelTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayEndpointStoreTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayFrameDecodeTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayProcessManagerTests.swift
#	apps/macos/Tests/BotIPCTests/GatewayWebSocketTestSupport.swift
#	apps/macos/Tests/BotIPCTests/LowCoverageHelperTests.swift
#	apps/macos/Tests/BotIPCTests/LowCoverageViewSmokeTests.swift
#	apps/macos/Tests/BotIPCTests/MacNodeRuntimeTests.swift
#	apps/macos/Tests/BotIPCTests/NixModeStableSuiteTests.swift
#	apps/macos/Tests/BotIPCTests/OpenClawConfigFileTests.swift
#	apps/macos/Tests/BotIPCTests/PermissionManagerLocationTests.swift
#	apps/macos/Tests/BotIPCTests/PermissionManagerTests.swift
#	apps/macos/Tests/BotIPCTests/TailscaleServeGatewayDiscoveryTests.swift
#	apps/macos/Tests/BotIPCTests/TalkModeConfigParsingTests.swift
#	apps/macos/Tests/BotIPCTests/TestFSHelpers.swift
#	apps/macos/Tests/BotIPCTests/VoiceWakeGlobalSettingsSyncTests.swift
#	apps/macos/Tests/BotIPCTests/VoiceWakeRuntimeTests.swift
#	apps/macos/Tests/BotIPCTests/VoiceWakeTestSupport.swift
#	apps/macos/Tests/BotIPCTests/WebChatSwiftUISmokeTests.swift
#	apps/macos/Tests/BotIPCTests/WorkActivityStoreTests.swift
#	apps/macos/Tests/OpenClawIPCTests/ExecAllowlistTests.swift
#	apps/shared/BotKit/Sources/BotChatUI/ChatMessageViews.swift
#	apps/shared/BotKit/Sources/BotKit/BonjourServiceResolverSupport.swift
#	apps/shared/BotKit/Sources/BotKit/CalendarCommands.swift
#	apps/shared/BotKit/Sources/BotKit/CameraAuthorization.swift
#	apps/shared/BotKit/Sources/BotKit/CameraCapturePipelineSupport.swift
#	apps/shared/BotKit/Sources/BotKit/CameraSessionConfiguration.swift
#	apps/shared/BotKit/Sources/BotKit/CaptureRateLimits.swift
#	apps/shared/BotKit/Sources/BotKit/DeviceAuthPayload.swift
#	apps/shared/BotKit/Sources/BotKit/GatewayChannel.swift
#	apps/shared/BotKit/Sources/BotKit/GatewayConnectChallengeSupport.swift
#	apps/shared/BotKit/Sources/BotKit/GatewayDiscoveryBrowserSupport.swift
#	apps/shared/BotKit/Sources/BotKit/GatewayTLSPinning.swift
#	apps/shared/BotKit/Sources/BotKit/GenericPasswordKeychainStore.swift
#	apps/shared/BotKit/Sources/BotKit/LocalNetworkURLSupport.swift
#	apps/shared/BotKit/Sources/BotKit/LocationCurrentRequest.swift
#	apps/shared/BotKit/Sources/BotKit/LocationServiceSupport.swift
#	apps/shared/BotKit/Sources/BotKit/LoopbackHost.swift
#	apps/shared/BotKit/Sources/BotKit/MotionCommands.swift
#	apps/shared/BotKit/Sources/BotKit/NetworkInterfaceIPv4.swift
#	apps/shared/BotKit/Sources/BotKit/NetworkInterfaces.swift
#	apps/shared/BotKit/Sources/BotKit/OpenClawDateRangeLimitParams.swift
#	apps/shared/BotKit/Sources/BotKit/ThrowingContinuationSupport.swift
#	apps/shared/BotKit/Sources/BotKit/WebViewJavaScriptSupport.swift
#	apps/shared/BotKit/Sources/BotProtocol/GatewayModels.swift
#	apps/shared/BotKit/Tests/BotKitTests/ChatViewModelTests.swift
#	apps/shared/BotKit/Tests/BotKitTests/TestAsyncHelpers.swift
#	apps/shared/OpenClawKit/Tests/OpenClawKitTests/GatewayNodeSessionTests.swift
#	assets/chrome-extension/background.js
#	docker-compose.yml
#	docker-setup.sh
#	docs/automation/cron-jobs.md
#	docs/automation/hooks.md
#	docs/brave-search.md
#	docs/channels/bluebubbles.md
#	docs/channels/channel-routing.md
#	docs/channels/feishu.md
#	docs/channels/googlechat.md
#	docs/channels/index.md
#	docs/channels/line.md
#	docs/channels/mattermost.md
#	docs/channels/telegram.md
#	docs/channels/tlon.md
#	docs/channels/zalouser.md
#	docs/ci.md
#	docs/cli/acp.md
#	docs/cli/config.md
#	docs/cli/index.md
#	docs/cli/node.md
#	docs/cli/onboard.md
#	docs/cli/plugins.md
#	docs/cli/qr.md
#	docs/cli/secrets.md
#	docs/concepts/agent-loop.md
#	docs/concepts/compaction.md
#	docs/concepts/memory.md
#	docs/concepts/model-providers.md
#	docs/concepts/multi-agent.md
#	docs/concepts/oauth.md
#	docs/concepts/session-tool.md
#	docs/concepts/streaming.md
#	docs/docs.json
#	docs/gateway/authentication.md
#	docs/gateway/background-process.md
#	docs/gateway/configuration-examples.md
#	docs/gateway/configuration-reference.md
#	docs/gateway/doctor.md
#	docs/gateway/remote.md
#	docs/gateway/sandboxing.md
#	docs/gateway/secrets-plan-contract.md
#	docs/gateway/secrets.md
#	docs/gateway/security/index.md
#	docs/help/faq.md
#	docs/help/testing.md
#	docs/install/docker.md
#	docs/install/installer.md
#	docs/nodes/audio.md
#	docs/nodes/index.md
#	docs/nodes/media-understanding.md
#	docs/perplexity.md
#	docs/platforms/android.md
#	docs/platforms/ios.md
#	docs/platforms/mac/release.md
#	docs/platforms/macos.md
#	docs/platforms/raspberry-pi.md
#	docs/plugins/zalouser.md
#	docs/providers/anthropic.md
#	docs/providers/index.md
#	docs/providers/minimax.md
#	docs/providers/moonshot.md
#	docs/providers/ollama.md
#	docs/providers/openai.md
#	docs/reference/api-usage-costs.md
#	docs/reference/secretref-credential-surface.md
#	docs/reference/secretref-user-supplied-credentials-matrix.json
#	docs/reference/test.md
#	docs/reference/token-use.md
#	docs/security/CONTRIBUTING-THREAT-MODEL.md
#	docs/security/README.md
#	docs/security/THREAT-MODEL-ATLAS.md
#	docs/start/onboarding.md
#	docs/start/wizard.md
#	docs/tools/acp-agents.md
#	docs/tools/browser.md
#	docs/tools/diffs.md
#	docs/tools/exec.md
#	docs/tools/index.md
#	docs/tools/pdf.md
#	docs/tools/plugin.md
#	docs/tools/slash-commands.md
#	docs/tools/thinking.md
#	docs/tools/web.md
#	docs/vps.md
#	docs/web/dashboard.md
#	docs/web/tui.md
#	extensions/acpx/index.ts
#	extensions/acpx/package.json
#	extensions/acpx/skills/acp-router/SKILL.md
#	extensions/acpx/src/config.test.ts
#	extensions/acpx/src/config.ts
#	extensions/acpx/src/ensure.ts
#	extensions/acpx/src/runtime-internals/events.ts
#	extensions/acpx/src/runtime-internals/process.test.ts
#	extensions/acpx/src/runtime-internals/process.ts
#	extensions/acpx/src/runtime-internals/test-fixtures.ts
#	extensions/acpx/src/runtime.test.ts
#	extensions/acpx/src/runtime.ts
#	extensions/acpx/src/service.test.ts
#	extensions/acpx/src/service.ts
#	extensions/bluebubbles/index.ts
#	extensions/bluebubbles/package.json
#	extensions/bluebubbles/src/account-resolve.ts
#	extensions/bluebubbles/src/accounts.ts
#	extensions/bluebubbles/src/actions.test.ts
#	extensions/bluebubbles/src/actions.ts
#	extensions/bluebubbles/src/attachments.test.ts
#	extensions/bluebubbles/src/attachments.ts
#	extensions/bluebubbles/src/channel.ts
#	extensions/bluebubbles/src/chat.ts
#	extensions/bluebubbles/src/config-schema.ts
#	extensions/bluebubbles/src/history.ts
#	extensions/bluebubbles/src/media-send.test.ts
#	extensions/bluebubbles/src/media-send.ts
#	extensions/bluebubbles/src/monitor-debounce.ts
#	extensions/bluebubbles/src/monitor-processing.ts
#	extensions/bluebubbles/src/monitor-shared.ts
#	extensions/bluebubbles/src/monitor.test.ts
#	extensions/bluebubbles/src/monitor.ts
#	extensions/bluebubbles/src/monitor.webhook-auth.test.ts
#	extensions/bluebubbles/src/monitor.webhook-route.test.ts
#	extensions/bluebubbles/src/onboarding.secret-input.test.ts
#	extensions/bluebubbles/src/onboarding.ts
#	extensions/bluebubbles/src/probe.ts
#	extensions/bluebubbles/src/reactions.ts
#	extensions/bluebubbles/src/runtime.ts
#	extensions/bluebubbles/src/secret-input.ts
#	extensions/bluebubbles/src/send.test.ts
#	extensions/bluebubbles/src/send.ts
#	extensions/bluebubbles/src/targets.ts
#	extensions/bluebubbles/src/types.ts
#	extensions/copilot-proxy/index.ts
#	extensions/copilot-proxy/package.json
#	extensions/device-pair/index.ts
#	extensions/diagnostics-otel/index.ts
#	extensions/diagnostics-otel/package.json
#	extensions/diagnostics-otel/src/service.test.ts
#	extensions/diagnostics-otel/src/service.ts
#	extensions/diffs/README.md
#	extensions/diffs/assets/viewer-runtime.js
#	extensions/diffs/index.ts
#	extensions/diffs/package.json
#	extensions/diffs/src/browser.test.ts
#	extensions/diffs/src/browser.ts
#	extensions/diffs/src/config.ts
#	extensions/diffs/src/http.test.ts
#	extensions/diffs/src/http.ts
#	extensions/diffs/src/render.test.ts
#	extensions/diffs/src/render.ts
#	extensions/diffs/src/store.test.ts
#	extensions/diffs/src/store.ts
#	extensions/diffs/src/tool.test.ts
#	extensions/diffs/src/tool.ts
#	extensions/diffs/src/url.test.ts
#	extensions/diffs/src/url.ts
#	extensions/diffs/src/viewer-assets.test.ts
#	extensions/diffs/src/viewer-client.ts
#	extensions/diffs/src/viewer-payload.ts
#	extensions/discord/index.ts
#	extensions/discord/package.json
#	extensions/discord/src/channel.test.ts
#	extensions/discord/src/channel.ts
#	extensions/discord/src/runtime.ts
#	extensions/discord/src/subagent-hooks.test.ts
#	extensions/discord/src/subagent-hooks.ts
#	extensions/feishu/index.ts
#	extensions/feishu/package.json
#	extensions/feishu/src/accounts.test.ts
#	extensions/feishu/src/accounts.ts
#	extensions/feishu/src/bitable.ts
#	extensions/feishu/src/bot.stripBotMention.test.ts
#	extensions/feishu/src/bot.test.ts
#	extensions/feishu/src/bot.ts
#	extensions/feishu/src/card-action.ts
#	extensions/feishu/src/channel.test.ts
#	extensions/feishu/src/channel.ts
#	extensions/feishu/src/chat.ts
#	extensions/feishu/src/client.test.ts
#	extensions/feishu/src/client.ts
#	extensions/feishu/src/config-schema.ts
#	extensions/feishu/src/dedup.ts
#	extensions/feishu/src/directory.ts
#	extensions/feishu/src/docx.account-selection.test.ts
#	extensions/feishu/src/docx.ts
#	extensions/feishu/src/drive.ts
#	extensions/feishu/src/dynamic-agent.ts
#	extensions/feishu/src/media.test.ts
#	extensions/feishu/src/media.ts
#	extensions/feishu/src/monitor.account.ts
#	extensions/feishu/src/monitor.reaction.test.ts
#	extensions/feishu/src/monitor.startup.test.ts
#	extensions/feishu/src/monitor.startup.ts
#	extensions/feishu/src/monitor.state.ts
#	extensions/feishu/src/monitor.transport.ts
#	extensions/feishu/src/monitor.ts
#	extensions/feishu/src/monitor.webhook-security.test.ts
#	extensions/feishu/src/onboarding.status.test.ts
#	extensions/feishu/src/onboarding.ts
#	extensions/feishu/src/outbound.test.ts
#	extensions/feishu/src/outbound.ts
#	extensions/feishu/src/perm.ts
#	extensions/feishu/src/policy.test.ts
#	extensions/feishu/src/policy.ts
#	extensions/feishu/src/probe.ts
#	extensions/feishu/src/reactions.ts
#	extensions/feishu/src/reply-dispatcher.test.ts
#	extensions/feishu/src/reply-dispatcher.ts
#	extensions/feishu/src/runtime.ts
#	extensions/feishu/src/secret-input.ts
#	extensions/feishu/src/send-target.test.ts
#	extensions/feishu/src/send-target.ts
#	extensions/feishu/src/send.reply-fallback.test.ts
#	extensions/feishu/src/send.test.ts
#	extensions/feishu/src/send.ts
#	extensions/feishu/src/streaming-card.test.ts
#	extensions/feishu/src/streaming-card.ts
#	extensions/feishu/src/targets.ts
#	extensions/feishu/src/tool-account-routing.test.ts
#	extensions/feishu/src/tool-account.ts
#	extensions/feishu/src/tool-factory-test-harness.ts
#	extensions/feishu/src/types.ts
#	extensions/feishu/src/typing.ts
#	extensions/feishu/src/wiki.ts
#	extensions/google-gemini-cli-auth/index.ts
#	extensions/google-gemini-cli-auth/oauth.test.ts
#	extensions/google-gemini-cli-auth/oauth.ts
#	extensions/google-gemini-cli-auth/package.json
#	extensions/googlechat/index.ts
#	extensions/googlechat/package.json
#	extensions/googlechat/src/accounts.ts
#	extensions/googlechat/src/actions.ts
#	extensions/googlechat/src/channel.startup.test.ts
#	extensions/googlechat/src/channel.ts
#	extensions/googlechat/src/monitor-access.ts
#	extensions/googlechat/src/monitor-types.ts
#	extensions/googlechat/src/monitor-webhook.ts
#	extensions/googlechat/src/monitor.ts
#	extensions/googlechat/src/monitor.webhook-routing.test.ts
#	extensions/googlechat/src/onboarding.ts
#	extensions/googlechat/src/resolve-target.test.ts
#	extensions/googlechat/src/runtime.ts
#	extensions/googlechat/src/types.config.ts
#	extensions/imessage/index.ts
#	extensions/imessage/package.json
#	extensions/imessage/src/channel.ts
#	extensions/imessage/src/runtime.ts
#	extensions/irc/index.ts
#	extensions/irc/package.json
#	extensions/irc/src/accounts.ts
#	extensions/irc/src/channel.ts
#	extensions/irc/src/config-schema.ts
#	extensions/irc/src/inbound.ts
#	extensions/irc/src/monitor.ts
#	extensions/irc/src/onboarding.test.ts
#	extensions/irc/src/onboarding.ts
#	extensions/irc/src/runtime.ts
#	extensions/irc/src/types.ts
#	extensions/line/index.ts
#	extensions/line/package.json
#	extensions/line/src/card-command.ts
#	extensions/line/src/channel.logout.test.ts
#	extensions/line/src/channel.sendPayload.test.ts
#	extensions/line/src/channel.startup.test.ts
#	extensions/line/src/channel.ts
#	extensions/line/src/runtime.ts
#	extensions/llm-task/index.ts
#	extensions/llm-task/package.json
#	extensions/llm-task/src/llm-task-tool.ts
#	extensions/lobster/index.ts
#	extensions/lobster/package.json
#	extensions/lobster/src/lobster-tool.test.ts
#	extensions/lobster/src/lobster-tool.ts
#	extensions/lobster/src/windows-spawn.ts
#	extensions/matrix/CHANGELOG.md
#	extensions/matrix/index.ts
#	extensions/matrix/package.json
#	extensions/matrix/src/actions.ts
#	extensions/matrix/src/channel.directory.test.ts
#	extensions/matrix/src/channel.ts
#	extensions/matrix/src/config-schema.ts
#	extensions/matrix/src/directory-live.ts
#	extensions/matrix/src/group-mentions.ts
#	extensions/matrix/src/matrix/accounts.ts
#	extensions/matrix/src/matrix/client/config.ts
#	extensions/matrix/src/matrix/client/create-client.ts
#	extensions/matrix/src/matrix/client/shared.test.ts
#	extensions/matrix/src/matrix/client/shared.ts
#	extensions/matrix/src/matrix/deps.ts
#	extensions/matrix/src/matrix/monitor/access-policy.ts
#	extensions/matrix/src/matrix/monitor/allowlist.ts
#	extensions/matrix/src/matrix/monitor/auto-join.ts
#	extensions/matrix/src/matrix/monitor/direct.ts
#	extensions/matrix/src/matrix/monitor/events.test.ts
#	extensions/matrix/src/matrix/monitor/events.ts
#	extensions/matrix/src/matrix/monitor/handler.body-for-agent.test.ts
#	extensions/matrix/src/matrix/monitor/handler.ts
#	extensions/matrix/src/matrix/monitor/index.ts
#	extensions/matrix/src/matrix/monitor/location.ts
#	extensions/matrix/src/matrix/monitor/media.test.ts
#	extensions/matrix/src/matrix/monitor/replies.test.ts
#	extensions/matrix/src/matrix/monitor/replies.ts
#	extensions/matrix/src/matrix/monitor/rooms.ts
#	extensions/matrix/src/matrix/poll-types.ts
#	extensions/matrix/src/matrix/probe.ts
#	extensions/matrix/src/matrix/send-queue.ts
#	extensions/matrix/src/matrix/send.test.ts
#	extensions/matrix/src/matrix/send.ts
#	extensions/matrix/src/onboarding.ts
#	extensions/matrix/src/outbound.ts
#	extensions/matrix/src/resolve-targets.test.ts
#	extensions/matrix/src/resolve-targets.ts
#	extensions/matrix/src/runtime.ts
#	extensions/matrix/src/secret-input.ts
#	extensions/matrix/src/tool-actions.ts
#	extensions/matrix/src/types.ts
#	extensions/mattermost/index.ts
#	extensions/mattermost/package.json
#	extensions/mattermost/src/channel.test.ts
#	extensions/mattermost/src/channel.ts
#	extensions/mattermost/src/config-schema.ts
#	extensions/mattermost/src/group-mentions.ts
#	extensions/mattermost/src/mattermost/accounts.test.ts
#	extensions/mattermost/src/mattermost/accounts.ts
#	extensions/mattermost/src/mattermost/client.ts
#	extensions/mattermost/src/mattermost/monitor-auth.ts
#	extensions/mattermost/src/mattermost/monitor-helpers.ts
#	extensions/mattermost/src/mattermost/monitor-websocket.test.ts
#	extensions/mattermost/src/mattermost/monitor-websocket.ts
#	extensions/mattermost/src/mattermost/monitor.authz.test.ts
#	extensions/mattermost/src/mattermost/monitor.ts
#	extensions/mattermost/src/mattermost/probe.ts
#	extensions/mattermost/src/mattermost/reactions.test-helpers.ts
#	extensions/mattermost/src/mattermost/reactions.ts
#	extensions/mattermost/src/mattermost/send.test.ts
#	extensions/mattermost/src/mattermost/send.ts
#	extensions/mattermost/src/mattermost/slash-commands.ts
#	extensions/mattermost/src/mattermost/slash-http.test.ts
#	extensions/mattermost/src/mattermost/slash-http.ts
#	extensions/mattermost/src/mattermost/slash-state.ts
#	extensions/mattermost/src/onboarding-helpers.ts
#	extensions/mattermost/src/onboarding.status.test.ts
#	extensions/mattermost/src/onboarding.ts
#	extensions/mattermost/src/runtime.ts
#	extensions/mattermost/src/secret-input.ts
#	extensions/mattermost/src/types.ts
#	extensions/memory-core/index.ts
#	extensions/memory-core/package.json
#	extensions/memory-lancedb/index.ts
#	extensions/memory-lancedb/package.json
#	extensions/minimax-portal-auth/index.ts
#	extensions/minimax-portal-auth/oauth.ts
#	extensions/minimax-portal-auth/package.json
#	extensions/msteams/CHANGELOG.md
#	extensions/msteams/index.ts
#	extensions/msteams/package.json
#	extensions/msteams/src/attachments.test.ts
#	extensions/msteams/src/attachments/download.ts
#	extensions/msteams/src/attachments/graph.ts
#	extensions/msteams/src/attachments/payload.ts
#	extensions/msteams/src/attachments/remote-media.ts
#	extensions/msteams/src/attachments/shared.ts
#	extensions/msteams/src/channel.directory.test.ts
#	extensions/msteams/src/channel.ts
#	extensions/msteams/src/directory-live.ts
#	extensions/msteams/src/file-lock.ts
#	extensions/msteams/src/graph.ts
#	extensions/msteams/src/media-helpers.ts
#	extensions/msteams/src/messenger.test.ts
#	extensions/msteams/src/messenger.ts
#	extensions/msteams/src/monitor-handler.file-consent.test.ts
#	extensions/msteams/src/monitor-handler.ts
#	extensions/msteams/src/monitor-handler/message-handler.authz.test.ts
#	extensions/msteams/src/monitor-handler/message-handler.ts
#	extensions/msteams/src/monitor.lifecycle.test.ts
#	extensions/msteams/src/monitor.test.ts
#	extensions/msteams/src/monitor.ts
#	extensions/msteams/src/onboarding.ts
#	extensions/msteams/src/outbound.ts
#	extensions/msteams/src/policy.test.ts
#	extensions/msteams/src/policy.ts
#	extensions/msteams/src/probe.test.ts
#	extensions/msteams/src/probe.ts
#	extensions/msteams/src/reply-dispatcher.ts
#	extensions/msteams/src/runtime.ts
#	extensions/msteams/src/secret-input.ts
#	extensions/msteams/src/send-context.ts
#	extensions/msteams/src/send.test.ts
#	extensions/msteams/src/send.ts
#	extensions/msteams/src/store-fs.ts
#	extensions/msteams/src/test-runtime.ts
#	extensions/msteams/src/token.ts
#	extensions/nextcloud-talk/index.ts
#	extensions/nextcloud-talk/package.json
#	extensions/nextcloud-talk/src/accounts.ts
#	extensions/nextcloud-talk/src/channel.startup.test.ts
#	extensions/nextcloud-talk/src/channel.ts
#	extensions/nextcloud-talk/src/config-schema.ts
#	extensions/nextcloud-talk/src/inbound.authz.test.ts
#	extensions/nextcloud-talk/src/inbound.ts
#	extensions/nextcloud-talk/src/monitor.replay.test.ts
#	extensions/nextcloud-talk/src/monitor.ts
#	extensions/nextcloud-talk/src/onboarding.ts
#	extensions/nextcloud-talk/src/policy.ts
#	extensions/nextcloud-talk/src/replay-guard.ts
#	extensions/nextcloud-talk/src/room-info.ts
#	extensions/nextcloud-talk/src/runtime.ts
#	extensions/nextcloud-talk/src/secret-input.ts
#	extensions/nextcloud-talk/src/types.ts
#	extensions/nostr/CHANGELOG.md
#	extensions/nostr/index.ts
#	extensions/nostr/package.json
#	extensions/nostr/src/channel.ts
#	extensions/nostr/src/config-schema.ts
#	extensions/nostr/src/nostr-profile-http.ts
#	extensions/nostr/src/nostr-state-store.test.ts
#	extensions/nostr/src/runtime.ts
#	extensions/nostr/src/types.ts
#	extensions/open-prose/index.ts
#	extensions/open-prose/package.json
#	extensions/phone-control/index.test.ts
#	extensions/phone-control/index.ts
#	extensions/qwen-portal-auth/index.ts
#	extensions/qwen-portal-auth/oauth.ts
#	extensions/signal/index.ts
#	extensions/signal/package.json
#	extensions/signal/src/channel.ts
#	extensions/signal/src/runtime.ts
#	extensions/slack/index.ts
#	extensions/slack/package.json
#	extensions/slack/src/channel.test.ts
#	extensions/slack/src/channel.ts
#	extensions/slack/src/runtime.ts
#	extensions/synology-chat/index.ts
#	extensions/synology-chat/package.json
#	extensions/synology-chat/src/channel.integration.test.ts
#	extensions/synology-chat/src/channel.test.ts
#	extensions/synology-chat/src/channel.ts
#	extensions/synology-chat/src/runtime.ts
#	extensions/synology-chat/src/test-http-utils.ts
#	extensions/synology-chat/src/webhook-handler.ts
#	extensions/talk-voice/index.ts
#	extensions/telegram/index.ts
#	extensions/telegram/package.json
#	extensions/telegram/src/channel.test.ts
#	extensions/telegram/src/channel.ts
#	extensions/telegram/src/runtime.ts
#	extensions/test-utils/plugin-runtime-mock.ts
#	extensions/test-utils/runtime-env.ts
#	extensions/test-utils/start-account-context.ts
#	extensions/thread-ownership/index.ts
#	extensions/tlon/index.ts
#	extensions/tlon/package.json
#	extensions/tlon/src/channel.ts
#	extensions/tlon/src/config-schema.ts
#	extensions/tlon/src/monitor/discovery.ts
#	extensions/tlon/src/monitor/history.ts
#	extensions/tlon/src/monitor/index.ts
#	extensions/tlon/src/monitor/media.ts
#	extensions/tlon/src/monitor/processed-messages.ts
#	extensions/tlon/src/onboarding.ts
#	extensions/tlon/src/runtime.ts
#	extensions/tlon/src/types.ts
#	extensions/tlon/src/urbit/auth.ssrf.test.ts
#	extensions/tlon/src/urbit/auth.ts
#	extensions/tlon/src/urbit/base-url.ts
#	extensions/tlon/src/urbit/channel-client.ts
#	extensions/tlon/src/urbit/channel-ops.ts
#	extensions/tlon/src/urbit/context.ts
#	extensions/tlon/src/urbit/fetch.ts
#	extensions/tlon/src/urbit/sse-client.ts
#	extensions/tlon/src/urbit/upload.test.ts
#	extensions/tlon/src/urbit/upload.ts
#	extensions/twitch/CHANGELOG.md
#	extensions/twitch/index.ts
#	extensions/twitch/package.json
#	extensions/twitch/src/config-schema.ts
#	extensions/twitch/src/config.ts
#	extensions/twitch/src/monitor.ts
#	extensions/twitch/src/onboarding.test.ts
#	extensions/twitch/src/onboarding.ts
#	extensions/twitch/src/plugin.test.ts
#	extensions/twitch/src/plugin.ts
#	extensions/twitch/src/probe.ts
#	extensions/twitch/src/runtime.ts
#	extensions/twitch/src/send.ts
#	extensions/twitch/src/status.ts
#	extensions/twitch/src/test-fixtures.ts
#	extensions/twitch/src/token.test.ts
#	extensions/twitch/src/twitch-client.ts
#	extensions/voice-call/CHANGELOG.md
#	extensions/voice-call/index.ts
#	extensions/voice-call/package.json
#	extensions/voice-call/src/cli.ts
#	extensions/voice-call/src/config.ts
#	extensions/voice-call/src/manager.test-harness.ts
#	extensions/voice-call/src/manager.test.ts
#	extensions/voice-call/src/manager.ts
#	extensions/voice-call/src/providers/shared/guarded-json-api.ts
#	extensions/voice-call/src/providers/twilio.ts
#	extensions/voice-call/src/webhook.ts
#	extensions/whatsapp/index.ts
#	extensions/whatsapp/package.json
#	extensions/whatsapp/src/channel.ts
#	extensions/whatsapp/src/resolve-target.test.ts
#	extensions/whatsapp/src/runtime.ts
#	extensions/zalo/CHANGELOG.md
#	extensions/zalo/index.ts
#	extensions/zalo/package.json
#	extensions/zalo/src/accounts.ts
#	extensions/zalo/src/actions.ts
#	extensions/zalo/src/channel.directory.test.ts
#	extensions/zalo/src/channel.sendpayload.test.ts
#	extensions/zalo/src/channel.ts
#	extensions/zalo/src/config-schema.ts
#	extensions/zalo/src/group-access.ts
#	extensions/zalo/src/monitor.ts
#	extensions/zalo/src/monitor.webhook.test.ts
#	extensions/zalo/src/monitor.webhook.ts
#	extensions/zalo/src/onboarding.status.test.ts
#	extensions/zalo/src/onboarding.ts
#	extensions/zalo/src/probe.ts
#	extensions/zalo/src/runtime.ts
#	extensions/zalo/src/secret-input.ts
#	extensions/zalo/src/send.ts
#	extensions/zalo/src/status-issues.ts
#	extensions/zalo/src/token.test.ts
#	extensions/zalo/src/token.ts
#	extensions/zalo/src/types.ts
#	extensions/zalouser/CHANGELOG.md
#	extensions/zalouser/README.md
#	extensions/zalouser/index.ts
#	extensions/zalouser/package.json
#	extensions/zalouser/src/accounts.test.ts
#	extensions/zalouser/src/accounts.ts
#	extensions/zalouser/src/channel.sendpayload.test.ts
#	extensions/zalouser/src/channel.ts
#	extensions/zalouser/src/config-schema.ts
#	extensions/zalouser/src/monitor.account-scope.test.ts
#	extensions/zalouser/src/monitor.group-gating.test.ts
#	extensions/zalouser/src/monitor.ts
#	extensions/zalouser/src/onboarding.ts
#	extensions/zalouser/src/probe.ts
#	extensions/zalouser/src/runtime.ts
#	extensions/zalouser/src/send.test.ts
#	extensions/zalouser/src/status-issues.ts
#	extensions/zalouser/src/tool.test.ts
#	extensions/zalouser/src/zalo-js.ts
#	extensions/zalouser/src/zca.ts
#	package.json
#	pnpm-lock.yaml
#	scripts/bench-cli-startup.ts
#	scripts/check-no-random-messaging-tmp.mjs
#	scripts/check-plugin-sdk-exports.mjs
#	scripts/ci-changed-scope.mjs
#	scripts/dev/discord-acp-plain-language-smoke.ts
#	scripts/docker/install-sh-nonroot/Dockerfile
#	scripts/docker/install-sh-nonroot/run.sh
#	scripts/docker/install-sh-smoke/Dockerfile
#	scripts/docker/install-sh-smoke/run.sh
#	scripts/e2e/Dockerfile
#	scripts/e2e/onboard-docker.sh
#	scripts/install.ps1
#	scripts/install.sh
#	scripts/podman/openclaw.container.in
#	scripts/pr
#	scripts/release-check.ts
#	scripts/sandbox-browser-entrypoint.sh
#	scripts/test-hotspots.mjs
#	scripts/test-parallel.mjs
#	scripts/test-perf-budget.mjs
#	scripts/update-contributors.ts
#	scripts/write-cli-startup-metadata.ts
#	setup-podman.sh
#	skills/coding-agent/SKILL.md
#	skills/openai-image-gen/SKILL.md
#	src/acp/client.test.ts
#	src/acp/client.ts
#	src/acp/policy.test.ts
#	src/agents/acp-spawn.test.ts
#	src/agents/acp-spawn.ts
#	src/agents/apply-patch.ts
#	src/agents/auth-profiles/order.test.ts
#	src/agents/auth-profiles/order.ts
#	src/agents/bash-tools.exec-runtime.ts
#	src/agents/bash-tools.exec.path.test.ts
#	src/agents/bash-tools.exec.pty.test.ts
#	src/agents/bash-tools.shared.test.ts
#	src/agents/bash-tools.shared.ts
#	src/agents/bootstrap-files.test.ts
#	src/agents/bot-tools.sessions.test.ts
#	src/agents/bot-tools.subagents.sessions-spawn.test-harness.ts
#	src/agents/bot-tools.ts
#	src/agents/cli-backends.ts
#	src/agents/cli-runner.ts
#	src/agents/cli-runner/helpers.ts
#	src/agents/context.lookup.test.ts
#	src/agents/context.ts
#	src/agents/failover-error.test.ts
#	src/agents/failover-error.ts
#	src/agents/internal-events.ts
#	src/agents/memory-search.test.ts
#	src/agents/model-selection.test.ts
#	src/agents/models-config.applies-config-env-vars.test.ts
#	src/agents/models-config.fills-missing-provider-apikey-from-env-var.test.ts
#	src/agents/models-config.preserves-explicit-reasoning-override.test.ts
#	src/agents/models-config.providers.normalize-keys.test.ts
#	src/agents/models-config.providers.ollama-autodiscovery.test.ts
#	src/agents/models-config.providers.ollama.test.ts
#	src/agents/models-config.ts
#	src/agents/models-config.uses-first-github-copilot-profile-env-tokens.test.ts
#	src/agents/openai-ws-stream.ts
#	src/agents/openclaw-tools.camera.test.ts
#	src/agents/openclaw-tools.subagents.sessions-spawn-default-timeout-absent.test.ts
#	src/agents/openclaw-tools.subagents.sessions-spawn-default-timeout.test.ts
#	src/agents/path-policy.test.ts
#	src/agents/pi-embedded-helpers.isbillingerrormessage.test.ts
#	src/agents/pi-embedded-helpers/errors.ts
#	src/agents/pi-embedded-helpers/failover-matches.ts
#	src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.e2e.test.ts
#	src/agents/pi-embedded-runner/extra-params.ts
#	src/agents/pi-embedded-runner/model.test.ts
#	src/agents/pi-embedded-runner/model.ts
#	src/agents/pi-embedded-runner/run.ts
#	src/agents/pi-embedded-runner/run/attempt.test.ts
#	src/agents/pi-embedded-runner/run/attempt.ts
#	src/agents/pi-embedded-runner/run/images.ts
#	src/agents/pi-embedded-runner/run/params.ts
#	src/agents/pi-embedded-runner/skills-runtime.integration.test.ts
#	src/agents/pi-embedded-runner/skills-runtime.test.ts
#	src/agents/pi-embedded-runner/skills-runtime.ts
#	src/agents/pi-extensions/compaction-safeguard.test.ts
#	src/agents/pi-extensions/compaction-safeguard.ts
#	src/agents/pi-model-discovery.auth.test.ts
#	src/agents/pi-tool-definition-adapter.ts
#	src/agents/pi-tools.create-bot-coding-tools.adds-claude-style-aliases-schemas-without-dropping.e2e.test.ts
#	src/agents/pi-tools.host-edit.ts
#	src/agents/pi-tools.read.host-edit-access.test.ts
#	src/agents/pi-tools.read.host-edit-recovery.test.ts
#	src/agents/pi-tools.read.ts
#	src/agents/pi-tools.sandbox-mounted-paths.workspace-only.test.ts
#	src/agents/pi-tools.workspace-only-false.test.ts
#	src/agents/pi-tools.workspace-paths.test.ts
#	src/agents/sandbox-media-paths.test.ts
#	src/agents/sandbox/browser.create.test.ts
#	src/agents/sandbox/browser.ts
#	src/agents/sandbox/constants.ts
#	src/agents/sandbox/docker.config-hash-recreate.test.ts
#	src/agents/sandbox/docker.windows.test.ts
#	src/agents/sandbox/fs-bridge.test.ts
#	src/agents/sandbox/fs-bridge.ts
#	src/agents/sandbox/novnc-auth.ts
#	src/agents/sandbox/validate-sandbox-security.test.ts
#	src/agents/sandbox/workspace-mounts.ts
#	src/agents/sandbox/workspace.test.ts
#	src/agents/schema/clean-for-xai.test.ts
#	src/agents/schema/clean-for-xai.ts
#	src/agents/session-transcript-repair.attachments.test.ts
#	src/agents/session-transcript-repair.test.ts
#	src/agents/session-transcript-repair.ts
#	src/agents/session-write-lock.test.ts
#	src/agents/skills-install-download.ts
#	src/agents/skills-install.test.ts
#	src/agents/skills.build-workspace-skills-prompt.syncs-merged-skills-into-target-workspace.test.ts
#	src/agents/skills.buildworkspaceskillsnapshot.test.ts
#	src/agents/skills.loadworkspaceskillentries.test.ts
#	src/agents/skills.test.ts
#	src/agents/skills/env-overrides.ts
#	src/agents/skills/frontmatter.test.ts
#	src/agents/skills/frontmatter.ts
#	src/agents/skills/plugin-skills.test.ts
#	src/agents/subagent-announce.format.e2e.test.ts
#	src/agents/subagent-announce.ts
#	src/agents/subagent-registry-cleanup.test.ts
#	src/agents/subagent-registry.ts
#	src/agents/subagent-spawn.ts
#	src/agents/system-prompt.ts
#	src/agents/test-helpers/session-config.ts
#	src/agents/tool-display.json
#	src/agents/tool-display.ts
#	src/agents/tools/browser-tool.actions.ts
#	src/agents/tools/discord-actions-messaging.ts
#	src/agents/tools/image-tool.test.ts
#	src/agents/tools/image-tool.ts
#	src/agents/tools/media-tool-shared.ts
#	src/agents/tools/message-tool.test.ts
#	src/agents/tools/model-config.helpers.ts
#	src/agents/tools/nodes-tool.ts
#	src/agents/tools/nodes-utils.ts
#	src/agents/tools/pdf-tool.helpers.ts
#	src/agents/tools/pdf-tool.test.ts
#	src/agents/tools/pdf-tool.ts
#	src/agents/tools/sessions-resolution.test.ts
#	src/agents/tools/sessions-spawn-tool.test.ts
#	src/agents/tools/sessions-spawn-tool.ts
#	src/agents/tools/sessions.test.ts
#	src/agents/tools/telegram-actions.test.ts
#	src/agents/tools/tool-runtime.helpers.ts
#	src/agents/tools/web-search.ts
#	src/auto-reply/reply.directive.directive-behavior.e2e-mocks.ts
#	src/auto-reply/reply.directive.directive-behavior.prefers-alias-matches-fuzzy-selection-is-ambiguous.test.ts
#	src/auto-reply/reply.heartbeat-typing.test.ts
#	src/auto-reply/reply.raw-body.test.ts
#	src/auto-reply/reply.triggers.trigger-handling.stages-inbound-media-into-sandbox-workspace.test.ts
#	src/auto-reply/reply/abort.test.ts
#	src/auto-reply/reply/abort.ts
#	src/auto-reply/reply/acp-projector.ts
#	src/auto-reply/reply/acp-stream-settings.ts
#	src/auto-reply/reply/agent-runner-execution.ts
#	src/auto-reply/reply/agent-runner-memory.ts
#	src/auto-reply/reply/agent-runner-reminder-guard.ts
#	src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts
#	src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts
#	src/auto-reply/reply/commands-acp.test.ts
#	src/auto-reply/reply/commands-acp/context.ts
#	src/auto-reply/reply/commands-acp/install-hints.test.ts
#	src/auto-reply/reply/commands-acp/install-hints.ts
#	src/auto-reply/reply/commands-acp/lifecycle.ts
#	src/auto-reply/reply/commands-acp/shared.ts
#	src/auto-reply/reply/commands-context-report.ts
#	src/auto-reply/reply/commands-core.ts
#	src/auto-reply/reply/commands-models.ts
#	src/auto-reply/reply/commands-session-lifecycle.test.ts
#	src/auto-reply/reply/commands-session.ts
#	src/auto-reply/reply/commands-subagents/shared.ts
#	src/auto-reply/reply/commands-types.ts
#	src/auto-reply/reply/commands.test.ts
#	src/auto-reply/reply/directive-handling.auth.ts
#	src/auto-reply/reply/dispatch-acp-delivery.test.ts
#	src/auto-reply/reply/dispatch-acp-delivery.ts
#	src/auto-reply/reply/dispatch-acp.test.ts
#	src/auto-reply/reply/dispatch-acp.ts
#	src/auto-reply/reply/get-reply-run.media-only.test.ts
#	src/auto-reply/reply/get-reply-run.ts
#	src/auto-reply/reply/get-reply.message-hooks.test.ts
#	src/auto-reply/reply/inbound-context.ts
#	src/auto-reply/reply/memory-flush.ts
#	src/auto-reply/reply/message-preprocess-hooks.test.ts
#	src/auto-reply/reply/message-preprocess-hooks.ts
#	src/auto-reply/reply/model-selection.test.ts
#	src/auto-reply/reply/normalize-reply.ts
#	src/auto-reply/reply/post-compaction-context.test.ts
#	src/auto-reply/reply/post-compaction-context.ts
#	src/auto-reply/reply/queue/enqueue.ts
#	src/auto-reply/reply/reply-flow.test.ts
#	src/auto-reply/reply/reply-payloads.ts
#	src/auto-reply/reply/session-delivery.ts
#	src/auto-reply/reply/session-fork.ts
#	src/auto-reply/reply/session-hooks-context.test.ts
#	src/auto-reply/reply/session-hooks.ts
#	src/auto-reply/reply/session-reset-prompt.test.ts
#	src/auto-reply/reply/session-reset-prompt.ts
#	src/auto-reply/reply/session-updates.ts
#	src/auto-reply/reply/session.test.ts
#	src/auto-reply/reply/session.ts
#	src/auto-reply/reply/stage-sandbox-media.ts
#	src/auto-reply/reply/test-fixtures/acp-runtime.ts
#	src/auto-reply/skill-commands.test.ts
#	src/auto-reply/skill-commands.ts
#	src/browser/bridge-server.ts
#	src/browser/cdp-proxy-bypass.ts
#	src/browser/chrome.test.ts
#	src/browser/chrome.ts
#	src/browser/config.test.ts
#	src/browser/config.ts
#	src/browser/constants.ts
#	src/browser/extension-relay-auth.test.ts
#	src/browser/extension-relay.test.ts
#	src/browser/extension-relay.ts
#	src/browser/output-atomic.ts
#	src/browser/pw-session.ts
#	src/browser/pw-tools-core.downloads.ts
#	src/browser/pw-tools-core.waits-next-download-saves-it.test.ts
#	src/browser/server-context.availability.ts
#	src/browser/server-context.ensure-browser-available.waits-for-cdp-ready.test.ts
#	src/browser/server-context.remote-profile-tab-ops.suite.ts
#	src/browser/server-context.remote-tab-ops.harness.ts
#	src/browser/server-context.reset.test.ts
#	src/browser/server-context.reset.ts
#	src/browser/server-context.selection.ts
#	src/browser/server-context.tab-ops.ts
#	src/browser/server-context.tab-selection-state.suite.ts
#	src/browser/server-context.ts
#	src/canvas-host/a2ui/index.html
#	src/channels/account-summary.ts
#	src/channels/dock.ts
#	src/channels/inbound-debounce-policy.ts
#	src/channels/plugins/account-helpers.test.ts
#	src/channels/plugins/account-helpers.ts
#	src/channels/plugins/actions/actions.test.ts
#	src/channels/plugins/actions/discord/handle-action.ts
#	src/channels/plugins/actions/signal.ts
#	src/channels/plugins/actions/telegram.ts
#	src/channels/plugins/index.ts
#	src/channels/plugins/onboarding/discord.ts
#	src/channels/plugins/onboarding/helpers.test.ts
#	src/channels/plugins/onboarding/helpers.ts
#	src/channels/plugins/onboarding/slack.ts
#	src/channels/plugins/onboarding/telegram.ts
#	src/channels/plugins/outbound/discord.ts
#	src/channels/plugins/outbound/slack.ts
#	src/channels/plugins/outbound/whatsapp.ts
#	src/channels/plugins/types.adapters.ts
#	src/channels/session-envelope.ts
#	src/channels/session-meta.ts
#	src/channels/session.test.ts
#	src/channels/thread-bindings-policy.ts
#	src/cli/argv.test.ts
#	src/cli/banner.test.ts
#	src/cli/browser-cli-actions-input/register.element.ts
#	src/cli/browser-cli-actions-input/register.form-wait-eval.ts
#	src/cli/browser-cli-manage.timeout-option.test.ts
#	src/cli/channel-options.test.ts
#	src/cli/channel-options.ts
#	src/cli/command-secret-gateway.test.ts
#	src/cli/command-secret-gateway.ts
#	src/cli/config-cli.test.ts
#	src/cli/config-cli.ts
#	src/cli/daemon-cli.coverage.test.ts
#	src/cli/daemon-cli/install.ts
#	src/cli/daemon-cli/restart-health.test.ts
#	src/cli/daemon-cli/status.gather.test.ts
#	src/cli/daemon-cli/status.gather.ts
#	src/cli/daemon-cli/status.print.ts
#	src/cli/gateway-cli/run.option-collisions.test.ts
#	src/cli/nodes-camera.test.ts
#	src/cli/nodes-cli/register.camera.ts
#	src/cli/plugin-install-plan.test.ts
#	src/cli/plugins-cli.ts
#	src/cli/program/config-guard.ts
#	src/cli/program/preaction.test.ts
#	src/cli/program/routes.test.ts
#	src/cli/qr-cli.test.ts
#	src/cli/qr-cli.ts
#	src/cli/route.test.ts
#	src/cli/run-main.profile-env.test.ts
#	src/cli/run-main.test.ts
#	src/cli/secrets-cli.test.ts
#	src/cli/tagline.test.ts
#	src/cli/tagline.ts
#	src/cli/update-cli.test.ts
#	src/cli/update-cli/restart-helper.test.ts
#	src/cli/update-cli/restart-helper.ts
#	src/cli/update-cli/shared.ts
#	src/commands/agent.acp.test.ts
#	src/commands/agent.test.ts
#	src/commands/agent.ts
#	src/commands/agents.bindings.ts
#	src/commands/agents.commands.bind.ts
#	src/commands/agents.commands.list.ts
#	src/commands/agents.config.ts
#	src/commands/auth-choice.apply-helpers.ts
#	src/commands/auth-choice.apply.anthropic.test.ts
#	src/commands/channels.adds-non-default-telegram-account.test.ts
#	src/commands/channels/resolve.ts
#	src/commands/channels/shared.ts
#	src/commands/config-validation.ts
#	src/commands/configure.gateway-auth.ts
#	src/commands/configure.gateway.test.ts
#	src/commands/configure.gateway.ts
#	src/commands/configure.wizard.ts
#	src/commands/dashboard.ts
#	src/commands/doctor-config-flow.missing-explicit-default-account.test.ts
#	src/commands/doctor-config-flow.ts
#	src/commands/doctor-gateway-daemon-flow.ts
#	src/commands/doctor-gateway-services.ts
#	src/commands/doctor-memory-search.test.ts
#	src/commands/doctor-memory-search.ts
#	src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts
#	src/commands/doctor-platform-notes.startup-optimization.test.ts
#	src/commands/doctor-platform-notes.ts
#	src/commands/doctor-sandbox.warns-sandbox-enabled-without-docker.test.ts
#	src/commands/doctor-security.ts
#	src/commands/doctor-state-integrity.cloud-storage.test.ts
#	src/commands/doctor-state-integrity.linux-storage.test.ts
#	src/commands/doctor-state-integrity.test.ts
#	src/commands/doctor-state-integrity.ts
#	src/commands/doctor-state-migrations.test.ts
#	src/commands/gateway-status/helpers.ts
#	src/commands/models/aliases.ts
#	src/commands/models/auth-order.ts
#	src/commands/models/fallbacks-shared.ts
#	src/commands/models/list.list-command.ts
#	src/commands/models/list.probe.ts
#	src/commands/models/load-config.ts
#	src/commands/models/shared.ts
#	src/commands/oauth-tls-preflight.doctor.test.ts
#	src/commands/oauth-tls-preflight.ts
#	src/commands/onboard-auth.credentials.test.ts
#	src/commands/onboard-channels.e2e.test.ts
#	src/commands/onboard-config.test.ts
#	src/commands/onboard-custom.test.ts
#	src/commands/onboard-custom.ts
#	src/commands/onboard-non-interactive.gateway.test.ts
#	src/commands/onboard-non-interactive/local/daemon-install.ts
#	src/commands/onboard-non-interactive/local/gateway-config.ts
#	src/commands/onboard-remote.test.ts
#	src/commands/onboard-remote.ts
#	src/commands/session-store-targets.ts
#	src/commands/status-all.ts
#	src/commands/status-all/channels.ts
#	src/commands/status.scan.ts
#	src/commands/status.summary.ts
#	src/commands/status.test.ts
#	src/config/backup-rotation.ts
#	src/config/config-misc.test.ts
#	src/config/config.agent-concurrency-defaults.test.ts
#	src/config/config.backup-rotation.test-helpers.ts
#	src/config/config.backup-rotation.test.ts
#	src/config/config.legacy-config-detection.rejects-routing-allowfrom.test.ts
#	src/config/config.plugin-validation.test.ts
#	src/config/config.telegram-audio-preflight.test.ts
#	src/config/defaults.ts
#	src/config/gateway-control-ui-origins.ts
#	src/config/io.compat.test.ts
#	src/config/io.write-config.test.ts
#	src/config/issue-format.ts
#	src/config/legacy-migrate.test.ts
#	src/config/legacy.migrations.part-3.ts
#	src/config/legacy.rules.ts
#	src/config/paths.ts
#	src/config/redact-snapshot.raw.ts
#	src/config/redact-snapshot.test.ts
#	src/config/redact-snapshot.ts
#	src/config/schema.help.ts
#	src/config/sessions.test.ts
#	src/config/sessions/sessions.test.ts
#	src/config/sessions/store-maintenance.ts
#	src/config/sessions/store.ts
#	src/config/talk.ts
#	src/config/types.acp.ts
#	src/config/types.agents.ts
#	src/config/types.browser.ts
#	src/config/types.secrets.ts
#	src/config/types.telegram.ts
#	src/config/types.ts
#	src/config/types.tts.ts
#	src/config/validation.ts
#	src/config/zod-schema.agent-runtime.ts
#	src/config/zod-schema.core.ts
#	src/config/zod-schema.ts
#	src/cron/delivery.test.ts
#	src/cron/delivery.ts
#	src/cron/isolated-agent.delivers-response-has-heartbeat-ok-but-includes.test.ts
#	src/cron/isolated-agent.delivery.test-helpers.ts
#	src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts
#	src/cron/isolated-agent.subagent-model.test.ts
#	src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts
#	src/cron/isolated-agent/delivery-dispatch.ts
#	src/cron/isolated-agent/run.test-harness.ts
#	src/cron/isolated-agent/run.ts
#	src/cron/run-log.test.ts
#	src/cron/schedule.test.ts
#	src/cron/schedule.ts
#	src/cron/service.armtimer-tight-loop.test.ts
#	src/cron/service.failure-alert.test.ts
#	src/cron/service.heartbeat-ok-summary-suppressed.test.ts
#	src/cron/service.issue-19676-at-reschedule.test.ts
#	src/cron/service.issue-regressions.test-helpers.ts
#	src/cron/service.issue-regressions.test.ts
#	src/cron/service.jobs.top-of-hour-stagger.test.ts
#	src/cron/service.list-page-sort-guards.test.ts
#	src/cron/service.main-job-passes-heartbeat-target-last.test.ts
#	src/cron/service.session-reaper-in-finally.test.ts
#	src/cron/service/jobs.ts
#	src/cron/service/timer.ts
#	src/cron/store.test.ts
#	src/cron/store.ts
#	src/daemon/service-env.test.ts
#	src/daemon/service-env.ts
#	src/daemon/systemd.ts
#	src/discord/audit.test.ts
#	src/discord/components.ts
#	src/discord/mentions.ts
#	src/discord/monitor.test.ts
#	src/discord/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts
#	src/discord/monitor/agent-components.ts
#	src/discord/monitor/dm-command-decision.ts
#	src/discord/monitor/exec-approvals.ts
#	src/discord/monitor/listeners.test.ts
#	src/discord/monitor/listeners.ts
#	src/discord/monitor/message-handler.preflight.test.ts
#	src/discord/monitor/message-handler.preflight.ts
#	src/discord/monitor/message-handler.process.ts
#	src/discord/monitor/message-handler.ts
#	src/discord/monitor/native-command.options.test.ts
#	src/discord/monitor/native-command.ts
#	src/discord/monitor/preflight-audio.ts
#	src/discord/monitor/provider.lifecycle.ts
#	src/discord/monitor/provider.test.ts
#	src/discord/monitor/provider.ts
#	src/discord/monitor/reply-delivery.ts
#	src/discord/monitor/status.ts
#	src/discord/monitor/thread-bindings.config.ts
#	src/discord/monitor/thread-bindings.lifecycle.test.ts
#	src/discord/monitor/thread-bindings.lifecycle.ts
#	src/discord/send.components.ts
#	src/discord/send.outbound.ts
#	src/discord/send.shared.ts
#	src/discord/token.test.ts
#	src/discord/token.ts
#	src/discord/voice-message.test.ts
#	src/discord/voice-message.ts
#	src/discord/voice/command.ts
#	src/discord/voice/manager.e2e.test.ts
#	src/discord/voice/manager.ts
#	src/docker-setup.e2e.test.ts
#	src/dockerfile.test.ts
#	src/entry.ts
#	src/gateway/android-node.capabilities.live.test.ts
#	src/gateway/call.test.ts
#	src/gateway/call.ts
#	src/gateway/channel-health-monitor.test.ts
#	src/gateway/channel-health-monitor.ts
#	src/gateway/channel-health-policy.test.ts
#	src/gateway/channel-health-policy.ts
#	src/gateway/client.test.ts
#	src/gateway/client.ts
#	src/gateway/config-reload-plan.ts
#	src/gateway/config-reload.test.ts
#	src/gateway/config-reload.ts
#	src/gateway/control-ui-contract.ts
#	src/gateway/control-ui-routing.test.ts
#	src/gateway/control-ui.http.test.ts
#	src/gateway/credentials.test.ts
#	src/gateway/credentials.ts
#	src/gateway/gateway-config-prompts.shared.ts
#	src/gateway/gateway-models.profiles.live.test.ts
#	src/gateway/gateway.test.ts
#	src/gateway/http-utils.request-context.test.ts
#	src/gateway/http-utils.ts
#	src/gateway/node-command-policy.ts
#	src/gateway/openai-http.message-channel.test.ts
#	src/gateway/openai-http.test.ts
#	src/gateway/openresponses-http.test.ts
#	src/gateway/openresponses-http.ts
#	src/gateway/origin-check.ts
#	src/gateway/probe-auth.ts
#	src/gateway/server-channels.ts
#	src/gateway/server-cron.ts
#	src/gateway/server-http.ts
#	src/gateway/server-methods/agent.ts
#	src/gateway/server-methods/agents-mutate.test.ts
#	src/gateway/server-methods/chat.directive-tags.test.ts
#	src/gateway/server-methods/chat.ts
#	src/gateway/server-methods/nodes.canvas-capability-refresh.test.ts
#	src/gateway/server-methods/secrets.ts
#	src/gateway/server-methods/send.test.ts
#	src/gateway/server-methods/usage.ts
#	src/gateway/server-reload-handlers.ts
#	src/gateway/server-runtime-state.ts
#	src/gateway/server.agent.gateway-server-agent-b.test.ts
#	src/gateway/server.auth.control-ui.suite.ts
#	src/gateway/server.auth.default-token.suite.ts
#	src/gateway/server.auth.modes.suite.ts
#	src/gateway/server.auth.shared.ts
#	src/gateway/server.auth.test.ts
#	src/gateway/server.chat.gateway-server-chat.test.ts
#	src/gateway/server.cron.test.ts
#	src/gateway/server.hooks.test.ts
#	src/gateway/server.impl.ts
#	src/gateway/server.plugin-http-auth.test.ts
#	src/gateway/server.reload.test.ts
#	src/gateway/server.roles-allowlist-update.test.ts
#	src/gateway/server.sessions.gateway-server-sessions-a.test.ts
#	src/gateway/server/http-auth.ts
#	src/gateway/server/ws-connection.ts
#	src/gateway/server/ws-connection/message-handler.ts
#	src/gateway/session-utils.test.ts
#	src/gateway/session-utils.ts
#	src/gateway/sessions-patch.test.ts
#	src/gateway/startup-auth.test.ts
#	src/gateway/startup-auth.ts
#	src/gateway/startup-control-ui-origins.ts
#	src/gateway/test-helpers.server.ts
#	src/hooks/bundled/session-memory/handler.test.ts
#	src/hooks/install.test.ts
#	src/hooks/install.ts
#	src/hooks/internal-hooks.test.ts
#	src/hooks/internal-hooks.ts
#	src/hooks/loader.test.ts
#	src/hooks/message-hook-mappers.test.ts
#	src/hooks/message-hook-mappers.ts
#	src/hooks/workspace.test.ts
#	src/i18n/registry.test.ts
#	src/imessage/monitor/inbound-processing.test.ts
#	src/infra/archive.ts
#	src/infra/boundary-file-read.ts
#	src/infra/device-auth-store.ts
#	src/infra/exec-approval-forwarder.test.ts
#	src/infra/exec-approval-forwarder.ts
#	src/infra/fs-safe.test.ts
#	src/infra/fs-safe.ts
#	src/infra/heartbeat-runner.scheduler.test.ts
#	src/infra/install-safe-path.test.ts
#	src/infra/install-source-utils.test.ts
#	src/infra/outbound/deliver.test.ts
#	src/infra/outbound/deliver.ts
#	src/infra/outbound/message-action-params.test.ts
#	src/infra/outbound/message-action-params.ts
#	src/infra/outbound/message-action-runner.ts
#	src/infra/outbound/outbound.test.ts
#	src/infra/outbound/sanitize-text.ts
#	src/infra/outbound/target-normalization.ts
#	src/infra/outbound/targets.channel-resolution.test.ts
#	src/infra/outbound/targets.test.ts
#	src/infra/process-respawn.test.ts
#	src/infra/process-respawn.ts
#	src/infra/restart-stale-pids.ts
#	src/infra/safe-open-sync.test.ts
#	src/infra/system-events.test.ts
#	src/infra/system-presence.version.test.ts
#	src/infra/tmp-openclaw-dir.test.ts
#	src/infra/update-runner.test.ts
#	src/infra/update-runner.ts
#	src/infra/update-startup.test.ts
#	src/infra/update-startup.ts
#	src/line/accounts.test.ts
#	src/line/accounts.ts
#	src/line/bot-handlers.ts
#	src/line/bot-message-context.test.ts
#	src/line/bot-message-context.ts
#	src/line/bot.ts
#	src/logging/console-settings.test.ts
#	src/logging/console.ts
#	src/logging/diagnostic.ts
#	src/logging/logger-settings.test.ts
#	src/logging/logger-timestamp.test.ts
#	src/logging/logger.settings.test.ts
#	src/logging/logger.ts
#	src/logging/subsystem.ts
#	src/media-understanding/apply.echo-transcript.test.ts
#	src/media-understanding/apply.test.ts
#	src/media-understanding/attachments.cache.ts
#	src/media-understanding/attachments.guards.test.ts
#	src/media-understanding/attachments.normalize.ts
#	src/media-understanding/attachments.select.ts
#	src/media-understanding/audio-transcription-runner.ts
#	src/media-understanding/echo-transcript.ts
#	src/media-understanding/providers/image.ts
#	src/media-understanding/resolve.test.ts
#	src/media-understanding/runner.entries.guards.test.ts
#	src/media-understanding/runner.entries.ts
#	src/media-understanding/runner.proxy.test.ts
#	src/media-understanding/runner.skip-tiny-audio.test.ts
#	src/media-understanding/transcribe-audio.test.ts
#	src/media-understanding/transcribe-audio.ts
#	src/media/fetch.ts
#	src/media/server.outside-workspace.test.ts
#	src/media/store.outside-workspace.test.ts
#	src/memory/batch-openai.ts
#	src/memory/batch-voyage.ts
#	src/memory/embeddings-ollama.test.ts
#	src/memory/embeddings-ollama.ts
#	src/memory/embeddings-remote-client.ts
#	src/memory/manager.get-concurrency.test.ts
#	src/memory/manager.mistral-provider.test.ts
#	src/memory/manager.readonly-recovery.test.ts
#	src/memory/qmd-manager.test.ts
#	src/memory/qmd-manager.ts
#	src/node-host/invoke-system-run-plan.test.ts
#	src/node-host/invoke-system-run-plan.ts
#	src/node-host/invoke-system-run.test.ts
#	src/node-host/invoke-system-run.ts
#	src/node-host/invoke.ts
#	src/node-host/runner.credentials.test.ts
#	src/node-host/runner.ts
#	src/pairing/setup-code.test.ts
#	src/pairing/setup-code.ts
#	src/plugin-sdk/channel-config-helpers.ts
#	src/plugin-sdk/command-auth.ts
#	src/plugin-sdk/index.ts
#	src/plugin-sdk/webhook-request-guards.test.ts
#	src/plugin-sdk/webhook-request-guards.ts
#	src/plugin-sdk/webhook-targets.test.ts
#	src/plugins/bundled-sources.test.ts
#	src/plugins/commands.test.ts
#	src/plugins/discovery.test.ts
#	src/plugins/discovery.ts
#	src/plugins/hooks.before-agent-start.test.ts
#	src/plugins/hooks.model-override-wiring.test.ts
#	src/plugins/hooks.test-helpers.ts
#	src/plugins/install.test.ts
#	src/plugins/install.ts
#	src/plugins/loader.test.ts
#	src/plugins/loader.ts
#	src/plugins/manifest-registry.test.ts
#	src/plugins/registry.ts
#	src/plugins/runtime/index.ts
#	src/plugins/runtime/runtime-channel.ts
#	src/plugins/runtime/runtime-config.ts
#	src/plugins/runtime/runtime-events.ts
#	src/plugins/runtime/runtime-logging.ts
#	src/plugins/runtime/runtime-media.ts
#	src/plugins/runtime/runtime-system.ts
#	src/plugins/runtime/runtime-tools.ts
#	src/plugins/runtime/runtime-whatsapp.ts
#	src/plugins/runtime/types.contract.test.ts
#	src/plugins/schema-validator.ts
#	src/plugins/types.ts
#	src/plugins/update.test.ts
#	src/process/exec.test.ts
#	src/routing/bindings.ts
#	src/routing/resolve-route.test.ts
#	src/routing/resolve-route.ts
#	src/scripts/ci-changed-scope.test.ts
#	src/secrets/apply.test.ts
#	src/secrets/apply.ts
#	src/secrets/audit.test.ts
#	src/secrets/audit.ts
#	src/secrets/auth-store-paths.ts
#	src/secrets/command-config.test.ts
#	src/secrets/command-config.ts
#	src/secrets/configure-plan.test.ts
#	src/secrets/configure-plan.ts
#	src/secrets/configure.ts
#	src/secrets/credential-matrix.ts
#	src/secrets/path-utils.test.ts
#	src/secrets/path-utils.ts
#	src/secrets/resolve.test.ts
#	src/secrets/runtime-config-collectors-channels.ts
#	src/secrets/runtime-config-collectors-core.ts
#	src/secrets/runtime-config-collectors.ts
#	src/secrets/runtime-gateway-auth-surfaces.test.ts
#	src/secrets/runtime-gateway-auth-surfaces.ts
#	src/secrets/runtime-shared.ts
#	src/secrets/runtime.coverage.test.ts
#	src/secrets/runtime.test.ts
#	src/secrets/runtime.ts
#	src/secrets/storage-scan.ts
#	src/secrets/target-registry-data.ts
#	src/secrets/target-registry-pattern.ts
#	src/secrets/target-registry-query.ts
#	src/secrets/target-registry-types.ts
#	src/secrets/target-registry.test.ts
#	src/security/audit-extra.async.ts
#	src/security/audit.test.ts
#	src/security/audit.ts
#	src/security/fix.test.ts
#	src/slack/actions.ts
#	src/slack/message-actions.test.ts
#	src/slack/monitor/auth.test.ts
#	src/slack/monitor/auth.ts
#	src/slack/monitor/context.test.ts
#	src/slack/monitor/context.ts
#	src/slack/monitor/events/interactions.modal.ts
#	src/slack/monitor/events/interactions.test.ts
#	src/slack/monitor/events/interactions.ts
#	src/slack/monitor/events/messages.ts
#	src/slack/monitor/events/reactions.test.ts
#	src/slack/monitor/media.test.ts
#	src/slack/monitor/message-handler.ts
#	src/slack/monitor/message-handler/dispatch.ts
#	src/slack/monitor/message-handler/prepare-content.ts
#	src/slack/monitor/message-handler/prepare-thread-context.ts
#	src/slack/monitor/message-handler/prepare.test-helpers.ts
#	src/slack/monitor/message-handler/prepare.test.ts
#	src/slack/monitor/message-handler/prepare.thread-session-key.test.ts
#	src/slack/monitor/message-handler/prepare.ts
#	src/slack/monitor/provider.ts
#	src/slack/monitor/slash.test.ts
#	src/slack/monitor/slash.ts
#	src/slack/send.ts
#	src/telegram/accounts.test.ts
#	src/telegram/accounts.ts
#	src/telegram/bot-handlers.ts
#	src/telegram/bot-message-context.audio-transcript.test.ts
#	src/telegram/bot-message-context.dm-threads.test.ts
#	src/telegram/bot-message-context.implicit-mention.test.ts
#	src/telegram/bot-message-context.ts
#	src/telegram/bot-message-dispatch.test.ts
#	src/telegram/bot-native-command-menu.ts
#	src/telegram/bot-native-commands.session-meta.test.ts
#	src/telegram/bot-native-commands.skills-allowlist.test.ts
#	src/telegram/bot-native-commands.test.ts
#	src/telegram/bot-native-commands.ts
#	src/telegram/bot.create-telegram-bot.test-harness.ts
#	src/telegram/bot.create-telegram-bot.test.ts
#	src/telegram/bot.test.ts
#	src/telegram/bot.ts
#	src/telegram/bot/delivery.replies.ts
#	src/telegram/bot/delivery.resolve-media.ts
#	src/telegram/bot/delivery.send.ts
#	src/telegram/bot/helpers.ts
#	src/telegram/draft-stream.test-helpers.ts
#	src/telegram/draft-stream.test.ts
#	src/telegram/draft-stream.ts
#	src/telegram/group-access.policy-access.test.ts
#	src/telegram/lane-delivery.test.ts
#	src/telegram/lane-delivery.ts
#	src/telegram/send.ts
#	src/telegram/token.test.ts
#	src/telegram/token.ts
#	src/terminal/note.ts
#	src/tts/tts.ts
#	src/tui/gateway-chat.test.ts
#	src/tui/gateway-chat.ts
#	src/tui/tui-local-shell.test.ts
#	src/tui/tui-local-shell.ts
#	src/version.test.ts
#	src/version.ts
#	src/web/auto-reply.broadcast-groups.combined.test.ts
#	src/web/auto-reply.broadcast-groups.skips-unknown-broadcast-agent-ids-agents-list.test.ts
#	src/web/auto-reply.typing-controller-idle.test.ts
#	src/web/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts
#	src/web/auto-reply.web-auto-reply.monitor-logging.test.ts
#	src/web/auto-reply/monitor/process-message.ts
#	src/web/media.ts
#	src/wizard/onboarding.finalize.test.ts
#	src/wizard/onboarding.finalize.ts
#	src/wizard/onboarding.gateway-config.test.ts
#	src/wizard/onboarding.gateway-config.ts
#	src/wizard/onboarding.secret-input.test.ts
#	src/wizard/onboarding.secret-input.ts
#	src/wizard/onboarding.test.ts
#	src/wizard/onboarding.ts
#	src/wizard/onboarding.types.ts
#	test/cli-json-stdout.e2e.test.ts
#	test/fixtures/plugins-install/voice-call-0.0.1.tgz
#	test/fixtures/plugins-install/voice-call-0.0.2.tgz
#	test/fixtures/plugins-install/zipper-0.0.1.zip
#	test/git-hooks-pre-commit.test.ts
#	test/helpers/temp-home.ts
#	test/release-check.test.ts
#	test/scripts/ios-team-id.test.ts
#	tsconfig.plugin-sdk.dts.json
#	tsdown.config.ts
#	ui/src/i18n/lib/registry.ts
#	ui/src/i18n/lib/translate.ts
#	ui/src/i18n/lib/types.ts
#	ui/src/i18n/locales/de.ts
#	ui/src/i18n/locales/en.ts
#	ui/src/i18n/locales/pt-BR.ts
#	ui/src/i18n/locales/zh-CN.ts
#	ui/src/i18n/locales/zh-TW.ts
#	ui/src/ui/app-gateway.ts
#	ui/src/ui/app-render.helpers.node.test.ts
#	ui/src/ui/controllers/cron.ts
#	ui/src/ui/device-auth.ts
#	ui/src/ui/markdown.test.ts
#	ui/src/ui/markdown.ts
#	ui/src/ui/storage.node.test.ts
#	ui/src/ui/storage.ts
#	ui/src/ui/tool-display.ts
#	ui/src/ui/views/cron.ts
#	ui/src/ui/views/nodes-exec-approvals.ts
#	vitest.config.ts
2026-03-05 13:32:25 -08:00

160 lines
5.6 KiB
Swift

import HanzoBotProtocol
import SwiftUI
import Testing
@testable import HanzoBot
private typealias SnapshotAnyCodable = HanzoBot.AnyCodable
private let channelOrder = ["whatsapp", "telegram", "signal", "imessage"]
private let channelLabels = [
"whatsapp": "WhatsApp",
"telegram": "Telegram",
"signal": "Signal",
"imessage": "iMessage",
]
private let channelDefaultAccountId = [
"whatsapp": "default",
"telegram": "default",
"signal": "default",
"imessage": "default",
]
@MainActor
private func makeChannelsStore(
channels: [String: SnapshotAnyCodable],
ts: Double = 1_700_000_000_000) -> ChannelsStore
{
let store = ChannelsStore(isPreview: true)
store.snapshot = ChannelsStatusSnapshot(
ts: ts,
channelOrder: channelOrder,
channelLabels: channelLabels,
channelDetailLabels: nil,
channelSystemImages: nil,
channelMeta: nil,
channels: channels,
channelAccounts: [:],
channelDefaultAccountId: channelDefaultAccountId)
return store
}
@Suite(.serialized)
@MainActor
struct ChannelsSettingsSmokeTests {
@Test func channelsSettingsBuildsBodyWithSnapshot() {
let store = makeChannelsStore(
channels: [
"whatsapp": SnapshotAnyCodable([
"configured": true,
"linked": true,
"authAgeMs": 86_400_000,
"self": ["e164": "+15551234567"],
"running": true,
"connected": false,
"lastConnectedAt": 1_700_000_000_000,
"lastDisconnect": [
"at": 1_700_000_050_000,
"status": 401,
"error": "logged out",
"loggedOut": true,
],
"reconnectAttempts": 2,
"lastMessageAt": 1_700_000_060_000,
"lastEventAt": 1_700_000_060_000,
"lastError": "needs login",
]),
"telegram": SnapshotAnyCodable([
"configured": true,
"tokenSource": "env",
"running": true,
"mode": "polling",
"lastStartAt": 1_700_000_000_000,
"probe": [
"ok": true,
"status": 200,
"elapsedMs": 120,
"bot": ["id": 123, "username": "hanzo-bot"],
"webhook": ["url": "https://example.com/hook", "hasCustomCert": false],
],
"lastProbeAt": 1_700_000_050_000,
]),
"signal": SnapshotAnyCodable([
"configured": true,
"baseUrl": "http://127.0.0.1:8080",
"running": true,
"lastStartAt": 1_700_000_000_000,
"probe": [
"ok": true,
"status": 200,
"elapsedMs": 140,
"version": "0.12.4",
],
"lastProbeAt": 1_700_000_050_000,
]),
"imessage": SnapshotAnyCodable([
"configured": false,
"running": false,
"lastError": "not configured",
"probe": ["ok": false, "error": "imsg not found (imsg)"],
"lastProbeAt": 1_700_000_050_000,
]),
])
store.whatsappLoginMessage = "Scan QR"
store.whatsappLoginQrDataUrl =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMB/ay7pS8AAAAASUVORK5CYII="
let view = ChannelsSettings(store: store)
_ = view.body
}
@Test func channelsSettingsBuildsBodyWithoutSnapshot() {
let store = makeChannelsStore(
channels: [
"whatsapp": SnapshotAnyCodable([
"configured": false,
"linked": false,
"running": false,
"connected": false,
"reconnectAttempts": 0,
]),
"telegram": SnapshotAnyCodable([
"configured": false,
"running": false,
"lastError": "bot missing",
"probe": [
"ok": false,
"status": 403,
"error": "unauthorized",
"elapsedMs": 120,
],
"lastProbeAt": 1_700_000_100_000,
]),
"signal": SnapshotAnyCodable([
"configured": false,
"baseUrl": "http://127.0.0.1:8080",
"running": false,
"lastError": "not configured",
"probe": [
"ok": false,
"status": 404,
"error": "unreachable",
"elapsedMs": 200,
],
"lastProbeAt": 1_700_000_200_000,
]),
"imessage": SnapshotAnyCodable([
"configured": false,
"running": false,
"lastError": "not configured",
"cliPath": "imsg",
"probe": ["ok": false, "error": "imsg not found (imsg)"],
"lastProbeAt": 1_700_000_200_000,
]),
])
let view = ChannelsSettings(store: store)
_ = view.body
}
}