Skip to content

Commit c8ed163

Browse files
huntharosteipete
authored andcommitted
xAI: restore generic auth and x_search seams
1 parent 4314348 commit c8ed163

5 files changed

Lines changed: 27 additions & 43 deletions

File tree

extensions/xai/api.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,7 @@ export {
1414
XAI_DEFAULT_MAX_TOKENS,
1515
} from "./model-definitions.js";
1616
export { isModernXaiModel, resolveXaiForwardCompatModel } from "./provider-models.js";
17-
export {
18-
__testing as xSearchTesting,
19-
buildXaiXSearchPayload,
20-
requestXaiXSearch,
21-
resolveXaiXSearchInlineCitations,
22-
resolveXaiXSearchMaxTurns,
23-
resolveXaiXSearchModel,
24-
type XaiXSearchOptions,
25-
} from "./src/x-search-shared.js";
26-
import { normalizeXaiModelId } from "./model-id.js";
27-
export { normalizeXaiModelId };
17+
export { normalizeXaiModelId } from "./model-id.js";
2818

2919
export const XAI_TOOL_SCHEMA_PROFILE = "xai";
3020
export const HTML_ENTITY_TOOL_CALL_ARGUMENTS_ENCODING = "html-entities";

extensions/xai/x-search.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export {
2+
buildXaiXSearchPayload,
3+
requestXaiXSearch,
4+
resolveXaiXSearchInlineCitations,
5+
resolveXaiXSearchMaxTurns,
6+
resolveXaiXSearchModel,
7+
type XaiXSearchOptions,
8+
} from "./src/x-search-shared.js";

src/agents/models-config.providers.secrets.ts

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { OpenClawConfig } from "../config/config.js";
22
import { coerceSecretRef, resolveSecretInputRef } from "../config/types.secrets.js";
33
import { createSubsystemLogger } from "../logging/subsystem.js";
44
import { formatApiKeyPreview } from "../plugins/provider-auth-input.js";
5+
import { resolveProviderSyntheticAuthWithPlugin } from "../plugins/provider-runtime.js";
56
import { normalizeOptionalSecretInput } from "../utils/normalize-secret-input.js";
67
import { listProfilesForProvider } from "./auth-profiles/profiles.js";
78
import { ensureAuthProfileStore } from "./auth-profiles/store.js";
@@ -13,7 +14,6 @@ import {
1314
resolveNonEnvSecretRefHeaderValueMarker,
1415
} from "./model-auth-markers.js";
1516
import { resolveAwsSdkEnvVarName } from "./model-auth-runtime-shared.js";
16-
import { normalizeProviderId } from "./provider-id.js";
1717

1818
type ModelsConfig = NonNullable<OpenClawConfig["models"]>;
1919
export type ProviderConfig = NonNullable<ModelsConfig["providers"]>[string];
@@ -438,34 +438,16 @@ function resolveConfigBackedProviderAuth(params: { provider: string; config?: Op
438438
source: "config";
439439
}
440440
| undefined {
441-
let apiKey: string | undefined;
442-
if (normalizeProviderId(params.provider) === "xai") {
443-
const pluginApiKey = normalizeOptionalSecretInput(
444-
params.config?.plugins?.entries?.xai?.config &&
445-
typeof params.config.plugins.entries.xai.config === "object" &&
446-
!Array.isArray(params.config.plugins.entries.xai.config)
447-
? ((params.config.plugins.entries.xai.config as { webSearch?: { apiKey?: unknown } })
448-
.webSearch?.apiKey ?? undefined)
449-
: undefined,
450-
);
451-
const pluginApiKeyRef = coerceSecretRef(
452-
params.config?.plugins?.entries?.xai?.config &&
453-
typeof params.config.plugins.entries.xai.config === "object" &&
454-
!Array.isArray(params.config.plugins.entries.xai.config)
455-
? ((params.config.plugins.entries.xai.config as { webSearch?: { apiKey?: unknown } })
456-
.webSearch?.apiKey ?? undefined)
457-
: undefined,
458-
);
459-
const legacyApiKey = normalizeOptionalSecretInput(
460-
params.config?.tools?.web?.search?.grok?.apiKey,
461-
);
462-
const legacyApiKeyRef = coerceSecretRef(params.config?.tools?.web?.search?.grok?.apiKey);
463-
apiKey =
464-
pluginApiKey ??
465-
(pluginApiKeyRef ? resolveNonEnvSecretRefApiKeyMarker(pluginApiKeyRef.source) : undefined) ??
466-
legacyApiKey ??
467-
(legacyApiKeyRef ? resolveNonEnvSecretRefApiKeyMarker(legacyApiKeyRef.source) : undefined);
468-
}
441+
const synthetic = resolveProviderSyntheticAuthWithPlugin({
442+
provider: params.provider,
443+
config: params.config,
444+
context: {
445+
config: params.config,
446+
provider: params.provider,
447+
providerConfig: params.config?.models?.providers?.[params.provider],
448+
},
449+
});
450+
const apiKey = synthetic?.apiKey?.trim();
469451
if (!apiKey) {
470452
if (shouldTraceProviderAuth(params.provider)) {
471453
log.info("[xai-auth] bootstrap config fallback: no config-backed key found");

src/agents/tools/x-search.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import { Type } from "@sinclair/typebox";
22
import {
3-
xSearchTesting as xaiXSearchTesting,
43
buildXaiXSearchPayload,
54
requestXaiXSearch,
65
resolveXaiXSearchInlineCitations,
76
resolveXaiXSearchMaxTurns,
87
resolveXaiXSearchModel,
98
type XaiXSearchOptions,
10-
} from "../../../extensions/xai/api.js";
9+
} from "../../../extensions/xai/x-search.js";
1110
import type { OpenClawConfig } from "../../config/config.js";
1211
import { resolveProviderWebSearchPluginConfig } from "../../plugin-sdk/provider-web-search.js";
1312
import type { RuntimeWebXSearchMetadata } from "../../secrets/runtime-web-tools.types.js";
@@ -259,9 +258,13 @@ export function createXSearchTool(options?: {
259258

260259
export const __testing = {
261260
buildXSearchCacheKey,
261+
buildXaiXSearchPayload,
262262
normalizeOptionalIsoDate,
263+
requestXaiXSearch,
264+
resolveXaiXSearchInlineCitations,
265+
resolveXaiXSearchMaxTurns,
266+
resolveXaiXSearchModel,
263267
resolveXSearchApiKey,
264268
resolveXSearchConfig,
265269
resolveXSearchEnabled,
266-
...xaiXSearchTesting,
267270
} as const;

src/plugins/public-artifacts.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const EXTRA_GUARDED_EXTENSION_PUBLIC_SURFACE_BASENAMES = assertUniqueValues(
4646
"setup-api.js",
4747
"setup-entry.js",
4848
"timeouts.js",
49+
"x-search.js",
4950
] as const,
5051
"extra guarded extension public surface basename",
5152
);

0 commit comments

Comments
 (0)