@distri/core 0.2.2 → 0.2.4

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/index.js CHANGED
@@ -22,21 +22,73 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
22
22
  // src/index.ts
23
23
  var index_exports = {};
24
24
  __export(index_exports, {
25
+ A2AProtocolError: () => A2AProtocolError,
25
26
  Agent: () => Agent,
27
+ ApiError: () => ApiError,
28
+ ConnectionError: () => ConnectionError,
26
29
  DistriClient: () => DistriClient,
30
+ DistriError: () => DistriError,
31
+ convertA2AArtifactToDistri: () => convertA2AArtifactToDistri,
27
32
  convertA2AMessageToDistri: () => convertA2AMessageToDistri,
28
33
  convertA2APartToDistri: () => convertA2APartToDistri,
34
+ convertA2AStatusUpdateToDistri: () => convertA2AStatusUpdateToDistri,
29
35
  convertDistriMessageToA2A: () => convertDistriMessageToA2A,
30
36
  convertDistriPartToA2A: () => convertDistriPartToA2A,
37
+ decodeA2AStreamEvent: () => decodeA2AStreamEvent,
31
38
  extractTextFromDistriMessage: () => extractTextFromDistriMessage,
32
39
  extractToolCallsFromDistriMessage: () => extractToolCallsFromDistriMessage,
33
40
  extractToolResultsFromDistriMessage: () => extractToolResultsFromDistriMessage,
41
+ isDistriArtifact: () => isDistriArtifact,
34
42
  isDistriEvent: () => isDistriEvent,
35
43
  isDistriMessage: () => isDistriMessage,
44
+ isDistriPlan: () => isDistriPlan,
45
+ processA2AMessagesData: () => processA2AMessagesData,
46
+ processA2AStreamData: () => processA2AStreamData,
36
47
  uuidv4: () => uuidv4
37
48
  });
38
49
  module.exports = __toCommonJS(index_exports);
39
50
 
51
+ // src/types.ts
52
+ var DistriError = class extends Error {
53
+ constructor(message, code, details) {
54
+ super(message);
55
+ this.code = code;
56
+ this.details = details;
57
+ this.name = "DistriError";
58
+ }
59
+ };
60
+ var A2AProtocolError = class extends DistriError {
61
+ constructor(message, details) {
62
+ super(message, "A2A_PROTOCOL_ERROR", details);
63
+ this.name = "A2AProtocolError";
64
+ }
65
+ };
66
+ var ApiError = class extends DistriError {
67
+ constructor(message, statusCode, details) {
68
+ super(message, "API_ERROR", details);
69
+ this.statusCode = statusCode;
70
+ this.name = "ApiError";
71
+ }
72
+ };
73
+ var ConnectionError = class extends DistriError {
74
+ constructor(message, details) {
75
+ super(message, "CONNECTION_ERROR", details);
76
+ this.name = "ConnectionError";
77
+ }
78
+ };
79
+ function isDistriMessage(event) {
80
+ return "id" in event && "role" in event && "parts" in event;
81
+ }
82
+ function isDistriEvent(event) {
83
+ return "type" in event && "data" in event;
84
+ }
85
+ function isDistriPlan(event) {
86
+ return "steps" in event && Array.isArray(event.steps) && "reasoning" in event;
87
+ }
88
+ function isDistriArtifact(event) {
89
+ return "type" in event && "timestamp" in event && "id" in event;
90
+ }
91
+
40
92
  // ../../node_modules/.pnpm/@a2a-js+sdk@https+++codeload.github.com+v3g42+a2a-js+tar.gz+51444c9/node_modules/@a2a-js/sdk/dist/chunk-CUGIRVQB.js
