@ai-sdk/harness-grok-build 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @ai-sdk/harness-grok-build
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a03ff6c: feat(harness): add support for per-harness MCP servers
8
+ - fc3baaf: feat(harness): add optional `mintBridgeToken(sandboxId)` to harness settings to control the bridge token value
9
+ - Updated dependencies [401a4ba]
10
+ - Updated dependencies [a03ff6c]
11
+ - Updated dependencies [fc3baaf]
12
+ - @ai-sdk/provider-utils@5.0.26
13
+ - @ai-sdk/harness-acp@1.0.2
14
+ - @ai-sdk/harness@1.0.65
15
+
3
16
  ## 1.0.0
4
17
 
5
18
  ### Major Changes
package/dist/index.d.ts CHANGED
@@ -22,6 +22,16 @@ type GrokBuildHarnessSettings = {
22
22
  * Maximum milliseconds to wait for the ACP bridge to start.
23
23
  */
24
24
  readonly startupTimeoutMs?: number;
25
+ /**
26
+ * MCP server definitions keyed by server name. Each definition uses the
27
+ * underlying runtime's native MCP server configuration format.
28
+ */
29
+ readonly mcpServers?: Record<string, unknown>;
30
+ /**
31
+ * Creates the authentication token used by the sandbox bridge. Defaults to
32
+ * a random 32-byte hexadecimal token.
33
+ */
34
+ readonly mintBridgeToken?: (sandboxId: string) => string;
25
35
  };
26
36
  declare const GROK_BUILD_BUILTIN_TOOLS: {
27
37
  readonly bash: HarnessV1BuiltinTool<{
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import { tool } from "@ai-sdk/provider-utils";
10
10
  import { z } from "zod/v4";
11
11
 
12
12
  // src/version.ts
13
- var VERSION = true ? "1.0.0" : "0.0.0-test";
13
+ var VERSION = true ? "1.0.1" : "0.0.0-test";
14
14
 
15
15
  // src/grok-build-harness.ts
16
16
  var GROK_BUILD_CLIENT_APP = `ai-sdk/harness-grok-build/${VERSION}`;
@@ -243,6 +243,12 @@ function createGrokBuild(settings = {}) {
243
243
  modelId: settings.model,
244
244
  port: settings.port,
245
245
  startupTimeoutMs: settings.startupTimeoutMs,
246
+ mcpServers: settings.mcpServers,
247
+ isMcpToolCall: (toolCall) => {
248
+ const metadata = toolCall._meta?.["x.ai/tool"];
249
+ return isRecord(metadata) && metadata.namespace === "mcp";
250
+ },
251
+ mintBridgeToken: settings.mintBridgeToken,
246
252
  version: "v1",
247
253
  harnessId: "grok-build",
248
254
  builtinTools: GROK_BUILD_BUILTIN_TOOLS,
@@ -277,6 +283,9 @@ function createGrokBuild(settings = {}) {
277
283
  }
278
284
  });
279
285
  }
286
+ function isRecord(value) {
287
+ return value != null && typeof value === "object" && !Array.isArray(value);
288
+ }
280
289
 
281
290
  // src/index.ts
