diff --git a/CHANGELOG.md b/CHANGELOG.md index 636956934fb..1a4a3b156ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -140,6 +140,7 @@ Docs: https://docs.openclaw.ai - Telegram/security: add regression coverage proving pinned fallback host overrides stay bound to Telegram and delegate non-matching hostnames back to the original lookup path. Thanks @vincentkoc. - Secrets/exec refs: require explicit `--allow-exec` for `secrets apply` write plans that contain exec SecretRefs/providers, and align audit/configure/apply dry-run behavior to skip exec checks unless opted in to prevent unexpected command side effects. (#49417) Thanks @restriction and @joshavant. - Tools/image generation: add bundled fal image generation support so `image_generate` can target `fal/*` models with `FAL_KEY`, including single-image edit flows via FLUX image-to-image. Thanks @vincentkoc. +- xAI/web search: add missing Grok credential metadata so the bundled provider registration type-checks again. (#49472) thanks @scoootscooob. ### Breaking diff --git a/extensions/imessage/runtime-api.ts b/extensions/imessage/runtime-api.ts index 57eb1ed64aa..6cd9966f193 100644 --- a/extensions/imessage/runtime-api.ts +++ b/extensions/imessage/runtime-api.ts @@ -18,7 +18,10 @@ export { normalizeIMessageMessagingTarget, } from "../../src/channels/plugins/normalize/imessage.js"; export { IMessageConfigSchema } from "../../src/config/zod-schema.providers-core.js"; -export { resolveIMessageGroupRequireMention, resolveIMessageGroupToolPolicy } from "./src/group-policy.js"; +export { + resolveIMessageGroupRequireMention, + resolveIMessageGroupToolPolicy, +} from "./src/group-policy.js"; export { monitorIMessageProvider } from "./src/monitor.js"; export type { MonitorIMessageOpts } from "./src/monitor.js"; diff --git a/extensions/imessage/src/channel.runtime.ts b/extensions/imessage/src/channel.runtime.ts index 4df9d5651d5..32cd39a1d64 100644 --- a/extensions/imessage/src/channel.runtime.ts +++ b/extensions/imessage/src/channel.runtime.ts @@ -1,8 +1,5 @@ import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-runtime"; -import { - PAIRING_APPROVED_MESSAGE, - resolveChannelMediaMaxBytes, -} from "../runtime-api.js"; +import { PAIRING_APPROVED_MESSAGE, resolveChannelMediaMaxBytes } from "../runtime-api.js"; import type { ResolvedIMessageAccount } from "./accounts.js"; import { monitorIMessageProvider } from "./monitor.js"; import { probeIMessage } from "./probe.js"; diff --git a/extensions/imessage/src/channel.ts b/extensions/imessage/src/channel.ts index 22faf226e89..27a26a9db88 100644 --- a/extensions/imessage/src/channel.ts +++ b/extensions/imessage/src/channel.ts @@ -1,6 +1,9 @@ import { buildAccountScopedAllowlistConfigEditor } from "openclaw/plugin-sdk/allowlist-config-edit"; import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-runtime"; import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/core"; +import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime"; +import { type RoutePeer } from "openclaw/plugin-sdk/routing"; +import { buildPassiveProbedChannelStatusSummary } from "../../shared/channel-status-summary.js"; import { collectStatusIssuesFromLastError, DEFAULT_ACCOUNT_ID, @@ -8,9 +11,6 @@ import { normalizeIMessageMessagingTarget, type ChannelPlugin, } from "../runtime-api.js"; -import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime"; -import { type RoutePeer } from "openclaw/plugin-sdk/routing"; -import { buildPassiveProbedChannelStatusSummary } from "../../shared/channel-status-summary.js"; import { resolveIMessageAccount, type ResolvedIMessageAccount } from "./accounts.js"; import { resolveIMessageGroupRequireMention, diff --git a/extensions/moonshot/index.ts b/extensions/moonshot/index.ts index 3a8ed52c805..241d53e6014 100644 --- a/extensions/moonshot/index.ts +++ b/extensions/moonshot/index.ts @@ -1,6 +1,6 @@ import { definePluginEntry } from "openclaw/plugin-sdk/core"; -import { buildSingleProviderApiKeyCatalog } from "openclaw/plugin-sdk/provider-catalog"; import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth"; +import { buildSingleProviderApiKeyCatalog } from "openclaw/plugin-sdk/provider-catalog"; import { createMoonshotThinkingWrapper, resolveMoonshotThinkingType, diff --git a/extensions/xai/web-search.ts b/extensions/xai/web-search.ts index 6202e18f4bd..ec69073e359 100644 --- a/extensions/xai/web-search.ts +++ b/extensions/xai/web-search.ts @@ -210,6 +210,8 @@ export function createXaiWebSearchProvider() { signupUrl: "https://console.x.ai/", docsUrl: "https://docs.openclaw.ai/tools/web", autoDetectOrder: 30, + credentialPath: "tools.web.search.grok.apiKey", + inactiveSecretPaths: ["tools.web.search.grok.apiKey"], getCredentialValue: (searchConfig?: Record) => getScopedCredentialValue(searchConfig, "grok"), setCredentialValue: (searchConfigTarget: Record, value: unknown) => diff --git a/src/agents/tools/web-search.test.ts b/src/agents/tools/web-search.test.ts index cb9cabfe87f..8edaca15b94 100644 --- a/src/agents/tools/web-search.test.ts +++ b/src/agents/tools/web-search.test.ts @@ -27,7 +27,6 @@ const { resolveKimiApiKey, resolveKimiModel, resolveKimiBaseUrl, extractKimiCita moonshotTesting; const kimiApiKeyEnv = ["KIMI_API", "KEY"].join("_"); -const moonshotApiKeyEnv = ["MOONSHOT_API", "KEY"].join("_"); const openRouterApiKeyEnv = ["OPENROUTER_API", "KEY"].join("_"); const perplexityApiKeyEnv = ["PERPLEXITY_API", "KEY"].join("_"); const openRouterPerplexityApiKey = ["sk", "or", "v1", "test"].join("-"); @@ -231,10 +230,7 @@ describe("web_search kimi config resolution", () => { it("extracts citations from search_results", () => { expect( extractKimiCitations({ - search_results: [ - { url: "https://example.com/one" }, - { url: "https://example.com/two" }, - ], + search_results: [{ url: "https://example.com/one" }, { url: "https://example.com/two" }], }), ).toEqual(["https://example.com/one", "https://example.com/two"]); });