From 267bc7444aad00bfda4712a3dba0f683bcf809e4 Mon Sep 17 00:00:00 2001 From: kosukeoya <53549035+kosukeoya@users.noreply.github.com> Date: Wed, 19 Nov 2025 10:43:00 +0900 Subject: [PATCH] ag-ui streamOptions example --- integrations/mastra/typescript/src/copilotkit.ts | 6 ++++++ integrations/mastra/typescript/src/mastra.ts | 9 +++++++-- integrations/mastra/typescript/src/utils.ts | 5 ++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/integrations/mastra/typescript/src/copilotkit.ts b/integrations/mastra/typescript/src/copilotkit.ts index 31b8ad8d8..02f79de98 100644 --- a/integrations/mastra/typescript/src/copilotkit.ts +++ b/integrations/mastra/typescript/src/copilotkit.ts @@ -8,18 +8,21 @@ import { import { RuntimeContext } from "@mastra/core/runtime-context"; import { registerApiRoute } from "@mastra/core/server"; import { MastraAgent } from "./mastra"; +import { AgentExecutionOptions } from "@mastra/core/agent"; export function registerCopilotKit | unknown = unknown>({ path, resourceId, serviceAdapter = new ExperimentalEmptyAdapter(), agents, setContext, + getAgentExecutionOptions, }: { path: string; resourceId: string; serviceAdapter?: CopilotServiceAdapter; agents?: Record; setContext?: (c: any, runtimeContext: RuntimeContext) => void | Promise; + getAgentExecutionOptions?: (c: any) => AgentExecutionOptions | Promise; }) { return registerApiRoute(path, { method: `ALL`, @@ -32,12 +35,15 @@ export function registerCopilotKit | unknown = unk await setContext(c, runtimeContext); } + const agentExecutionOptions = getAgentExecutionOptions ? await getAgentExecutionOptions(c) : {}; + const aguiAgents = agents || MastraAgent.getLocalAgents({ resourceId, mastra, runtimeContext, + agentExecutionOptions, }); const runtime = new CopilotRuntime({ diff --git a/integrations/mastra/typescript/src/mastra.ts b/integrations/mastra/typescript/src/mastra.ts index 27cbe4425..b3d5b67fa 100644 --- a/integrations/mastra/typescript/src/mastra.ts +++ b/integrations/mastra/typescript/src/mastra.ts @@ -13,7 +13,7 @@ import type { } from "@ag-ui/client"; import { AbstractAgent, EventType } from "@ag-ui/client"; import type { StorageThreadType } from "@mastra/core"; -import { Agent as LocalMastraAgent } from "@mastra/core/agent"; +import { AgentExecutionOptions, Agent as LocalMastraAgent } from "@mastra/core/agent"; import { RuntimeContext } from "@mastra/core/runtime-context"; import { randomUUID } from "@ag-ui/client"; import { Observable } from "rxjs"; @@ -35,6 +35,7 @@ export interface MastraAgentConfig extends AgentConfig { agent: LocalMastraAgent | RemoteMastraAgent; resourceId?: string; runtimeContext?: RuntimeContext; + agentExecutionOptions?: AgentExecutionOptions; } interface MastraAgentStreamOptions { @@ -54,13 +55,15 @@ export class MastraAgent extends AbstractAgent { agent: LocalMastraAgent | RemoteMastraAgent; resourceId?: string; runtimeContext?: RuntimeContext; + agentExecutionOptions?: AgentExecutionOptions; constructor(private config: MastraAgentConfig) { - const { agent, resourceId, runtimeContext, ...rest } = config; + const { agent, resourceId, runtimeContext, agentExecutionOptions, ...rest } = config; super(rest); this.agent = agent; this.resourceId = resourceId; this.runtimeContext = runtimeContext ?? new RuntimeContext(); + this.agentExecutionOptions = agentExecutionOptions ?? {}; } public clone() { @@ -282,6 +285,7 @@ export class MastraAgent extends AbstractAgent { runId, clientTools, runtimeContext, + ...this.agentExecutionOptions, }); // For local agents, the response should already be a stream @@ -337,6 +341,7 @@ export class MastraAgent extends AbstractAgent { runId, messages: convertedMessages, clientTools, + ...this.agentExecutionOptions, }); // Remote agents should have a processDataStream method diff --git a/integrations/mastra/typescript/src/utils.ts b/integrations/mastra/typescript/src/utils.ts index e775d353f..5a684ed46 100644 --- a/integrations/mastra/typescript/src/utils.ts +++ b/integrations/mastra/typescript/src/utils.ts @@ -2,7 +2,7 @@ import type { InputContent, Message } from "@ag-ui/client"; import { AbstractAgent } from "@ag-ui/client"; import { MastraClient } from "@mastra/client-js"; import type { CoreMessage, Mastra } from "@mastra/core"; -import { Agent as LocalMastraAgent } from "@mastra/core/agent"; +import { AgentExecutionOptions, Agent as LocalMastraAgent } from "@mastra/core/agent"; import { RuntimeContext } from "@mastra/core/runtime-context"; import { MastraAgent } from "./mastra"; @@ -117,12 +117,14 @@ export interface GetLocalAgentsOptions { mastra: Mastra; resourceId?: string; runtimeContext?: RuntimeContext; + agentExecutionOptions?: AgentExecutionOptions; } export function getLocalAgents({ mastra, resourceId, runtimeContext, + agentExecutionOptions, }: GetLocalAgentsOptions): Record { const agents = mastra.getAgents() || {}; @@ -133,6 +135,7 @@ export function getLocalAgents({ agent, resourceId, runtimeContext, + agentExecutionOptions, }); return acc; },