@agentvault/agentvault 0.14.7 → 0.14.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,iBAAiB,EASlB,MAAM,qBAAqB,CAAC;AAO7B,gFAAgF;AAChF,eAAO,IAAI,oBAAoB,SAAQ,CAAC;AAexC,uEAAuE;AACvE,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9C;AAED,qFAAqF;AACrF,iBAAS,yBAAyB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAcT;AAED,sFAAsF;AACtF,iBAAS,cAAc,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAiBR;AAgtBD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,CAAC;;;;;kBAQrD,iBAAiB;;AAJjC,wBAoRE"}
1
+ {"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,iBAAiB,EASlB,MAAM,qBAAqB,CAAC;AAO7B,gFAAgF;AAChF,eAAO,IAAI,oBAAoB,SAAQ,CAAC;AAexC,uEAAuE;AACvE,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9C;AAED,qFAAqF;AACrF,iBAAS,yBAAyB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAcT;AAED,sFAAsF;AACtF,iBAAS,cAAc,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAiBR;AAqwBD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,CAAC;;;;;kBAQrD,iBAAiB;;AAJjC,wBAoRE"}
@@ -290,7 +290,9 @@ async function handleSendRequest(parsed, channel) {
290
290
  return { status: 400, body: { ok: false, error: "Missing 'text' field" } };
291
291
  }
