@cloudbase/agent-server 0.0.13 → 0.0.14
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 +24 -0
- package/dist/index.d.ts +22 -2
- package/dist/index.js +143 -5
- package/package.json +7 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @cloudbase/agent-server
|
|
2
2
|
|
|
3
|
+
## 1.0.1-alpha.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- alpha release 0.1.2-alpha.1
|
|
8
|
+
- Update all public packages to version 0.1.2-alpha.1
|
|
9
|
+
- Trigger automated alpha release workflow
|
|
10
|
+
- Includes latest features and improvements
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @cloudbase/agent-shared@1.0.1-alpha.8
|
|
14
|
+
|
|
15
|
+
## 1.0.1-alpha.7
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- alpha release 0.1.2-alpha.1
|
|
20
|
+
- Update all public packages to version 0.1.2-alpha.1
|
|
21
|
+
- Trigger automated alpha release workflow
|
|
22
|
+
- Includes latest features and improvements
|
|
23
|
+
|
|
24
|
+
- Updated dependencies
|
|
25
|
+
- @cloudbase/agent-shared@1.0.1-alpha.7
|
|
26
|
+
|
|
3
27
|
## 1.0.1-alpha.6
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import * as _ag_ui_client from '@ag-ui/client';
|
|
|
5
5
|
import { AbstractAgent, RunAgentInput } from '@ag-ui/client';
|
|
6
6
|
import cors from 'cors';
|
|
7
7
|
import { Logger, SendMessageInput } from '@cloudbase/agent-shared';
|
|
8
|
-
export { LogFn, Logger, createConsoleLogger, noopLogger } from '@cloudbase/agent-shared';
|
|
8
|
+
export { LogFn, Logger, createConsoleLogger, isErrorWithCode, noopLogger } from '@cloudbase/agent-shared';
|
|
9
9
|
import { Repeater } from '@repeaterjs/repeater';
|
|
10
10
|
import * as _whatwg_node_server from '@whatwg-node/server';
|
|
11
11
|
import { OpenAI } from 'openai';
|
|
@@ -188,4 +188,24 @@ declare function extractRequestId(headers: Headers | Record<string, string | str
|
|
|
188
188
|
*/
|
|
189
189
|
declare function getOrGenerateRequestId(headers: Headers | Record<string, string | string[] | undefined>, prefix?: string): string;
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
/**
|
|
192
|
+
* AG-Kit Error Handling
|
|
193
|
+
*
|
|
194
|
+
* Error handling follows these rules:
|
|
195
|
+
* 1. Pre-stream errors: Return JSON `{error: {code, message}, requestId}`
|
|
196
|
+
* 2. In-stream errors: Emit RunError event `{type: "RUN_ERROR", code, message}`
|
|
197
|
+
*
|
|
198
|
+
* Adapters can:
|
|
199
|
+
* - Directly emit RunError events into the stream
|
|
200
|
+
* - Throw errors with a `code` property (server extracts and converts to RunError)
|
|
201
|
+
* - Throw other errors (server uses fallback INTERNAL_ERROR code)
|
|
202
|
+
*/
|
|
203
|
+
declare const ErrorCode: {
|
|
204
|
+
/** Invalid request format or parameters (400) */
|
|
205
|
+
readonly INVALID_REQUEST: "INVALID_REQUEST";
|
|
206
|
+
/** Internal server error (500) */
|
|
207
|
+
readonly INTERNAL_ERROR: "INTERNAL_ERROR";
|
|
208
|
+
};
|
|
209
|
+
type ErrorCodeType = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
210
|
+
|
|
211
|
+
export { type AgentCreator, type AgentCreatorContext, ErrorCode, type ErrorCodeType, index as agui, createExpressRoutes, createExpressServer, extractRequestId, generateRequestId, getOrGenerateRequestId, run };
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/index.ts
|
|
30
30
|
var index_exports = {};
|
|
31
31
|
__export(index_exports, {
|
|
32
|
+
ErrorCode: () => ErrorCode,
|
|
32
33
|
agui: () => agui_exports,
|
|
33
34
|
createConsoleLogger: () => import_agent_shared2.createConsoleLogger,
|
|
34
35
|
createExpressRoutes: () => createExpressRoutes,
|
|
@@ -36,6 +37,7 @@ __export(index_exports, {
|
|
|
36
37
|
extractRequestId: () => extractRequestId,
|
|
37
38
|
generateRequestId: () => generateRequestId,
|
|
38
39
|
getOrGenerateRequestId: () => getOrGenerateRequestId,
|
|
40
|
+
isErrorWithCode: () => import_agent_shared3.isErrorWithCode,
|
|
39
41
|
noopLogger: () => import_agent_shared2.noopLogger,
|
|
40
42
|
run: () => run
|
|
41
43
|
});
|
|
@@ -266,6 +268,126 @@ function getOrGenerateRequestId(headers, prefix = "req") {
|
|
|
266
268
|
return extractRequestId(headers) || generateRequestId(prefix);
|
|
267
269
|
}
|
|
268
270
|
|
|
271
|
+
// src/agui/sendMessageAGUI/schemas.ts
|
|
272
|
+
var import_v4 = require("zod/v4");
|
|
273
|
+
var FunctionCallSchema = import_v4.z.object({
|
|
274
|
+
name: import_v4.z.string(),
|
|
275
|
+
arguments: import_v4.z.string()
|
|
276
|
+
});
|
|
277
|
+
var ToolCallSchema = import_v4.z.object({
|
|
278
|
+
id: import_v4.z.string(),
|
|
279
|
+
type: import_v4.z.literal("function"),
|
|
280
|
+
function: FunctionCallSchema
|
|
281
|
+
});
|
|
282
|
+
var ToolSchema = import_v4.z.object({
|
|
283
|
+
name: import_v4.z.string(),
|
|
284
|
+
description: import_v4.z.string(),
|
|
285
|
+
parameters: import_v4.z.any()
|
|
286
|
+
});
|
|
287
|
+
var TextInputContentSchema = import_v4.z.object({
|
|
288
|
+
type: import_v4.z.literal("text"),
|
|
289
|
+
text: import_v4.z.string()
|
|
290
|
+
});
|
|
291
|
+
var BinaryInputContentObjectSchema = import_v4.z.object({
|
|
292
|
+
type: import_v4.z.literal("binary"),
|
|
293
|
+
mimeType: import_v4.z.string(),
|
|
294
|
+
id: import_v4.z.string().optional(),
|
|
295
|
+
url: import_v4.z.string().optional(),
|
|
296
|
+
data: import_v4.z.string().optional(),
|
|
297
|
+
filename: import_v4.z.string().optional()
|
|
298
|
+
});
|
|
299
|
+
var ensureBinaryPayload = (value, ctx) => {
|
|
300
|
+
if (!value.id && !value.url && !value.data) {
|
|
301
|
+
ctx.addIssue({
|
|
302
|
+
code: import_v4.z.ZodIssueCode.custom,
|
|
303
|
+
message: "BinaryInputContent requires at least one of id, url, or data.",
|
|
304
|
+
path: ["id"]
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
var BinaryInputContentSchema = BinaryInputContentObjectSchema.superRefine((value, ctx) => {
|
|
309
|
+
ensureBinaryPayload(value, ctx);
|
|
310
|
+
});
|
|
311
|
+
var InputContentBaseSchema = import_v4.z.discriminatedUnion("type", [
|
|
312
|
+
TextInputContentSchema,
|
|
313
|
+
BinaryInputContentObjectSchema
|
|
314
|
+
]);
|
|
315
|
+
var InputContentSchema = InputContentBaseSchema.superRefine(
|
|
316
|
+
(value, ctx) => {
|
|
317
|
+
if (value.type === "binary") {
|
|
318
|
+
ensureBinaryPayload(value, ctx);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
);
|
|
322
|
+
var BaseMessageSchema = import_v4.z.object({
|
|
323
|
+
id: import_v4.z.string(),
|
|
324
|
+
role: import_v4.z.string(),
|
|
325
|
+
content: import_v4.z.string().optional(),
|
|
326
|
+
name: import_v4.z.string().optional()
|
|
327
|
+
});
|
|
328
|
+
var DeveloperMessageSchema = BaseMessageSchema.extend({
|
|
329
|
+
role: import_v4.z.literal("developer"),
|
|
330
|
+
content: import_v4.z.string()
|
|
331
|
+
});
|
|
332
|
+
var SystemMessageSchema = BaseMessageSchema.extend({
|
|
333
|
+
role: import_v4.z.literal("system"),
|
|
334
|
+
content: import_v4.z.string()
|
|
335
|
+
});
|
|
336
|
+
var AssistantMessageSchema = BaseMessageSchema.extend({
|
|
337
|
+
role: import_v4.z.literal("assistant"),
|
|
338
|
+
content: import_v4.z.string().optional(),
|
|
339
|
+
toolCalls: import_v4.z.array(ToolCallSchema).optional()
|
|
340
|
+
});
|
|
341
|
+
var UserMessageSchema = BaseMessageSchema.extend({
|
|
342
|
+
role: import_v4.z.literal("user"),
|
|
343
|
+
content: import_v4.z.union([import_v4.z.string(), import_v4.z.array(InputContentSchema)])
|
|
344
|
+
});
|
|
345
|
+
var ToolMessageSchema = import_v4.z.object({
|
|
346
|
+
id: import_v4.z.string(),
|
|
347
|
+
content: import_v4.z.string(),
|
|
348
|
+
role: import_v4.z.literal("tool"),
|
|
349
|
+
toolCallId: import_v4.z.string(),
|
|
350
|
+
error: import_v4.z.string().optional()
|
|
351
|
+
});
|
|
352
|
+
var ActivityMessageSchema = import_v4.z.object({
|
|
353
|
+
id: import_v4.z.string(),
|
|
354
|
+
role: import_v4.z.literal("activity"),
|
|
355
|
+
activityType: import_v4.z.string(),
|
|
356
|
+
content: import_v4.z.record(import_v4.z.string(), import_v4.z.any())
|
|
357
|
+
});
|
|
358
|
+
var MessageSchema = import_v4.z.discriminatedUnion("role", [
|
|
359
|
+
DeveloperMessageSchema,
|
|
360
|
+
SystemMessageSchema,
|
|
361
|
+
AssistantMessageSchema,
|
|
362
|
+
UserMessageSchema,
|
|
363
|
+
ToolMessageSchema,
|
|
364
|
+
ActivityMessageSchema
|
|
365
|
+
]);
|
|
366
|
+
var ContextSchema = import_v4.z.object({
|
|
367
|
+
description: import_v4.z.string(),
|
|
368
|
+
value: import_v4.z.string()
|
|
369
|
+
});
|
|
370
|
+
var ServerRunAgentInputSchema = import_v4.z.object({
|
|
371
|
+
threadId: import_v4.z.string().optional(),
|
|
372
|
+
// Modified: optional instead of required
|
|
373
|
+
runId: import_v4.z.string(),
|
|
374
|
+
parentRunId: import_v4.z.string().optional(),
|
|
375
|
+
state: import_v4.z.any(),
|
|
376
|
+
messages: import_v4.z.array(MessageSchema),
|
|
377
|
+
tools: import_v4.z.array(ToolSchema),
|
|
378
|
+
context: import_v4.z.array(ContextSchema),
|
|
379
|
+
forwardedProps: import_v4.z.any()
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
// src/errors/index.ts
|
|
383
|
+
var import_agent_shared3 = require("@cloudbase/agent-shared");
|
|
384
|
+
var ErrorCode = {
|
|
385
|
+
/** Invalid request format or parameters (400) */
|
|
386
|
+
INVALID_REQUEST: "INVALID_REQUEST",
|
|
387
|
+
/** Internal server error (500) */
|
|
388
|
+
INTERNAL_ERROR: "INTERNAL_ERROR"
|
|
389
|
+
};
|
|
390
|
+
|
|
269
391
|
// src/agui/sendMessageAGUI/server.ts
|
|
270
392
|
function createServerAdapter2(createAgent, options) {
|
|
271
393
|
var _a;
|
|
@@ -286,7 +408,7 @@ function createServerAdapter2(createAgent, options) {
|
|
|
286
408
|
...rawInput,
|
|
287
409
|
runId: typeof rawInput.runId === "string" && rawInput.runId ? rawInput.runId : (0, import_uuid3.v4)()
|
|
288
410
|
};
|
|
289
|
-
return
|
|
411
|
+
return ServerRunAgentInputSchema.parse(inputWithDefaults);
|
|
290
412
|
});
|
|
291
413
|
if ("error" in inputRes) {
|
|
292
414
|
const { error } = inputRes;
|
|
@@ -297,7 +419,10 @@ function createServerAdapter2(createAgent, options) {
|
|
|
297
419
|
);
|
|
298
420
|
return new Response(
|
|
299
421
|
JSON.stringify({
|
|
300
|
-
error:
|
|
422
|
+
error: {
|
|
423
|
+
code: ErrorCode.INVALID_REQUEST,
|
|
424
|
+
message: error instanceof Error ? error.message : String(error)
|
|
425
|
+
},
|
|
301
426
|
requestId
|
|
302
427
|
}),
|
|
303
428
|
{
|
|
@@ -333,9 +458,14 @@ function createServerAdapter2(createAgent, options) {
|
|
|
333
458
|
if ("error" in createAgentRes) {
|
|
334
459
|
const { error } = createAgentRes;
|
|
335
460
|
(_h = logger.error) == null ? void 0 : _h.call(logger, { err: error }, "Agent creation failed");
|
|
461
|
+
const errorCode = (0, import_agent_shared3.isErrorWithCode)(error) ? error.code : ErrorCode.INTERNAL_ERROR;
|
|
462
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
336
463
|
return new Response(
|
|
337
464
|
JSON.stringify({
|
|
338
|
-
error:
|
|
465
|
+
error: {
|
|
466
|
+
code: errorCode,
|
|
467
|
+
message: errorMessage
|
|
468
|
+
},
|
|
339
469
|
requestId
|
|
340
470
|
}),
|
|
341
471
|
{
|
|
@@ -344,7 +474,10 @@ function createServerAdapter2(createAgent, options) {
|
|
|
344
474
|
}
|
|
345
475
|
);
|
|
346
476
|
}
|
|
347
|
-
const events = handler2(
|
|
477
|
+
const events = handler2(
|
|
478
|
+
inputRes.result,
|
|
479
|
+
createAgentRes.result.agent
|
|
480
|
+
);
|
|
348
481
|
let heartbeat;
|
|
349
482
|
let cleanupCalled = false;
|
|
350
483
|
const safeCleanup = () => {
|
|
@@ -383,9 +516,12 @@ function createServerAdapter2(createAgent, options) {
|
|
|
383
516
|
(_c2 = logger.info) == null ? void 0 : _c2.call(logger, { eventCount }, "Request completed");
|
|
384
517
|
} catch (error) {
|
|
385
518
|
(_d2 = logger.error) == null ? void 0 : _d2.call(logger, { err: error }, "Stream error");
|
|
519
|
+
const errorCode = (0, import_agent_shared3.isErrorWithCode)(error) ? error.code : ErrorCode.INTERNAL_ERROR;
|
|
520
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
386
521
|
const errorEvent = {
|
|
387
522
|
type: import_client2.EventType.RUN_ERROR,
|
|
388
|
-
|
|
523
|
+
code: errorCode,
|
|
524
|
+
message: errorMessage
|
|
389
525
|
};
|
|
390
526
|
controller.enqueue(
|
|
391
527
|
encoder.encode(`data: ${JSON.stringify(errorEvent)}
|
|
@@ -755,6 +891,7 @@ function isCorsOptions(cors2) {
|
|
|
755
891
|
}
|
|
756
892
|
// Annotate the CommonJS export names for ESM import in node:
|
|
757
893
|
0 && (module.exports = {
|
|
894
|
+
ErrorCode,
|
|
758
895
|
agui,
|
|
759
896
|
createConsoleLogger,
|
|
760
897
|
createExpressRoutes,
|
|
@@ -762,6 +899,7 @@ function isCorsOptions(cors2) {
|
|
|
762
899
|
extractRequestId,
|
|
763
900
|
generateRequestId,
|
|
764
901
|
getOrGenerateRequestId,
|
|
902
|
+
isErrorWithCode,
|
|
765
903
|
noopLogger,
|
|
766
904
|
run
|
|
767
905
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/agent-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/",
|
|
@@ -20,13 +20,16 @@
|
|
|
20
20
|
"express": "^5.1.0",
|
|
21
21
|
"openai": "6.3.0",
|
|
22
22
|
"uuid": "^10.0.0",
|
|
23
|
-
"
|
|
24
|
-
|
|
23
|
+
"@cloudbase/agent-shared": "^0.0.14"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
25
27
|
},
|
|
26
28
|
"devDependencies": {
|
|
27
29
|
"@types/cors": "^2.8.19",
|
|
28
30
|
"@types/express": "^5.0.3",
|
|
29
|
-
"tsup": "^8.5.0"
|
|
31
|
+
"tsup": "^8.5.0",
|
|
32
|
+
"zod": "^4.0.0"
|
|
30
33
|
},
|
|
31
34
|
"scripts": {
|
|
32
35
|
"test": "echo \"Error: no test specified\" && exit 1",
|