























11import { jsonResult, readStringParam } from "openclaw/plugin-sdk/provider-web-search";
22import { getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
3-import { Type } from "typebox";
3+import {
4+buildMissingCodeExecutionApiKeyPayload,
5+createCodeExecutionToolDefinition,
6+} from "./code-execution-tool-shared.js";
7+import {
8+readCodeExecutionConfigRecord,
9+readPluginCodeExecutionConfig,
10+resolveCodeExecutionEnabled,
11+} from "./src/code-execution-config.js";
412import {
513buildXaiCodeExecutionPayload,
614requestXaiCodeExecution,
715resolveXaiCodeExecutionMaxTurns,
816resolveXaiCodeExecutionModel,
917} from "./src/code-execution-shared.js";
10-import {
11-isXaiToolEnabled,
12-resolveXaiToolApiKeyWithAuth,
13-type XaiToolAuthContext,
14-} from "./src/tool-auth-shared.js";
15-16-type CodeExecutionConfig = {
17-enabled?: boolean;
18-model?: string;
19-maxTurns?: number;
20-timeoutSeconds?: number;
21-};
22-23-function readCodeExecutionConfigRecord(
24-config?: CodeExecutionConfig,
25-): Record<string, unknown> | undefined {
26-return config && typeof config === "object" ? (config as Record<string, unknown>) : undefined;
27-}
28-29-function readPluginCodeExecutionConfig(cfg?: unknown): CodeExecutionConfig | undefined {
30-if (!cfg || typeof cfg !== "object") {
31-return undefined;
32-}
33-const entries = (cfg as Record<string, unknown>).plugins;
34-const pluginEntries =
35-entries && typeof entries === "object"
36- ? ((entries as Record<string, unknown>).entries as Record<string, unknown> | undefined)
37- : undefined;
38-if (!pluginEntries) {
39-return undefined;
40-}
41-const xaiEntry = pluginEntries.xai;
42-if (!xaiEntry || typeof xaiEntry !== "object") {
43-return undefined;
44-}
45-const config = (xaiEntry as Record<string, unknown>).config;
46-if (!config || typeof config !== "object") {
47-return undefined;
48-}
49-const codeExecution = (config as Record<string, unknown>).codeExecution;
50-if (!codeExecution || typeof codeExecution !== "object") {
51-return undefined;
52-}
53-return codeExecution as CodeExecutionConfig;
54-}
55-56-function resolveCodeExecutionEnabled(params: {
57-sourceConfig?: unknown;
58-runtimeConfig?: unknown;
59-config?: CodeExecutionConfig;
60-auth?: XaiToolAuthContext;
61-}): boolean {
62-return isXaiToolEnabled({
63-enabled: readCodeExecutionConfigRecord(params.config)?.enabled as boolean | undefined,
64-runtimeConfig: params.runtimeConfig as never,
65-sourceConfig: params.sourceConfig as never,
66-auth: params.auth,
67-});
68-}
18+import { resolveXaiToolApiKeyWithAuth, type XaiToolAuthContext } from "./src/tool-auth-shared.js";
69197020export function createCodeExecutionTool(options?: {
7121config?: unknown;
@@ -87,30 +37,15 @@ export function createCodeExecutionTool(options?: {
8737return null;
8838}
893990-return {
91-label: "Code Execution",
92-name: "code_execution",
93-description:
94-"Run sandboxed Python analysis with xAI. Use for calculations, tabulation, summaries, and chart-style analysis without local machine access.",
95-parameters: Type.Object({
96-task: Type.String({
97-description:
98-"The full analysis task for xAI's remote Python sandbox. Include any data to analyze directly in the task.",
99-}),
100-}),
101-execute: async (_toolCallId: string, args: Record<string, unknown>) => {
40+return createCodeExecutionToolDefinition(
41+async (_toolCallId: string, args: Record<string, unknown>) => {
10242const apiKey = await resolveXaiToolApiKeyWithAuth({
10343runtimeConfig: (runtimeConfig ?? undefined) as never,
10444sourceConfig: options?.config as never,
10545auth: options?.auth,
10646});
10747if (!apiKey) {
108-return jsonResult({
109-error: "missing_xai_api_key",
110-message:
111-"code_execution needs xAI credentials. Run `openclaw onboard --auth-choice xai-oauth` to sign in with Grok, run `openclaw onboard --auth-choice xai-api-key`, set `XAI_API_KEY` in the Gateway environment, or configure `plugins.entries.xai.config.webSearch.apiKey`.",
112-docs: "https://docs.openclaw.ai/tools/code-execution",
113-});
48+return jsonResult(buildMissingCodeExecutionApiKeyPayload());
11449}
1155011651const task = readStringParam(args, "task", { required: true });
@@ -142,5 +77,5 @@ export function createCodeExecutionTool(options?: {
14277}),
14378);
14479},
145-};
80+);
14681}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。