@cloudbase/agent-adapter-openai-agent-sdk 0.0.2 → 0.0.3

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,71 @@
1
1
  # @cloudbase/agent-adapter-openai-agent-sdk
2
2
 
3
+ ## 0.0.11-alpha.3
4
+
5
+ ### Patch Changes
6
+
7
+ - alpha release 0.0.10-alpha.2
8
+ - Update all public packages to version 0.0.10-alpha.2
9
+ - Trigger automated alpha release workflow
10
+ - Includes latest features and improvements
11
+
12
+ - Updated dependencies
13
+ - @cloudbase/agent-agents@0.0.11-alpha.3
14
+
15
+ ## 0.0.11-alpha.2
16
+
17
+ ### Patch Changes
18
+
19
+ - alpha release 0.0.10-alpha.2
20
+ - Update all public packages to version 0.0.10-alpha.2
21
+ - Trigger automated alpha release workflow
22
+ - Includes latest features and improvements
23
+
24
+ - Updated dependencies
25
+ - @cloudbase/agent-agents@0.0.11-alpha.2
26
+
27
+ ## 0.0.11-alpha.1
28
+
29
+ ### Patch Changes
30
+
31
+ - alpha release 0.0.10-alpha.2
32
+ - Update all public packages to version 0.0.10-alpha.2
33
+ - Trigger automated alpha release workflow
34
+ - Includes latest features and improvements
35
+
36
+ - Updated dependencies
37
+ - @cloudbase/agent-agents@0.0.11-alpha.1
38
+
39
+ ## 0.0.11-alpha.0
40
+
41
+ ### Patch Changes
42
+
43
+ - 97b2740: alpha release 0.0.10-alpha.2
44
+ - Update all public packages to version 0.0.10-alpha.2
45
+ - Trigger automated alpha release workflow
46
+ - Includes latest features and improvements
47
+
48
+ - fd4c62a: alpha release 0.0.10-alpha.2
49
+ - Update all public packages to version 0.0.10-alpha.2
50
+ - Trigger automated alpha release workflow
51
+ - Includes latest features and improvements
52
+
53
+ - da3388c: alpha release 0.0.10-alpha.2
54
+ - Update all public packages to version 0.0.10-alpha.2
55
+ - Trigger automated alpha release workflow
56
+ - Includes latest features and improvements
57
+
58
+ - alpha release 0.0.10-alpha.2
59
+ - Update all public packages to version 0.0.10-alpha.2
60
+ - Trigger automated alpha release workflow
61
+ - Includes latest features and improvements
62
+
63
+ - Updated dependencies [97b2740]
64
+ - Updated dependencies [fd4c62a]
65
+ - Updated dependencies [da3388c]
66
+ - Updated dependencies
67
+ - @cloudbase/agent-agents@0.0.11-alpha.0
68
+
3
69
  ## 0.0.10
4
70
 
5
71
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -14,7 +14,7 @@ declare class OpenAIAgent extends AbstractAgent {
14
14
  private runner;
15
15
  private memory;
16
16
  constructor(agentConfig: OpenAIAgentConfig);
17
- protected run(input: RunAgentInput): Observable<BaseEvent>;
17
+ run(input: RunAgentInput): Observable<BaseEvent>;
18
18
  protected _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
19
19
  }
20
20
 
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ declare class OpenAIAgent extends AbstractAgent {
14
14
  private runner;
15
15
  private memory;
16
16
  constructor(agentConfig: OpenAIAgentConfig);
17
- protected run(input: RunAgentInput): Observable<BaseEvent>;
17
+ run(input: RunAgentInput): Observable<BaseEvent>;
18
18
  protected _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
19
19
  }
20
20
 
package/dist/index.js CHANGED
@@ -201,13 +201,16 @@ var OpenAIAgent = class extends import_client.AbstractAgent {
201
201
  }
202
202
  await this.memory.clear({ sessionId: threadId });