282
291
  var grokBuild = createGrokBuild();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/grok-build-harness.ts","../src/version.ts","../src/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport {\n commonTool,\n type HarnessV1,\n type HarnessV1BuiltinTool,\n} from '@ai-sdk/harness';\nimport {\n createACP,\n type ACPProviderAuthenticationMode,\n} from '@ai-sdk/harness-acp';\nimport { tool } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\nconst GROK_BUILD_CLIENT_APP = `ai-sdk/harness-grok-build/${VERSION}`;\nconst GROK_BUILD_IMPLEMENTATION_PACKAGE_JSON = readFileSync(\n new URL('./bridge/package.json', import.meta.url),\n 'utf8',\n);\nconst GROK_BUILD_IMPLEMENTATION_PNPM_LOCK = readFileSync(\n new URL('./bridge/pnpm-lock.yaml', import.meta.url),\n 'utf8',\n);\n\nexport type GrokBuildHarnessSettings = {\n /**\n * Selects direct xAI or AI Gateway authentication. Defaults to automatic\n * environment-based selection.\n */\n readonly auth?: ACPProviderAuthenticationMode;\n /**\n * Grok model id selected through ACP. Unset preserves Grok Build's default.\n */\n readonly model?: string;\n /**\n * Overrides the sandbox port used by the ACP bridge.\n */\n readonly port?: number;\n /**\n * Maximum milliseconds to wait for the ACP bridge to start.\n */\n readonly startupTimeoutMs?: number;\n};\n\n/*\n * Tool names and inputs were captured from the model request produced by\n * @xai-official/grok 0.2.111, the version used by the pinned Grok Build ACP\n * implementation.\n */\nconst GROK_BUILD_BUILTIN_TOOLS = {\n bash: commonTool('bash', {\n nativeName: 'run_terminal_command',\n toolUseKind: 'bash',\n inputSchema: z.looseObject({\n command: z.string(),\n timeout: z.number().int().min(0).max(36_000_000).nullable().optional(),\n description: z.string().optional(),\n background: z.boolean().optional(),\n }),\n }),\n edit: commonTool('edit', {\n nativeName: 'search_replace',\n toolUseKind: 'edit',\n inputSchema: z.looseObject({\n file_path: z.string(),\n old_string: z.string(),\n new_string: z.string(),\n replace_all: z.boolean().optional(),\n }),\n }),\n grep: commonTool('grep', {\n nativeName: 'grep',\n toolUseKind: 'readonly',\n inputSchema: z.looseObject({\n pattern: z.string(),\n path: z.string().nullable().optional(),\n glob: z.string().nullable().optional(),\n '-B': z.number().int().optional(),\n '-A': z.number().int().optional(),\n '-C': z.number().int().optional(),\n '-i': z.boolean().optional(),\n type: z.string().nullable().optional(),\n head_limit: z.number().int().optional(),\n multiline: z.boolean().optional(),\n }),\n }),\n webSearch: commonTool('webSearch', {\n nativeName: 'web_search',\n toolUseKind: 'readonly',\n inputSchema: z.looseObject({\n query: z.string(),\n allowed_domains: z.array(z.string()).nullable().optional(),\n }),\n }),\n write: commonTool('write', {\n nativeName: 'write',\n toolUseKind: 'edit',\n inputSchema: z.looseObject({\n file_path: z.string(),\n content: z.string(),\n }),\n }),\n read_file: {\n ...tool({\n inputSchema: z.looseObject({\n target_file: z.string(),\n offset: z.number().int().optional(),\n limit: z.number().int().optional(),\n pages: z.string().nullable().optional(),\n format: z.string().nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n list_dir: {\n ...tool({\n inputSchema: z.looseObject({\n target_directory: z.string(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n kill_command_or_subagent: tool({\n inputSchema: z.looseObject({\n task_id: z.string(),\n }),\n }),\n todo_write: tool({\n inputSchema: z.looseObject({\n merge: z.boolean().optional(),\n todos: z.array(\n z.looseObject({\n id: z.string(),\n content: z.string().nullable().optional(),\n status: z\n .enum(['pending', 'in_progress', 'completed', 'cancelled'])\n .nullable()\n .optional(),\n }),\n ),\n }),\n }),\n get_command_or_subagent_output: {\n ...tool({\n inputSchema: z.looseObject({\n task_ids: z.array(z.string()).optional(),\n timeout_ms: z.number().int().nonnegative().nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n spawn_subagent: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n description: z.string(),\n subagent_type: z.string().optional(),\n background: z.boolean().optional(),\n capability_mode: z\n .enum(['read-only', 'read-write', 'execute', 'all'])\n .nullable()\n .optional(),\n isolation: z.enum(['none', 'worktree']).nullable().optional(),\n resume_from: z.string().nullable().optional(),\n cwd: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n }),\n }),\n scheduler_create: tool({\n inputSchema: z.looseObject({\n task_id: z.string().nullable().optional(),\n interval: z.string().nullable().optional(),\n prompt: z.string().nullable().optional(),\n durable: z.boolean().nullable().optional(),\n foreground: z.boolean().nullable().optional(),\n fire_immediately: z.boolean().optional(),\n }),\n }),\n scheduler_delete: tool({\n inputSchema: z.looseObject({ id: z.string() }),\n }),\n scheduler_list: {\n ...tool({ inputSchema: z.looseObject({}) }),\n toolUseKind: 'readonly',\n },\n monitor: tool({\n inputSchema: z.looseObject({\n command: z.string(),\n description: z.string(),\n timeout_ms: z.number().int().nonnegative().nullable().optional(),\n persistent: z.boolean().optional(),\n }),\n }),\n search_tool: {\n ...tool({\n inputSchema: z.looseObject({\n query: z.string(),\n limit: z.number().int().min(0).max(255).nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n use_tool: tool({\n inputSchema: z.looseObject({\n tool_name: z.string(),\n tool_input: z.looseObject({}),\n }),\n }),\n workflow: tool({\n inputSchema: z.looseObject({\n agent_budget: z.number().int().min(1).max(1024).nullable().optional(),\n name: z.string().nullable().optional(),\n script: z.string().nullable().optional(),\n script_path: z.string().nullable().optional(),\n args: z.unknown().optional(),\n resume_from_run_id: z.string().nullable().optional(),\n validate_only: z.boolean().optional(),\n }),\n }),\n enter_plan_mode: tool({ inputSchema: z.looseObject({}) }),\n exit_plan_mode: tool({ inputSchema: z.looseObject({}) }),\n ask_user_question: tool({\n inputSchema: z.looseObject({\n questions: z.array(\n z.looseObject({\n question: z.string(),\n options: z.array(\n z.looseObject({\n label: z.string(),\n description: z.string(),\n preview: z.string().nullable().optional(),\n }),\n ),\n multi_select: z.boolean().nullable().optional(),\n }),\n ),\n }),\n }),\n image_gen: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n aspect_ratio: z.string().optional(),\n }),\n }),\n image_edit: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n image: z.array(z.string()),\n aspect_ratio: z.string().optional(),\n }),\n }),\n image_to_video: tool({\n inputSchema: z.looseObject({\n prompt: z.string().nullable().optional(),\n image: z.string(),\n duration: z.number().int().nonnegative().nullable().optional(),\n resolution_name: z.string().optional(),\n }),\n }),\n reference_to_video: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n images: z.array(z.string()),\n aspect_ratio: z.string(),\n duration: z.number().int().nonnegative().nullable().optional(),\n resolution_name: z.string().optional(),\n }),\n }),\n} as const satisfies Record<string, HarnessV1BuiltinTool<any, any>>;\n\nexport function createGrokBuild(\n settings: GrokBuildHarnessSettings = {},\n): HarnessV1<typeof GROK_BUILD_BUILTIN_TOOLS> {\n const clientAppSegments = GROK_BUILD_CLIENT_APP.split('/');\n const clientAppVersion = clientAppSegments.pop()!;\n\n return createACP({\n auth: settings.auth,\n modelId: settings.model,\n port: settings.port,\n startupTimeoutMs: settings.startupTimeoutMs,\n version: 'v1',\n harnessId: 'grok-build',\n builtinTools: GROK_BUILD_BUILTIN_TOOLS,\n clientApp: {\n name: clientAppSegments.join('/'),\n version: clientAppVersion,\n },\n source: {\n type: 'npm-locked',\n packageJson: GROK_BUILD_IMPLEMENTATION_PACKAGE_JSON,\n pnpmLockYaml: GROK_BUILD_IMPLEMENTATION_PNPM_LOCK,\n },\n executable: 'grok',\n args: ['agent', 'stdio'],\n forwardEnv: ['XAI_API_KEY'],\n providerAuthentication: {\n gateway: {\n env: {\n GROK_CLIENT_NAME: { $source: 'client-app-name' },\n GROK_CLIENT_VERSION: { $source: 'client-app-version' },\n XAI_API_KEY: { $source: 'gateway-api-key' },\n GROK_XAI_API_BASE_URL: {\n $source: 'gateway-base-url',\n ensureSuffix: '/v1',\n },\n GROK_MODELS_BASE_URL: {\n $source: 'gateway-base-url',\n ensureSuffix: '/v1',\n },\n },\n },\n },\n });\n}\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { createGrokBuild } from './grok-build-harness';\n\n/**\n * Default Grok Build harness instance. Equivalent to `createGrokBuild()`.\n */\nexport const grokBuild = createGrokBuild();\n\nexport { createGrokBuild } from './grok-build-harness';\nexport type { GrokBuildHarnessSettings } from './grok-build-harness';\nexport { VERSION } from './version';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/grok-build-harness.ts","../src/version.ts","../src/index.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport {\n commonTool,\n type HarnessV1,\n type HarnessV1BuiltinTool,\n} from '@ai-sdk/harness';\nimport {\n createACP,\n type ACPProviderAuthenticationMode,\n} from '@ai-sdk/harness-acp';\nimport { tool } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { VERSION } from './version';\n\nconst GROK_BUILD_CLIENT_APP = `ai-sdk/harness-grok-build/${VERSION}`;\nconst GROK_BUILD_IMPLEMENTATION_PACKAGE_JSON = readFileSync(\n new URL('./bridge/package.json', import.meta.url),\n 'utf8',\n);\nconst GROK_BUILD_IMPLEMENTATION_PNPM_LOCK = readFileSync(\n new URL('./bridge/pnpm-lock.yaml', import.meta.url),\n 'utf8',\n);\n\nexport type GrokBuildHarnessSettings = {\n /**\n * Selects direct xAI or AI Gateway authentication. Defaults to automatic\n * environment-based selection.\n */\n readonly auth?: ACPProviderAuthenticationMode;\n /**\n * Grok model id selected through ACP. Unset preserves Grok Build's default.\n */\n readonly model?: string;\n /**\n * Overrides the sandbox port used by the ACP bridge.\n */\n readonly port?: number;\n /**\n * Maximum milliseconds to wait for the ACP bridge to start.\n */\n readonly startupTimeoutMs?: number;\n /**\n * MCP server definitions keyed by server name. Each definition uses the\n * underlying runtime's native MCP server configuration format.\n */\n readonly mcpServers?: Record<string, unknown>;\n /**\n * Creates the authentication token used by the sandbox bridge. Defaults to\n * a random 32-byte hexadecimal token.\n */\n readonly mintBridgeToken?: (sandboxId: string) => string;\n};\n\n/*\n * Tool names and inputs were captured from the model request produced by\n * @xai-official/grok 0.2.111, the version used by the pinned Grok Build ACP\n * implementation.\n */\nconst GROK_BUILD_BUILTIN_TOOLS = {\n bash: commonTool('bash', {\n nativeName: 'run_terminal_command',\n toolUseKind: 'bash',\n inputSchema: z.looseObject({\n command: z.string(),\n timeout: z.number().int().min(0).max(36_000_000).nullable().optional(),\n description: z.string().optional(),\n background: z.boolean().optional(),\n }),\n }),\n edit: commonTool('edit', {\n nativeName: 'search_replace',\n toolUseKind: 'edit',\n inputSchema: z.looseObject({\n file_path: z.string(),\n old_string: z.string(),\n new_string: z.string(),\n replace_all: z.boolean().optional(),\n }),\n }),\n grep: commonTool('grep', {\n nativeName: 'grep',\n toolUseKind: 'readonly',\n inputSchema: z.looseObject({\n pattern: z.string(),\n path: z.string().nullable().optional(),\n glob: z.string().nullable().optional(),\n '-B': z.number().int().optional(),\n '-A': z.number().int().optional(),\n '-C': z.number().int().optional(),\n '-i': z.boolean().optional(),\n type: z.string().nullable().optional(),\n head_limit: z.number().int().optional(),\n multiline: z.boolean().optional(),\n }),\n }),\n webSearch: commonTool('webSearch', {\n nativeName: 'web_search',\n toolUseKind: 'readonly',\n inputSchema: z.looseObject({\n query: z.string(),\n allowed_domains: z.array(z.string()).nullable().optional(),\n }),\n }),\n write: commonTool('write', {\n nativeName: 'write',\n toolUseKind: 'edit',\n inputSchema: z.looseObject({\n file_path: z.string(),\n content: z.string(),\n }),\n }),\n read_file: {\n ...tool({\n inputSchema: z.looseObject({\n target_file: z.string(),\n offset: z.number().int().optional(),\n limit: z.number().int().optional(),\n pages: z.string().nullable().optional(),\n format: z.string().nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n list_dir: {\n ...tool({\n inputSchema: z.looseObject({\n target_directory: z.string(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n kill_command_or_subagent: tool({\n inputSchema: z.looseObject({\n task_id: z.string(),\n }),\n }),\n todo_write: tool({\n inputSchema: z.looseObject({\n merge: z.boolean().optional(),\n todos: z.array(\n z.looseObject({\n id: z.string(),\n content: z.string().nullable().optional(),\n status: z\n .enum(['pending', 'in_progress', 'completed', 'cancelled'])\n .nullable()\n .optional(),\n }),\n ),\n }),\n }),\n get_command_or_subagent_output: {\n ...tool({\n inputSchema: z.looseObject({\n task_ids: z.array(z.string()).optional(),\n timeout_ms: z.number().int().nonnegative().nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n spawn_subagent: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n description: z.string(),\n subagent_type: z.string().optional(),\n background: z.boolean().optional(),\n capability_mode: z\n .enum(['read-only', 'read-write', 'execute', 'all'])\n .nullable()\n .optional(),\n isolation: z.enum(['none', 'worktree']).nullable().optional(),\n resume_from: z.string().nullable().optional(),\n cwd: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n }),\n }),\n scheduler_create: tool({\n inputSchema: z.looseObject({\n task_id: z.string().nullable().optional(),\n interval: z.string().nullable().optional(),\n prompt: z.string().nullable().optional(),\n durable: z.boolean().nullable().optional(),\n foreground: z.boolean().nullable().optional(),\n fire_immediately: z.boolean().optional(),\n }),\n }),\n scheduler_delete: tool({\n inputSchema: z.looseObject({ id: z.string() }),\n }),\n scheduler_list: {\n ...tool({ inputSchema: z.looseObject({}) }),\n toolUseKind: 'readonly',\n },\n monitor: tool({\n inputSchema: z.looseObject({\n command: z.string(),\n description: z.string(),\n timeout_ms: z.number().int().nonnegative().nullable().optional(),\n persistent: z.boolean().optional(),\n }),\n }),\n search_tool: {\n ...tool({\n inputSchema: z.looseObject({\n query: z.string(),\n limit: z.number().int().min(0).max(255).nullable().optional(),\n }),\n }),\n toolUseKind: 'readonly',\n },\n use_tool: tool({\n inputSchema: z.looseObject({\n tool_name: z.string(),\n tool_input: z.looseObject({}),\n }),\n }),\n workflow: tool({\n inputSchema: z.looseObject({\n agent_budget: z.number().int().min(1).max(1024).nullable().optional(),\n name: z.string().nullable().optional(),\n script: z.string().nullable().optional(),\n script_path: z.string().nullable().optional(),\n args: z.unknown().optional(),\n resume_from_run_id: z.string().nullable().optional(),\n validate_only: z.boolean().optional(),\n }),\n }),\n enter_plan_mode: tool({ inputSchema: z.looseObject({}) }),\n exit_plan_mode: tool({ inputSchema: z.looseObject({}) }),\n ask_user_question: tool({\n inputSchema: z.looseObject({\n questions: z.array(\n z.looseObject({\n question: z.string(),\n options: z.array(\n z.looseObject({\n label: z.string(),\n description: z.string(),\n preview: z.string().nullable().optional(),\n }),\n ),\n multi_select: z.boolean().nullable().optional(),\n }),\n ),\n }),\n }),\n image_gen: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n aspect_ratio: z.string().optional(),\n }),\n }),\n image_edit: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n image: z.array(z.string()),\n aspect_ratio: z.string().optional(),\n }),\n }),\n image_to_video: tool({\n inputSchema: z.looseObject({\n prompt: z.string().nullable().optional(),\n image: z.string(),\n duration: z.number().int().nonnegative().nullable().optional(),\n resolution_name: z.string().optional(),\n }),\n }),\n reference_to_video: tool({\n inputSchema: z.looseObject({\n prompt: z.string(),\n images: z.array(z.string()),\n aspect_ratio: z.string(),\n duration: z.number().int().nonnegative().nullable().optional(),\n resolution_name: z.string().optional(),\n }),\n }),\n} as const satisfies Record<string, HarnessV1BuiltinTool<any, any>>;\n\nexport function createGrokBuild(\n settings: GrokBuildHarnessSettings = {},\n): HarnessV1<typeof GROK_BUILD_BUILTIN_TOOLS> {\n const clientAppSegments = GROK_BUILD_CLIENT_APP.split('/');\n const clientAppVersion = clientAppSegments.pop()!;\n\n return createACP({\n auth: settings.auth,\n modelId: settings.model,\n port: settings.port,\n startupTimeoutMs: settings.startupTimeoutMs,\n mcpServers: settings.mcpServers,\n isMcpToolCall: toolCall => {\n const metadata = toolCall._meta?.['x.ai/tool'];\n return isRecord(metadata) && metadata.namespace === 'mcp';\n },\n mintBridgeToken: settings.mintBridgeToken,\n version: 'v1',\n harnessId: 'grok-build',\n builtinTools: GROK_BUILD_BUILTIN_TOOLS,\n clientApp: {\n name: clientAppSegments.join('/'),\n version: clientAppVersion,\n },\n source: {\n type: 'npm-locked',\n packageJson: GROK_BUILD_IMPLEMENTATION_PACKAGE_JSON,\n pnpmLockYaml: GROK_BUILD_IMPLEMENTATION_PNPM_LOCK,\n },\n executable: 'grok',\n args: ['agent', 'stdio'],\n forwardEnv: ['XAI_API_KEY'],\n providerAuthentication: {\n gateway: {\n env: {\n GROK_CLIENT_NAME: { $source: 'client-app-name' },\n GROK_CLIENT_VERSION: { $source: 'client-app-version' },\n XAI_API_KEY: { $source: 'gateway-api-key' },\n GROK_XAI_API_BASE_URL: {\n $source: 'gateway-base-url',\n ensureSuffix: '/v1',\n },\n GROK_MODELS_BASE_URL: {\n $source: 'gateway-base-url',\n ensureSuffix: '/v1',\n },\n },\n },\n },\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { createGrokBuild } from './grok-build-harness';\n\n/**\n * Default Grok Build harness instance. Equivalent to `createGrokBuild()`.\n */\nexport const grokBuild = createGrokBuild();\n\nexport { createGrokBuild } from './grok-build-harness';\nexport type { GrokBuildHarnessSettings } from './grok-build-harness';\nexport { VERSION } from './version';\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/harness-grok-build",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -26,9 +26,9 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@ai-sdk/harness": "1.0.64",
30
- "@ai-sdk/harness-acp": "1.0.1",
31
- "@ai-sdk/provider-utils": "5.0.25"
29
+ "@ai-sdk/harness-acp": "1.0.2",
30
+ "@ai-sdk/provider-utils": "5.0.26",
31
+ "@ai-sdk/harness": "1.0.65"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "zod": "^3.25.76 || ^4.1.8"
@@ -40,6 +40,16 @@ export type GrokBuildHarnessSettings = {
40
40
  * Maximum milliseconds to wait for the ACP bridge to start.
41
41
  */
42
42
  readonly startupTimeoutMs?: number;
43
+ /**
44
+ * MCP server definitions keyed by server name. Each definition uses the
45
+ * underlying runtime's native MCP server configuration format.
46
+ */
47
+ readonly mcpServers?: Record<string, unknown>;
48
+ /**
49
+ * Creates the authentication token used by the sandbox bridge. Defaults to
50
+ * a random 32-byte hexadecimal token.
51
+ */
52
+ readonly mintBridgeToken?: (sandboxId: string) => string;
43
53
  };
44
54
 
45
55
  /*
@@ -278,6 +288,12 @@ export function createGrokBuild(
278
288
  modelId: settings.model,
279
289
  port: settings.port,
280
290
  startupTimeoutMs: settings.startupTimeoutMs,
291
+ mcpServers: settings.mcpServers,
292
+ isMcpToolCall: toolCall => {
293
+ const metadata = toolCall._meta?.['x.ai/tool'];
294
+ return isRecord(metadata) && metadata.namespace === 'mcp';
295
+ },
296
+ mintBridgeToken: settings.mintBridgeToken,
281
297
  version: 'v1',
282
298
  harnessId: 'grok-build',
283
299
  builtinTools: GROK_BUILD_BUILTIN_TOOLS,
@@ -312,3 +328,7 @@ export function createGrokBuild(
312
328
  },
313
329
  });
314
330
  }
331
+
332
+ function isRecord(value: unknown): value is Record<string, unknown> {
333
+ return value != null && typeof value === 'object' && !Array.isArray(value);
334
+ }