@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 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
- export { type AgentCreator, type AgentCreatorContext, index as agui, createExpressRoutes, createExpressServer, extractRequestId, generateRequestId, getOrGenerateRequestId, run };
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 import_client2.RunAgentInputSchema.parse(inputWithDefaults);
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: error instanceof Error ? error.message : String(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: error instanceof Error ? error.message : String(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(inputRes.result, createAgentRes.result.agent);
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
- message: error instanceof Error ? error.message : String(error)
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.13",
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
- "zod": "^4.1.12",
24
- "@cloudbase/agent-shared": "^0.0.13"
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",