41
93
  var A2AClient = class {
42
94
  /**
@@ -407,35 +459,6 @@ var A2AClient = class {
407
459
  }
408
460
  };
409
461
 
410
- // src/types.ts
411
- var DistriError = class extends Error {
412
- constructor(message, code, details) {
413
- super(message);
414
- this.code = code;
415
- this.details = details;
416
- this.name = "DistriError";
417
- }
418
- };
419
- var A2AProtocolError = class extends DistriError {
420
- constructor(message, details) {
421
- super(message, "A2A_PROTOCOL_ERROR", details);
422
- this.name = "A2AProtocolError";
423
- }
424
- };
425
- var ApiError = class extends DistriError {
426
- constructor(message, statusCode, details) {
427
- super(message, "API_ERROR", details);
428
- this.statusCode = statusCode;
429
- this.name = "ApiError";
430
- }
431
- };
432
- function isDistriMessage(event) {
433
- return "id" in event && "role" in event && "parts" in event;
434
- }
435
- function isDistriEvent(event) {
436
- return "type" in event && "metadata" in event;
437
- }
438
-
439
462
  // src/encoder.ts
440
463
  function convertA2AMessageToDistri(a2aMessage) {
441
464
  const role = a2aMessage.role === "agent" ? "assistant" : "user";
@@ -446,6 +469,212 @@ function convertA2AMessageToDistri(a2aMessage) {
446
469
  created_at: a2aMessage.createdAt
447
470
  };
448
471
  }
472
+ function convertA2AStatusUpdateToDistri(statusUpdate) {
473
+ if (!statusUpdate.metadata || !statusUpdate.metadata.type) {
474
+ return null;
475
+ }
476
+ const metadata = statusUpdate.metadata;
477
+ switch (metadata.type) {
478
+ case "run_started":
479
+ return {
480
+ type: "run_started",
481
+ data: {}
482
+ };
483
+ case "run_finished":
484
+ return {
485
+ type: "run_finished",
486
+ data: {}
487
+ };
488
+ case "plan_started":
489
+ return {
490
+ type: "plan_started",
491
+ data: {
492
+ initial_plan: metadata.initial_plan
493
+ }
494
+ };
495
+ case "plan_finished":
496
+ return {
497
+ type: "plan_finished",
498
+ data: {
499
+ total_steps: metadata.total_steps
500
+ }
501
+ };
502
+ case "step_started":
503
+ return {
504
+ type: "step_started",
505
+ data: {
506
+ step_id: metadata.step_id,
507
+ step_title: metadata.step_title || "Processing",
508
+ step_index: metadata.step_index || 0
509
+ }
510
+ };
511
+ case "step_completed":
512
+ return {
513
+ type: "step_completed",
514
+ data: {
515
+ step_id: metadata.step_id,
516
+ step_title: metadata.step_title || "Processing",
517
+ step_index: metadata.step_index || 0
518
+ }
519
+ };
520
+ case "tool_execution_start":
521
+ return {
522
+ type: "tool_call_start",
523
+ data: {
524
+ tool_call_id: metadata.tool_call_id,
525
+ tool_call_name: metadata.tool_call_name || "Tool",
526
+ parent_message_id: statusUpdate.taskId,
527
+ is_external: true
528
+ }
529
+ };
530
+ case "tool_execution_end":
531
+ return {
532
+ type: "tool_call_end",
533
+ data: {
534
+ tool_call_id: metadata.tool_call_id
535
+ }
536
+ };
537
+ case "text_message_start":
538
+ return {
539
+ type: "text_message_start",
540
+ data: {
541
+ message_id: metadata.message_id,
542
+ role: metadata.role === "assistant" ? "assistant" : "user"
543
+ }
544
+ };
545
+ case "text_message_content":
546
+ return {
547
+ type: "text_message_content",
548
+ data: {
549
+ message_id: metadata.message_id,
550
+ delta: metadata.delta || ""
551
+ }
552
+ };
553
+ case "text_message_end":
554
+ return {
555
+ type: "text_message_end",
556
+ data: {
557
+ message_id: metadata.message_id
558
+ }
559
+ };
560
+ default:
561
+ console.warn(`Unhandled status update metadata type: ${metadata.type}`, metadata);
562
+ return {
563
+ type: "run_started",
564
+ data: { metadata }
565
+ };
566
+ }
567
+ }
568
+ function convertA2AArtifactToDistri(artifact) {
569
+ if (!artifact || !artifact.parts || !Array.isArray(artifact.parts)) {
570
+ return null;
571
+ }
572
+ const part = artifact.parts[0];
573
+ if (!part || part.kind !== "data" || !part.data) {
574
+ return null;
575
+ }
576
+ const data = part.data;
577
+ if (data.type === "llm_response") {
578
+ const hasContent = data.content && data.content.trim() !== "";
579
+ const hasToolCalls = data.tool_calls && Array.isArray(data.tool_calls) && data.tool_calls.length > 0;
580
+ const isExternal = data.is_external;
581
+ if (hasToolCalls) {
582
+ const executionResult2 = {
583
+ id: data.id || artifact.artifactId,
584
+ type: "llm_response",
585
+ timestamp: data.timestamp || data.created_at || Date.now(),
586
+ content: data.content?.trim() || "",
587
+ tool_calls: data.tool_calls,
588
+ step_id: data.step_id,
589
+ success: data.success,
590
+ rejected: data.rejected,
591
+ reason: data.reason,
592
+ is_external: isExternal
593
+ };
594
+ return executionResult2;
595
+ } else {
596
+ const parts = [];
597
+ if (hasContent) {
598
+ parts.push({ type: "text", text: data.content });
599
+ }
600
+ const distriMessage = {
601
+ id: artifact.artifactId,
602
+ role: "assistant",
603
+ parts,
604
+ created_at: data.timestamp || data.created_at || (/* @__PURE__ */ new Date()).toISOString()
605
+ };
606
+ return distriMessage;
607
+ }
608
+ }
609
+ if (data.type === "tool_results") {
610
+ const executionResult2 = {
611
+ id: data.id || artifact.artifactId,
612
+ type: "tool_results",
613
+ timestamp: data.timestamp || data.created_at || Date.now(),
614
+ results: data.results || [],
615
+ step_id: data.step_id,
616
+ success: data.success,
617
+ rejected: data.rejected,
618
+ reason: data.reason
619
+ };
620
+ return executionResult2;
621
+ }
622
+ if (data.type === "plan") {
623
+ const planResult = {
624
+ id: data.id || artifact.artifactId,
625
+ type: "plan",
626
+ timestamp: data.timestamp || data.created_at || Date.now(),
627
+ reasoning: data.reasoning || "",
628
+ steps: data.steps || []
629
+ };
630
+ return planResult;
631
+ }
632
+ const executionResult = {
633
+ id: artifact.artifactId,
634
+ type: "artifact",
635
+ timestamp: Date.now(),
636
+ data,
637
+ artifactId: artifact.artifactId,
638
+ name: artifact.name || "",
639
+ description: artifact.description || null
640
+ };
641
+ return executionResult;
642
+ }
643
+ function decodeA2AStreamEvent(event) {
644
+ if (event.artifactId && event.parts) {
645
+ return convertA2AArtifactToDistri(event);
646
+ }
647
+ if (event.kind === "message") {
648
+ return convertA2AMessageToDistri(event);
649
+ }
650
+ if (event.kind === "status-update") {
651
+ return convertA2AStatusUpdateToDistri(event);
652
+ }
653
+ if (event.kind === "artifact-update") {
654
+ return convertA2AArtifactToDistri(event);
655
+ }
656
+ return null;
657
+ }
658
+ function processA2AStreamData(streamData) {
659
+ const results = [];
660
+ for (const item of streamData) {
661
+ const converted = decodeA2AStreamEvent(item);
662
+ if (converted) {
663
+ results.push(converted);
664
+ }
665
+ }
666
+ return results;
667
+ }
668
+ function processA2AMessagesData(data) {
669
+ const results = [];
670
+ for (const item of data) {
671
+ if (item.kind === "message") {
672
+ const distriMessage = convertA2AMessageToDistri(item);
673
+ results.push(distriMessage);
674
+ }
675
+ }
676
+ return results;
677
+ }
449
678
  function convertA2APartToDistri(a2aPart) {
450
679
  switch (a2aPart.kind) {
451
680
  case "text":
@@ -513,11 +742,11 @@ function convertDistriPartToA2A(distriPart) {
513
742
  kind: "data",
514
743
  data: {
515
744
  tool_call_id: distriPart.tool_result.tool_call_id,
745
+ tool_name: distriPart.tool_result.tool_name,
516
746
  result: distriPart.tool_result.result,
517
747
  part_type: "tool_result"
518
748
  }
519
749
  };
520
- console.log("<> val", val);
521
750
  return val;
522
751
  case "code_observation":
523
752
  return { kind: "data", data: { ...distriPart, part_type: "code_observation" } };
@@ -646,6 +875,7 @@ var DistriClient = class {
646
875
  const client = this.getA2AClient(agentId);
647
876
  yield* await client.sendMessageStream(params);
648
877
  } catch (error) {
878
+ console.error(error);
649
879
  throw new DistriError(`Failed to stream message to agent ${agentId}`, "STREAM_MESSAGE_ERROR", error);
650
880
  }
651
881
  }
@@ -739,9 +969,10 @@ var DistriClient = class {
739
969
  */
740
970
  async sendDistriMessage(threadId, message, context) {
741
971
  const a2aMessage = convertDistriMessageToA2A(message, context);
972
+ const contextMetadata = context.getMetadata?.() || {};
742
973
  const params = {
743
974
  message: a2aMessage,
744
- metadata: context.metadata
975
+ metadata: contextMetadata
745
976
  };
746
977
  await this.sendMessage(threadId, params);
747
978
  }
@@ -847,9 +1078,10 @@ var DistriClient = class {
847
1078
  */
848
1079
  static initDistriMessageParams(message, context) {
849
1080
  const a2aMessage = convertDistriMessageToA2A(message, context);
1081
+ const contextMetadata = context.getMetadata?.() || {};
850
1082
  return {
851
1083
  message: a2aMessage,
852
- metadata: context.metadata
1084
+ metadata: contextMetadata
853
1085
  };
854
1086
  }
855
1087
  };
@@ -941,14 +1173,9 @@ var Agent = class _Agent {
941
1173
  const a2aStream = this.client.sendMessageStream(this.agentDefinition.id, enhancedParams);
942
1174
  return async function* () {
943
1175
  for await (const event of a2aStream) {
944
- if (event.kind === "message") {
945
- yield convertA2AMessageToDistri(event);
946
- } else if (event.kind === "status-update") {
947
- yield event;
948
- } else if (event.kind === "artifact-update") {
949
- yield event;
950
- } else {
951
- yield event;
1176
+ const converted = decodeA2AStreamEvent(event);
1177
+ if (converted) {
1178
+ yield converted;
952
1179
  }
953
1180
  }
954
1181
  }();
@@ -973,8 +1200,8 @@ var Agent = class _Agent {
973
1200
  /**
974
1201
  * Create an agent instance from an agent ID
975
1202
  */
976
- static async create(agentId, client) {
977
- const agentDefinition = await client.getAgent(agentId);
1203
+ static async create(agentIdOrDef, client) {
1204
+ const agentDefinition = typeof agentIdOrDef === "string" ? await client.getAgent(agentIdOrDef) : agentIdOrDef;
978
1205
  return new _Agent(agentDefinition, client);
979
1206
  }
980
1207
  /**
@@ -987,17 +1214,28 @@ var Agent = class _Agent {
987
1214
  };
988
1215
  // Annotate the CommonJS export names for ESM import in node:
989
1216
  0 && (module.exports = {
1217
+ A2AProtocolError,
990
1218
  Agent,
1219
+ ApiError,
1220
+ ConnectionError,
991
1221
  DistriClient,
1222
+ DistriError,
1223
+ convertA2AArtifactToDistri,
992
1224
  convertA2AMessageToDistri,
993
1225
  convertA2APartToDistri,
1226
+ convertA2AStatusUpdateToDistri,
994
1227
  convertDistriMessageToA2A,
995
1228
  convertDistriPartToA2A,
1229
+ decodeA2AStreamEvent,
996
1230
  extractTextFromDistriMessage,
997
1231
  extractToolCallsFromDistriMessage,
998
1232
  extractToolResultsFromDistriMessage,
1233
+ isDistriArtifact,
999
1234
  isDistriEvent,
1000
1235
  isDistriMessage,
1236
+ isDistriPlan,
1237
+ processA2AMessagesData,
1238
+ processA2AStreamData,
1001
1239
  uuidv4
1002
1240
  });
1003
1241
  //# sourceMappingURL=index.js.map