@cloudbase/agent-server 0.0.16 → 0.0.18

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.
Files changed (2) hide show
  1. package/dist/index.js +97 -39
  2. package/package.json +8 -5
package/dist/index.js CHANGED
@@ -391,21 +391,28 @@ var ErrorCode = {
391
391
  // src/agui/sendMessageAGUI/server.ts
392
392
  var startObservation;
393
393
  var setupObservability;
394
- var observabilityLoadAttempted = false;
394
+ var processTraceContextFromHeaders;
395
+ var observabilityLoadingPromise = null;
395
396
  async function loadObservability() {
396
- if (!observabilityLoadAttempted) {
397
- observabilityLoadAttempted = true;
397
+ if (startObservation) {
398
+ return true;
399
+ }
400
+ if (observabilityLoadingPromise) {
401
+ return observabilityLoadingPromise;
402
+ }
403
+ observabilityLoadingPromise = (async () => {
398
404
  try {
399
405
  const obs = await import("@cloudbase/agent-observability");
400
406
  const obsServer = await import("@cloudbase/agent-observability/server");
401
407
  startObservation = obs.startObservation;
408
+ processTraceContextFromHeaders = obs.processTraceContextFromHeaders;
402
409
  setupObservability = obsServer.setupObservability;
403
410
  return true;
404
411
  } catch (e) {
405
412
  return false;
406
413
  }
407
- }
408
- return !!startObservation;
414
+ })();
415
+ return observabilityLoadingPromise;
409
416
  }
410
417
  async function ensureObservabilityReady() {
411
418
  if (!setupObservability) return false;
@@ -427,7 +434,7 @@ function createServerAdapter2(createAgent, options) {
427
434
  const { logger: parentLogger = import_agent_shared2.noopLogger } = options ?? {};
428
435
  const adapterLogger = ((_a = parentLogger.child) == null ? void 0 : _a.call(parentLogger, { component: "sendMessageAGUI" })) ?? parentLogger;
429
436
  return (0, import_server3.createServerAdapter)(async (request) => {
430
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
437
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
431
438
  const requestId = getOrGenerateRequestId(request.headers, "agui");
432
439
  const logger = ((_a2 = adapterLogger.child) == null ? void 0 : _a2.call(adapterLogger, { requestId })) ?? adapterLogger;
433
440
  (_b = logger.info) == null ? void 0 : _b.call(logger, "Request received");
@@ -514,37 +521,62 @@ function createServerAdapter2(createAgent, options) {
514
521
  try {
515
522
  const isReady = await ensureObservabilityReady();
516
523
  if (isReady) {
517
- serverSpan = startObservation(
518
- "AG-UI.Server",
519
- {
520
- "http.method": request.method,
521
- "http.url": request.url,
522
- "http.host": request.headers.get("host") || "unknown",
523
- "http.user_agent": request.headers.get("user-agent") || "unknown",
524
- "agui.thread_id": inputRes.result.threadId,
525
- "agui.run_id": inputRes.result.runId
526
- },
527
- { asType: "span" }
528
- );
529
- const spanContext = serverSpan.otelSpan.spanContext();
530
- serverContextData = {
531
- traceId: spanContext.traceId,
532
- spanId: spanContext.spanId,
533
- traceFlags: spanContext.traceFlags
524
+ const spanAttributes = {
525
+ "http.method": request.method,
526
+ "http.url": request.url,
527
+ "http.host": request.headers.get("host") || "unknown",
528
+ "http.user_agent": request.headers.get("user-agent") || "unknown",
529
+ "agui.thread_id": inputRes.result.threadId,
530
+ "agui.run_id": inputRes.result.runId,
531
+ "agui.request_id": requestId
534
532
  };
535
- inputRes.result.forwardedProps = {
536
- ...inputRes.result.forwardedProps,
537
- __agui_server_context: serverContextData
538
- };
539
- (_i = logger.debug) == null ? void 0 : _i.call(logger, "\u2713 Server span created:", {
540
- traceId: serverContextData.traceId,
541
- spanId: serverContextData.spanId
542
- });
543
- } else {
544
- (_j = logger.debug) == null ? void 0 : _j.call(logger, "Observability not ready, skipping span creation");
533
+ if (processTraceContextFromHeaders) {
534
+ try {
535
+ const traceContext = processTraceContextFromHeaders(
536
+ request.headers,
537
+ logger
538
+ );
539
+ if (traceContext.isInherited) {
540
+ Object.assign(spanAttributes, traceContext.spanAttributes);
541
+ }
542
+ serverSpan = startObservation(
543
+ "AG-UI.Server",
544
+ spanAttributes,
545
+ {
546
+ asType: "chain",
547
+ links: traceContext.links.length > 0 ? traceContext.links : void 0
548
+ }
549
+ );
550
+ } catch (e) {
551
+ (_i = logger.debug) == null ? void 0 : _i.call(logger, "Failed to process external trace context:", e);
552
+ serverSpan = startObservation(
553
+ "AG-UI.Server",
554
+ spanAttributes,
555
+ { asType: "chain" }
556
+ );
557
+ }
558
+ } else {
559
+ serverSpan = startObservation(
560
+ "AG-UI.Server",
561
+ spanAttributes,
562
+ { asType: "chain" }
563
+ );
564
+ }
565
+ const spanContext = (_k = (_j = serverSpan == null ? void 0 : serverSpan.otelSpan) == null ? void 0 : _j.spanContext) == null ? void 0 : _k.call(_j);
566
+ if ((spanContext == null ? void 0 : spanContext.traceId) && (spanContext == null ? void 0 : spanContext.spanId)) {
567
+ serverContextData = {
568
+ traceId: spanContext.traceId,
569
+ spanId: spanContext.spanId,
570
+ traceFlags: spanContext.traceFlags
571
+ };
572
+ inputRes.result.forwardedProps = {
573
+ ...inputRes.result.forwardedProps,
574
+ __agui_server_context: serverContextData
575
+ };
576
+ }
545
577
  }
546
578
  } catch (e) {
547
- (_k = logger.debug) == null ? void 0 : _k.call(logger, "Failed to create server span:", e);
579
+ (_l = logger.debug) == null ? void 0 : _l.call(logger, "Failed to create server span:", e);
548
580
  }
549
581
  }
550
582
  let cleanupCalled = false;
@@ -567,7 +599,21 @@ function createServerAdapter2(createAgent, options) {
567
599
  );
568
600
  if ("error" in eventsResult) {
569
601
  const { error } = eventsResult;
570
- (_l = logger.error) == null ? void 0 : _l.call(logger, { err: error }, "Run agent failed");
602
+ (_m = logger.error) == null ? void 0 : _m.call(logger, { err: error }, "Run agent failed");
603
+ if (serverSpan) {
604
+ try {
605
+ serverSpan.otelSpan.setStatus({
606
+ code: 2,
607
+ // SpanStatusCode.ERROR
608
+ message: error instanceof Error ? error.message : String(error)
609
+ });
610
+ serverSpan.otelSpan.setAttribute("error.type", error instanceof Error ? error.name : "UnknownError");
611
+ serverSpan.otelSpan.setAttribute("error.message", error instanceof Error ? error.message : String(error));
612
+ serverSpan.end();
613
+ } catch (e) {
614
+ (_n = logger.debug) == null ? void 0 : _n.call(logger, "Failed to update server span with error status:", e);
615
+ }
616
+ }
571
617
  const errorCode = (0, import_agent_shared3.isErrorWithCode)(error) ? error.code : ErrorCode.INTERNAL_ERROR;
572
618
  const errorMessage = error instanceof Error ? error.message : String(error);
573
619
  return new Response(
@@ -868,12 +914,24 @@ var import_cors = __toESM(require("cors"));
868
914
  var import_async_hooks = require("async_hooks");
869
915
  var import_server8 = require("@whatwg-node/server");
870
916
  var DefaultFetchAPI = __toESM(require("@whatwg-node/fetch"));
917
+ var observabilitySetupPromise = null;
918
+ var observabilitySetupComplete = false;
871
919
  async function setupObservabilityIfAvailable(configs) {
872
- try {
873
- const { setupObservability: setupObservability2 } = await import("@cloudbase/agent-observability/server");
874
- await setupObservability2(configs);
875
- } catch (error) {
920
+ if (observabilitySetupComplete) {
921
+ return;
922
+ }
923
+ if (observabilitySetupPromise) {
924
+ return observabilitySetupPromise;
876
925
  }
926
+ observabilitySetupPromise = (async () => {
927
+ try {
928
+ const { setupObservability: setupObservability2 } = await import("@cloudbase/agent-observability/server");
929
+ await setupObservability2(configs);
930
+ observabilitySetupComplete = true;
931
+ } catch (error) {
932
+ }
933
+ })();
934
+ return observabilitySetupPromise;
877
935
  }
878
936
  var preparedAgentStorage = new import_async_hooks.AsyncLocalStorage();
879
937
  function agentCloneFn() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/agent-server",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
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
- "@cloudbase/agent-shared": "^0.0.16"
23
+ "@cloudbase/agent-shared": "^0.0.18"
24
24
  },
25
25
  "peerDependencies": {
26
- "zod": "^3.25.0 || ^4.0.0"
26
+ "zod": "^3.25.0 || ^4.0.0",
27
+ "@cloudbase/agent-observability": "0.0.18"
27
28
  },
28
- "optionalDependencies": {
29
- "@cloudbase/agent-observability": "0.0.16"
29
+ "peerDependenciesMeta": {
30
+ "@cloudbase/agent-observability": {
31
+ "optional": true
32
+ }
30
33
  },
31
34
  "devDependencies": {
32
35
  "@types/cors": "^2.8.19",