agents 0.0.80 → 0.0.82
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/ai-chat-agent.d.ts +27 -1
- package/dist/ai-chat-agent.js +99 -105
- package/dist/ai-chat-agent.js.map +1 -1
- package/dist/ai-react.js +0 -2
- package/dist/ai-react.js.map +1 -1
- package/dist/{chunk-D6UOOELW.js → chunk-BZXOAZUX.js} +11 -11
- package/dist/chunk-BZXOAZUX.js.map +1 -0
- package/dist/{chunk-RN4SNE73.js → chunk-QSGN3REV.js} +10 -20
- package/dist/chunk-QSGN3REV.js.map +1 -0
- package/dist/{chunk-YFPCCSZO.js → chunk-RIYR6FR6.js} +171 -181
- package/dist/chunk-RIYR6FR6.js.map +1 -0
- package/dist/{chunk-25YDMV4H.js → chunk-Y67CHZBI.js} +12 -12
- package/dist/chunk-Y67CHZBI.js.map +1 -0
- package/dist/client.d.ts +2 -1
- package/dist/client.js +1 -2
- package/dist/index.d.ts +35 -2
- package/dist/index.js +4 -5
- package/dist/mcp/client.d.ts +6 -6
- package/dist/mcp/client.js +1 -2
- package/dist/mcp/do-oauth-client-provider.d.ts +3 -3
- package/dist/mcp/do-oauth-client-provider.js +1 -2
- package/dist/mcp/index.d.ts +10 -1
- package/dist/mcp/index.js +85 -124
- package/dist/mcp/index.js.map +1 -1
- package/dist/react.js +0 -2
- package/dist/react.js.map +1 -1
- package/dist/schedule.js +0 -2
- package/dist/schedule.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +53 -54
- package/dist/chunk-25YDMV4H.js.map +0 -1
- package/dist/chunk-D6UOOELW.js.map +0 -1
- package/dist/chunk-HMLY7DHA.js +0 -16
- package/dist/chunk-HMLY7DHA.js.map +0 -1
- package/dist/chunk-RN4SNE73.js.map +0 -1
- package/dist/chunk-YFPCCSZO.js.map +0 -1
package/dist/mcp/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Agent
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import {
|
|
8
|
-
__privateAdd,
|
|
9
|
-
__privateGet,
|
|
10
|
-
__privateMethod,
|
|
11
|
-
__privateSet
|
|
12
|
-
} from "../chunk-HMLY7DHA.js";
|
|
3
|
+
} from "../chunk-RIYR6FR6.js";
|
|
4
|
+
import "../chunk-BZXOAZUX.js";
|
|
5
|
+
import "../chunk-QSGN3REV.js";
|
|
6
|
+
import "../chunk-Y67CHZBI.js";
|
|
13
7
|
|
|
14
8
|
// src/mcp/index.ts
|
|
15
9
|
import { DurableObject } from "cloudflare:workers";
|
|
@@ -38,24 +32,22 @@ function handleCORS(request, corsOptions) {
|
|
|
38
32
|
}
|
|
39
33
|
return null;
|
|
40
34
|
}
|
|
41
|
-
var _getWebSocket, _started;
|
|
42
35
|
var McpSSETransport = class {
|
|
43
36
|
constructor(getWebSocket) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
__privateSet(this, _getWebSocket, getWebSocket);
|
|
37
|
+
this._started = false;
|
|
38
|
+
this._getWebSocket = getWebSocket;
|
|
47
39
|
}
|
|
48
40
|
async start() {
|
|
49
|
-
if (
|
|
41
|
+
if (this._started) {
|
|
50
42
|
throw new Error("Transport already started");
|
|
51
43
|
}
|
|
52
|
-
|
|
44
|
+
this._started = true;
|
|
53
45
|
}
|
|
54
46
|
async send(message) {
|
|
55
|
-
if (!
|
|
47
|
+
if (!this._started) {
|
|
56
48
|
throw new Error("Transport not started");
|
|
57
49
|
}
|
|
58
|
-
const websocket =
|
|
50
|
+
const websocket = this._getWebSocket();
|
|
59
51
|
if (!websocket) {
|
|
60
52
|
throw new Error("WebSocket not connected");
|
|
61
53
|
}
|
|
@@ -70,52 +62,40 @@ var McpSSETransport = class {
|
|
|
70
62
|
this.onclose?.();
|
|
71
63
|
}
|
|
72
64
|
};
|
|
73
|
-
_getWebSocket = new WeakMap();
|
|
74
|
-
_started = new WeakMap();
|
|
75
|
-
var _getWebSocketForGetRequest, _getWebSocketForMessageID, _notifyResponseIdSent, _started2;
|
|
76
65
|
var McpStreamableHttpTransport = class {
|
|
77
66
|
constructor(getWebSocketForMessageID, notifyResponseIdSent) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
__privateAdd(this, _getWebSocketForMessageID);
|
|
83
|
-
// Notify the server that a response has been sent for a given message id
|
|
84
|
-
// so that it may clean up it's mapping of message ids to connections
|
|
85
|
-
// once they are no longer needed
|
|
86
|
-
__privateAdd(this, _notifyResponseIdSent);
|
|
87
|
-
__privateAdd(this, _started2, false);
|
|
88
|
-
__privateSet(this, _getWebSocketForMessageID, getWebSocketForMessageID);
|
|
89
|
-
__privateSet(this, _notifyResponseIdSent, notifyResponseIdSent);
|
|
90
|
-
__privateSet(this, _getWebSocketForGetRequest, () => null);
|
|
67
|
+
this._started = false;
|
|
68
|
+
this._getWebSocketForMessageID = getWebSocketForMessageID;
|
|
69
|
+
this._notifyResponseIdSent = notifyResponseIdSent;
|
|
70
|
+
this._getWebSocketForGetRequest = () => null;
|
|
91
71
|
}
|
|
92
72
|
async start() {
|
|
93
|
-
if (
|
|
73
|
+
if (this._started) {
|
|
94
74
|
throw new Error("Transport already started");
|
|
95
75
|
}
|
|
96
|
-
|
|
76
|
+
this._started = true;
|
|
97
77
|
}
|
|
98
78
|
async send(message) {
|
|
99
|
-
if (!
|
|
79
|
+
if (!this._started) {
|
|
100
80
|
throw new Error("Transport not started");
|
|
101
81
|
}
|
|
102
82
|
let websocket = null;
|
|
103
83
|
if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
|
|
104
|
-
websocket =
|
|
84
|
+
websocket = this._getWebSocketForMessageID(message.id.toString());
|
|
105
85
|
if (!websocket) {
|
|
106
86
|
throw new Error(
|
|
107
87
|
`Could not find WebSocket for message id: ${message.id}`
|
|
108
88
|
);
|
|
109
89
|
}
|
|
110
90
|
} else if (isJSONRPCRequest(message)) {
|
|
111
|
-
websocket =
|
|
91
|
+
websocket = this._getWebSocketForGetRequest();
|
|
112
92
|
} else if (isJSONRPCNotification(message)) {
|
|
113
93
|
websocket = null;
|
|
114
94
|
}
|
|
115
95
|
try {
|
|
116
96
|
websocket?.send(JSON.stringify(message));
|
|
117
97
|
if (isJSONRPCResponse(message)) {
|
|
118
|
-
|
|
98
|
+
this._notifyResponseIdSent(message.id.toString());
|
|
119
99
|
}
|
|
120
100
|
} catch (error) {
|
|
121
101
|
this.onerror?.(error);
|
|
@@ -126,28 +106,16 @@ var McpStreamableHttpTransport = class {
|
|
|
126
106
|
this.onclose?.();
|
|
127
107
|
}
|
|
128
108
|
};
|
|
129
|
-
|
|
130
|
-
_getWebSocketForMessageID = new WeakMap();
|
|
131
|
-
_notifyResponseIdSent = new WeakMap();
|
|
132
|
-
_started2 = new WeakMap();
|
|
133
|
-
var _status, _transport, _transportType, _requestIdToConnectionId, _agent, _McpAgent_instances, initialize_fn;
|
|
134
|
-
var _McpAgent = class _McpAgent extends DurableObject {
|
|
109
|
+
var McpAgent = class _McpAgent extends DurableObject {
|
|
135
110
|
constructor(ctx, env) {
|
|
136
111
|
var _a;
|
|
137
112
|
super(ctx, env);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
__privateAdd(this, _transportType, "unset");
|
|
142
|
-
__privateAdd(this, _requestIdToConnectionId, /* @__PURE__ */ new Map());
|
|
143
|
-
/**
|
|
144
|
-
* Since McpAgent's _aren't_ yet real "Agents", let's only expose a couple of the methods
|
|
145
|
-
* to the outer class: initialState/state/setState/onStateUpdate/sql
|
|
146
|
-
*/
|
|
147
|
-
__privateAdd(this, _agent);
|
|
113
|
+
this._status = "zero";
|
|
114
|
+
this._transportType = "unset";
|
|
115
|
+
this._requestIdToConnectionId = /* @__PURE__ */ new Map();
|
|
148
116
|
this.initRun = false;
|
|
149
117
|
const self = this;
|
|
150
|
-
|
|
118
|
+
this._agent = new (_a = class extends Agent {
|
|
151
119
|
onStateUpdate(state, source) {
|
|
152
120
|
return self.onStateUpdate(state, source);
|
|
153
121
|
}
|
|
@@ -156,26 +124,26 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
156
124
|
}
|
|
157
125
|
}, _a.options = {
|
|
158
126
|
hibernate: true
|
|
159
|
-
}, _a)(ctx, env)
|
|
127
|
+
}, _a)(ctx, env);
|
|
160
128
|
}
|
|
161
129
|
get mcp() {
|
|
162
|
-
return
|
|
130
|
+
return this._agent.mcp;
|
|
163
131
|
}
|
|
164
132
|
get state() {
|
|
165
|
-
return
|
|
133
|
+
return this._agent.state;
|
|
166
134
|
}
|
|
167
135
|
sql(strings, ...values) {
|
|
168
|
-
return
|
|
136
|
+
return this._agent.sql(strings, ...values);
|
|
169
137
|
}
|
|
170
138
|
setState(state) {
|
|
171
|
-
return
|
|
139
|
+
return this._agent.setState(state);
|
|
172
140
|
}
|
|
173
141
|
onStateUpdate(state, source) {
|
|
174
142
|
}
|
|
175
143
|
async onStart() {
|
|
176
144
|
var _a;
|
|
177
145
|
const self = this;
|
|
178
|
-
|
|
146
|
+
this._agent = new (_a = class extends Agent {
|
|
179
147
|
constructor() {
|
|
180
148
|
super(...arguments);
|
|
181
149
|
this.initialState = self.initialState;
|
|
@@ -188,22 +156,22 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
188
156
|
}
|
|
189
157
|
}, _a.options = {
|
|
190
158
|
hibernate: true
|
|
191
|
-
}, _a)(this.ctx, this.env)
|
|
159
|
+
}, _a)(this.ctx, this.env);
|
|
192
160
|
this.props = await this.ctx.storage.get("props");
|
|
193
|
-
|
|
161
|
+
this._transportType = await this.ctx.storage.get(
|
|
194
162
|
"transportType"
|
|
195
|
-
)
|
|
163
|
+
);
|
|
196
164
|
await this._init(this.props);
|
|
197
165
|
const server = await this.server;
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
await server.connect(
|
|
201
|
-
} else if (
|
|
202
|
-
|
|
166
|
+
if (this._transportType === "sse") {
|
|
167
|
+
this._transport = new McpSSETransport(() => this.getWebSocket());
|
|
168
|
+
await server.connect(this._transport);
|
|
169
|
+
} else if (this._transportType === "streamable-http") {
|
|
170
|
+
this._transport = new McpStreamableHttpTransport(
|
|
203
171
|
(id) => this.getWebSocketForResponseID(id),
|
|
204
|
-
(id) =>
|
|
205
|
-
)
|
|
206
|
-
await server.connect(
|
|
172
|
+
(id) => this._requestIdToConnectionId.delete(id)
|
|
173
|
+
);
|
|
174
|
+
await server.connect(this._transport);
|
|
207
175
|
}
|
|
208
176
|
}
|
|
209
177
|
async _init(props) {
|
|
@@ -223,10 +191,17 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
223
191
|
async isInitialized() {
|
|
224
192
|
return await this.ctx.storage.get("initialized") === true;
|
|
225
193
|
}
|
|
194
|
+
async _initialize() {
|
|
195
|
+
await this.ctx.blockConcurrencyWhile(async () => {
|
|
196
|
+
this._status = "starting";
|
|
197
|
+
await this.onStart();
|
|
198
|
+
this._status = "started";
|
|
199
|
+
});
|
|
200
|
+
}
|
|
226
201
|
// Allow the worker to fetch a websocket connection to the agent
|
|
227
202
|
async fetch(request) {
|
|
228
|
-
if (
|
|
229
|
-
await
|
|
203
|
+
if (this._status !== "started") {
|
|
204
|
+
await this._initialize();
|
|
230
205
|
}
|
|
231
206
|
if (request.headers.get("Upgrade") !== "websocket") {
|
|
232
207
|
return new Response("Expected WebSocket Upgrade request", {
|
|
@@ -243,24 +218,24 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
243
218
|
return new Response("Websocket already connected", { status: 400 });
|
|
244
219
|
}
|
|
245
220
|
await this.ctx.storage.put("transportType", "sse");
|
|
246
|
-
|
|
247
|
-
if (!
|
|
248
|
-
|
|
249
|
-
await server.connect(
|
|
221
|
+
this._transportType = "sse";
|
|
222
|
+
if (!this._transport) {
|
|
223
|
+
this._transport = new McpSSETransport(() => this.getWebSocket());
|
|
224
|
+
await server.connect(this._transport);
|
|
250
225
|
}
|
|
251
|
-
return
|
|
226
|
+
return this._agent.fetch(request);
|
|
252
227
|
}
|
|
253
228
|
case "/streamable-http": {
|
|
254
|
-
if (!
|
|
255
|
-
|
|
229
|
+
if (!this._transport) {
|
|
230
|
+
this._transport = new McpStreamableHttpTransport(
|
|
256
231
|
(id) => this.getWebSocketForResponseID(id),
|
|
257
|
-
(id) =>
|
|
258
|
-
)
|
|
259
|
-
await server.connect(
|
|
232
|
+
(id) => this._requestIdToConnectionId.delete(id)
|
|
233
|
+
);
|
|
234
|
+
await server.connect(this._transport);
|
|
260
235
|
}
|
|
261
236
|
await this.ctx.storage.put("transportType", "streamable-http");
|
|
262
|
-
|
|
263
|
-
return
|
|
237
|
+
this._transportType = "streamable-http";
|
|
238
|
+
return this._agent.fetch(request);
|
|
264
239
|
}
|
|
265
240
|
default:
|
|
266
241
|
return new Response(
|
|
@@ -279,19 +254,19 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
279
254
|
return websockets[0];
|
|
280
255
|
}
|
|
281
256
|
getWebSocketForResponseID(id) {
|
|
282
|
-
const connectionId =
|
|
257
|
+
const connectionId = this._requestIdToConnectionId.get(id);
|
|
283
258
|
if (connectionId === void 0) {
|
|
284
259
|
return null;
|
|
285
260
|
}
|
|
286
|
-
return
|
|
261
|
+
return this._agent.getConnection(connectionId) ?? null;
|
|
287
262
|
}
|
|
288
263
|
// All messages received here. This is currently never called
|
|
289
264
|
async onMessage(connection, event) {
|
|
290
|
-
if (
|
|
265
|
+
if (this._transportType !== "streamable-http") {
|
|
291
266
|
const err = new Error(
|
|
292
267
|
"Internal Server Error: Expected streamable-http protocol"
|
|
293
268
|
);
|
|
294
|
-
|
|
269
|
+
this._transport?.onerror?.(err);
|
|
295
270
|
return;
|
|
296
271
|
}
|
|
297
272
|
let message;
|
|
@@ -299,21 +274,21 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
299
274
|
const data = typeof event === "string" ? event : new TextDecoder().decode(event);
|
|
300
275
|
message = JSONRPCMessageSchema.parse(JSON.parse(data));
|
|
301
276
|
} catch (error) {
|
|
302
|
-
|
|
277
|
+
this._transport?.onerror?.(error);
|
|
303
278
|
return;
|
|
304
279
|
}
|
|
305
280
|
if (isJSONRPCRequest(message)) {
|
|
306
|
-
|
|
281
|
+
this._requestIdToConnectionId.set(message.id.toString(), connection.id);
|
|
307
282
|
}
|
|
308
|
-
|
|
283
|
+
this._transport?.onmessage?.(message);
|
|
309
284
|
}
|
|
310
285
|
// All messages received over SSE after the initial connection has been established
|
|
311
286
|
// will be passed here
|
|
312
287
|
async onSSEMcpMessage(sessionId, request) {
|
|
313
|
-
if (
|
|
314
|
-
await
|
|
288
|
+
if (this._status !== "started") {
|
|
289
|
+
await this._initialize();
|
|
315
290
|
}
|
|
316
|
-
if (
|
|
291
|
+
if (this._transportType !== "sse") {
|
|
317
292
|
return new Error("Internal Server Error: Expected SSE protocol");
|
|
318
293
|
}
|
|
319
294
|
try {
|
|
@@ -322,36 +297,36 @@ var _McpAgent = class _McpAgent extends DurableObject {
|
|
|
322
297
|
try {
|
|
323
298
|
parsedMessage = JSONRPCMessageSchema.parse(message);
|
|
324
299
|
} catch (error) {
|
|
325
|
-
|
|
300
|
+
this._transport?.onerror?.(error);
|
|
326
301
|
throw error;
|
|
327
302
|
}
|
|
328
|
-
|
|
303
|
+
this._transport?.onmessage?.(parsedMessage);
|
|
329
304
|
return null;
|
|
330
305
|
} catch (error) {
|
|
331
306
|
console.error("Error forwarding message to SSE:", error);
|
|
332
|
-
|
|
307
|
+
this._transport?.onerror?.(error);
|
|
333
308
|
return error;
|
|
334
309
|
}
|
|
335
310
|
}
|
|
336
311
|
// Delegate all websocket events to the underlying agent
|
|
337
312
|
async webSocketMessage(ws, event) {
|
|
338
|
-
if (
|
|
339
|
-
await
|
|
313
|
+
if (this._status !== "started") {
|
|
314
|
+
await this._initialize();
|
|
340
315
|
}
|
|
341
|
-
return await
|
|
316
|
+
return await this._agent.webSocketMessage(ws, event);
|
|
342
317
|
}
|
|
343
318
|
// WebSocket event handlers for hibernation support
|
|
344
319
|
async webSocketError(ws, error) {
|
|
345
|
-
if (
|
|
346
|
-
await
|
|
320
|
+
if (this._status !== "started") {
|
|
321
|
+
await this._initialize();
|
|
347
322
|
}
|
|
348
|
-
return await
|
|
323
|
+
return await this._agent.webSocketError(ws, error);
|
|
349
324
|
}
|
|
350
325
|
async webSocketClose(ws, code, reason, wasClean) {
|
|
351
|
-
if (
|
|
352
|
-
await
|
|
326
|
+
if (this._status !== "started") {
|
|
327
|
+
await this._initialize();
|
|
353
328
|
}
|
|
354
|
-
return await
|
|
329
|
+
return await this._agent.webSocketClose(ws, code, reason, wasClean);
|
|
355
330
|
}
|
|
356
331
|
static mount(path, {
|
|
357
332
|
binding = "MCP_OBJECT",
|
|
@@ -798,20 +773,6 @@ data: ${JSON.stringify(result.data)}
|
|
|
798
773
|
};
|
|
799
774
|
}
|
|
800
775
|
};
|
|
801
|
-
_status = new WeakMap();
|
|
802
|
-
_transport = new WeakMap();
|
|
803
|
-
_transportType = new WeakMap();
|
|
804
|
-
_requestIdToConnectionId = new WeakMap();
|
|
805
|
-
_agent = new WeakMap();
|
|
806
|
-
_McpAgent_instances = new WeakSet();
|
|
807
|
-
initialize_fn = async function() {
|
|
808
|
-
await this.ctx.blockConcurrencyWhile(async () => {
|
|
809
|
-
__privateSet(this, _status, "starting");
|
|
810
|
-
await this.onStart();
|
|
811
|
-
__privateSet(this, _status, "started");
|
|
812
|
-
});
|
|
813
|
-
};
|
|
814
|
-
var McpAgent = _McpAgent;
|
|
815
776
|
export {
|
|
816
777
|
McpAgent
|
|
817
778
|
};
|