@openai/agents-realtime 0.4.7 → 0.4.8
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/dist/bundle/openai-realtime-agents.mjs +3386 -3346
- package/dist/bundle/openai-realtime-agents.umd.js +18 -18
- package/dist/metadata.js +2 -2
- package/dist/metadata.mjs +2 -2
- package/dist/openaiRealtimeWebRtc.js +97 -31
- package/dist/openaiRealtimeWebRtc.js.map +1 -1
- package/dist/openaiRealtimeWebRtc.mjs +97 -31
- package/dist/openaiRealtimeWebRtc.mjs.map +1 -1
- package/package.json +2 -2
package/dist/metadata.js
CHANGED
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.METADATA = void 0;
|
|
5
5
|
exports.METADATA = {
|
|
6
6
|
"name": "@openai/agents-realtime",
|
|
7
|
-
"version": "0.4.
|
|
7
|
+
"version": "0.4.8",
|
|
8
8
|
"versions": {
|
|
9
|
-
"@openai/agents-realtime": "0.4.
|
|
9
|
+
"@openai/agents-realtime": "0.4.8",
|
|
10
10
|
"@openai/agents-core": "workspace:*"
|
|
11
11
|
}
|
|
12
12
|
};
|
package/dist/metadata.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is automatically generated
|
|
2
2
|
export const METADATA = {
|
|
3
3
|
"name": "@openai/agents-realtime",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.8",
|
|
5
5
|
"versions": {
|
|
6
|
-
"@openai/agents-realtime": "0.4.
|
|
6
|
+
"@openai/agents-realtime": "0.4.8",
|
|
7
7
|
"@openai/agents-core": "workspace:*"
|
|
8
8
|
}
|
|
9
9
|
};
|
|
@@ -31,6 +31,8 @@ class OpenAIRealtimeWebRTC extends openaiRealtimeBase_1.OpenAIRealtimeBase {
|
|
|
31
31
|
#useInsecureApiKey;
|
|
32
32
|
#ongoingResponse = false;
|
|
33
33
|
#muted = false;
|
|
34
|
+
#connectPromise;
|
|
35
|
+
#connectAttemptId = 0;
|
|
34
36
|
constructor(options = {}) {
|
|
35
37
|
if (typeof RTCPeerConnection === 'undefined') {
|
|
36
38
|
throw new Error('WebRTC is not supported in this environment');
|
|
@@ -79,7 +81,11 @@ class OpenAIRealtimeWebRTC extends openaiRealtimeBase_1.OpenAIRealtimeBase {
|
|
|
79
81
|
return;
|
|
80
82
|
}
|
|
81
83
|
if (this.#state.status === 'connecting') {
|
|
82
|
-
|
|
84
|
+
if (this.#connectPromise) {
|
|
85
|
+
return this.#connectPromise;
|
|
86
|
+
}
|
|
87
|
+
logger_1.default.warn('Realtime connection already in progress but no promise found');
|
|
88
|
+
return;
|
|
83
89
|
}
|
|
84
90
|
const model = options.model ?? this.currentModel;
|
|
85
91
|
this.currentModel = model;
|
|
@@ -89,8 +95,9 @@ class OpenAIRealtimeWebRTC extends openaiRealtimeBase_1.OpenAIRealtimeBase {
|
|
|
89
95
|
if ((0, _shims_1.isBrowserEnvironment)() && !this.#useInsecureApiKey && !isClientKey) {
|
|
90
96
|
throw new agents_core_1.UserError('Using the WebRTC connection in a browser environment requires an ephemeral client key. If you need to use a regular API key, use the WebSocket transport or set the `useInsecureApiKey` option to true.');
|
|
91
97
|
}
|
|
98
|
+
const attemptId = ++this.#connectAttemptId;
|
|
92
99
|
// eslint-disable-next-line no-async-promise-executor
|
|
93
|
-
|
|
100
|
+
this.#connectPromise = new Promise(async (resolve, reject) => {
|
|
94
101
|
try {
|
|
95
102
|
const userSessionConfig = {
|
|
96
103
|
...(options.initialSessionConfig || {}),
|
|
@@ -123,46 +130,98 @@ class OpenAIRealtimeWebRTC extends openaiRealtimeBase_1.OpenAIRealtimeBase {
|
|
|
123
130
|
this.emit('connection_change', this.#state.status);
|
|
124
131
|
dataChannel.addEventListener('open', () => {
|
|
125
132
|
this.#state = {
|
|
126
|
-
status: '
|
|
133
|
+
status: 'connecting',
|
|
127
134
|
peerConnection,
|
|
128
135
|
dataChannel,
|
|
129
136
|
callId,
|
|
130
137
|
};
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
|
|
138
|
+
// Wait for session.updated acknowledgement before resolving connect().
|
|
139
|
+
// Without this, audio can flow to the server before config (instructions,
|
|
140
|
+
// tools, modalities) is applied, causing the server to use defaults.
|
|
141
|
+
let resolved = false;
|
|
142
|
+
// eslint-disable-next-line prefer-const -- declared before finish() to avoid TDZ if a callback fires synchronously
|
|
143
|
+
let timeoutId;
|
|
144
|
+
const finish = () => {
|
|
145
|
+
if (resolved)
|
|
146
|
+
return;
|
|
147
|
+
resolved = true;
|
|
148
|
+
if (timeoutId !== undefined)
|
|
149
|
+
clearTimeout(timeoutId);
|
|
150
|
+
dataChannel.removeEventListener('message', onConfigAck);
|
|
151
|
+
dataChannel.removeEventListener('close', onClose);
|
|
152
|
+
// Reject if the transport was closed/errored while waiting,
|
|
153
|
+
// the dataChannel is no longer open, or a different connection
|
|
154
|
+
// attempt is now active (stale timeout from an earlier connect).
|
|
155
|
+
if (this.#state.status !== 'connecting' ||
|
|
156
|
+
this.#state.dataChannel !== dataChannel ||
|
|
157
|
+
dataChannel.readyState !== 'open') {
|
|
158
|
+
// Transition to disconnected if this attempt is still the
|
|
159
|
+
// active one so that callers can retry connect() without
|
|
160
|
+
// needing to call close() first.
|
|
161
|
+
if (this.#state.dataChannel === dataChannel) {
|
|
162
|
+
this.close();
|
|
163
|
+
}
|
|
164
|
+
reject(new Error('Connection closed before session config was acknowledged'));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.#state = {
|
|
168
|
+
status: 'connected',
|
|
169
|
+
peerConnection,
|
|
170
|
+
dataChannel,
|
|
171
|
+
callId,
|
|
172
|
+
};
|
|
173
|
+
this.emit('connection_change', this.#state.status);
|
|
174
|
+
this._onOpen();
|
|
175
|
+
resolve();
|
|
176
|
+
};
|
|
177
|
+
const onConfigAck = (ackEvent) => {
|
|
178
|
+
const parsed = JSON.parse(ackEvent.data);
|
|
179
|
+
if (parsed.type === 'session.updated') {
|
|
180
|
+
finish();
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
const onClose = () => {
|
|
184
|
+
finish();
|
|
185
|
+
};
|
|
186
|
+
timeoutId = setTimeout(() => {
|
|
187
|
+
if (!resolved) {
|
|
188
|
+
logger_1.default.warn('Timed out waiting for session.updated ack — resolving connect() anyway');
|
|
189
|
+
finish();
|
|
190
|
+
}
|
|
191
|
+
}, 5000);
|
|
192
|
+
dataChannel.addEventListener('message', onConfigAck);
|
|
193
|
+
dataChannel.addEventListener('close', onClose);
|
|
194
|
+
// Register the general message handler AFTER onConfigAck so that
|
|
195
|
+
// finish() resolves connect() before _onMessage emits the
|
|
196
|
+
// session.updated event to external listeners.
|
|
197
|
+
dataChannel.addEventListener('message', (event) => {
|
|
198
|
+
this._onMessage(event);
|
|
199
|
+
const { data: parsed, isGeneric } = (0, openaiRealtimeEvents_1.parseRealtimeEvent)(event);
|
|
200
|
+
if (!parsed || isGeneric) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (parsed.type === 'response.created') {
|
|
204
|
+
this.#ongoingResponse = true;
|
|
205
|
+
}
|
|
206
|
+
else if (parsed.type === 'response.done') {
|
|
207
|
+
this.#ongoingResponse = false;
|
|
208
|
+
}
|
|
209
|
+
if (parsed.type === 'session.created') {
|
|
210
|
+
this._tracingConfig = parsed.session.tracing;
|
|
211
|
+
// Trying to turn on tracing after the session is created
|
|
212
|
+
const tracingConfig = typeof userSessionConfig.tracing === 'undefined'
|
|
213
|
+
? 'auto'
|
|
214
|
+
: userSessionConfig.tracing;
|
|
215
|
+
this._updateTracingConfig(tracingConfig);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
135
218
|
this.updateSessionConfig(userSessionConfig);
|
|
136
|
-
this.emit('connection_change', this.#state.status);
|
|
137
|
-
this._onOpen();
|
|
138
|
-
resolve();
|
|
139
219
|
});
|
|
140
220
|
dataChannel.addEventListener('error', (event) => {
|
|
141
221
|
this.close();
|
|
142
222
|
this._onError(event);
|
|
143
223
|
reject(event);
|
|
144
224
|
});
|
|
145
|
-
dataChannel.addEventListener('message', (event) => {
|
|
146
|
-
this._onMessage(event);
|
|
147
|
-
const { data: parsed, isGeneric } = (0, openaiRealtimeEvents_1.parseRealtimeEvent)(event);
|
|
148
|
-
if (!parsed || isGeneric) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
if (parsed.type === 'response.created') {
|
|
152
|
-
this.#ongoingResponse = true;
|
|
153
|
-
}
|
|
154
|
-
else if (parsed.type === 'response.done') {
|
|
155
|
-
this.#ongoingResponse = false;
|
|
156
|
-
}
|
|
157
|
-
if (parsed.type === 'session.created') {
|
|
158
|
-
this._tracingConfig = parsed.session.tracing;
|
|
159
|
-
// Trying to turn on tracing after the session is created
|
|
160
|
-
const tracingConfig = typeof userSessionConfig.tracing === 'undefined'
|
|
161
|
-
? 'auto'
|
|
162
|
-
: userSessionConfig.tracing;
|
|
163
|
-
this._updateTracingConfig(tracingConfig);
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
225
|
// set up audio playback
|
|
167
226
|
const audioElement = this.options.audioElement ?? document.createElement('audio');
|
|
168
227
|
audioElement.autoplay = true;
|
|
@@ -212,7 +271,14 @@ class OpenAIRealtimeWebRTC extends openaiRealtimeBase_1.OpenAIRealtimeBase {
|
|
|
212
271
|
this._onError(error);
|
|
213
272
|
reject(error);
|
|
214
273
|
}
|
|
274
|
+
}).finally(() => {
|
|
275
|
+
// Only clear if this is still the active connection attempt.
|
|
276
|
+
// A newer connect() may have already replaced #connectPromise.
|
|
277
|
+
if (this.#connectAttemptId === attemptId) {
|
|
278
|
+
this.#connectPromise = undefined;
|
|
279
|
+
}
|
|
215
280
|
});
|
|
281
|
+
return this.#connectPromise;
|
|
216
282
|
}
|
|
217
283
|
/**
|
|
218
284
|
* Send an event to the Realtime API. This will stringify the event and send it directly to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openaiRealtimeWebRtc.js","sourceRoot":"","sources":["../src/openaiRealtimeWebRtc.ts"],"names":[],"mappings":";AAAA,2BAA2B;;;;;;AAE3B,uDAAkE;AAMlE,qDAAgD;AAChD,yDAA8B;AAE9B,gEAG8B;AAC9B,oEAA4D;AAC5D,sCAAkC;AA4DlC;;;;;;;GAOG;AACH,MAAa,oBACX,SAAQ,uCAAkB;
|
|
1
|
+
{"version":3,"file":"openaiRealtimeWebRtc.js","sourceRoot":"","sources":["../src/openaiRealtimeWebRtc.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ export class OpenAIRealtimeWebRTC extends OpenAIRealtimeBase {
|
|
|
25
25
|
#useInsecureApiKey;
|
|
26
26
|
#ongoingResponse = false;
|
|
27
27
|
#muted = false;
|
|
28
|
+
#connectPromise;
|
|
29
|
+
#connectAttemptId = 0;
|
|
28
30
|
constructor(options = {}) {
|
|
29
31
|
if (typeof RTCPeerConnection === 'undefined') {
|
|
30
32
|
throw new Error('WebRTC is not supported in this environment');
|
|
@@ -73,7 +75,11 @@ export class OpenAIRealtimeWebRTC extends OpenAIRealtimeBase {
|
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
77
|
if (this.#state.status === 'connecting') {
|
|
76
|
-
|
|
78
|
+
if (this.#connectPromise) {
|
|
79
|
+
return this.#connectPromise;
|
|
80
|
+
}
|
|
81
|
+
logger.warn('Realtime connection already in progress but no promise found');
|
|
82
|
+
return;
|
|
77
83
|
}
|
|
78
84
|
const model = options.model ?? this.currentModel;
|
|
79
85
|
this.currentModel = model;
|
|
@@ -83,8 +89,9 @@ export class OpenAIRealtimeWebRTC extends OpenAIRealtimeBase {
|
|
|
83
89
|
if (isBrowserEnvironment() && !this.#useInsecureApiKey && !isClientKey) {
|
|
84
90
|
throw new UserError('Using the WebRTC connection in a browser environment requires an ephemeral client key. If you need to use a regular API key, use the WebSocket transport or set the `useInsecureApiKey` option to true.');
|
|
85
91
|
}
|
|
92
|
+
const attemptId = ++this.#connectAttemptId;
|
|
86
93
|
// eslint-disable-next-line no-async-promise-executor
|
|
87
|
-
|
|
94
|
+
this.#connectPromise = new Promise(async (resolve, reject) => {
|
|
88
95
|
try {
|
|
89
96
|
const userSessionConfig = {
|
|
90
97
|
...(options.initialSessionConfig || {}),
|
|
@@ -117,46 +124,98 @@ export class OpenAIRealtimeWebRTC extends OpenAIRealtimeBase {
|
|
|
117
124
|
this.emit('connection_change', this.#state.status);
|
|
118
125
|
dataChannel.addEventListener('open', () => {
|
|
119
126
|
this.#state = {
|
|
120
|
-
status: '
|
|
127
|
+
status: 'connecting',
|
|
121
128
|
peerConnection,
|
|
122
129
|
dataChannel,
|
|
123
130
|
callId,
|
|
124
131
|
};
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
|
|
132
|
+
// Wait for session.updated acknowledgement before resolving connect().
|
|
133
|
+
// Without this, audio can flow to the server before config (instructions,
|
|
134
|
+
// tools, modalities) is applied, causing the server to use defaults.
|
|
135
|
+
let resolved = false;
|
|
136
|
+
// eslint-disable-next-line prefer-const -- declared before finish() to avoid TDZ if a callback fires synchronously
|
|
137
|
+
let timeoutId;
|
|
138
|
+
const finish = () => {
|
|
139
|
+
if (resolved)
|
|
140
|
+
return;
|
|
141
|
+
resolved = true;
|
|
142
|
+
if (timeoutId !== undefined)
|
|
143
|
+
clearTimeout(timeoutId);
|
|
144
|
+
dataChannel.removeEventListener('message', onConfigAck);
|
|
145
|
+
dataChannel.removeEventListener('close', onClose);
|
|
146
|
+
// Reject if the transport was closed/errored while waiting,
|
|
147
|
+
// the dataChannel is no longer open, or a different connection
|
|
148
|
+
// attempt is now active (stale timeout from an earlier connect).
|
|
149
|
+
if (this.#state.status !== 'connecting' ||
|
|
150
|
+
this.#state.dataChannel !== dataChannel ||
|
|
151
|
+
dataChannel.readyState !== 'open') {
|
|
152
|
+
// Transition to disconnected if this attempt is still the
|
|
153
|
+
// active one so that callers can retry connect() without
|
|
154
|
+
// needing to call close() first.
|
|
155
|
+
if (this.#state.dataChannel === dataChannel) {
|
|
156
|
+
this.close();
|
|
157
|
+
}
|
|
158
|
+
reject(new Error('Connection closed before session config was acknowledged'));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
this.#state = {
|
|
162
|
+
status: 'connected',
|
|
163
|
+
peerConnection,
|
|
164
|
+
dataChannel,
|
|
165
|
+
callId,
|
|
166
|
+
};
|
|
167
|
+
this.emit('connection_change', this.#state.status);
|
|
168
|
+
this._onOpen();
|
|
169
|
+
resolve();
|
|
170
|
+
};
|
|
171
|
+
const onConfigAck = (ackEvent) => {
|
|
172
|
+
const parsed = JSON.parse(ackEvent.data);
|
|
173
|
+
if (parsed.type === 'session.updated') {
|
|
174
|
+
finish();
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const onClose = () => {
|
|
178
|
+
finish();
|
|
179
|
+
};
|
|
180
|
+
timeoutId = setTimeout(() => {
|
|
181
|
+
if (!resolved) {
|
|
182
|
+
logger.warn('Timed out waiting for session.updated ack — resolving connect() anyway');
|
|
183
|
+
finish();
|
|
184
|
+
}
|
|
185
|
+
}, 5000);
|
|
186
|
+
dataChannel.addEventListener('message', onConfigAck);
|
|
187
|
+
dataChannel.addEventListener('close', onClose);
|
|
188
|
+
// Register the general message handler AFTER onConfigAck so that
|
|
189
|
+
// finish() resolves connect() before _onMessage emits the
|
|
190
|
+
// session.updated event to external listeners.
|
|
191
|
+
dataChannel.addEventListener('message', (event) => {
|
|
192
|
+
this._onMessage(event);
|
|
193
|
+
const { data: parsed, isGeneric } = parseRealtimeEvent(event);
|
|
194
|
+
if (!parsed || isGeneric) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (parsed.type === 'response.created') {
|
|
198
|
+
this.#ongoingResponse = true;
|
|
199
|
+
}
|
|
200
|
+
else if (parsed.type === 'response.done') {
|
|
201
|
+
this.#ongoingResponse = false;
|
|
202
|
+
}
|
|
203
|
+
if (parsed.type === 'session.created') {
|
|
204
|
+
this._tracingConfig = parsed.session.tracing;
|
|
205
|
+
// Trying to turn on tracing after the session is created
|
|
206
|
+
const tracingConfig = typeof userSessionConfig.tracing === 'undefined'
|
|
207
|
+
? 'auto'
|
|
208
|
+
: userSessionConfig.tracing;
|
|
209
|
+
this._updateTracingConfig(tracingConfig);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
129
212
|
this.updateSessionConfig(userSessionConfig);
|
|
130
|
-
this.emit('connection_change', this.#state.status);
|
|
131
|
-
this._onOpen();
|
|
132
|
-
resolve();
|
|
133
213
|
});
|
|
134
214
|
dataChannel.addEventListener('error', (event) => {
|
|
135
215
|
this.close();
|
|
136
216
|
this._onError(event);
|
|
137
217
|
reject(event);
|
|
138
218
|
});
|
|
139
|
-
dataChannel.addEventListener('message', (event) => {
|
|
140
|
-
this._onMessage(event);
|
|
141
|
-
const { data: parsed, isGeneric } = parseRealtimeEvent(event);
|
|
142
|
-
if (!parsed || isGeneric) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (parsed.type === 'response.created') {
|
|
146
|
-
this.#ongoingResponse = true;
|
|
147
|
-
}
|
|
148
|
-
else if (parsed.type === 'response.done') {
|
|
149
|
-
this.#ongoingResponse = false;
|
|
150
|
-
}
|
|
151
|
-
if (parsed.type === 'session.created') {
|
|
152
|
-
this._tracingConfig = parsed.session.tracing;
|
|
153
|
-
// Trying to turn on tracing after the session is created
|
|
154
|
-
const tracingConfig = typeof userSessionConfig.tracing === 'undefined'
|
|
155
|
-
? 'auto'
|
|
156
|
-
: userSessionConfig.tracing;
|
|
157
|
-
this._updateTracingConfig(tracingConfig);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
219
|
// set up audio playback
|
|
161
220
|
const audioElement = this.options.audioElement ?? document.createElement('audio');
|
|
162
221
|
audioElement.autoplay = true;
|
|
@@ -206,7 +265,14 @@ export class OpenAIRealtimeWebRTC extends OpenAIRealtimeBase {
|
|
|
206
265
|
this._onError(error);
|
|
207
266
|
reject(error);
|
|
208
267
|
}
|
|
268
|
+
}).finally(() => {
|
|
269
|
+
// Only clear if this is still the active connection attempt.
|
|
270
|
+
// A newer connect() may have already replaced #connectPromise.
|
|
271
|
+
if (this.#connectAttemptId === attemptId) {
|
|
272
|
+
this.#connectPromise = undefined;
|
|
273
|
+
}
|
|
209
274
|
});
|
|
275
|
+
return this.#connectPromise;
|
|
210
276
|
}
|
|
211
277
|
/**
|
|
212
278
|
* Send an event to the Realtime API. This will stringify the event and send it directly to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openaiRealtimeWebRtc.mjs","sourceRoot":"","sources":["../src/openaiRealtimeWebRtc.ts"],"names":[],"mappings":"AAAA,2BAA2B;OAEpB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B;OAM1D,EAAE,SAAS,EAAE,MAAM,qBAAqB;OACxC,MAAM;OAEN,EACL,kBAAkB,GAEnB;OACM,EAAE,kBAAkB,EAAE;OACtB,EAAE,OAAO,EAAE;AA4DlB;;;;;;;GAOG;AACH,MAAM,OAAO,oBACX,SAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"openaiRealtimeWebRtc.mjs","sourceRoot":"","sources":["../src/openaiRealtimeWebRtc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@openai/agents-realtime",
|
|
3
3
|
"repository": "https://github.com/openai/openai-agents-js",
|
|
4
4
|
"homepage": "https://openai.github.io/openai-agents-js/",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.8",
|
|
6
6
|
"description": "The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows. This package contains the logic for building realtime voice agents on the server or in the browser.",
|
|
7
7
|
"author": "OpenAI <support@openai.com>",
|
|
8
8
|
"main": "dist/index.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@types/ws": "^8.18.1",
|
|
52
52
|
"debug": "^4.4.0",
|
|
53
53
|
"ws": "^8.18.1",
|
|
54
|
-
"@openai/agents-core": "0.4.
|
|
54
|
+
"@openai/agents-core": "0.4.8"
|
|
55
55
|
},
|
|
56
56
|
"keywords": [
|
|
57
57
|
"openai",
|