292
292
  try {
293
- if (parsed.room_id && typeof parsed.room_id === "string") {
293
+ if (parsed.hub_address && typeof parsed.hub_address === "string") {
294
+ await channel.sendToAgent(parsed.hub_address, text);
295
+ } else if (parsed.room_id && typeof parsed.room_id === "string") {
294
296
  await channel.sendToRoom(parsed.room_id, text, {
295
297
  messageType: parsed.message_type,
296
298
  priority: parsed.priority,
@@ -426,6 +428,7 @@ function _stripMentions(text, agentName, accountId) {
426
428
  async function handleInbound(params) {
427
429
  const { plaintext: rawPlaintext, metadata, channel, account, cfg } = params;
428
430
  const isRoomMessage = Boolean(metadata.roomId);
431
+ const isA2AMessage = Boolean(metadata.a2aChannelId);
429
432
  if (isRoomMessage) {
430
433
  if (!_shouldProcessRoomMessage(rawPlaintext, account.agentName ?? "", account.accountId ?? "")) {
431
434
  return;
@@ -596,7 +599,7 @@ async function handleInbound(params) {
596
599
  // instant
597
600
  attributes: {
598
601
  "ai.agent.message.input_chars": plaintext.length,
599
- "ai.agent.message.type": metadata.roomId ? "room" : "direct"
602
+ "ai.agent.message.type": isA2AMessage ? "a2a" : metadata.roomId ? "room" : "direct"
600
603
  },
601
604
  status: "ok"
602
605
  });
@@ -609,7 +612,10 @@ async function handleInbound(params) {
609
612
  cfg,
610
613
  channel: "agentvault",
611
614
  accountId: account.accountId,
612
- peer: { kind: "direct", id: isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner" }
615
+ peer: {
616
+ kind: isA2AMessage ? "a2a" : "direct",
617
+ id: isA2AMessage ? `agentvault:a2a:${metadata.fromHubAddress}` : isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner"
618
+ }
613
619
  });
614
620
  const storePath = core.channel.session.resolveStorePath(cfg?.session?.store, {
615
621
  agentId: route.agentId
@@ -621,7 +627,7 @@ async function handleInbound(params) {
621
627
  });
622
628
  const body = core.channel.reply.formatAgentEnvelope({
623
629
  channel: "AgentVault",
624
- from: isRoomMessage ? "Room" : "Owner",
630
+ from: isA2AMessage ? `Agent (${metadata.fromHubAddress})` : isRoomMessage ? "Room" : "Owner",
625
631
  timestamp: new Date(metadata.timestamp).getTime(),
626
632
  previousTimestamp,
627
633
  envelope: envelopeOptions,
@@ -641,14 +647,14 @@ async function handleInbound(params) {
641
647
  Body: body,
642
648
  RawBody: plaintext,
643
649
  CommandBody: plaintext,
644
- From: isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner",
650
+ From: isA2AMessage ? `a2a:${metadata.fromHubAddress}` : isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner",
645
651
  To: `agentvault:agent:${account.accountId}`,
646
652
  SessionKey: route.sessionKey,
647
653
  AccountId: account.accountId,
648
- ChatType: isRoomMessage ? "room" : "direct",
649
- ConversationLabel: isRoomMessage ? "AgentVault Room" : "AgentVault",
650
- SenderName: isRoomMessage ? "Room" : "Owner",
651
- SenderId: isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner",
654
+ ChatType: isA2AMessage ? "a2a" : isRoomMessage ? "room" : "direct",
655
+ ConversationLabel: isA2AMessage ? `A2A: ${metadata.fromHubAddress}` : isRoomMessage ? "AgentVault Room" : "AgentVault",
656
+ SenderName: isA2AMessage ? metadata.fromHubAddress : isRoomMessage ? "Room" : "Owner",
657
+ SenderId: isA2AMessage ? `a2a:${metadata.fromHubAddress}` : isRoomMessage ? `agentvault:room:${metadata.roomId}` : "agentvault:owner",
652
658
  Provider: "agentvault",
653
659
  Surface: "agentvault",
654
660
  MessageSid: metadata.messageId,
@@ -686,7 +692,11 @@ async function handleInbound(params) {
686
692
  replyCount++;
687
693
  totalReplyChars += text.length;
688
694
  if (!firstReplyTime) firstReplyTime = replyStart;
689
- if (isRoomMessage) {
695
+ if (isA2AMessage) {
696
+ await channel.sendToAgent(metadata.fromHubAddress, text, {
697
+ parentSpanId: inferenceSpanId
698
+ });
699
+ } else if (isRoomMessage) {
690
700
  await channel.sendToRoom(metadata.roomId, text, {
691
701
  metadata: { content_length: text.length }
692
702
  });
@@ -967,6 +977,28 @@ var agentVaultPlugin = {
967
977
  _log?.(`[AgentVault] inbound error: ${String(err)}`);
968
978
  }
969
979
  },
980
+ onA2AMessage: async (msg) => {
981
+ const a2aMetadata = {
982
+ a2aChannelId: msg.channelId,
983
+ fromHubAddress: msg.fromHubAddress,
984
+ conversationId: msg.conversationId,
985
+ timestamp: msg.timestamp,
986
+ parentSpanId: msg.parentSpanId,
987
+ messageId: `a2a:${msg.channelId}:${Date.now()}`
988
+ };
989
+ if (!_ocRuntime) {
990
+ _log?.("[AgentVault] runtime not ready, queuing A2A message");
991
+ _messageQueue.push(async () => {
992
+ await handleInbound({ plaintext: msg.text, metadata: a2aMetadata, channel, account, cfg });
993
+ });
994
+ return;
995
+ }
996
+ try {
997
+ await handleInbound({ plaintext: msg.text, metadata: a2aMetadata, channel, account, cfg });
998
+ } catch (err) {
999
+ _log?.(`[AgentVault] A2A inbound error: ${String(err)}`);
1000
+ }
1001
+ },
970
1002
  onStateChange: (state) => {
971
1003
  _log?.(`[AgentVault] \u2192 ${state}`);
972
1004
  if (state === "error") reject(new Error("AgentVault channel permanent error"));
@@ -1013,7 +1045,12 @@ var agentVaultPlugin = {
1013
1045
  if (!ch) return { ok: false, error: "AgentVault channel not connected" };
1014
1046
  try {
1015
1047
  const wasReady = ch.state === "ready";
1016
- await ch.send(text);
1048
+ if (to.startsWith("a2a:")) {
1049
+ const hubAddress = to.slice(4);
1050
+ await ch.sendToAgent(hubAddress, text);
1051
+ } else {
1052
+ await ch.send(text);
1053
+ }
1017
1054
  return { ok: true, queued: !wasReady };
1018
1055
  } catch (err) {
1019
1056
  return { ok: false, error: String(err) };
@@ -1027,7 +1064,11 @@ var agentVaultPlugin = {
1027
1064
  const message = text ? `${text}
1028
1065
  ${mediaUrl}` : mediaUrl;
1029
1066
  const wasReady = ch.state === "ready";
1030
- await ch.send(message);
1067
+ if (to.startsWith("a2a:")) {
1068
+ await ch.sendToAgent(to.slice(4), message);
1069
+ } else {
1070
+ await ch.send(message);
1071
+ }
1031
1072
  return { ok: true, queued: !wasReady };
1032
1073
  } catch (err) {
1033
1074
  return { ok: false, error: String(err) };
@@ -1045,17 +1086,25 @@ ${mediaUrl}` : mediaUrl;
1045
1086
  });
1046
1087
  const text = (payload.text ?? "").trim();
1047
1088
  if (!text && !payload.mediaUrls?.length) return { ok: true };
1089
+ const _send = async (msg) => {
1090
+ const target = ctx.to;
1091
+ if (target && typeof target === "string" && target.startsWith("a2a:")) {
1092
+ await ch.sendToAgent(target.slice(4), msg);
1093
+ } else {
1094
+ await ch.send(msg);
1095
+ }
1096
+ };
1048
1097
  if (text) {
1049
- await ch.send(text);
1098
+ await _send(text);
1050
1099
  }
1051
1100
  if (payload.mediaUrls?.length) {
1052
1101
  for (const url of payload.mediaUrls) {
1053
- await ch.send(url);
1102
+ await _send(url);
1054
1103
  }
1055
1104
  }
1056
1105
  if (payload.suggestedActions?.length) {
1057
1106
  const actionsText = payload.suggestedActions.map((a) => `- ${a.label}: ${a.action}`).join("\n");
1058
- await ch.send(`Suggested actions:
1107
+ await _send(`Suggested actions:
1059
1108
  ${actionsText}`);
1060
1109
  }
1061
1110
  return { ok: true };