203
203
  for (const message of stream.history) {
204
- await this.memory.add({
205
- message: {
206
- role: message.role,
207
- content: message.content
204
+ await this.memory.add(
205
+ {
206
+ message: {
207
+ role: message.role,
208
+ content: message.content
209
+ },
210
+ state: message
208
211
  },
209
- state: message
210
- }, { sessionId: threadId });
212
+ { sessionId: threadId }
213
+ );
211
214
  }
212
215
  subscriber.next({
213
216
  type: import_client.EventType.RUN_FINISHED,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/agent.ts"],"sourcesContent":["export { OpenAIAgent } from './agent';","import { AbstractAgent, AgentConfig, BaseEvent, EventType, RunAgentInput, RunFinishedEvent, RunStartedEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ToolCallStartEvent } from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || 'OpenAI Agent';\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n protected run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error('Not implemented');\n },\n needsApproval: async (input: any) => {\n return true;\n },\n })\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (historyItem.message.content && historyItem.message.content.length > 0) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n\n }\n messages.forEach(message => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = []\n for await (const event of stream) {\n // LLM model events\n if (event?.type === 'raw_model_stream_event' && event?.data) {\n const data = event.data;\n switch (data.type) {\n case 'response_started': {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: 'assistant',\n } as TextMessageStartEvent);\n break;\n }\n case 'output_text_delta': {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case 'response_done': {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta = delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === 'tool_calls') {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === 'run_item_stream_event' && event?.item) {\n switch (event?.item?.type) {\n case 'tool_call_output_item': {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output\n } as ToolCallResultEvent)\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add({\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n }, { sessionId: threadId });\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["destr","input"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/agent.ts"],"sourcesContent":["export { OpenAIAgent } from './agent';","import {\n AbstractAgent,\n AgentConfig,\n BaseEvent,\n EventType,\n RunAgentInput,\n RunFinishedEvent,\n RunStartedEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n} from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory;\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || \"OpenAI Agent\";\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(\n subscriber: Subscriber<BaseEvent>,\n input: RunAgentInput\n ) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error(\"Not implemented\");\n },\n needsApproval: async (input: any) => {\n return true;\n },\n });\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (\n historyItem.message.content &&\n historyItem.message.content.length > 0\n ) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n }\n messages.forEach((message) => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = [];\n for await (const event of stream) {\n // LLM model events\n if (event?.type === \"raw_model_stream_event\" && event?.data) {\n const data = event.data;\n switch (data.type) {\n case \"response_started\": {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: \"assistant\",\n } as TextMessageStartEvent);\n break;\n }\n case \"output_text_delta\": {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case \"response_done\": {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta =\n delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === \"tool_calls\") {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === \"run_item_stream_event\" && event?.item) {\n switch (event?.item?.type) {\n case \"tool_call_output_item\": {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output,\n } as ToolCallResultEvent);\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add(\n {\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n },\n { sessionId: threadId }\n );\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["destr","input"]}
package/dist/index.mjs CHANGED
@@ -1,5 +1,8 @@
1
1
  // src/agent.ts
2
- import { AbstractAgent, EventType } from "@ag-ui/client";
2
+ import {
3
+ AbstractAgent,
4
+ EventType
5
+ } from "@ag-ui/client";
3
6
  import { Observable } from "rxjs";
4
7
  import { Runner, tool } from "@openai/agents";
5
8
  import destr from "destr";
@@ -165,13 +168,16 @@ var OpenAIAgent = class extends AbstractAgent {
165
168
  }
166
169
  await this.memory.clear({ sessionId: threadId });
167
170
  for (const message of stream.history) {
168
- await this.memory.add({
169
- message: {
170
- role: message.role,
171
- content: message.content
171
+ await this.memory.add(
172
+ {
173
+ message: {
174
+ role: message.role,
175
+ content: message.content
176
+ },
177
+ state: message
172
178
  },
173
- state: message
174
- }, { sessionId: threadId });
179
+ { sessionId: threadId }
180
+ );
175
181
  }
176
182
  subscriber.next({
177
183
  type: EventType.RUN_FINISHED,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agent.ts"],"sourcesContent":["import { AbstractAgent, AgentConfig, BaseEvent, EventType, RunAgentInput, RunFinishedEvent, RunStartedEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ToolCallStartEvent } from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || 'OpenAI Agent';\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n protected run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error('Not implemented');\n },\n needsApproval: async (input: any) => {\n return true;\n },\n })\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (historyItem.message.content && historyItem.message.content.length > 0) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n\n }\n messages.forEach(message => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = []\n for await (const event of stream) {\n // LLM model events\n if (event?.type === 'raw_model_stream_event' && event?.data) {\n const data = event.data;\n switch (data.type) {\n case 'response_started': {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: 'assistant',\n } as TextMessageStartEvent);\n break;\n }\n case 'output_text_delta': {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case 'response_done': {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta = delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === 'tool_calls') {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === 'run_item_stream_event' && event?.item) {\n switch (event?.item?.type) {\n case 'tool_call_output_item': {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output\n } as ToolCallResultEvent)\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add({\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n }, { sessionId: threadId });\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["input"]}
1
+ {"version":3,"sources":["../src/agent.ts"],"sourcesContent":["import {\n AbstractAgent,\n AgentConfig,\n BaseEvent,\n EventType,\n RunAgentInput,\n RunFinishedEvent,\n RunStartedEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n TextMessageStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n ToolCallStartEvent,\n} from \"@ag-ui/client\";\nimport { Observable, Subscriber } from \"rxjs\";\nimport { Agent, AgentInputItem, Runner, tool } from \"@openai/agents\";\nimport destr from \"destr\";\nimport { InMemoryMemory } from \"@cloudbase/agent-agents\";\n\ntype OpenAIAgentConfig = AgentConfig & {\n agent: Agent;\n runner?: Runner;\n memory?: InMemoryMemory;\n};\nexport class OpenAIAgent extends AbstractAgent {\n name: string;\n private agent: Agent;\n private runner: Runner;\n private memory: InMemoryMemory;\n constructor(agentConfig: OpenAIAgentConfig) {\n super(agentConfig);\n this.name = agentConfig.agent.name || \"OpenAI Agent\";\n this.agent = agentConfig.agent;\n this.runner = agentConfig.runner ?? new Runner();\n this.memory = agentConfig.memory ?? new InMemoryMemory();\n }\n run(input: RunAgentInput): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n this._run(subscriber, input);\n });\n }\n protected async _run(\n subscriber: Subscriber<BaseEvent>,\n input: RunAgentInput\n ) {\n const { messages, runId, threadId, tools, forwardedProps } = input;\n\n try {\n subscriber.next({\n type: EventType.RUN_STARTED,\n threadId,\n runId,\n } as RunStartedEvent);\n\n const frontendTools = (tools ?? [])?.map((t) => {\n const toolInstance = tool({\n name: t.name,\n description: t.description,\n parameters: destr(t.parameters),\n execute: async (input: any) => {\n throw new Error(\"Not implemented\");\n },\n needsApproval: async (input: any) => {\n return true;\n },\n });\n toolInstance.name = t.name;\n return toolInstance;\n });\n const agent = this.agent.clone({\n // @ts-ignore\n tools: [...this.agent.tools, ...frontendTools],\n });\n const messagesForRun: AgentInputItem[] = [];\n const history = await this.memory.list({ sessionId: threadId });\n for (const historyItem of history) {\n if (\n historyItem.message.content &&\n historyItem.message.content.length > 0\n ) {\n messagesForRun.push({\n role: historyItem.message.role,\n content: historyItem.message.content,\n });\n } else {\n messagesForRun.push(historyItem.state);\n }\n }\n messages.forEach((message) => {\n messagesForRun.push(message);\n });\n const stream = await this.runner.run(agent, messagesForRun, {\n stream: true,\n });\n let activeMessageId: string | undefined;\n\n const toolCallSlots: string[] = [];\n for await (const event of stream) {\n // LLM model events\n if (event?.type === \"raw_model_stream_event\" && event?.data) {\n const data = event.data;\n switch (data.type) {\n case \"response_started\": {\n // Start a new assistant message\n activeMessageId = generateId();\n subscriber.next({\n type: EventType.TEXT_MESSAGE_START,\n messageId: activeMessageId,\n role: \"assistant\",\n } as TextMessageStartEvent);\n break;\n }\n case \"output_text_delta\": {\n const delta: string | undefined = data.delta;\n if (delta && activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId: activeMessageId,\n delta,\n } as TextMessageContentEvent);\n }\n break;\n }\n case \"response_done\": {\n if (activeMessageId) {\n subscriber.next({\n type: EventType.TEXT_MESSAGE_END,\n messageId: activeMessageId,\n } as TextMessageEndEvent);\n activeMessageId = undefined;\n }\n break;\n }\n default: {\n // Try to parse provider chunk for tool call deltas\n const providerChunk = (data as any).event;\n const choices = providerChunk?.choices;\n if (Array.isArray(choices)) {\n for (const choice of choices) {\n const delta = choice?.delta ?? choice?.message?.delta;\n const toolCallsDelta =\n delta?.tool_calls ?? delta?.tool_calls_delta;\n if (Array.isArray(toolCallsDelta)) {\n for (const callDelta of toolCallsDelta) {\n if (!toolCallSlots[callDelta.index] && callDelta.id) {\n toolCallSlots[callDelta.index] = callDelta.id;\n subscriber.next({\n type: EventType.TOOL_CALL_START,\n toolCallId: callDelta.id,\n toolCallName: callDelta.function?.name,\n } as ToolCallStartEvent);\n if (callDelta.function?.arguments) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: callDelta.id,\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n } else if (toolCallSlots[callDelta.index]) {\n subscriber.next({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId: toolCallSlots[callDelta.index],\n delta: callDelta.function?.arguments,\n } as ToolCallArgsEvent);\n }\n }\n }\n if (choice?.finish_reason === \"tool_calls\") {\n for (const slot of toolCallSlots) {\n if (slot) {\n subscriber.next({\n type: EventType.TOOL_CALL_END,\n toolCallId: slot,\n } as ToolCallEndEvent);\n }\n }\n }\n }\n }\n }\n }\n continue;\n }\n\n // Agent SDK events\n if (event?.type === \"run_item_stream_event\" && event?.item) {\n switch (event?.item?.type) {\n case \"tool_call_output_item\": {\n subscriber.next({\n messageId: activeMessageId,\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: event?.item?.rawItem.callId,\n threadId,\n runId,\n content: event.item.output,\n } as ToolCallResultEvent);\n break;\n }\n }\n }\n // Ignore non-raw events per requirement\n continue;\n }\n await this.memory.clear({ sessionId: threadId });\n for (const message of stream.history) {\n await this.memory.add(\n {\n message: {\n role: message.role,\n content: message.content,\n },\n state: message,\n },\n { sessionId: threadId }\n );\n }\n\n subscriber.next({\n type: EventType.RUN_FINISHED,\n threadId,\n runId,\n } as RunFinishedEvent);\n } catch (error) {\n subscriber.error(error);\n }\n }\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n"],"mappings":"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","names":["input"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/agent-adapter-openai-agent-sdk",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "OpenAI Agent SDK adapter for AG-Kit agents",
5
5
  "files": [
6
6
  "dist/",
@@ -36,16 +36,16 @@
36
36
  "typescript": "^5.0.0"
37
37
  },
38
38
  "dependencies": {
39
- "@ag-ui/client": "0.0.37",
39
+ "@ag-ui/client": "0.0.42",
40
40
  "@openai/agents": "^0.2.1",
41
41
  "destr": "^2.0.5",
42
42
  "rxjs": "^7.8.1",
43
43
  "zod": "^3.25.0 || ^4.0.0",
44
- "@cloudbase/agent-agents": "0.0.2"
44
+ "@cloudbase/agent-agents": "0.0.3"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "zod": "^3.25.0 || ^4.0.0",
48
- "@cloudbase/agent-agents": "0.0.2"
48
+ "@cloudbase/agent-agents": "0.0.3"
49
49
  },
50
50
  "scripts": {
51
51
  "test": "echo \"Error: no test specified\" && exit 1",