@agentvault/grok-bridge 0.4.22 → 0.4.23

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
@@ -43,6 +43,7 @@ import { readdir as readdir2, readFile as readFile4, writeFile as writeFile2, re
43
43
  import { join as join5 } from "node:path";
44
44
  import { randomUUID as randomUUID3 } from "node:crypto";
45
45
  import { EventEmitter } from "node:events";
46
+ import { AsyncLocalStorage } from "node:async_hooks";
46
47
  import { createServer } from "node:http";
47
48
  import { randomUUID as randomUUID4, createHash } from "node:crypto";
48
49
  import { readFileSync } from "node:fs";
@@ -52,7 +53,7 @@ import { join as join6 } from "node:path";
52
53
  import { readFile as readFile5 } from "node:fs/promises";
53
54
  import WebSocket from "ws";
54
55
  import { resolve as resolve2 } from "node:path";
55
- import { AsyncLocalStorage } from "node:async_hooks";
56
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
56
57
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
57
58
  import { Http2ServerRequest } from "http2";
58
59
  import { Readable as Readable2 } from "stream";
@@ -11712,11 +11713,11 @@ async function joinWithFirstMatchingKp(welcomeBytes, candidates) {
11712
11713
  return null;
11713
11714
  }
11714
11715
  function ownIdentity() {
11715
- const v2 = true ? "0.23.51" : FALLBACK;
11716
+ const v2 = true ? "0.23.52" : FALLBACK;
11716
11717
  return `${PACKAGE}@${v2}`;
11717
11718
  }
11718
11719
  function buildSha() {
11719
- const raw = true ? "753de79" : "";
11720
+ const raw = true ? "d7143c3" : "";
11720
11721
  const cleaned = (raw ?? "").trim();
11721
11722
  return !cleaned || cleaned === "unknown" ? null : cleaned;
11722
11723
  }
@@ -12494,11 +12495,38 @@ function _resetCompatCacheForTest() {
12494
12495
  _agentEventFn = null;
12495
12496
  _transcriptFn = null;
12496
12497
  }
12498
+ function ownerRoutingFrom(parsed) {
12499
+ const out = {};
12500
+ if (parsed.conversation_id !== void 0) {
12501
+ if (typeof parsed.conversation_id !== "string" || !parsed.conversation_id) return "'conversation_id' must be a string";
12502
+ out.conversationId = parsed.conversation_id;
12503
+ }
12504
+ if (parsed.audience !== void 0) {
12505
+ if (parsed.audience !== "person" && parsed.audience !== "everyone") {
12506
+ return `'audience' must be "person" or "everyone"`;
12507
+ }
12508
+ out.audience = parsed.audience;
12509
+ }
12510
+ return out;
12511
+ }
12512
+ function ambiguousOwnerRequest(channel, routing) {
12513
+ const check = channel.isUntargetedOwnerAmbiguous;
12514
+ if (typeof check !== "function" || !check.call(channel, routing)) return null;
12515
+ return { status: 409, body: { ok: false, error: AMBIGUOUS_OWNER_ERROR } };
12516
+ }
12517
+ function statusOf(receipt) {
12518
+ if (receipt.ambiguous) return 409;
12519
+ return receipt.ok ? 200 : 500;
12520
+ }
12497
12521
  async function handleSendRequest(parsed, channel) {
12498
12522
  const text = parsed.text;
12499
12523
  if (!text || typeof text !== "string") {
12500
12524
  return { status: 400, body: { ok: false, error: "Missing 'text' field" } };
12501
12525
  }
12526
+ const routing = ownerRoutingFrom(parsed);
12527
+ if (typeof routing === "string") {
12528
+ return { status: 400, body: { ok: false, error: routing } };
12529
+ }
12502
12530
  try {
12503
12531
  let target;
12504
12532
  let a2aTarget = parsed.hub_address ?? parsed.a2a_address ?? parsed.a2aAddress;
@@ -12516,10 +12544,10 @@ async function handleSendRequest(parsed, channel) {
12516
12544
  const receipt2 = await channel.deliver(
12517
12545
  { kind: "owner" },
12518
12546
  { type: "attachment", text, filePath: parsed.file_path },
12519
- { topicId: parsed.topicId }
12547
+ { topicId: parsed.topicId, ...routing, refuseIfAmbiguous: true }
12520
12548
  );
12521
12549
  return {
12522
- status: receipt2.ok ? 200 : 500,
12550
+ status: statusOf(receipt2),
12523
12551
  body: {
12524
12552
  ok: receipt2.ok,
12525
12553
  destination: receipt2.destination,
@@ -12533,6 +12561,8 @@ async function handleSendRequest(parsed, channel) {
12533
12561
  target,
12534
12562
  { type: "text", text },
12535
12563
  {
12564
+ ...routing,
12565
+ refuseIfAmbiguous: true,
12536
12566
  topicId: parsed.topicId,
12537
12567
  priority: parsed.priority,
12538
12568
  metadata: {
@@ -12542,7 +12572,7 @@ async function handleSendRequest(parsed, channel) {
12542
12572
  }
12543
12573
  );
12544
12574
  return {
12545
- status: receipt.ok ? 200 : 500,
12575
+ status: statusOf(receipt),
12546
12576
  body: {
12547
12577
  ok: receipt.ok,
12548
12578
  destination: receipt.destination,
@@ -12557,6 +12587,10 @@ async function handleActionRequest(parsed, channel) {
12557
12587
  if (!parsed.action || typeof parsed.action !== "string") {
12558
12588
  return { status: 400, body: { ok: false, error: "Missing 'action' field" } };
12559
12589
  }
12590
+ const routing = ownerRoutingFrom(parsed);
12591
+ if (typeof routing === "string") {
12592
+ return { status: 400, body: { ok: false, error: routing } };
12593
+ }
12560
12594
  try {
12561
12595
  const confirmation = {
12562
12596
  action: parsed.action,
@@ -12566,12 +12600,10 @@ async function handleActionRequest(parsed, channel) {
12566
12600
  estimated_cost: parsed.estimated_cost
12567
12601
  };
12568
12602
  const target = parsed.room_id && typeof parsed.room_id === "string" ? { kind: "room", roomId: parsed.room_id } : { kind: "owner" };
12569
- const receipt = await channel.deliver(
12570
- target,
12571
- { type: "action_confirmation", confirmation }
12572
- );
12603
+ const content = { type: "action_confirmation", confirmation };
12604
+ const receipt = await channel.deliver(target, content, { ...routing, refuseIfAmbiguous: true });
12573
12605
  return {
12574
- status: receipt.ok ? 200 : 500,
12606
+ status: statusOf(receipt),
12575
12607
  body: {
12576
12608
  ok: receipt.ok,
12577
12609
  destination: receipt.destination,
@@ -12596,6 +12628,12 @@ async function handleDecisionRequest(parsed, channel) {
12596
12628
  return { status: 400, body: { ok: false, error: "Each option must have 'option_id' and 'label'" } };
12597
12629
  }
12598
12630
  }
12631
+ const routing = ownerRoutingFrom(parsed);
12632
+ if (typeof routing === "string") {
12633
+ return { status: 400, body: { ok: false, error: routing } };
12634
+ }
12635
+ const ambiguous = ambiguousOwnerRequest(channel, routing);
12636
+ if (ambiguous) return ambiguous;
12599
12637
  try {
12600
12638
  const decision_id = await channel.sendDecisionRequest({
12601
12639
  title,
@@ -12604,7 +12642,7 @@ async function handleDecisionRequest(parsed, channel) {
12604
12642
  context_refs: parsed.context_refs,
12605
12643
  deadline: parsed.deadline,
12606
12644
  auto_action: parsed.auto_action
12607
- });
12645
+ }, routing);
12608
12646
  return { status: 200, body: { ok: true, decision_id } };
12609
12647
  } catch (err) {
12610
12648
  return { status: 500, body: { ok: false, error: String(err) } };
@@ -13102,7 +13140,7 @@ async function _handleInbound(params) {
13102
13140
  core.error?.(`[AgentVault] session record failed: ${String(err)}`);
13103
13141
  }
13104
13142
  });
13105
- await core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
13143
+ await channel.runForConversation(metadata.conversationId, () => core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
13106
13144
  ctx: ctxPayload,
13107
13145
  cfg,
13108
13146
  dispatcherOptions: {
@@ -13119,7 +13157,7 @@ async function _handleInbound(params) {
13119
13157
  }
13120
13158
  },
13121
13159
  replyOptions: {}
13122
- });
13160
+ }), { groupId: metadata.conversationGroupId });
13123
13161
  }
13124
13162
  function getErrorMap() {
13125
13163
  return overrideErrorMap;
@@ -17643,7 +17681,7 @@ function armSseKeepAlive(intervalMs, onTick) {
17643
17681
  timer.unref?.();
17644
17682
  return timer;
17645
17683
  }
17646
- var __create, __defProp2, __getOwnPropDesc, __getOwnPropNames2, __getProtoOf, __hasOwnProp, __esm2, __commonJS, __export2, __copyProps, __toESM, SENTINEL, WRAPPERS, INSTRUCTION, init_abstention, init_envelope_text, init_mls_commit_classify, MENTION_RE, BROADCAST_NAMES, init_room_protocol, __filename, __dirname, url, path, Module, Module, root, window_, crypto_, randomValuesStandard, crypto2, randomValueNodeJS, _Module, libsodium_sumo_default, init_libsodium_sumo, a, r, t, c, libsodium_wrappers_default, init_libsodium_wrappers, init_keys, init_x3dh, MAX_SKIP, CHAIN_KEY_SEED, MSG_KEY_SEED, HEADER_KEY_SEED, DoubleRatchet, init_ratchet, init_file_crypto, DOMAIN_DID_DOCUMENT, DOMAIN_TRANSFER_INTENT, DOMAIN_TRANSFER_ACCEPT, BASE58_ALPHABET, init_did, BUILTIN_PATTERNS, ScanEngine, init_scan_engine, init_merkle, VC_CONTEXT_V2, AV_CREDENTIAL_CONTEXT, CRYPTOSUITE, BASE58_ALPHABET2, init_vc, init_transport, init_telemetry, TelemetryReporter, init_telemetry_reporter, CROCKFORD, ARGON2_OPSLIMIT, ARGON2_MEMLIMIT, SALT_BYTES, NONCE_BYTES, KEY_BYTES, BACKUP_VERSION, MAX_BACKUP_SIZE, init_backup, atitle, aobject, aopts, isLE, swap8IfBE, swap32IfBE, hasHexBuiltin, hexes, oidNist, init_utils, BSIGMA, init_blake, U32_MASK64, _32n, fromNumH, fromNumL, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, add3L, add3H, add4L, add4H, add5L, add5H, init_u64, HashMD, SHA256_IV, SHA384_IV, SHA512_IV, init_md, B2B_IV, BBUF, _BLAKE2, _BLAKE2b, blake2b, init_blake2, CROCKFORD2, SALT_BYTES2, NONCE_BYTES2, KEY_BYTES2, TAG_BYTES, ENVELOPE_OVERHEAD, AAD_PREFIX, UUID_RE, UUID_V4_RE, DIGEST_ID_RE, TIMESTAMP_RE, encoder, decoder, HISTORY_MAGIC, HISTORY_ARCHIVE_VERSION, HISTORY_MAX_ENTRIES, HISTORY_MAX_BLOB_BYTES, HISTORY_KDF_OPSLIMIT, HISTORY_KDF_MEMLIMIT, HistoryEntryTooLargeError, init_history_backup, init_approval, encVoid, init_tlsEncoder, uint8Encoder, encodeUint8, decodeUint8, uint16Encoder, encodeUint16, decodeUint16, uint32Encoder, encodeUint32, decodeUint32, uint64Encoder, encodeUint64, decodeUint64, init_number, init_tlsDecoder, init_enumHelpers, defaultProposalTypes, defaultProposalTypeEncoder, encodeDefaultProposalType, decodeDefaultProposalType, init_defaultProposalType, defaultExtensionTypes, defaultExtensionTypeEncoder, encodeDefaultExtensionType, decodeDefaultExtensionType, init_defaultExtensionType, acceptAll, init_incomingMessageAction, MlsError, ValidationError, CodecError, UsageError, DependencyError, CryptoVerificationError, CryptoError, InternalError, init_mlsError, init_byteArray, varLenDataEncoder, decodeVarLenData, init_variableLength, init_constantTimeCompare, extensionTypeEncoder, encodeExtensionType, decodeExtensionType, extensionEncoder, encodeExtension, decodeExtension, init_extension, credentialTypes, credentialTypeEncoder, encodeCredentialType, decodeCredentialType, init_credentialType, credentialBasicEncoder, encodeCredentialBasic, credentialX509Encoder, encodeCredentialX509, credentialCustomEncoder, encodeCredentialCustom, credentialEncoder, encodeCredential, decodeCredentialBasic, decodeCredentialX509, decodeCredential, init_credential, externalSenderEncoder, encodeExternalSender, decodeExternalSender, init_externalSender, init_hash, init_optional, ciphersuites, ciphersuiteEncoder, encodeCiphersuite, decodeCiphersuite, ciphersuiteValues, init_ciphersuite, init_signature, protocolVersions, protocolVersionEncoder, encodeProtocolVersion, decodeProtocolVersion, init_protocolVersion, capabilitiesEncoder, encodeCapabilities, decodeCapabilities, init_capabilities, leafNodeSources, leafNodeSourceEncoder, encodeLeafNodeSource, decodeLeafNodeSource, init_leafNodeSource, lifetimeEncoder, encodeLifetime, decodeLifetime, defaultLifetime, init_lifetime, leafNodeDataEncoder, encodeLeafNodeData, decodeLeafNodeData, leafNodeInfoKeyPackageEncoder, encodeLeafNodeInfoKeyPackage, leafNodeInfoUpdateOmittedEncoder, encodeLeafNodeInfoUpdateOmitted, leafNodeInfoCommitOmittedEncoder, encodeLeafNodeInfoCommitOmitted, leafNodeInfoOmittedEncoder, encodeLeafNodeInfoOmitted, decodeLeafNodeInfoKeyPackage, decodeLeafNodeInfoUpdateOmitted, decodeLeafNodeInfoCommitOmitted, decodeLeafNodeInfoOmitted, leafNodeInfoUpdateEncoder, encodeLeafNodeInfoUpdate, leafNodeInfoCommitEncoder, encodeLeafNodeInfoCommit, leafNodeInfoEncoder, encodeLeafNodeInfo, decodeLeafNodeInfoUpdate, decodeLeafNodeInfoCommit, decodeLeafNodeInfo, leafNodeTBSEncoder, encodeLeafNodeTBS, leafNodeEncoder, encodeLeafNode, decodeLeafNode, decodeLeafNodeKeyPackage, decodeLeafNodeCommit, decodeLeafNodeUpdate, init_leafNode, keyPackageTBSEncoder, encodeKeyPackageTBS, decodeKeyPackageTBS, keyPackageEncoder, encodeKeyPackage, decodeKeyPackage, init_keyPackage, init_kdf, pskTypes, pskTypeEncoder, encodePskType, decodePskType, resumptionPSKUsages, resumptionPSKUsageEncoder, encodeResumptionPSKUsage, decodeResumptionPSKUsage, encodePskInfoExternal, encodePskInfoResumption, decodePskInfoResumption, pskInfoEncoder, encodePskInfo, decodePskInfo, pskIdEncoder, encodePskId, decodePskId, pskLabelEncoder, encodePskLabel, decodePskLabel, init_presharedkey, addEncoder, encodeAdd, decodeAdd, updateEncoder, encodeUpdate, decodeUpdate, removeEncoder, encodeRemove, decodeRemove, pskEncoder, encodePSK, decodePSK, reinitEncoder, encodeReinit, decodeReinit, externalInitEncoder, encodeExternalInit, decodeExternalInit, groupContextExtensionsEncoder, encodeGroupContextExtensions, decodeGroupContextExtensions, proposalAddEncoder, encodeProposalAdd, proposalUpdateEncoder, encodeProposalUpdate, proposalRemoveEncoder, encodeProposalRemove, proposalPSKEncoder, encodeProposalPSK, proposalReinitEncoder, encodeProposalReinit, proposalExternalInitEncoder, encodeProposalExternalInit, proposalGroupContextExtensionsEncoder, encodeProposalGroupContextExtensions, proposalCustomEncoder, encodeProposalCustom, proposalEncoder, encodeProposal, decodeProposalAdd, decodeProposalUpdate, decodeProposalRemove, decodeProposalPSK, decodeProposalReinit, decodeProposalExternalInit, decodeProposalGroupContextExtensions, decodeProposal, init_proposal, proposalOrRefTypes, proposalOrRefTypeEncoder, encodeProposalOrRefType, decodeProposalOrRefType, proposalOrRefProposalEncoder, encodeProposalOrRefProposal, proposalOrRefProposalRefEncoder, encodeProposalOrRefProposalRef, proposalOrRefEncoder, encodeProposalOrRef, decodeProposalOrRef, init_proposalOrRefType, init_hpke, groupContextEncoder, encodeGroupContext, decodeGroupContext, init_groupContext, nodeTypes, nodeTypeEncoder, encodeNodeType, decodeNodeType, init_nodeType, parentNodeEncoder, encodeParentNode, decodeParentNode, init_parentNode, init_treemath, nodeEncoder, encodeNode, decodeNode, ratchetTreeEncoder, encodeRatchetTree, decodeRatchetTree, init_ratchetTree, leafNodeHashInputEncoder, encodeLeafNodeHashInput, decodeLeafNodeHashInput, parentNodeHashInputEncoder, encodeParentNodeHashInput, decodeParentNodeHashInput, treeHashInputEncoder, encodeTreeHashInput, decodeTreeHashInput, init_treeHash, parentHashInputEncoder, encodeParentHashInput, decodeParentHashInput, init_parentHash, hpkeCiphertextEncoder, encodeHpkeCiphertext, decodeHpkeCiphertext, init_hpkeCiphertext, updatePathNodeEncoder, encodeUpdatePathNode, decodeUpdatePathNode, updatePathEncoder, encodeUpdatePath, decodeUpdatePath, init_updatePath, commitEncoder, encodeCommit, decodeCommit, init_commit, contentTypes, contentTypeEncoder, encodeContentType, decodeContentType, init_contentType, wireformats, wireformatEncoder, encodeWireformat, decodeWireformat, init_wireformat, senderTypes, senderTypeEncoder, encodeSenderType, decodeSenderType, senderEncoder, encodeSender, decodeSender, reuseGuardEncoder, encodeReuseGuard, decodeReuseGuard, senderDataEncoder, encodeSenderData, decodeSenderData, senderDataAADEncoder, encodeSenderDataAAD, decodeSenderDataAAD, init_sender, framedContentApplicationDataEncoder, encodeFramedContentApplicationData, framedContentProposalDataEncoder, encodeFramedContentProposalData, framedContentCommitDataEncoder, encodeFramedContentCommitData, framedContentInfoEncoder, encodeFramedContentInfo, decodeFramedContentApplicationData, decodeFramedContentProposalData, decodeFramedContentCommitData, decodeFramedContentInfo, framedContentEncoder, encodeFramedContent, decodeFramedContent, senderInfoEncoder, encodeSenderInfo, framedContentTBSEncoder, encodeFramedContentTBS, encodeFramedContentAuthDataContent, encodeFramedContentAuthDataCommit, framedContentAuthDataEncoder, encodeFramedContentAuthData, decodeFramedContentAuthDataCommit, init_framedContent, authenticatedContentEncoder, encodeAuthenticatedContent, decodeAuthenticatedContent, authenticatedContentTBMEncoder, encodeAuthenticatedContentTBM, init_authenticatedContent, publicMessageInfoEncoder, encodePublicMessageInfo, publicMessageEncoder, encodePublicMessage, decodePublicMessage, init_publicMessage, init_messageProtectionPublic, init_externalProposal, requiredCapabilitiesEncoder, encodeRequiredCapabilities, decodeRequiredCapabilities, init_requiredCapabilities, defaultAuthenticationService, init_authenticationService, defaultPaddingConfig, init_paddingConfig, defaultKeyPackageEqualityConfig, init_keyPackageEqualityConfig, defaultLifetimeConfig, init_lifetimeConfig, defaultKeyRetentionConfig, init_keyRetentionConfig, groupInfoTBSEncoder, encodeGroupInfoTBS, decodeGroupInfoTBS, groupInfoEncoder, encodeGroupInfo, decodeGroupInfo, init_groupInfo, keyScheduleEncoder, encodeKeySchedule, decodeKeySchedule, init_keySchedule, generationSecretEncoder, decodeGenerationSecret, secretTreeNodeEncoder, decodeSecretTreeNode, secretTreeEncoder, decodeSecretTree, init_secretTree, confirmedTranscriptHashInputEncoder, encodeConfirmedTranscriptHashInput, decodeConfirmedTranscriptHashInput, init_transcriptHash, groupSecretsEncoder, encodeGroupSecrets, decodeGroupSecrets, init_groupSecrets, encryptedGroupSecretsEncoder, encodeEncryptedGroupSecrets, decodeEncryptedGroupSecrets, welcomeEncoder, encodeWelcome, decodeWelcome, init_welcome, init_pathSecrets, privateKeyPathEncoder, decodePrivateKeyPath, init_privateKeyPath, proposalWithSenderEncoder, decodeProposalWithSender, unappliedProposalsEncoder, decodeUnappliedProposals, init_unappliedProposals, emptyPskIndex, init_pskIndex, init_addToMap, defaultClientConfig, init_clientConfig, init_array, stringEncoder, encodeString, decodeString, init_string, activeEncoder, suspendedPendingReinitEncoder, removedFromGroupEncoder, groupActiveStateEncoder, decodeGroupActiveState, init_groupActiveState, epochReceiverDataEncoder, decodeEpochReceiverData, init_epochReceiverData, groupStateEncoder, encodeGroupState, decodeGroupState, groupStateEncoderWithoutTree, encodeGroupStateWithoutTree, emptyProposals, init_clientState, privateMessageEncoder, encodePrivateMessage, decodePrivateMessage, privateContentAADEncoder, encodePrivateContentAAD, decodePrivateContentAAD, init_privateMessage, init_messageProtection, init_createMessage, init_createCommit, init_processMessages, init_makeHashImpl, HpkeError, InvalidParamError, SerializeError, DeserializeError, EncapError, DecapError, ExportError, SealError, OpenError, MessageLimitReachedError, DeriveKeyPairError, NotSupportedError, init_errors, dntGlobals, dntGlobalThis, init_dnt_shims, NativeAlgorithm, init_algorithm, Mode, KemId, KdfId, AeadId, init_identifiers, INPUT_LENGTH_LIMIT, INFO_LENGTH_LIMIT, MINIMUM_PSK_LENGTH, EMPTY, BYTE_TO_BIGINT_256, init_consts, SUITE_ID_HEADER_KEM, init_kemInterface, HPKE_VERSION, HkdfNative, HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, init_hkdf, isCryptoKeyPair, init_misc, LABEL_EAE_PRK, LABEL_SHARED_SECRET, Dhkem, init_dhkem, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, init_dhkemPrimitives, Bignum, init_bignum, LABEL_CANDIDATE, ORDER_P_256, ORDER_P_384, ORDER_P_521, PKCS8_ALG_ID_P_256, PKCS8_ALG_ID_P_384, PKCS8_ALG_ID_P_521, EC_P_256_PARAMS, EC_P_384_PARAMS, EC_P_521_PARAMS, Ec, init_ec, init_xCryptoKey, init_xCurve, init_hybridkem, AEAD_USAGES, init_aeadEncryptionContext, _endianTestBuffer, _endianTestBytes, isLE2, init_noble, init_hash2, _HMAC, hmac, init_hmac, init_md2, U32_MASK642, _32n2, init_u642, init_sha2, _0n, _1n, _2n, _7n, _256n, _0x71n, SHA3_PI, SHA3_ROTL, _SHA3_IOTA, IOTAS, SHA3_IOTA_H, SHA3_IOTA_L, init_sha3, init_modular, init_curve, init_montgomery, init_mod, AesGcmContext, Aes128Gcm, Aes256Gcm, init_aesGcm, init_exportOnly, init_emitNotSupported, LABEL_SEC, ExporterContextImpl, RecipientExporterContextImpl, SenderExporterContextImpl, init_exporterContext, EncryptionContextImpl, init_encryptionContext, __classPrivateFieldGet, __classPrivateFieldSet, _Mutex_locked, Mutex, init_mutex, __classPrivateFieldGet2, __classPrivateFieldSet2, _RecipientContextImpl_mutex, RecipientContextImpl, init_recipientContext, __classPrivateFieldGet3, __classPrivateFieldSet3, _SenderContextImpl_mutex, SenderContextImpl, init_senderContext, LABEL_BASE_NONCE, LABEL_EXP, LABEL_INFO_HASH, LABEL_KEY, LABEL_PSK_ID_HASH, LABEL_SECRET, SUITE_ID_HEADER_HPKE, CipherSuiteNative, init_cipherSuiteNative, DhkemP256HkdfSha256Native, DhkemP384HkdfSha384Native, DhkemP521HkdfSha512Native, init_dhkemNative, CipherSuite, DhkemP256HkdfSha256, DhkemP384HkdfSha384, DhkemP521HkdfSha512, HkdfSha256, HkdfSha384, HkdfSha512, init_native, ALG_NAME, PKCS8_ALG_ID_X25519, BASE_POINT_X25519, X25519, init_x25519, DhkemX25519HkdfSha256, init_dhkemX25519, PKCS8_ALG_ID_X448, init_x448, init_dhkemX448, init_mod2, init_hpke2, isLE3, wrapCipher, init_utils2, encodeStr, sigma16, sigma32, sigma16_32, sigma32_32, BLOCK_LEN, BLOCK_LEN32, MAX_COUNTER, U32_EMPTY, _XorStreamPRG, createPRG, init_arx, Poly1305, poly1305, init_poly1305, chacha_exports, chacha20orig, chacha20, xchacha20, chacha8, chacha12, ZEROS16, updatePadded, ZEROS32, _poly1305_aead, chacha20poly1305, xchacha20poly1305, rngChacha20, rngChacha8, init_chacha, init_makeAead, init_makeKdfImpl, init_makeDhKem, init_makeHpke, defaultRng, init_rng, crypto3, init_cryptoNode, isLE4, swap32IfBE3, hasHexBuiltin2, hexes2, asciis, Hash, init_utils3, HashMD3, SHA256_IV3, SHA384_IV3, SHA512_IV3, init_md3, U32_MASK643, _32n3, shrSH3, shrSL3, rotrSH3, rotrSL3, rotrBH3, rotrBL3, rotlSH2, rotlSL2, rotlBH2, rotlBL2, add3L3, add3H3, add4L3, add4H3, add5L3, add5H3, init_u643, SHA256_K, SHA256_W, SHA256, K512, SHA512_Kh, SHA512_Kl, SHA512_W_H, SHA512_W_L, SHA512, SHA384, sha2563, sha5122, sha3842, init_sha22, _0n2, _1n2, isPosBig, bitMask, notImplemented, init_utils4, _0n3, _1n3, _2n2, _3n, _4n, _5n, _7n2, _8n, _9n, _16n, isNegativeLE, FIELD_FIELDS, init_modular2, _0n4, _1n4, pointPrecomputes, pointWindowSizes, wNAF, init_curve2, _0n5, _1n5, _2n3, _8n2, PrimeEdwardsPoint, init_edwards, os2ip, _DST_scalar, init_hash_to_curve, _0n6, _1n6, _2n4, init_montgomery2, ed25519_exports, _0n7, _1n7, _2n5, _3n2, _5n2, _8n3, ed25519_CURVE_p, ed25519_CURVE, ED25519_SQRT_M1, Fp, Fn, ed25519Defaults, ed25519, ed25519ctx, ed25519ph, x25519, ELL2_C1, ELL2_C2, ELL2_C3, ELL2_C1_EDWARDS, ed25519_hasher, SQRT_M1, SQRT_AD_MINUS_ONE, INVSQRT_A_MINUS_D, ONE_MINUS_D_SQ, D_MINUS_ONE_SQ, invertSqrt, MAX_255B, bytes255ToNumberLE, _RistrettoPoint, ristretto255, ristretto255_hasher, ED25519_TORSION_SUBGROUP, edwardsToMontgomery, RistrettoPoint, hashToCurve, encodeToCurve, hashToRistretto255, hash_to_ristretto255, init_ed25519, _0n8, _1n8, _2n6, _7n3, _256n2, _0x71n2, SHA3_PI2, SHA3_ROTL2, _SHA3_IOTA2, IOTAS2, SHA3_IOTA_H2, SHA3_IOTA_L2, rotlH, rotlL, Keccak, genShake, shake2562, init_sha32, ed448_exports, ed448_CURVE, E448_CURVE, shake256_114, shake256_64, _1n9, _2n7, _3n3, _4n2, _11n, _22n, _44n, _88n, _223n, Fp2, Fn2, Fp448, Fn448, ED448_DEF, ed448, ed448ph, E448, x448, ELL2_C12, ELL2_J, ed448_hasher, ONE_MINUS_D, ONE_MINUS_TWO_D, SQRT_MINUS_D, INVSQRT_MINUS_D, invertSqrt2, _DecafPoint, decaf448, decaf448_hasher, ED448_TORSION_SUBGROUP, DecafPoint, hashToCurve2, encodeToCurve2, hashToDecaf448, hash_to_decaf448, edwardsToMontgomery2, init_ed448, HMAC, hmac2, init_hmac2, divNearest, DERErr, DER, _0n9, _1n10, _2n8, _3n4, _4n3, init_weierstrass, init_shortw_utils, nist_exports, p256_CURVE, p384_CURVE, p521_CURVE, Fp256, Fp384, Fp521, p256, p256_hasher, p384, p384_hasher, p521, secp256r1, secp384r1, secp521r1, p521_hasher, init_nist, init_makeNobleSignatureImpl, defaultCryptoProvider, init_provider, init_getCiphersuiteImpl, init_resumption, SHA256_K2, SHA256_W2, SHA2_32B, _SHA256, K5122, SHA512_Kh2, SHA512_Kl2, SHA512_W_H2, SHA512_W_L2, SHA2_64B, _SHA512, _SHA384, sha2564, sha5123, sha3843, init_sha23, _HMAC2, hmac3, init_hmac3, init_makeHashImpl2, init_makeNobleSignatureImpl2, BLOCK_SIZE, ZEROS162, ZEROS322, POLY, mul2, swapLE, estimateWindow, GHASH, Polyval, ghash, polyval, init_polyval, BLOCK_SIZE2, BLOCK_SIZE32, EMPTY_BLOCK, POLY2, sbox, rotr32_8, rotl32_8, tableEncoding, xPowers, gcm, _CMAC, cmac, init_aes, init_makeAead2, init_makeKdfImpl2, init_makeDhKem2, init_makeHpke2, init_rng2, nobleCryptoProvider, init_provider2, mlsPublicMessageEncoder, encodeMlsPublicMessage, mlsWelcomeEncoder, encodeMlsWelcome, mlsPrivateMessageEncoder, encodeMlsPrivateMessage, mlsGroupInfoEncoder, encodeMlsGroupInfo, mlsKeyPackageEncoder, encodeMlsKeyPackage, mlsMessageContentEncoder, encodeMlsMessageContent, decodeMlsMessageContent, mlsMessageEncoder, encodeMlsMessage, decodeMlsMessage, init_message, greaseValues, defaultGreaseConfig, init_grease, init_defaultCapabilities, init_src, DEFAULT_CIPHERSUITE, MLSGroupManager, init_mls_group, DOMAIN, NONCE_BYTES3, init_owner_sync, init_mls_delivery_order, init_mls_presend_epoch, dist_exports, init_dist2, DIR_MODE, FILE_MODE, init_secure_file, SYNC_LOCK_STALE_MS, pendingKpPath, init_mls_state, init_mls_kp_pool, PACKAGE, FALLBACK, MAX_LEN, DISALLOWED, init_client_version, CredentialStore, init_credential_store, init_crypto_helpers, STATE_FILE, LEGACY_STATE_FILE, init_state, ACTIVATION_DOMAIN, UUID_RE2, init_transport2, A2ALogGate, init_a2a_log_gate, init_mls_membership_probe, FIRST_DIRTY_DELAY_MS, RETRY_BASE_DELAYS_MS, MAX_RETRY_DELAY_MS, JITTER_FRACTION, HistoryBackupScheduler, init_history_backup_scheduler, FILE_MODE2, init_history_recovery_file, TENANT_ID_PATTERN, DIR_MODE2, FILE_MODE3, HISTORY_RECOVERY_VERIFY_TIMEOUT_MS, VERIFY_TIMEOUT_MESSAGE, HistoryRecoveryVerificationTimeoutError, init_history_recovery_code, ACTIONS, init_decision_reply, history_backup_client_exports, HISTORY_RESTORE_TIMEOUT_MS, HISTORY_RESTORE_RESPONSE_MAX_BYTES, HISTORY_ENVELOPE_MIN_BYTES, HISTORY_AAD_PREFIX, UUID_RE3, GENERATION_RESPONSE_KEYS, utf8Encoder, utf8Decoder, HistoryBackupClient, init_history_backup_client, openclaw_compat_exports, defaultImporter, HEARTBEAT_CANDIDATES, AGENT_EVENT_CANDIDATES, TRANSCRIPT_CANDIDATES, _heartbeatFn, _agentEventFn, _transcriptFn, init_openclaw_compat, http_handlers_exports, init_http_handlers, mcp_proxy_helpers_exports, init_mcp_proxy_helpers, workspace_handlers_exports, MAX_FILE_SIZE, init_workspace_handlers, ROOM_AGENT_TYPES, CREDENTIAL_MESSAGE_TYPES, CATCHUP_MESSAGE_TYPES, POLL_INTERVAL_MS, RECONNECT_BASE_MS, UUID_RE4, RECONNECT_MAX_MS, PENDING_POLL_INTERVAL_MS, HISTORY_RESTORE_TIMEOUT_MS2, HISTORY_UPLOAD_TIMEOUT_MS, CANONICAL_TIMESTAMP_RE, OUTBOUND_DEDUPE_WINDOW_MS, OUTBOUND_DEDUPE_MAX_SUPPRESS_MS, OUTBOUND_DEDUPE_MAX, OUTBOUND_DEDUPE_TYPES, RETRY_CANDIDATE_TTL_MS, RETRY_CANDIDATE_MAX, TOPIC_ID_RE, ROOM_FULFIL_COOLDOWN_MS, SecureChannel, init_channel, init_types, DEFAULT_API_URL, DEFAULT_HTTP_PORT, init_account_config, init_lifecycle, _ocRuntime, _channels, agentVaultPlugin, init_openclaw_plugin, init_gateway_send, init_llm_response_parser, OPENROUTER_PRICING, init_llm_pricing_openrouter, LEGACY_PRICING, PRICING, init_llm_cost, traceStore, init_fetch_interceptor, init_tool_audit, init_harness_compat, managedRoutesRequested, init_openclaw_entry, util, objectUtil, ZodParsedType, getParsedType, init_util, ZodIssueCode, ZodError, init_ZodError, errorMap, en_default, init_en, overrideErrorMap, init_errors2, makeIssue, ParseStatus, INVALID, DIRTY, OK, isAborted, isDirty, isValid, isAsync, init_parseUtil, init_typeAliases, errorUtil, init_errorUtil, ParseInputLazyPath, handleResult, ZodType, cuidRegex, cuid2Regex, ulidRegex, uuidRegex, nanoidRegex, jwtRegex, durationRegex, emailRegex, _emojiRegex, emojiRegex, ipv4Regex, ipv4CidrRegex, ipv6Regex, ipv6CidrRegex, base64Regex, base64urlRegex, dateRegexSource, dateRegex, ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodArray, ZodObject, ZodUnion, getDiscriminator, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodEffects, ZodOptional, ZodNullable, ZodDefault, ZodCatch, ZodNaN, ZodBranded, ZodPipeline, ZodReadonly, late, ZodFirstPartyTypeKind, stringType, numberType, nanType, bigIntType, booleanType, dateType, symbolType, undefinedType, nullType, anyType, unknownType, neverType, voidType, arrayType, objectType, strictObjectType, unionType, discriminatedUnionType, intersectionType, tupleType, recordType, mapType, setType, functionType, lazyType, literalType, enumType, nativeEnumType, promiseType, effectsType, optionalType, nullableType, preprocessType, pipelineType, init_types2, init_external, init_v3, util_exports, Cached, EVALUATING, captureStackTrace, allowsEval, getParsedType2, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES, highSurrogate, Class, installing, broke, breaker, CONSTANT_CATCH, init_util2, _a2, _zodDesc, _E, $ZodAsyncError, $ZodEncodeError, globalConfig, init_core, _messageDesc, _issuesDesc, _installedToString, initializer, $ZodError, $ZodRealError, init_errors3, _parse, parse, _parseAsync, parseAsync, _safeParse, safeParse, _safeParseAsync, safeParseAsync, COMPILE_INVALID, COMPILE_FALLBACK, validate, validateAsync, _encode, _decode, _encodeAsync, _decodeAsync, _safeEncode, _safeDecode, _safeEncodeAsync, _safeDecodeAsync, init_parse, cuid, cuid2, ulid, xid, ksuid, nanoid, duration, guid, uuid, email, _emoji, ipv4, ipv6, cidrv4, cidrv6, base64, base64url, httpProtocol, e164, dateSource, date, anyString, integer, number, boolean, _null, lowercase, uppercase, init_regexes, $ZodCheck, _whenHasLength, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckOverwrite, init_checks, Doc, init_doc, version, init_versions, $ZodType, toStandardResult, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, URL_BAD_FORMAT, URL_UNPARSEABLE, asciiTabOrNewline, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, ipv6Alphabet, $ZodIPv6, $ZodCIDRv4, $ZodCIDRv6, base64Charset, $ZodBase64, base64urlCharset, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodNull, $ZodUnknown, $ZodNever, arraySize, $ZodArray, NO_SYMBOL_KEYS, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodDiscriminatedUnion, $ZodIntersection, $ZodRecord, $ZodEnum, $ZodLiteral, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodCatch, $ZodPipe, $ZodPreprocess, $ZodReadonly, $ZodCustom, init_schemas, $ZodCyclicError, STATE, NO_ISSUES, recursive, NONE, ASSUMED, PROVEN, handoff, open4, memo, init_memoizer, error, init_en2, init_locales, _a3, $ZodRegistry, globalRegistry, init_registries, init_compile, init_api, FOLDABLE_KEYS, UNION_KEYS, createToJSONSchemaMethod, createStandardJSONSchemaMethod, init_to_json_schema, narrowMin, narrowMax, narrowBoth, addDivisor, addPattern, intersectMime, setFormat, minContributor, maxContributor, formatContributor, contributors, formatMap, exactPatterns, exactPattern, stringProcessor, numberProcessor, booleanProcessor, bigintProcessor, symbolProcessor, nullProcessor, undefinedProcessor, voidProcessor, neverProcessor, anyProcessor, unknownProcessor, dateProcessor, enumProcessor, literalProcessor, nanProcessor, templateLiteralProcessor, fileProcessor, successProcessor, customProcessor, functionProcessor, transformProcessor, mapProcessor, setProcessor, arrayProcessor, objectProcessor, unionProcessor, intersectionProcessor, tupleProcessor, pendingRecords, recordProcessor, nullableProcessor, nonoptionalProcessor, UNREPRESENTABLE_DEFAULT, defaultProcessor, prefaultProcessor, catchProcessor, pipeProcessor, readonlyProcessor, promiseProcessor, optionalProcessor, lazyProcessor, allProcessors, init_json_schema_processors, init_json_schema, init_core2, init_parse2, ZodMiniType, ZodMiniObject, init_schemas2, init_checks2, init_iso, init_coerce, init_external2, init_v4_mini, init_zod_compat, init_checks3, _installedErrorProtos, initializer2, ZodRealError, init_errors4, parse2, parseAsync2, safeParse3, safeParseAsync3, encode3, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2, init_parse3, ZodType2, _ZodString, ZodString2, ZodStringFormat, ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodNumber2, ZodNumberFormat, ZodBoolean2, ZodNull2, ZodUnknown2, ZodNever2, ZodArray2, ZodObject2, ZodUnion2, ZodDiscriminatedUnion2, ZodIntersection2, ZodRecord2, ZodEnum2, ZodLiteral2, ZodTransform, ZodOptional2, ZodExactOptional, ZodNullable2, ZodDefault2, ZodPrefault, ZodNonOptional, ZodCatch2, ZodPipe, ZodPreprocess, ZodReadonly2, ZodCustom, init_schemas3, ZodFirstPartyTypeKind2, init_compat, iso_exports2, init_iso2, init_coerce2, init_external3, init_classic, init_v4, LATEST_PROTOCOL_VERSION, DEFAULT_NEGOTIATED_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY, JSONRPC_VERSION, AssertObjectSchema, ProgressTokenSchema, CursorSchema, TaskCreationParamsSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, isTaskAugmentedRequestParams, RequestSchema, NotificationsParamsSchema, NotificationSchema, ResultSchema, RequestIdSchema, JSONRPCRequestSchema, isJSONRPCRequest, JSONRPCNotificationSchema, isJSONRPCNotification, JSONRPCResultResponseSchema, isJSONRPCResultResponse, ErrorCode, JSONRPCErrorResponseSchema, isJSONRPCErrorResponse, JSONRPCMessageSchema, JSONRPCResponseSchema, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, isInitializeRequest, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError, UrlElicitationRequiredError, init_types3, init_interfaces, ignoreOverride, defaultOptions, getDefaultOptions, init_Options, getRefs, init_Refs, init_errorMessages, getRelativePath, init_getRelativePath, init_any, init_array2, init_bigint, init_boolean, init_branded, parseCatchDef, init_catch, integerDateParser, init_date, init_default, init_effects, init_enum, isJsonSchema7AllOfType, init_intersection, init_literal, emojiRegex2, zodPatterns, ALPHA_NUMERIC, init_string2, init_record, init_map, init_nativeEnum, init_never, init_null, primitiveMappings, asAnyOf, init_union, init_nullable, init_number2, init_object, parseOptionalDef, init_optional2, parsePipelineDef, init_pipeline, init_promise, init_set, init_tuple, init_undefined, init_unknown, parseReadonlyDef, init_readonly, selectParser, init_selectParser, get$ref, addMeta, init_parseDef, init_parseTypes, zodToJsonSchema, init_zodToJsonSchema, init_esm, init_zod_json_schema_compat, DEFAULT_REQUEST_TIMEOUT_MSEC, Protocol, init_protocol, require_code, require_scope, require_codegen, require_util, require_names, require_errors, require_boolSchema, require_rules, require_applicability, require_dataType, require_defaults, require_code2, require_keyword, require_subschema, require_fast_deep_equal, require_json_schema_traverse, require_resolve, require_validate, require_validation_error, require_ref_error, require_compile, require_data, require_utils, require_schemes, require_fast_uri, require_uri, require_core, require_id, require_ref, require_core2, require_limitNumber, require_multipleOf, require_ucs2length, require_limitLength, require_pattern, require_limitProperties, require_required, require_limitItems, require_equal, require_uniqueItems, require_const, require_enum, require_validation, require_additionalItems, require_items, require_prefixItems, require_items2020, require_contains, require_dependencies, require_propertyNames, require_additionalProperties, require_properties, require_patternProperties, require_not, require_anyOf, require_oneOf, require_allOf, require_if, require_thenElse, require_applicator, require_format, require_format2, require_metadata, require_draft7, require_types, require_discriminator, require_json_schema_draft_07, require_ajv, require_formats, require_limit, require_dist, import_ajv, import_ajv_formats, AjvJsonSchemaValidator, init_ajv_provider, ExperimentalServerTasks, init_server, init_helpers, Server, init_server2, COMPLETABLE_SYMBOL, McpZodTypeKind, init_completable, init_uriTemplate, TOOL_NAME_REGEX, init_toolNameValidation, ExperimentalMcpServerTasks, init_mcp_server, init_zod, McpServer, EMPTY_OBJECT_JSON_SCHEMA, EMPTY_COMPLETION_RESULT, init_mcp, RequestError, toRequestError, GlobalRequest, Request2, newHeadersFromIncoming, wrapBodyStream, newRequestFromIncoming, getRequestCache, requestCache, incomingKey, urlKey, headersKey, abortControllerKey, getAbortController, requestPrototype, newRequest, responseCache, getResponseCache, cacheKey, GlobalResponse, Response2, buildOutgoingHttpHeaders, X_ALREADY_SENT, outgoingEnded, handleRequestError, handleFetchError, handleResponseError, flushHeaders, responseViaCache, isPromise, responseViaResponseObject, getRequestListener, init_dist22, require_content_type, import_content_type, init_mediaType, DEFAULT_MAX_REQUEST_BODY_SIZE, MAX_BATCH_SIZE, init_requestBody, DEFAULT_SSE_KEEP_ALIVE_MS, MAX_TIMER_DELAY_MS, init_sseKeepAlive, WebStandardStreamableHTTPServerTransport, init_webStandardStreamableHttp, StreamableHTTPServerTransport, init_streamableHttp, AgentVaultMcpServer, init_mcp_server2, init_mcp_handlers, init_skill_manifest, init_skill_invoker, spanBuffer, init_skill_telemetry, PolicyEnforcer, init_policy_enforcer, VERSION, init_index;
17684
+ var __create, __defProp2, __getOwnPropDesc, __getOwnPropNames2, __getProtoOf, __hasOwnProp, __esm2, __commonJS, __export2, __copyProps, __toESM, SENTINEL, WRAPPERS, INSTRUCTION, init_abstention, AMBIGUOUS_OWNER_ERROR, init_owner_routing, init_envelope_text, init_mls_commit_classify, MENTION_RE, BROADCAST_NAMES, init_room_protocol, __filename, __dirname, url, path, Module, Module, root, window_, crypto_, randomValuesStandard, crypto2, randomValueNodeJS, _Module, libsodium_sumo_default, init_libsodium_sumo, a, r, t, c, libsodium_wrappers_default, init_libsodium_wrappers, init_keys, init_x3dh, MAX_SKIP, CHAIN_KEY_SEED, MSG_KEY_SEED, HEADER_KEY_SEED, DoubleRatchet, init_ratchet, init_file_crypto, DOMAIN_DID_DOCUMENT, DOMAIN_TRANSFER_INTENT, DOMAIN_TRANSFER_ACCEPT, BASE58_ALPHABET, init_did, BUILTIN_PATTERNS, ScanEngine, init_scan_engine, init_merkle, VC_CONTEXT_V2, AV_CREDENTIAL_CONTEXT, CRYPTOSUITE, BASE58_ALPHABET2, init_vc, init_transport, init_telemetry, TelemetryReporter, init_telemetry_reporter, CROCKFORD, ARGON2_OPSLIMIT, ARGON2_MEMLIMIT, SALT_BYTES, NONCE_BYTES, KEY_BYTES, BACKUP_VERSION, MAX_BACKUP_SIZE, init_backup, atitle, aobject, aopts, isLE, swap8IfBE, swap32IfBE, hasHexBuiltin, hexes, oidNist, init_utils, BSIGMA, init_blake, U32_MASK64, _32n, fromNumH, fromNumL, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, add3L, add3H, add4L, add4H, add5L, add5H, init_u64, HashMD, SHA256_IV, SHA384_IV, SHA512_IV, init_md, B2B_IV, BBUF, _BLAKE2, _BLAKE2b, blake2b, init_blake2, CROCKFORD2, SALT_BYTES2, NONCE_BYTES2, KEY_BYTES2, TAG_BYTES, ENVELOPE_OVERHEAD, AAD_PREFIX, UUID_RE, UUID_V4_RE, DIGEST_ID_RE, TIMESTAMP_RE, encoder, decoder, HISTORY_MAGIC, HISTORY_ARCHIVE_VERSION, HISTORY_MAX_ENTRIES, HISTORY_MAX_BLOB_BYTES, HISTORY_KDF_OPSLIMIT, HISTORY_KDF_MEMLIMIT, HistoryEntryTooLargeError, init_history_backup, init_approval, encVoid, init_tlsEncoder, uint8Encoder, encodeUint8, decodeUint8, uint16Encoder, encodeUint16, decodeUint16, uint32Encoder, encodeUint32, decodeUint32, uint64Encoder, encodeUint64, decodeUint64, init_number, init_tlsDecoder, init_enumHelpers, defaultProposalTypes, defaultProposalTypeEncoder, encodeDefaultProposalType, decodeDefaultProposalType, init_defaultProposalType, defaultExtensionTypes, defaultExtensionTypeEncoder, encodeDefaultExtensionType, decodeDefaultExtensionType, init_defaultExtensionType, acceptAll, init_incomingMessageAction, MlsError, ValidationError, CodecError, UsageError, DependencyError, CryptoVerificationError, CryptoError, InternalError, init_mlsError, init_byteArray, varLenDataEncoder, decodeVarLenData, init_variableLength, init_constantTimeCompare, extensionTypeEncoder, encodeExtensionType, decodeExtensionType, extensionEncoder, encodeExtension, decodeExtension, init_extension, credentialTypes, credentialTypeEncoder, encodeCredentialType, decodeCredentialType, init_credentialType, credentialBasicEncoder, encodeCredentialBasic, credentialX509Encoder, encodeCredentialX509, credentialCustomEncoder, encodeCredentialCustom, credentialEncoder, encodeCredential, decodeCredentialBasic, decodeCredentialX509, decodeCredential, init_credential, externalSenderEncoder, encodeExternalSender, decodeExternalSender, init_externalSender, init_hash, init_optional, ciphersuites, ciphersuiteEncoder, encodeCiphersuite, decodeCiphersuite, ciphersuiteValues, init_ciphersuite, init_signature, protocolVersions, protocolVersionEncoder, encodeProtocolVersion, decodeProtocolVersion, init_protocolVersion, capabilitiesEncoder, encodeCapabilities, decodeCapabilities, init_capabilities, leafNodeSources, leafNodeSourceEncoder, encodeLeafNodeSource, decodeLeafNodeSource, init_leafNodeSource, lifetimeEncoder, encodeLifetime, decodeLifetime, defaultLifetime, init_lifetime, leafNodeDataEncoder, encodeLeafNodeData, decodeLeafNodeData, leafNodeInfoKeyPackageEncoder, encodeLeafNodeInfoKeyPackage, leafNodeInfoUpdateOmittedEncoder, encodeLeafNodeInfoUpdateOmitted, leafNodeInfoCommitOmittedEncoder, encodeLeafNodeInfoCommitOmitted, leafNodeInfoOmittedEncoder, encodeLeafNodeInfoOmitted, decodeLeafNodeInfoKeyPackage, decodeLeafNodeInfoUpdateOmitted, decodeLeafNodeInfoCommitOmitted, decodeLeafNodeInfoOmitted, leafNodeInfoUpdateEncoder, encodeLeafNodeInfoUpdate, leafNodeInfoCommitEncoder, encodeLeafNodeInfoCommit, leafNodeInfoEncoder, encodeLeafNodeInfo, decodeLeafNodeInfoUpdate, decodeLeafNodeInfoCommit, decodeLeafNodeInfo, leafNodeTBSEncoder, encodeLeafNodeTBS, leafNodeEncoder, encodeLeafNode, decodeLeafNode, decodeLeafNodeKeyPackage, decodeLeafNodeCommit, decodeLeafNodeUpdate, init_leafNode, keyPackageTBSEncoder, encodeKeyPackageTBS, decodeKeyPackageTBS, keyPackageEncoder, encodeKeyPackage, decodeKeyPackage, init_keyPackage, init_kdf, pskTypes, pskTypeEncoder, encodePskType, decodePskType, resumptionPSKUsages, resumptionPSKUsageEncoder, encodeResumptionPSKUsage, decodeResumptionPSKUsage, encodePskInfoExternal, encodePskInfoResumption, decodePskInfoResumption, pskInfoEncoder, encodePskInfo, decodePskInfo, pskIdEncoder, encodePskId, decodePskId, pskLabelEncoder, encodePskLabel, decodePskLabel, init_presharedkey, addEncoder, encodeAdd, decodeAdd, updateEncoder, encodeUpdate, decodeUpdate, removeEncoder, encodeRemove, decodeRemove, pskEncoder, encodePSK, decodePSK, reinitEncoder, encodeReinit, decodeReinit, externalInitEncoder, encodeExternalInit, decodeExternalInit, groupContextExtensionsEncoder, encodeGroupContextExtensions, decodeGroupContextExtensions, proposalAddEncoder, encodeProposalAdd, proposalUpdateEncoder, encodeProposalUpdate, proposalRemoveEncoder, encodeProposalRemove, proposalPSKEncoder, encodeProposalPSK, proposalReinitEncoder, encodeProposalReinit, proposalExternalInitEncoder, encodeProposalExternalInit, proposalGroupContextExtensionsEncoder, encodeProposalGroupContextExtensions, proposalCustomEncoder, encodeProposalCustom, proposalEncoder, encodeProposal, decodeProposalAdd, decodeProposalUpdate, decodeProposalRemove, decodeProposalPSK, decodeProposalReinit, decodeProposalExternalInit, decodeProposalGroupContextExtensions, decodeProposal, init_proposal, proposalOrRefTypes, proposalOrRefTypeEncoder, encodeProposalOrRefType, decodeProposalOrRefType, proposalOrRefProposalEncoder, encodeProposalOrRefProposal, proposalOrRefProposalRefEncoder, encodeProposalOrRefProposalRef, proposalOrRefEncoder, encodeProposalOrRef, decodeProposalOrRef, init_proposalOrRefType, init_hpke, groupContextEncoder, encodeGroupContext, decodeGroupContext, init_groupContext, nodeTypes, nodeTypeEncoder, encodeNodeType, decodeNodeType, init_nodeType, parentNodeEncoder, encodeParentNode, decodeParentNode, init_parentNode, init_treemath, nodeEncoder, encodeNode, decodeNode, ratchetTreeEncoder, encodeRatchetTree, decodeRatchetTree, init_ratchetTree, leafNodeHashInputEncoder, encodeLeafNodeHashInput, decodeLeafNodeHashInput, parentNodeHashInputEncoder, encodeParentNodeHashInput, decodeParentNodeHashInput, treeHashInputEncoder, encodeTreeHashInput, decodeTreeHashInput, init_treeHash, parentHashInputEncoder, encodeParentHashInput, decodeParentHashInput, init_parentHash, hpkeCiphertextEncoder, encodeHpkeCiphertext, decodeHpkeCiphertext, init_hpkeCiphertext, updatePathNodeEncoder, encodeUpdatePathNode, decodeUpdatePathNode, updatePathEncoder, encodeUpdatePath, decodeUpdatePath, init_updatePath, commitEncoder, encodeCommit, decodeCommit, init_commit, contentTypes, contentTypeEncoder, encodeContentType, decodeContentType, init_contentType, wireformats, wireformatEncoder, encodeWireformat, decodeWireformat, init_wireformat, senderTypes, senderTypeEncoder, encodeSenderType, decodeSenderType, senderEncoder, encodeSender, decodeSender, reuseGuardEncoder, encodeReuseGuard, decodeReuseGuard, senderDataEncoder, encodeSenderData, decodeSenderData, senderDataAADEncoder, encodeSenderDataAAD, decodeSenderDataAAD, init_sender, framedContentApplicationDataEncoder, encodeFramedContentApplicationData, framedContentProposalDataEncoder, encodeFramedContentProposalData, framedContentCommitDataEncoder, encodeFramedContentCommitData, framedContentInfoEncoder, encodeFramedContentInfo, decodeFramedContentApplicationData, decodeFramedContentProposalData, decodeFramedContentCommitData, decodeFramedContentInfo, framedContentEncoder, encodeFramedContent, decodeFramedContent, senderInfoEncoder, encodeSenderInfo, framedContentTBSEncoder, encodeFramedContentTBS, encodeFramedContentAuthDataContent, encodeFramedContentAuthDataCommit, framedContentAuthDataEncoder, encodeFramedContentAuthData, decodeFramedContentAuthDataCommit, init_framedContent, authenticatedContentEncoder, encodeAuthenticatedContent, decodeAuthenticatedContent, authenticatedContentTBMEncoder, encodeAuthenticatedContentTBM, init_authenticatedContent, publicMessageInfoEncoder, encodePublicMessageInfo, publicMessageEncoder, encodePublicMessage, decodePublicMessage, init_publicMessage, init_messageProtectionPublic, init_externalProposal, requiredCapabilitiesEncoder, encodeRequiredCapabilities, decodeRequiredCapabilities, init_requiredCapabilities, defaultAuthenticationService, init_authenticationService, defaultPaddingConfig, init_paddingConfig, defaultKeyPackageEqualityConfig, init_keyPackageEqualityConfig, defaultLifetimeConfig, init_lifetimeConfig, defaultKeyRetentionConfig, init_keyRetentionConfig, groupInfoTBSEncoder, encodeGroupInfoTBS, decodeGroupInfoTBS, groupInfoEncoder, encodeGroupInfo, decodeGroupInfo, init_groupInfo, keyScheduleEncoder, encodeKeySchedule, decodeKeySchedule, init_keySchedule, generationSecretEncoder, decodeGenerationSecret, secretTreeNodeEncoder, decodeSecretTreeNode, secretTreeEncoder, decodeSecretTree, init_secretTree, confirmedTranscriptHashInputEncoder, encodeConfirmedTranscriptHashInput, decodeConfirmedTranscriptHashInput, init_transcriptHash, groupSecretsEncoder, encodeGroupSecrets, decodeGroupSecrets, init_groupSecrets, encryptedGroupSecretsEncoder, encodeEncryptedGroupSecrets, decodeEncryptedGroupSecrets, welcomeEncoder, encodeWelcome, decodeWelcome, init_welcome, init_pathSecrets, privateKeyPathEncoder, decodePrivateKeyPath, init_privateKeyPath, proposalWithSenderEncoder, decodeProposalWithSender, unappliedProposalsEncoder, decodeUnappliedProposals, init_unappliedProposals, emptyPskIndex, init_pskIndex, init_addToMap, defaultClientConfig, init_clientConfig, init_array, stringEncoder, encodeString, decodeString, init_string, activeEncoder, suspendedPendingReinitEncoder, removedFromGroupEncoder, groupActiveStateEncoder, decodeGroupActiveState, init_groupActiveState, epochReceiverDataEncoder, decodeEpochReceiverData, init_epochReceiverData, groupStateEncoder, encodeGroupState, decodeGroupState, groupStateEncoderWithoutTree, encodeGroupStateWithoutTree, emptyProposals, init_clientState, privateMessageEncoder, encodePrivateMessage, decodePrivateMessage, privateContentAADEncoder, encodePrivateContentAAD, decodePrivateContentAAD, init_privateMessage, init_messageProtection, init_createMessage, init_createCommit, init_processMessages, init_makeHashImpl, HpkeError, InvalidParamError, SerializeError, DeserializeError, EncapError, DecapError, ExportError, SealError, OpenError, MessageLimitReachedError, DeriveKeyPairError, NotSupportedError, init_errors, dntGlobals, dntGlobalThis, init_dnt_shims, NativeAlgorithm, init_algorithm, Mode, KemId, KdfId, AeadId, init_identifiers, INPUT_LENGTH_LIMIT, INFO_LENGTH_LIMIT, MINIMUM_PSK_LENGTH, EMPTY, BYTE_TO_BIGINT_256, init_consts, SUITE_ID_HEADER_KEM, init_kemInterface, HPKE_VERSION, HkdfNative, HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, init_hkdf, isCryptoKeyPair, init_misc, LABEL_EAE_PRK, LABEL_SHARED_SECRET, Dhkem, init_dhkem, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, init_dhkemPrimitives, Bignum, init_bignum, LABEL_CANDIDATE, ORDER_P_256, ORDER_P_384, ORDER_P_521, PKCS8_ALG_ID_P_256, PKCS8_ALG_ID_P_384, PKCS8_ALG_ID_P_521, EC_P_256_PARAMS, EC_P_384_PARAMS, EC_P_521_PARAMS, Ec, init_ec, init_xCryptoKey, init_xCurve, init_hybridkem, AEAD_USAGES, init_aeadEncryptionContext, _endianTestBuffer, _endianTestBytes, isLE2, init_noble, init_hash2, _HMAC, hmac, init_hmac, init_md2, U32_MASK642, _32n2, init_u642, init_sha2, _0n, _1n, _2n, _7n, _256n, _0x71n, SHA3_PI, SHA3_ROTL, _SHA3_IOTA, IOTAS, SHA3_IOTA_H, SHA3_IOTA_L, init_sha3, init_modular, init_curve, init_montgomery, init_mod, AesGcmContext, Aes128Gcm, Aes256Gcm, init_aesGcm, init_exportOnly, init_emitNotSupported, LABEL_SEC, ExporterContextImpl, RecipientExporterContextImpl, SenderExporterContextImpl, init_exporterContext, EncryptionContextImpl, init_encryptionContext, __classPrivateFieldGet, __classPrivateFieldSet, _Mutex_locked, Mutex, init_mutex, __classPrivateFieldGet2, __classPrivateFieldSet2, _RecipientContextImpl_mutex, RecipientContextImpl, init_recipientContext, __classPrivateFieldGet3, __classPrivateFieldSet3, _SenderContextImpl_mutex, SenderContextImpl, init_senderContext, LABEL_BASE_NONCE, LABEL_EXP, LABEL_INFO_HASH, LABEL_KEY, LABEL_PSK_ID_HASH, LABEL_SECRET, SUITE_ID_HEADER_HPKE, CipherSuiteNative, init_cipherSuiteNative, DhkemP256HkdfSha256Native, DhkemP384HkdfSha384Native, DhkemP521HkdfSha512Native, init_dhkemNative, CipherSuite, DhkemP256HkdfSha256, DhkemP384HkdfSha384, DhkemP521HkdfSha512, HkdfSha256, HkdfSha384, HkdfSha512, init_native, ALG_NAME, PKCS8_ALG_ID_X25519, BASE_POINT_X25519, X25519, init_x25519, DhkemX25519HkdfSha256, init_dhkemX25519, PKCS8_ALG_ID_X448, init_x448, init_dhkemX448, init_mod2, init_hpke2, isLE3, wrapCipher, init_utils2, encodeStr, sigma16, sigma32, sigma16_32, sigma32_32, BLOCK_LEN, BLOCK_LEN32, MAX_COUNTER, U32_EMPTY, _XorStreamPRG, createPRG, init_arx, Poly1305, poly1305, init_poly1305, chacha_exports, chacha20orig, chacha20, xchacha20, chacha8, chacha12, ZEROS16, updatePadded, ZEROS32, _poly1305_aead, chacha20poly1305, xchacha20poly1305, rngChacha20, rngChacha8, init_chacha, init_makeAead, init_makeKdfImpl, init_makeDhKem, init_makeHpke, defaultRng, init_rng, crypto3, init_cryptoNode, isLE4, swap32IfBE3, hasHexBuiltin2, hexes2, asciis, Hash, init_utils3, HashMD3, SHA256_IV3, SHA384_IV3, SHA512_IV3, init_md3, U32_MASK643, _32n3, shrSH3, shrSL3, rotrSH3, rotrSL3, rotrBH3, rotrBL3, rotlSH2, rotlSL2, rotlBH2, rotlBL2, add3L3, add3H3, add4L3, add4H3, add5L3, add5H3, init_u643, SHA256_K, SHA256_W, SHA256, K512, SHA512_Kh, SHA512_Kl, SHA512_W_H, SHA512_W_L, SHA512, SHA384, sha2563, sha5122, sha3842, init_sha22, _0n2, _1n2, isPosBig, bitMask, notImplemented, init_utils4, _0n3, _1n3, _2n2, _3n, _4n, _5n, _7n2, _8n, _9n, _16n, isNegativeLE, FIELD_FIELDS, init_modular2, _0n4, _1n4, pointPrecomputes, pointWindowSizes, wNAF, init_curve2, _0n5, _1n5, _2n3, _8n2, PrimeEdwardsPoint, init_edwards, os2ip, _DST_scalar, init_hash_to_curve, _0n6, _1n6, _2n4, init_montgomery2, ed25519_exports, _0n7, _1n7, _2n5, _3n2, _5n2, _8n3, ed25519_CURVE_p, ed25519_CURVE, ED25519_SQRT_M1, Fp, Fn, ed25519Defaults, ed25519, ed25519ctx, ed25519ph, x25519, ELL2_C1, ELL2_C2, ELL2_C3, ELL2_C1_EDWARDS, ed25519_hasher, SQRT_M1, SQRT_AD_MINUS_ONE, INVSQRT_A_MINUS_D, ONE_MINUS_D_SQ, D_MINUS_ONE_SQ, invertSqrt, MAX_255B, bytes255ToNumberLE, _RistrettoPoint, ristretto255, ristretto255_hasher, ED25519_TORSION_SUBGROUP, edwardsToMontgomery, RistrettoPoint, hashToCurve, encodeToCurve, hashToRistretto255, hash_to_ristretto255, init_ed25519, _0n8, _1n8, _2n6, _7n3, _256n2, _0x71n2, SHA3_PI2, SHA3_ROTL2, _SHA3_IOTA2, IOTAS2, SHA3_IOTA_H2, SHA3_IOTA_L2, rotlH, rotlL, Keccak, genShake, shake2562, init_sha32, ed448_exports, ed448_CURVE, E448_CURVE, shake256_114, shake256_64, _1n9, _2n7, _3n3, _4n2, _11n, _22n, _44n, _88n, _223n, Fp2, Fn2, Fp448, Fn448, ED448_DEF, ed448, ed448ph, E448, x448, ELL2_C12, ELL2_J, ed448_hasher, ONE_MINUS_D, ONE_MINUS_TWO_D, SQRT_MINUS_D, INVSQRT_MINUS_D, invertSqrt2, _DecafPoint, decaf448, decaf448_hasher, ED448_TORSION_SUBGROUP, DecafPoint, hashToCurve2, encodeToCurve2, hashToDecaf448, hash_to_decaf448, edwardsToMontgomery2, init_ed448, HMAC, hmac2, init_hmac2, divNearest, DERErr, DER, _0n9, _1n10, _2n8, _3n4, _4n3, init_weierstrass, init_shortw_utils, nist_exports, p256_CURVE, p384_CURVE, p521_CURVE, Fp256, Fp384, Fp521, p256, p256_hasher, p384, p384_hasher, p521, secp256r1, secp384r1, secp521r1, p521_hasher, init_nist, init_makeNobleSignatureImpl, defaultCryptoProvider, init_provider, init_getCiphersuiteImpl, init_resumption, SHA256_K2, SHA256_W2, SHA2_32B, _SHA256, K5122, SHA512_Kh2, SHA512_Kl2, SHA512_W_H2, SHA512_W_L2, SHA2_64B, _SHA512, _SHA384, sha2564, sha5123, sha3843, init_sha23, _HMAC2, hmac3, init_hmac3, init_makeHashImpl2, init_makeNobleSignatureImpl2, BLOCK_SIZE, ZEROS162, ZEROS322, POLY, mul2, swapLE, estimateWindow, GHASH, Polyval, ghash, polyval, init_polyval, BLOCK_SIZE2, BLOCK_SIZE32, EMPTY_BLOCK, POLY2, sbox, rotr32_8, rotl32_8, tableEncoding, xPowers, gcm, _CMAC, cmac, init_aes, init_makeAead2, init_makeKdfImpl2, init_makeDhKem2, init_makeHpke2, init_rng2, nobleCryptoProvider, init_provider2, mlsPublicMessageEncoder, encodeMlsPublicMessage, mlsWelcomeEncoder, encodeMlsWelcome, mlsPrivateMessageEncoder, encodeMlsPrivateMessage, mlsGroupInfoEncoder, encodeMlsGroupInfo, mlsKeyPackageEncoder, encodeMlsKeyPackage, mlsMessageContentEncoder, encodeMlsMessageContent, decodeMlsMessageContent, mlsMessageEncoder, encodeMlsMessage, decodeMlsMessage, init_message, greaseValues, defaultGreaseConfig, init_grease, init_defaultCapabilities, init_src, DEFAULT_CIPHERSUITE, MLSGroupManager, init_mls_group, DOMAIN, NONCE_BYTES3, init_owner_sync, init_mls_delivery_order, init_mls_presend_epoch, dist_exports, init_dist2, DIR_MODE, FILE_MODE, init_secure_file, SYNC_LOCK_STALE_MS, pendingKpPath, init_mls_state, init_mls_kp_pool, PACKAGE, FALLBACK, MAX_LEN, DISALLOWED, init_client_version, CredentialStore, init_credential_store, init_crypto_helpers, STATE_FILE, LEGACY_STATE_FILE, init_state, ACTIVATION_DOMAIN, UUID_RE2, init_transport2, A2ALogGate, init_a2a_log_gate, init_mls_membership_probe, FIRST_DIRTY_DELAY_MS, RETRY_BASE_DELAYS_MS, MAX_RETRY_DELAY_MS, JITTER_FRACTION, HistoryBackupScheduler, init_history_backup_scheduler, FILE_MODE2, init_history_recovery_file, TENANT_ID_PATTERN, DIR_MODE2, FILE_MODE3, HISTORY_RECOVERY_VERIFY_TIMEOUT_MS, VERIFY_TIMEOUT_MESSAGE, HistoryRecoveryVerificationTimeoutError, init_history_recovery_code, ACTIONS, init_decision_reply, history_backup_client_exports, HISTORY_RESTORE_TIMEOUT_MS, HISTORY_RESTORE_RESPONSE_MAX_BYTES, HISTORY_ENVELOPE_MIN_BYTES, HISTORY_AAD_PREFIX, UUID_RE3, GENERATION_RESPONSE_KEYS, utf8Encoder, utf8Decoder, HistoryBackupClient, init_history_backup_client, openclaw_compat_exports, defaultImporter, HEARTBEAT_CANDIDATES, AGENT_EVENT_CANDIDATES, TRANSCRIPT_CANDIDATES, _heartbeatFn, _agentEventFn, _transcriptFn, init_openclaw_compat, http_handlers_exports, init_http_handlers, mcp_proxy_helpers_exports, init_mcp_proxy_helpers, workspace_handlers_exports, MAX_FILE_SIZE, init_workspace_handlers, ROOM_AGENT_TYPES, CREDENTIAL_MESSAGE_TYPES, CATCHUP_MESSAGE_TYPES, POLL_INTERVAL_MS, RECONNECT_BASE_MS, UUID_RE4, RECONNECT_MAX_MS, PENDING_POLL_INTERVAL_MS, HISTORY_RESTORE_TIMEOUT_MS2, HISTORY_UPLOAD_TIMEOUT_MS, CANONICAL_TIMESTAMP_RE, OUTBOUND_DEDUPE_WINDOW_MS, OUTBOUND_DEDUPE_MAX_SUPPRESS_MS, OUTBOUND_DEDUPE_MAX, OUTBOUND_DEDUPE_TYPES, RETRY_CANDIDATE_TTL_MS, RETRY_CANDIDATE_MAX, _turnConversation, PERSON_INVOLVED_WINDOW_MS, ATTESTED_INBOUND_MAX, UNMAPPED_RECONCILE_COOLDOWN_MS, TOPIC_ID_RE, ROOM_FULFIL_COOLDOWN_MS, SecureChannel, init_channel, init_types, DEFAULT_API_URL, DEFAULT_HTTP_PORT, init_account_config, init_lifecycle, _ocRuntime, _channels, agentVaultPlugin, init_openclaw_plugin, init_gateway_send, init_llm_response_parser, OPENROUTER_PRICING, init_llm_pricing_openrouter, LEGACY_PRICING, PRICING, init_llm_cost, traceStore, init_fetch_interceptor, init_tool_audit, init_harness_compat, managedRoutesRequested, init_openclaw_entry, util, objectUtil, ZodParsedType, getParsedType, init_util, ZodIssueCode, ZodError, init_ZodError, errorMap, en_default, init_en, overrideErrorMap, init_errors2, makeIssue, ParseStatus, INVALID, DIRTY, OK, isAborted, isDirty, isValid, isAsync, init_parseUtil, init_typeAliases, errorUtil, init_errorUtil, ParseInputLazyPath, handleResult, ZodType, cuidRegex, cuid2Regex, ulidRegex, uuidRegex, nanoidRegex, jwtRegex, durationRegex, emailRegex, _emojiRegex, emojiRegex, ipv4Regex, ipv4CidrRegex, ipv6Regex, ipv6CidrRegex, base64Regex, base64urlRegex, dateRegexSource, dateRegex, ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodArray, ZodObject, ZodUnion, getDiscriminator, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodEffects, ZodOptional, ZodNullable, ZodDefault, ZodCatch, ZodNaN, ZodBranded, ZodPipeline, ZodReadonly, late, ZodFirstPartyTypeKind, stringType, numberType, nanType, bigIntType, booleanType, dateType, symbolType, undefinedType, nullType, anyType, unknownType, neverType, voidType, arrayType, objectType, strictObjectType, unionType, discriminatedUnionType, intersectionType, tupleType, recordType, mapType, setType, functionType, lazyType, literalType, enumType, nativeEnumType, promiseType, effectsType, optionalType, nullableType, preprocessType, pipelineType, init_types2, init_external, init_v3, util_exports, Cached, EVALUATING, captureStackTrace, allowsEval, getParsedType2, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES, highSurrogate, Class, installing, broke, breaker, CONSTANT_CATCH, init_util2, _a2, _zodDesc, _E, $ZodAsyncError, $ZodEncodeError, globalConfig, init_core, _messageDesc, _issuesDesc, _installedToString, initializer, $ZodError, $ZodRealError, init_errors3, _parse, parse, _parseAsync, parseAsync, _safeParse, safeParse, _safeParseAsync, safeParseAsync, COMPILE_INVALID, COMPILE_FALLBACK, validate, validateAsync, _encode, _decode, _encodeAsync, _decodeAsync, _safeEncode, _safeDecode, _safeEncodeAsync, _safeDecodeAsync, init_parse, cuid, cuid2, ulid, xid, ksuid, nanoid, duration, guid, uuid, email, _emoji, ipv4, ipv6, cidrv4, cidrv6, base64, base64url, httpProtocol, e164, dateSource, date, anyString, integer, number, boolean, _null, lowercase, uppercase, init_regexes, $ZodCheck, _whenHasLength, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckOverwrite, init_checks, Doc, init_doc, version, init_versions, $ZodType, toStandardResult, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, URL_BAD_FORMAT, URL_UNPARSEABLE, asciiTabOrNewline, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, ipv6Alphabet, $ZodIPv6, $ZodCIDRv4, $ZodCIDRv6, base64Charset, $ZodBase64, base64urlCharset, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodNull, $ZodUnknown, $ZodNever, arraySize, $ZodArray, NO_SYMBOL_KEYS, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodDiscriminatedUnion, $ZodIntersection, $ZodRecord, $ZodEnum, $ZodLiteral, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodCatch, $ZodPipe, $ZodPreprocess, $ZodReadonly, $ZodCustom, init_schemas, $ZodCyclicError, STATE, NO_ISSUES, recursive, NONE, ASSUMED, PROVEN, handoff, open4, memo, init_memoizer, error, init_en2, init_locales, _a3, $ZodRegistry, globalRegistry, init_registries, init_compile, init_api, FOLDABLE_KEYS, UNION_KEYS, createToJSONSchemaMethod, createStandardJSONSchemaMethod, init_to_json_schema, narrowMin, narrowMax, narrowBoth, addDivisor, addPattern, intersectMime, setFormat, minContributor, maxContributor, formatContributor, contributors, formatMap, exactPatterns, exactPattern, stringProcessor, numberProcessor, booleanProcessor, bigintProcessor, symbolProcessor, nullProcessor, undefinedProcessor, voidProcessor, neverProcessor, anyProcessor, unknownProcessor, dateProcessor, enumProcessor, literalProcessor, nanProcessor, templateLiteralProcessor, fileProcessor, successProcessor, customProcessor, functionProcessor, transformProcessor, mapProcessor, setProcessor, arrayProcessor, objectProcessor, unionProcessor, intersectionProcessor, tupleProcessor, pendingRecords, recordProcessor, nullableProcessor, nonoptionalProcessor, UNREPRESENTABLE_DEFAULT, defaultProcessor, prefaultProcessor, catchProcessor, pipeProcessor, readonlyProcessor, promiseProcessor, optionalProcessor, lazyProcessor, allProcessors, init_json_schema_processors, init_json_schema, init_core2, init_parse2, ZodMiniType, ZodMiniObject, init_schemas2, init_checks2, init_iso, init_coerce, init_external2, init_v4_mini, init_zod_compat, init_checks3, _installedErrorProtos, initializer2, ZodRealError, init_errors4, parse2, parseAsync2, safeParse3, safeParseAsync3, encode3, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2, init_parse3, ZodType2, _ZodString, ZodString2, ZodStringFormat, ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodNumber2, ZodNumberFormat, ZodBoolean2, ZodNull2, ZodUnknown2, ZodNever2, ZodArray2, ZodObject2, ZodUnion2, ZodDiscriminatedUnion2, ZodIntersection2, ZodRecord2, ZodEnum2, ZodLiteral2, ZodTransform, ZodOptional2, ZodExactOptional, ZodNullable2, ZodDefault2, ZodPrefault, ZodNonOptional, ZodCatch2, ZodPipe, ZodPreprocess, ZodReadonly2, ZodCustom, init_schemas3, ZodFirstPartyTypeKind2, init_compat, iso_exports2, init_iso2, init_coerce2, init_external3, init_classic, init_v4, LATEST_PROTOCOL_VERSION, DEFAULT_NEGOTIATED_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY, JSONRPC_VERSION, AssertObjectSchema, ProgressTokenSchema, CursorSchema, TaskCreationParamsSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, isTaskAugmentedRequestParams, RequestSchema, NotificationsParamsSchema, NotificationSchema, ResultSchema, RequestIdSchema, JSONRPCRequestSchema, isJSONRPCRequest, JSONRPCNotificationSchema, isJSONRPCNotification, JSONRPCResultResponseSchema, isJSONRPCResultResponse, ErrorCode, JSONRPCErrorResponseSchema, isJSONRPCErrorResponse, JSONRPCMessageSchema, JSONRPCResponseSchema, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, isInitializeRequest, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError, UrlElicitationRequiredError, init_types3, init_interfaces, ignoreOverride, defaultOptions, getDefaultOptions, init_Options, getRefs, init_Refs, init_errorMessages, getRelativePath, init_getRelativePath, init_any, init_array2, init_bigint, init_boolean, init_branded, parseCatchDef, init_catch, integerDateParser, init_date, init_default, init_effects, init_enum, isJsonSchema7AllOfType, init_intersection, init_literal, emojiRegex2, zodPatterns, ALPHA_NUMERIC, init_string2, init_record, init_map, init_nativeEnum, init_never, init_null, primitiveMappings, asAnyOf, init_union, init_nullable, init_number2, init_object, parseOptionalDef, init_optional2, parsePipelineDef, init_pipeline, init_promise, init_set, init_tuple, init_undefined, init_unknown, parseReadonlyDef, init_readonly, selectParser, init_selectParser, get$ref, addMeta, init_parseDef, init_parseTypes, zodToJsonSchema, init_zodToJsonSchema, init_esm, init_zod_json_schema_compat, DEFAULT_REQUEST_TIMEOUT_MSEC, Protocol, init_protocol, require_code, require_scope, require_codegen, require_util, require_names, require_errors, require_boolSchema, require_rules, require_applicability, require_dataType, require_defaults, require_code2, require_keyword, require_subschema, require_fast_deep_equal, require_json_schema_traverse, require_resolve, require_validate, require_validation_error, require_ref_error, require_compile, require_data, require_utils, require_schemes, require_fast_uri, require_uri, require_core, require_id, require_ref, require_core2, require_limitNumber, require_multipleOf, require_ucs2length, require_limitLength, require_pattern, require_limitProperties, require_required, require_limitItems, require_equal, require_uniqueItems, require_const, require_enum, require_validation, require_additionalItems, require_items, require_prefixItems, require_items2020, require_contains, require_dependencies, require_propertyNames, require_additionalProperties, require_properties, require_patternProperties, require_not, require_anyOf, require_oneOf, require_allOf, require_if, require_thenElse, require_applicator, require_format, require_format2, require_metadata, require_draft7, require_types, require_discriminator, require_json_schema_draft_07, require_ajv, require_formats, require_limit, require_dist, import_ajv, import_ajv_formats, AjvJsonSchemaValidator, init_ajv_provider, ExperimentalServerTasks, init_server, init_helpers, Server, init_server2, COMPLETABLE_SYMBOL, McpZodTypeKind, init_completable, init_uriTemplate, TOOL_NAME_REGEX, init_toolNameValidation, ExperimentalMcpServerTasks, init_mcp_server, init_zod, McpServer, EMPTY_OBJECT_JSON_SCHEMA, EMPTY_COMPLETION_RESULT, init_mcp, RequestError, toRequestError, GlobalRequest, Request2, newHeadersFromIncoming, wrapBodyStream, newRequestFromIncoming, getRequestCache, requestCache, incomingKey, urlKey, headersKey, abortControllerKey, getAbortController, requestPrototype, newRequest, responseCache, getResponseCache, cacheKey, GlobalResponse, Response2, buildOutgoingHttpHeaders, X_ALREADY_SENT, outgoingEnded, handleRequestError, handleFetchError, handleResponseError, flushHeaders, responseViaCache, isPromise, responseViaResponseObject, getRequestListener, init_dist22, require_content_type, import_content_type, init_mediaType, DEFAULT_MAX_REQUEST_BODY_SIZE, MAX_BATCH_SIZE, init_requestBody, DEFAULT_SSE_KEEP_ALIVE_MS, MAX_TIMER_DELAY_MS, init_sseKeepAlive, WebStandardStreamableHTTPServerTransport, init_webStandardStreamableHttp, StreamableHTTPServerTransport, init_streamableHttp, AgentVaultMcpServer, init_mcp_server2, init_mcp_handlers, init_skill_manifest, init_skill_invoker, spanBuffer, init_skill_telemetry, PolicyEnforcer, init_policy_enforcer, VERSION, init_index;
17647
17685
  var init_dist = __esm({
17648
17686
  async "../plugin/dist/index.js"() {
17649
17687
  "use strict";
@@ -17696,6 +17734,12 @@ var init_dist = __esm({
17696
17734
  INSTRUCTION = "not every message needs an answer from you: if this one is not addressed to you and asks nothing of you, reply with exactly " + SENTINEL + " and nothing else \u2014 that is discarded, not posted, and is how you stay quiet; never post a message SAYING that you are staying quiet";
17697
17735
  }
17698
17736
  });
17737
+ init_owner_routing = __esm2({
17738
+ "src/owner-routing.ts"() {
17739
+ "use strict";
17740
+ AMBIGUOUS_OWNER_ERROR = `More than one person is talking to this agent right now, so it can't tell who this is for. Add 'conversation_id' to say which conversation, or send audience "everyone" to reach them all.`;
17741
+ }
17742
+ });
17699
17743
  init_envelope_text = __esm2({
17700
17744
  "src/envelope-text.ts"() {
17701
17745
  "use strict";
@@ -70527,6 +70571,7 @@ var init_dist = __esm({
70527
70571
  init_http_handlers = __esm2({
70528
70572
  "src/http-handlers.ts"() {
70529
70573
  "use strict";
70574
+ init_owner_routing();
70530
70575
  }
70531
70576
  });
70532
70577
  mcp_proxy_helpers_exports = {};
@@ -70556,6 +70601,7 @@ var init_dist = __esm({
70556
70601
  async "src/channel.ts"() {
70557
70602
  "use strict";
70558
70603
  init_abstention();
70604
+ init_owner_routing();
70559
70605
  init_envelope_text();
70560
70606
  init_mls_commit_classify();
70561
70607
  init_room_protocol();
@@ -70605,6 +70651,10 @@ var init_dist = __esm({
70605
70651
  OUTBOUND_DEDUPE_TYPES = /* @__PURE__ */ new Set(["text", "status_alert", "artifact", "attachment"]);
70606
70652
  RETRY_CANDIDATE_TTL_MS = 6e4;
70607
70653
  RETRY_CANDIDATE_MAX = 32;
70654
+ _turnConversation = new AsyncLocalStorage();
70655
+ PERSON_INVOLVED_WINDOW_MS = 5 * 6e4;
70656
+ ATTESTED_INBOUND_MAX = 64;
70657
+ UNMAPPED_RECONCILE_COOLDOWN_MS = 6e4;
70608
70658
  TOPIC_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
70609
70659
  ROOM_FULFIL_COOLDOWN_MS = 6e4;
70610
70660
  SecureChannel = class _SecureChannel extends EventEmitter {
@@ -70843,6 +70893,31 @@ ${text}`;
70843
70893
  _lastIncomingTopics = /* @__PURE__ */ new Map();
70844
70894
  /** Room ID from the most recent inbound room message — used as fallback for HTTP /send replies. */
70845
70895
  _lastInboundRoomId;
70896
+ /**
70897
+ * #1418: the most recent owner 1:1 message that reached the agent — the
70898
+ * person involved in whatever the agent says next without naming a
70899
+ * conversation (see `_involvedPerson`). In memory only: after a restart
70900
+ * there is no trigger, so untargeted content goes to the primary person.
70901
+ */
70902
+ _lastInboundDm;
70903
+ /** #1418: turns in progress (`runForConversation`). */
70904
+ _activeTurns = /* @__PURE__ */ new Set();
70905
+ /**
70906
+ * #1418: recent owner 1:1 messages that decrypted, keyed by
70907
+ * conversation|group — evidence of which conversation, group and browser
70908
+ * belong together (one person). In memory only, bounded.
70909
+ */
70910
+ _attestedInbound = /* @__PURE__ */ new Map();
70911
+ /** #1418: per UNMAPPED group (or conversation), the last time it asked for a reconcile. */
70912
+ _unmappedReconcileAt = /* @__PURE__ */ new Map();
70913
+ /**
70914
+ * #1418: 1:1 groups joined by a Welcome IN THIS PROCESS while no
70915
+ * conversation mapped them — a person who has not been learned yet, counted
70916
+ * as one until the next successful reconcile. Persisted husks never are.
70917
+ */
70918
+ _welcomedUnmapped = /* @__PURE__ */ new Map();
70919
+ /** #1418: what the last SUCCESSFUL reconcile reported live, and when it started. */
70920
+ _lastReconcile;
70846
70921
  /** Rate-limit: last resync_request timestamp per conversation (5-min cooldown). */
70847
70922
  _lastResyncRequest = /* @__PURE__ */ new Map();
70848
70923
  /** Dedup: last room/group welcome self-heal request timestamp per group (30s window). */
@@ -71448,6 +71523,379 @@ ${text}`;
71448
71523
  if (this._persisted?.groupId) known.add(this._persisted.groupId);
71449
71524
  return known;
71450
71525
  }
71526
+ // --- #1418: only the person involved ----------------------------------
71527
+ /**
71528
+ * Run `fn` as the work an inbound 1:1 message from `conversationId`
71529
+ * triggered. Untargeted owner content sent while it runs — from inside its
71530
+ * async call chain, or from anywhere while it is the only turn in progress —
71531
+ * goes to that conversation's person only.
71532
+ *
71533
+ * `opts.groupId` is the group that message DECRYPTED under
71534
+ * (`metadata.conversationGroupId`). Pass it: it outranks the local
71535
+ * conversation→group map, which can be stale, and it is all there is for a
71536
+ * frame whose conversation is not mapped yet. With neither an id nor a
71537
+ * group, `fn` runs unchanged.
71538
+ */
71539
+ async runForConversation(conversationId, fn, opts) {
71540
+ const groupId = typeof opts?.groupId === "string" && opts.groupId ? opts.groupId : void 0;
71541
+ if (!conversationId && !groupId) return fn();
71542
+ const store = { convId: conversationId || void 0, groupId, ended: false };
71543
+ this._activeTurns.add(store);
71544
+ try {
71545
+ return await _turnConversation.run(store, fn);
71546
+ } finally {
71547
+ store.ended = true;
71548
+ store.endedAt = Date.now();
71549
+ this._activeTurns.delete(store);
71550
+ }
71551
+ }
71552
+ /**
71553
+ * The turn this call chain belongs to (#1418) — running, or ended but
71554
+ * still within the window in which work it left behind is for its person.
71555
+ * `"expired"` once that window is over: the work is proactive now.
71556
+ */
71557
+ _currentTurn() {
71558
+ const store = _turnConversation.getStore();
71559
+ if (!store) return void 0;
71560
+ if (!store.ended) return store;
71561
+ return Date.now() - (store.endedAt ?? 0) < PERSON_INVOLVED_WINDOW_MS ? store : "expired";
71562
+ }
71563
+ /**
71564
+ * Record an owner 1:1 message that just decrypted (#1418).
71565
+ *
71566
+ * Always kept as evidence of which conversation, group and browser belong
71567
+ * together (see `_dmPeople`). It makes its person "the person involved" only
71568
+ * when it is RECENT by the server's `createdAt`: a frame replayed from
71569
+ * backlog on reconnect is not something anyone is waiting on an answer to.
71570
+ */
71571
+ _noteInboundDm(convId, groupId, opts = {}) {
71572
+ if (!convId && !groupId) return;
71573
+ const now = Date.now();
71574
+ const sentAt = opts.createdAt ? Date.parse(opts.createdAt) : NaN;
71575
+ const at = Number.isFinite(sentAt) ? Math.min(now, sentAt) : now;
71576
+ const sender = opts.senderDeviceId && opts.senderDeviceId !== this._deviceId ? opts.senderDeviceId : void 0;
71577
+ const key = `${convId ?? ""}|${groupId ?? ""}|${sender ?? ""}`;
71578
+ const prior = this._attestedInbound.get(key);
71579
+ this._attestedInbound.delete(key);
71580
+ this._attestedInbound.set(key, { convId, groupId, senderDeviceId: sender, at: Math.max(prior?.at ?? 0, at) });
71581
+ while (this._attestedInbound.size > ATTESTED_INBOUND_MAX) {
71582
+ const oldest = this._attestedInbound.keys().next().value;
71583
+ if (oldest === void 0) break;
71584
+ this._attestedInbound.delete(oldest);
71585
+ }
71586
+ if (this._lastInboundDm && this._lastInboundDm.at > at) return;
71587
+ this._lastInboundDm = {
71588
+ convId,
71589
+ groupId: groupId ?? (convId ? this._sessionGroupIds.get(convId) : void 0),
71590
+ at
71591
+ };
71592
+ }
71593
+ /** The group `convId`'s most recent inbound decrypted under, if any. */
71594
+ _attestedGroupOf(convId) {
71595
+ if (!convId) return void 0;
71596
+ let gid;
71597
+ for (const a2 of this._attestedInbound.values()) {
71598
+ if (a2.convId === convId && a2.groupId) gid = a2.groupId;
71599
+ }
71600
+ return gid;
71601
+ }
71602
+ /** Does some mapped conversation point at `groupId`? */
71603
+ _isMappedGroup(groupId) {
71604
+ for (const gid of this._sessionGroupIds.values()) if (gid === groupId) return true;
71605
+ return false;
71606
+ }
71607
+ /**
71608
+ * An owner message decrypted under a group no mapped conversation points at
71609
+ * (#1418): the map is stale — a Welcome landed before its conversation was
71610
+ * learned, or a conversation was recreated. Re-resolve it from the server.
71611
+ * Fire-and-forget and rate-limited per group: never awaited on the receive
71612
+ * or Welcome path, so it can never hold up MLS processing.
71613
+ */
71614
+ _reconcileForUnmappedGroup(groupId) {
71615
+ if (!groupId || this._isMappedGroup(groupId)) return;
71616
+ this._reconcileSoon(`g:${groupId}`);
71617
+ }
71618
+ /** The same for a Double Ratchet message on a conversation the map does not know. */
71619
+ _reconcileForUnmappedConversation(convId) {
71620
+ if (!convId || this._sessionGroupIds.size === 0 || this._sessionGroupIds.has(convId)) return;
71621
+ this._reconcileSoon(`c:${convId}`);
71622
+ }
71623
+ _reconcileSoon(key) {
71624
+ const now = Date.now();
71625
+ if (now - (this._unmappedReconcileAt.get(key) ?? 0) < UNMAPPED_RECONCILE_COOLDOWN_MS) return;
71626
+ this._unmappedReconcileAt.set(key, now);
71627
+ void Promise.resolve().then(() => this._reconcileConversationGroups()).catch((err) => console.warn("[SecureChannel] Conversation-group reconcile (unmapped group) failed:", err));
71628
+ }
71629
+ /** A conversation of `groupId`, for an MLS frame that named only its group. */
71630
+ _conversationOfGroup(groupId) {
71631
+ if (!groupId) return void 0;
71632
+ if (this._primaryConversationId && this._sessionGroupIds.get(this._primaryConversationId) === groupId) {
71633
+ return this._primaryConversationId;
71634
+ }
71635
+ for (const [convId, gid] of this._sessionGroupIds) {
71636
+ if (gid === groupId) return convId;
71637
+ }
71638
+ return void 0;
71639
+ }
71640
+ /** Is `convId` one of this agent's own 1:1 conversations (never a room's or an A2A channel's)? */
71641
+ _isOwnDmConversation(convId) {
71642
+ if (this._isNonDmConversation(convId)) return false;
71643
+ return this._sessions.has(convId) || this._sessionGroupIds.has(convId) || !!this._persisted?.mlsConversations?.[convId] || convId === this._primaryConversationId;
71644
+ }
71645
+ /**
71646
+ * #1418 — the PEOPLE this agent has a 1:1 with, or `undefined` when it
71647
+ * cannot tell (no conversation is mapped: then it behaves as before #1418).
71648
+ *
71649
+ * People, not groups. Since #1399 one person has one group, but an agent
71650
+ * also keeps joined groups that are nobody's any more — husks of deleted or
71651
+ * recreated conversations. Measured 2026-10-24: wren held 13 joined groups
71652
+ * for 1 mapped, loopita 2 for 1, wowzer 2 for 1. Counting joined groups made
71653
+ * all three single-person agents look like several people, and their
71654
+ * replies could go only to a dead group.
71655
+ *
71656
+ * So a person is built from the conversations the server mapped, joined by
71657
+ * evidence that two things are the same person:
71658
+ * - the same group (a legacy group shared by several people cannot be told
71659
+ * apart, so it stays one — exactly the pre-#1418 behaviour);
71660
+ * - the same owner browser (a browser belongs to exactly one person);
71661
+ * - a message that decrypted under a group, from a conversation and browser.
71662
+ * A joined group nothing maps and nobody has spoken in is not a person. A
71663
+ * message on an unmapped group from a browser nobody knows IS someone —
71664
+ * that fails closed, toward "only them".
71665
+ */
71666
+ _dmPeople() {
71667
+ if (this._sessionGroupIds.size === 0) return void 0;
71668
+ const parent2 = /* @__PURE__ */ new Map();
71669
+ const add4 = (x2) => {
71670
+ if (!parent2.has(x2)) parent2.set(x2, x2);
71671
+ };
71672
+ const find = (x2) => {
71673
+ let root3 = x2;
71674
+ while (parent2.get(root3) !== root3) root3 = parent2.get(root3);
71675
+ return root3;
71676
+ };
71677
+ const union2 = (a2, b2) => {
71678
+ if (!a2 || !b2) return;
71679
+ add4(a2);
71680
+ add4(b2);
71681
+ const ra2 = find(a2), rb = find(b2);
71682
+ if (ra2 !== rb) parent2.set(ra2, rb);
71683
+ };
71684
+ const ownerOf = (convId) => {
71685
+ const owner = this._sessions.get(convId)?.ownerDeviceId ?? this._persisted?.sessions?.[convId]?.ownerDeviceId;
71686
+ return owner ? `d:${owner}` : void 0;
71687
+ };
71688
+ for (const [convId, gid] of this._sessionGroupIds) {
71689
+ add4(`c:${convId}`);
71690
+ union2(`c:${convId}`, `g:${gid}`);
71691
+ union2(`c:${convId}`, ownerOf(convId));
71692
+ }
71693
+ const primary = this._primaryConversationId || this._persisted?.primaryConversationId;
71694
+ const primaryGid = this._persisted?.groupId;
71695
+ if (primary && primaryGid && (parent2.has(`c:${primary}`) || parent2.has(`g:${primaryGid}`))) {
71696
+ union2(`c:${primary}`, `g:${primaryGid}`);
71697
+ }
71698
+ for (const gid of this._welcomedUnmapped.keys()) add4(`g:${gid}`);
71699
+ const records = [...this._attestedInbound.values()].map((a2) => ({
71700
+ a: a2,
71701
+ nodes: [
71702
+ a2.convId ? `c:${a2.convId}` : void 0,
71703
+ a2.groupId ? `g:${a2.groupId}` : void 0,
71704
+ a2.senderDeviceId ? `d:${a2.senderDeviceId}` : void 0
71705
+ ].filter((n2) => !!n2)
71706
+ }));
71707
+ const placed = /* @__PURE__ */ new Set();
71708
+ const place = (i2) => {
71709
+ const { a: a2, nodes } = records[i2];
71710
+ for (const n2 of nodes) add4(n2);
71711
+ for (const n2 of nodes.slice(1)) union2(nodes[0], n2);
71712
+ if (a2.convId && this._sessionGroupIds.has(a2.convId)) union2(`c:${a2.convId}`, ownerOf(a2.convId));
71713
+ placed.add(i2);
71714
+ };
71715
+ const linkKnown = () => {
71716
+ for (let progress = true; progress; ) {
71717
+ progress = false;
71718
+ records.forEach((r2, i2) => {
71719
+ if (!placed.has(i2) && r2.nodes.some((n2) => parent2.has(n2))) {
71720
+ place(i2);
71721
+ progress = true;
71722
+ }
71723
+ });
71724
+ }
71725
+ };
71726
+ linkKnown();
71727
+ records.forEach((r2, i2) => {
71728
+ if (!placed.has(i2) && this._mayBeNewPerson(r2.a)) place(i2);
71729
+ });
71730
+ linkKnown();
71731
+ const roots = /* @__PURE__ */ new Set();
71732
+ for (const node2 of parent2.keys()) {
71733
+ if (!node2.startsWith("d:")) roots.add(find(node2));
71734
+ }
71735
+ return {
71736
+ count: roots.size,
71737
+ keyOf: (convId, groupId) => {
71738
+ if (convId && parent2.has(`c:${convId}`)) return find(`c:${convId}`);
71739
+ if (groupId && parent2.has(`g:${groupId}`)) return find(`g:${groupId}`);
71740
+ return void 0;
71741
+ }
71742
+ };
71743
+ }
71744
+ /**
71745
+ * May this inbound evidence stand for a person nobody knows yet (#1418)?
71746
+ * Only if it was sent recently, and the last successful reconcile — when it
71747
+ * started after the message was sent — listed its conversation or group.
71748
+ */
71749
+ _mayBeNewPerson(a2) {
71750
+ if (Date.now() - a2.at >= PERSON_INVOLVED_WINDOW_MS) return false;
71751
+ const r2 = this._lastReconcile;
71752
+ if (r2 && a2.at <= r2.at && !(a2.convId && r2.convs.has(a2.convId)) && !(a2.groupId && r2.groups.has(a2.groupId))) return false;
71753
+ return true;
71754
+ }
71755
+ /** More than one person has a 1:1 with this agent (#1418). Unknown counts as one: the old behaviour. */
71756
+ _isMultiPerson() {
71757
+ return (this._dmPeople()?.count ?? 0) > 1;
71758
+ }
71759
+ /**
71760
+ * The group a turn's message decrypted under, for placing the turn when its
71761
+ * conversation is not mapped (a mapped conversation already names its person).
71762
+ */
71763
+ _turnGroup(turn) {
71764
+ return turn.groupId ?? this._attestedGroupOf(turn.convId);
71765
+ }
71766
+ /** The people with a 1:1 turn in progress, one turn each (#1418). */
71767
+ _activeTurnPeople() {
71768
+ const people = this._dmPeople();
71769
+ const out = /* @__PURE__ */ new Map();
71770
+ for (const turn of this._activeTurns) {
71771
+ if (turn.convId && (turn.groupId ? this._isNonDmConversation(turn.convId) : !this._isOwnDmConversation(turn.convId))) continue;
71772
+ const gid = this._turnGroup(turn);
71773
+ const key = people?.keyOf(turn.convId, gid) ?? (gid ? `g:${gid}` : `c:${turn.convId}`);
71774
+ if (!out.has(key)) out.set(key, turn);
71775
+ }
71776
+ return out;
71777
+ }
71778
+ /**
71779
+ * The person an untargeted owner message is for (#1418), in order:
71780
+ *
71781
+ * 1. the turn this call chain belongs to — always, and only, that
71782
+ * conversation, reached on the group its message decrypted under. A turn
71783
+ * never borrows another conversation's turn: one it cannot place fails
71784
+ * closed to its own conversation. Work the turn left running (a timer, a
71785
+ * dispatch orphaned by the turn budget) stays with that person for
71786
+ * `PERSON_INVOLVED_WINDOW_MS` after the turn, then is proactive (4);
71787
+ * 2. with no turn context (a skill's HTTP call), the one person with a turn
71788
+ * in progress;
71789
+ * 3. the last inbound 1:1 message, if it is recent — a reply produced in
71790
+ * response to it;
71791
+ * 4. otherwise the content is proactive: the PRIMARY conversation's person.
71792
+ */
71793
+ _involvedPerson() {
71794
+ const person = (convId, groupId, reason) => ({
71795
+ convId,
71796
+ groupId: groupId ?? this._attestedGroupOf(convId) ?? (convId ? this._sessionGroupIds.get(convId) : void 0),
71797
+ reason
71798
+ });
71799
+ const turn = this._currentTurn();
71800
+ if (turn && turn !== "expired") {
71801
+ return person(turn.convId ?? this._conversationOfGroup(turn.groupId), turn.groupId, turn.ended ? "outlived-turn" : "turn");
71802
+ }
71803
+ if (turn === "expired") return this._primaryPerson();
71804
+ const active = this._activeTurnPeople();
71805
+ if (active.size === 1) {
71806
+ const [only] = active.values();
71807
+ return person(only.convId ?? this._conversationOfGroup(only.groupId), only.groupId, "active-turn");
71808
+ }
71809
+ const last = this._lastInboundDm;
71810
+ if (active.size === 0 && last && Date.now() - last.at < PERSON_INVOLVED_WINDOW_MS) {
71811
+ return person(last.convId ?? this._conversationOfGroup(last.groupId), last.groupId, "last-inbound");
71812
+ }
71813
+ return this._primaryPerson();
71814
+ }
71815
+ /** The PRIMARY conversation's person — where proactive content goes. */
71816
+ _primaryPerson() {
71817
+ const primary = this._primaryConversationId || this._persisted?.primaryConversationId || void 0;
71818
+ const primaryGroup = (primary ? this._sessionGroupIds.get(primary) : void 0) ?? this._persisted?.groupId;
71819
+ return {
71820
+ convId: primary,
71821
+ groupId: primaryGroup ?? this._attestedGroupOf(primary),
71822
+ reason: "primary"
71823
+ };
71824
+ }
71825
+ /**
71826
+ * #1418 — would an untargeted owner send right now have to GUESS between
71827
+ * people? True only with no turn context while two or more people have a
71828
+ * turn in progress. The local HTTP API refuses such a request (409) and
71829
+ * asks for a conversation instead of picking one.
71830
+ */
71831
+ isUntargetedOwnerAmbiguous(options) {
71832
+ if (options?.conversationId !== void 0 || options?.audience === "everyone") return false;
71833
+ if (this._currentTurn()) return false;
71834
+ if (!this._isMultiPerson()) return false;
71835
+ return this._activeTurnPeople().size > 1;
71836
+ }
71837
+ /**
71838
+ * Who an UNTARGETED owner send reaches, or `null` for "every session, as
71839
+ * before". `null` when the caller chose `audience: "everyone"`, and when the
71840
+ * agent has one person (or cannot tell how many) — nothing to choose
71841
+ * between, so its recipients are exactly what they always were.
71842
+ */
71843
+ _untargetedAudience(options) {
71844
+ if (options?.conversationId !== void 0) return null;
71845
+ if (options?.audience === "everyone") return null;
71846
+ if (!this._isMultiPerson()) return null;
71847
+ return this._involvedPerson();
71848
+ }
71849
+ /** A stable name for who an untargeted owner send reaches right now, or undefined when that is "everyone, as before". */
71850
+ _audienceTag(options) {
71851
+ if (options?.audience === "everyone") return "everyone";
71852
+ const person = this._untargetedAudience(options);
71853
+ return person ? `person:${person.groupId ?? person.convId ?? ""}` : void 0;
71854
+ }
71855
+ /** Does conversation `convId` belong to `person`? A conversation nothing ties to them fails closed. */
71856
+ _isPersonsConversation(person, convId) {
71857
+ if (convId === person.convId) return true;
71858
+ const gid = this._sessionGroupIds.get(convId);
71859
+ if (gid !== void 0 && gid === person.groupId) return true;
71860
+ const people = this._dmPeople();
71861
+ const theirs = people?.keyOf(person.convId, person.groupId);
71862
+ return theirs !== void 0 && people.keyOf(convId, gid) === theirs;
71863
+ }
71864
+ /**
71865
+ * #1418: the Double Ratchet sessions an owner-bound FILE (attachment or
71866
+ * artifact) goes to, bucketed by the conversation its blob is uploaded
71867
+ * under. The blob is uploaded under a conversation of the person who gets
71868
+ * it — the backend only lets that conversation's participants download it —
71869
+ * so an explicit "everyone" uploads once per person.
71870
+ */
71871
+ _ownerFileRecipients(routing) {
71872
+ const roomConvIds = /* @__PURE__ */ new Set();
71873
+ for (const room of Object.values(this._persisted?.rooms ?? {})) {
71874
+ for (const cid of room.conversationIds ?? []) roomConvIds.add(cid);
71875
+ }
71876
+ const live = [...this._sessions].filter(([convId, session2]) => session2.activated && !roomConvIds.has(convId)).map(([convId]) => convId);
71877
+ const person = routing?.conversationId !== void 0 ? { convId: routing.conversationId, groupId: this._sessionGroupIds.get(routing.conversationId), reason: "target" } : this._untargetedAudience(routing);
71878
+ if (person) {
71879
+ const convIds = live.filter((convId) => this._isPersonsConversation(person, convId));
71880
+ const uploadConvId = person.convId ?? convIds[0];
71881
+ return uploadConvId && convIds.length > 0 ? [{ uploadConvId, convIds }] : [];
71882
+ }
71883
+ if (live.length === 0) return [];
71884
+ if (!this._isMultiPerson()) {
71885
+ return [{ uploadConvId: this._primaryConversationId, convIds: live }];
71886
+ }
71887
+ const people = this._dmPeople();
71888
+ const buckets = /* @__PURE__ */ new Map();
71889
+ for (const convId of live) {
71890
+ const gid = this._sessionGroupIds.get(convId);
71891
+ const key = people?.keyOf(convId, gid) ?? gid ?? `c:${convId}`;
71892
+ buckets.set(key, [...buckets.get(key) ?? [], convId]);
71893
+ }
71894
+ return [...buckets.values()].map((convIds) => ({
71895
+ uploadConvId: convIds.includes(this._primaryConversationId) ? this._primaryConversationId : convIds[0],
71896
+ convIds
71897
+ }));
71898
+ }
71451
71899
  /** The group a DM history entry belongs to (see the forms above). */
71452
71900
  _dmEntryScope(entry, known) {
71453
71901
  const t2 = entry.topicId ?? "";
@@ -72019,6 +72467,7 @@ ${text}`;
72019
72467
  Promise.resolve().then(() => (init_openclaw_compat(), openclaw_compat_exports)).then(({ requestHeartbeatNow: requestHeartbeatNow2 }) => requestHeartbeatNow2({ reason: "channel-send" })).catch(() => {
72020
72468
  });
72021
72469
  const targetConvId = options?.conversationId;
72470
+ const audience = this._untargetedAudience(options);
72022
72471
  const explicitTopicId = options?.topicId;
72023
72472
  const targeted = targetConvId !== void 0;
72024
72473
  const frameHistoryContexts = [];
@@ -72057,7 +72506,7 @@ ${text}`;
72057
72506
  if (this._persisted?.mlsGroups && this._state === "ready" && this._ws) {
72058
72507
  const targetSharedGid = targetConvId ? this._sessionGroupIds?.get(targetConvId) : void 0;
72059
72508
  console.log(
72060
- `[SecureChannel] send(): considering ${Object.keys(this._persisted.mlsGroups).length} shared group(s); targetConvId=${targetConvId ? targetConvId.slice(0, 8) : "(none \u2014 broadcast)"} targetSharedGid=${targetSharedGid ? targetSharedGid.slice(0, 8) : "(none)"}`
72509
+ `[SecureChannel] send(): considering ${Object.keys(this._persisted.mlsGroups).length} shared group(s); targetConvId=${targetConvId ? targetConvId.slice(0, 8) : audience ? `(none \u2014 person involved: ${audience.reason})` : "(none \u2014 everyone)"} targetSharedGid=${targetSharedGid ? targetSharedGid.slice(0, 8) : audience?.groupId ? audience.groupId.slice(0, 8) : "(none)"}`
72061
72510
  );
72062
72511
  const skipped = [];
72063
72512
  for (const [gid, entry] of Object.entries(this._persisted.mlsGroups)) {
@@ -72065,6 +72514,10 @@ ${text}`;
72065
72514
  skipped.push(`${gid.slice(0, 8)}:not-target`);
72066
72515
  continue;
72067
72516
  }
72517
+ if (audience && gid !== audience.groupId) {
72518
+ skipped.push(`${gid.slice(0, 8)}:not-involved`);
72519
+ continue;
72520
+ }
72068
72521
  if (!entry.mlsGroupId) {
72069
72522
  skipped.push(`${gid.slice(0, 8)}:no-mlsGroupId`);
72070
72523
  continue;
@@ -72121,6 +72574,7 @@ ${text}`;
72121
72574
  if (!session2.activated) continue;
72122
72575
  if (roomConvIds.has(convId)) continue;
72123
72576
  if (targetConvId && convId !== targetConvId) continue;
72577
+ if (audience && !this._isPersonsConversation(audience, convId)) continue;
72124
72578
  const convGroupId = this._sessionGroupIds?.get(convId);
72125
72579
  if (convGroupId && sentSharedGroupIds.has(convGroupId)) {
72126
72580
  sentCount++;
@@ -72239,6 +72693,7 @@ ${text}`;
72239
72693
  if (this._persisted?.mlsConversations && this._state === "ready" && this._ws) {
72240
72694
  for (const [mlsConvId, entry] of Object.entries(this._persisted.mlsConversations)) {
72241
72695
  if (targetConvId && mlsConvId !== targetConvId) continue;
72696
+ if (audience && !this._isPersonsConversation(audience, mlsConvId)) continue;
72242
72697
  if (this._sessions.has(mlsConvId)) continue;
72243
72698
  if (roomConvIds.has(mlsConvId)) continue;
72244
72699
  const mlsOnlyConvGroupId = this._sessionGroupIds?.get(mlsConvId);
@@ -72362,7 +72817,7 @@ ${text}`;
72362
72817
  */
72363
72818
  sendActivitySpan(spanData) {
72364
72819
  if (!this._ws || this._ws.readyState !== WebSocket.OPEN) return;
72365
- const pluginVersion = true ? "0.23.51" : "0.0.0-dev";
72820
+ const pluginVersion = true ? "0.23.52" : "0.0.0-dev";
72366
72821
  const agentName = this.config.agentName ?? "Agent";
72367
72822
  const resource = {
72368
72823
  "service.name": "agentvault-agent",
@@ -72414,7 +72869,7 @@ ${text}`;
72414
72869
  * Builds a structured envelope with decision metadata and sends it
72415
72870
  * as a high-priority message. Returns the generated decision_id.
72416
72871
  */
72417
- async sendDecisionRequest(request) {
72872
+ async sendDecisionRequest(request, routing) {
72418
72873
  const decision_id = `dec_${randomUUID4().replace(/-/g, "").slice(0, 16)}`;
72419
72874
  const payload = JSON.stringify({
72420
72875
  type: "message",
@@ -72425,6 +72880,8 @@ ${text}`;
72425
72880
  }
72426
72881
  });
72427
72882
  await this.send(payload, {
72883
+ conversationId: routing?.conversationId,
72884
+ audience: routing?.audience,
72428
72885
  messageType: "decision_request",
72429
72886
  priority: "high",
72430
72887
  metadata: {
@@ -72831,6 +73288,7 @@ ${text}`;
72831
73288
  const jwt = this._deviceJwt ?? this._persisted?.deviceJwt;
72832
73289
  if (!jwt || !this._persisted) return false;
72833
73290
  let rows;
73291
+ const reconcileStartedAt = Date.now();
72834
73292
  try {
72835
73293
  const res = await fetch(`${this.config.apiUrl}/api/v1/conversations`, {
72836
73294
  headers: { Authorization: `Bearer ${jwt}` }
@@ -72859,6 +73317,19 @@ ${text}`;
72859
73317
  }
72860
73318
  this._sessionGroupIds = new Map(mine.map((r2) => [r2.id, r2.group_id]));
72861
73319
  this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
73320
+ {
73321
+ const convs = new Set(mine.map((r2) => r2.id));
73322
+ const groups = new Set(mine.map((r2) => r2.group_id));
73323
+ this._lastReconcile = { at: reconcileStartedAt, convs, groups };
73324
+ for (const [key, a2] of this._attestedInbound) {
73325
+ if (a2.at > reconcileStartedAt) continue;
73326
+ if (a2.convId && convs.has(a2.convId) || a2.groupId && groups.has(a2.groupId)) continue;
73327
+ this._attestedInbound.delete(key);
73328
+ }
73329
+ for (const [gid, at] of this._welcomedUnmapped) {
73330
+ if (at <= reconcileStartedAt) this._welcomedUnmapped.delete(gid);
73331
+ }
73332
+ }
72862
73333
  const joined = mine.find((r2) => this._persisted.mlsGroups?.[r2.group_id]);
72863
73334
  const primary = mine.find((r2) => r2.id === this._persisted.primaryConversationId) ?? joined ?? mine[0];
72864
73335
  if (!mine.some((r2) => r2.id === this._persisted.primaryConversationId)) {
@@ -73052,7 +73523,7 @@ ${text}`;
73052
73523
  }
73053
73524
  this._heartbeatCallback = null;
73054
73525
  }
73055
- async sendStatusAlert(alert) {
73526
+ async sendStatusAlert(alert, routing) {
73056
73527
  const priority = alert.severity === "error" || alert.severity === "critical" ? "high" : "normal";
73057
73528
  const envelope = {
73058
73529
  title: alert.title,
@@ -73066,52 +73537,61 @@ ${text}`;
73066
73537
  await this.send(
73067
73538
  JSON.stringify(envelope),
73068
73539
  {
73540
+ conversationId: routing?.conversationId,
73541
+ audience: routing?.audience,
73069
73542
  messageType: "status_alert",
73070
73543
  priority,
73071
73544
  metadata: { severity: alert.severity }
73072
73545
  }
73073
73546
  );
73074
73547
  }
73075
- async sendArtifact(artifact) {
73548
+ async sendArtifact(artifact, routing) {
73076
73549
  if (this._state !== "ready" || this._sessions.size === 0 || !this._ws) {
73077
73550
  throw new Error("Channel is not ready");
73078
73551
  }
73079
- const attachMeta = await this._uploadAttachment(artifact.filePath, this._primaryConversationId);
73080
- const envelope = JSON.stringify({
73081
- type: "artifact",
73082
- blob_id: attachMeta.blobId,
73083
- blob_url: attachMeta.blobUrl,
73084
- filename: artifact.filename,
73085
- mime_type: artifact.mimeType,
73086
- size_bytes: attachMeta.size,
73087
- description: artifact.description,
73088
- attachment: attachMeta
73089
- });
73090
73552
  const messageGroupId = randomUUID4();
73091
73553
  const pendingWsSends = [];
73092
- for (const [convId, session2] of this._sessions) {
73093
- if (!session2.activated) continue;
73094
- const encrypted = session2.ratchet.encrypt(envelope);
73095
- const transport = encryptedMessageToTransport(encrypted);
73096
- pendingWsSends.push(
73097
- JSON.stringify({
73098
- event: "message",
73099
- data: {
73100
- conversation_id: convId,
73101
- header_blob: transport.header_blob,
73102
- ciphertext: transport.ciphertext,
73103
- message_group_id: messageGroupId,
73104
- message_type: "artifact_share"
73105
- }
73106
- })
73107
- );
73554
+ const buckets = this._ownerFileRecipients(routing);
73555
+ if (buckets.length === 0) {
73556
+ console.warn("[SecureChannel] sendArtifact(): no live session for the person involved \u2014 nothing sent");
73557
+ throw new Error("No conversation is ready to receive this file");
73558
+ }
73559
+ for (const bucket of buckets) {
73560
+ const attachMeta = await this._uploadAttachment(artifact.filePath, bucket.uploadConvId);
73561
+ const envelope = JSON.stringify({
73562
+ type: "artifact",
73563
+ blob_id: attachMeta.blobId,
73564
+ blob_url: attachMeta.blobUrl,
73565
+ filename: artifact.filename,
73566
+ mime_type: artifact.mimeType,
73567
+ size_bytes: attachMeta.size,
73568
+ description: artifact.description,
73569
+ attachment: attachMeta
73570
+ });
73571
+ for (const convId of bucket.convIds) {
73572
+ const session2 = this._sessions.get(convId);
73573
+ const encrypted = session2.ratchet.encrypt(envelope);
73574
+ const transport = encryptedMessageToTransport(encrypted);
73575
+ pendingWsSends.push(
73576
+ JSON.stringify({
73577
+ event: "message",
73578
+ data: {
73579
+ conversation_id: convId,
73580
+ header_blob: transport.header_blob,
73581
+ ciphertext: transport.ciphertext,
73582
+ message_group_id: messageGroupId,
73583
+ message_type: "artifact_share"
73584
+ }
73585
+ })
73586
+ );
73587
+ }
73108
73588
  }
73109
73589
  await this._persistState();
73110
73590
  for (const frame of pendingWsSends) {
73111
73591
  this._ws.send(frame);
73112
73592
  }
73113
73593
  }
73114
- async sendActionConfirmation(confirmation) {
73594
+ async sendActionConfirmation(confirmation, routing) {
73115
73595
  const envelope = {
73116
73596
  type: "action_confirmation",
73117
73597
  action: confirmation.action,
@@ -73122,6 +73602,8 @@ ${text}`;
73122
73602
  await this.send(
73123
73603
  JSON.stringify(envelope),
73124
73604
  {
73605
+ conversationId: routing?.conversationId,
73606
+ audience: routing?.audience,
73125
73607
  messageType: "action_confirmation",
73126
73608
  metadata: { status: confirmation.status }
73127
73609
  }
@@ -73227,9 +73709,23 @@ ${text}`;
73227
73709
  } else {
73228
73710
  return { ok: false, destination: { kind: "owner" }, error: "Unknown target kind", timestamp: ts };
73229
73711
  }
73712
+ if (resolved.kind === "owner" && options?.refuseIfAmbiguous && this.isUntargetedOwnerAmbiguous(options)) {
73713
+ console.log(`[deliver] target=owner content=${content.type} result=REFUSED: ambiguous (several people mid-turn)`);
73714
+ return { ok: false, ambiguous: true, destination: resolved, error: AMBIGUOUS_OWNER_ERROR, timestamp: ts };
73715
+ }
73230
73716
  let dedupeKey = null;
73231
73717
  try {
73232
- dedupeKey = outboundDedupeKey(resolved, content, options);
73718
+ let audienceTag;
73719
+ try {
73720
+ audienceTag = resolved.kind === "owner" && options?.conversationId === void 0 ? this._audienceTag(options) : void 0;
73721
+ } catch {
73722
+ audienceTag = void 0;
73723
+ }
73724
+ dedupeKey = outboundDedupeKey(
73725
+ resolved,
73726
+ content,
73727
+ audienceTag ? { ...options, conversationId: audienceTag } : options
73728
+ );
73233
73729
  if (dedupeKey) {
73234
73730
  const now = Date.now();
73235
73731
  const recent = this._recentDeliveries ??= /* @__PURE__ */ new Map();
@@ -73249,6 +73745,10 @@ ${text}`;
73249
73745
  }
73250
73746
  try {
73251
73747
  let decisionId;
73748
+ const ownerRouting = {
73749
+ conversationId: options?.conversationId,
73750
+ audience: options?.audience
73751
+ };
73252
73752
  if (content.type === "text") {
73253
73753
  if (resolved.kind === "room") {
73254
73754
  await this.sendToRoom(resolved.id, content.text, {
@@ -73267,6 +73767,7 @@ ${text}`;
73267
73767
  } else {
73268
73768
  await this.send(content.text, {
73269
73769
  conversationId: options?.conversationId,
73770
+ audience: options?.audience,
73270
73771
  topicId: options?.topicId,
73271
73772
  messageType: options?.metadata?.message_type,
73272
73773
  priority: options?.priority,
@@ -73279,7 +73780,7 @@ ${text}`;
73279
73780
  console.log(`[deliver] target=${resolved.kind}:${resolved.id} content=decision_request result=FAIL: ${err}`);
73280
73781
  return { ok: false, destination: resolved, error: err, timestamp: ts };
73281
73782
  }
73282
- decisionId = await this.sendDecisionRequest(content.request);
73783
+ decisionId = await this.sendDecisionRequest(content.request, ownerRouting);
73283
73784
  } else if (content.type === "status_alert") {
73284
73785
  if (resolved.kind === "room") {
73285
73786
  const envelope = {
@@ -73297,7 +73798,7 @@ ${text}`;
73297
73798
  metadata: { severity: content.alert.severity }
73298
73799
  });
73299
73800
  } else if (resolved.kind === "owner") {
73300
- await this.sendStatusAlert(content.alert);
73801
+ await this.sendStatusAlert(content.alert, ownerRouting);
73301
73802
  } else {
73302
73803
  return { ok: false, destination: resolved, error: "Status alerts cannot be sent to A2A targets", timestamp: ts };
73303
73804
  }
@@ -73305,7 +73806,7 @@ ${text}`;
73305
73806
  if (resolved.kind === "room") {
73306
73807
  await this.sendActionConfirmationToRoom(resolved.id, content.confirmation);
73307
73808
  } else if (resolved.kind === "owner") {
73308
- await this.sendActionConfirmation(content.confirmation);
73809
+ await this.sendActionConfirmation(content.confirmation, ownerRouting);
73309
73810
  } else {
73310
73811
  return { ok: false, destination: resolved, error: "Action confirmations cannot be sent to A2A targets", timestamp: ts };
73311
73812
  }
@@ -73313,13 +73814,14 @@ ${text}`;
73313
73814
  if (resolved.kind !== "owner") {
73314
73815
  return { ok: false, destination: resolved, error: "Artifacts can only be sent to owner", timestamp: ts };
73315
73816
  }
73316
- await this.sendArtifact(content.artifact);
73817
+ await this.sendArtifact(content.artifact, ownerRouting);
73317
73818
  } else if (content.type === "attachment") {
73318
73819
  if (resolved.kind !== "owner") {
73319
73820
  return { ok: false, destination: resolved, error: "Attachments can only be sent to owner", timestamp: ts };
73320
73821
  }
73321
73822
  await this.sendWithAttachment(content.text, content.filePath, {
73322
- topicId: options?.topicId
73823
+ topicId: options?.topicId,
73824
+ ...ownerRouting
73323
73825
  });
73324
73826
  }
73325
73827
  const targetLabel = resolved.kind === "owner" ? "owner" : `${resolved.kind}:${resolved.id?.slice(0, 8)}...`;
@@ -74492,7 +74994,7 @@ ${text}`;
74492
74994
  agentVersion: this.config.agentVersion ?? "0.0.0",
74493
74995
  // __AV_VERSION__ is injected by esbuild from package.json at build time.
74494
74996
  // Falls back to "0.0.0-dev" in non-bundled contexts (tests).
74495
- pluginVersion: true ? "0.23.51" : "0.0.0-dev"
74997
+ pluginVersion: true ? "0.23.52" : "0.0.0-dev"
74496
74998
  });
74497
74999
  this._telemetryReporter.startAutoFlush(3e4);
74498
75000
  }
@@ -74820,7 +75322,7 @@ ${text}`;
74820
75322
  agentVersion: this.config.agentVersion ?? "0.0.0",
74821
75323
  // __AV_VERSION__ is injected by esbuild from package.json at build time.
74822
75324
  // Falls back to "0.0.0-dev" in non-bundled contexts (tests).
74823
- pluginVersion: true ? "0.23.51" : "0.0.0-dev"
75325
+ pluginVersion: true ? "0.23.52" : "0.0.0-dev"
74824
75326
  });
74825
75327
  this._telemetryReporter.startAutoFlush(3e4);
74826
75328
  }
@@ -75361,9 +75863,18 @@ ${text}`;
75361
75863
  messageType,
75362
75864
  { groupId: dmGroupId, conversationId: convId }
75363
75865
  );
75866
+ const dmConvId = convId ?? this._conversationOfGroup(dmGroupId);
75867
+ this._noteInboundDm(dmConvId, dmGroupId, { createdAt: data.created_at, senderDeviceId });
75868
+ this._reconcileForUnmappedGroup(dmGroupId);
75364
75869
  const metadata = {
75365
75870
  messageId: data.message_id ?? `mls_${Date.now()}`,
75366
- conversationId: convId ?? this._primaryConversationId,
75871
+ // A frame on a KNOWN group that no conversation maps yet is not the
75872
+ // primary person's: leave the conversation unnamed rather than hand
75873
+ // the reply to someone else; `conversationGroupId` still places it.
75874
+ conversationId: dmConvId ?? (dmGroupId ? void 0 : this._primaryConversationId),
75875
+ // #1418: the group this message decrypted under — attested, so a turn
75876
+ // answers here even when the local map is stale.
75877
+ conversationGroupId: dmGroupId,
75367
75878
  timestamp: data.created_at ?? (/* @__PURE__ */ new Date()).toISOString(),
75368
75879
  topicId,
75369
75880
  // #621: positive attestation that this decrypted under the OWNER'S 1:1
@@ -75618,6 +76129,13 @@ ${messageText}`;
75618
76129
  // envelope text before the fold; `emitText` is the folded copy.
75619
76130
  caption: messageText
75620
76131
  };
76132
+ if (!roomId) {
76133
+ this._noteInboundDm(convId, void 0, {
76134
+ createdAt: msgData.created_at,
76135
+ senderDeviceId: msgData.sender_device_id
76136
+ });
76137
+ this._reconcileForUnmappedConversation(convId);
76138
+ }
75621
76139
  this.emit("message", emitText, metadata);
75622
76140
  Promise.resolve(this.config.onMessage?.(emitText, metadata)).catch((err) => {
75623
76141
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -75766,34 +76284,41 @@ ${baseText}`;
75766
76284
  if (this._state !== "ready" || this._sessions.size === 0 || !this._ws) {
75767
76285
  throw new Error("Channel is not ready");
75768
76286
  }
75769
- const attachMeta = await this._uploadAttachment(filePath, this._primaryConversationId);
75770
76287
  const messageGroupId = randomUUID4();
75771
76288
  const pendingWsSends = [];
75772
76289
  const frameHistoryContexts = [];
75773
- for (const [convId, session2] of this._sessions) {
75774
- if (!session2.activated) continue;
75775
- const topicId = this._topicForFrame(void 0, convId, options?.topicId, false, false);
75776
- const envelope = JSON.stringify({
75777
- type: "message",
75778
- text: plaintext,
75779
- topicId,
75780
- attachment: attachMeta
75781
- });
75782
- const encrypted = session2.ratchet.encrypt(envelope);
75783
- const transport = encryptedMessageToTransport(encrypted);
75784
- pendingWsSends.push(
75785
- JSON.stringify({
75786
- event: "message",
75787
- data: {
75788
- conversation_id: convId,
75789
- header_blob: transport.header_blob,
75790
- ciphertext: transport.ciphertext,
75791
- message_group_id: messageGroupId,
75792
- topic_id: topicId
75793
- }
75794
- })
75795
- );
75796
- frameHistoryContexts.push(this._dmHistoryContext(topicId, void 0, convId));
76290
+ const buckets = this._ownerFileRecipients(options);
76291
+ if (buckets.length === 0) {
76292
+ console.warn("[SecureChannel] sendWithAttachment(): no live session for the person involved \u2014 nothing sent");
76293
+ throw new Error("No conversation is ready to receive this file");
76294
+ }
76295
+ for (const bucket of buckets) {
76296
+ const attachMeta = await this._uploadAttachment(filePath, bucket.uploadConvId);
76297
+ for (const convId of bucket.convIds) {
76298
+ const session2 = this._sessions.get(convId);
76299
+ const topicId = this._topicForFrame(void 0, convId, options?.topicId, false, false);
76300
+ const envelope = JSON.stringify({
76301
+ type: "message",
76302
+ text: plaintext,
76303
+ topicId,
76304
+ attachment: attachMeta
76305
+ });
76306
+ const encrypted = session2.ratchet.encrypt(envelope);
76307
+ const transport = encryptedMessageToTransport(encrypted);
76308
+ pendingWsSends.push(
76309
+ JSON.stringify({
76310
+ event: "message",
76311
+ data: {
76312
+ conversation_id: convId,
76313
+ header_blob: transport.header_blob,
76314
+ ciphertext: transport.ciphertext,
76315
+ message_group_id: messageGroupId,
76316
+ topic_id: topicId
76317
+ }
76318
+ })
76319
+ );
76320
+ frameHistoryContexts.push(this._dmHistoryContext(topicId, void 0, convId));
76321
+ }
75797
76322
  }
75798
76323
  await this._persistState();
75799
76324
  let deliveredFrames = 0;
@@ -75953,10 +76478,15 @@ ${baseText}`;
75953
76478
  `[SecureChannel] New owner device linked: ${event.owner_device_id.slice(0, 8)}...`
75954
76479
  );
75955
76480
  try {
76481
+ if (event.group_id && !this._sessionGroupIds.has(event.conversation_id)) {
76482
+ this._sessionGroupIds.set(event.conversation_id, event.group_id);
76483
+ this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
76484
+ }
75956
76485
  if (!event.owner_identity_public_key) {
75957
76486
  console.error(
75958
76487
  `[SecureChannel] device_linked event missing owner keys for conv ${event.conversation_id.slice(0, 8)}...`
75959
76488
  );
76489
+ await this._persistState();
75960
76490
  return;
75961
76491
  }
75962
76492
  const identity = this._persisted.identityKeypair;
@@ -75991,10 +76521,6 @@ ${baseText}`;
75991
76521
  if (event.owner_hub_id) {
75992
76522
  this._persisted.ownerHubId = event.owner_hub_id;
75993
76523
  }
75994
- if (event.group_id && !this._sessionGroupIds.has(event.conversation_id)) {
75995
- this._sessionGroupIds.set(event.conversation_id, event.group_id);
75996
- this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
75997
- }
75998
76524
  await this._persistState();
75999
76525
  console.log(
76000
76526
  `[SecureChannel] Session initialized for device ${event.owner_device_id.slice(0, 8)}... (conv ${event.conversation_id.slice(0, 8)}...)`
@@ -77664,6 +78190,10 @@ ${baseText}`;
77664
78190
  await this._persistState();
77665
78191
  }
77666
78192
  console.log(`[SecureChannel] Joined shared 1:1 MLS group for group ${conversationGroupId.slice(0, 8)} via Welcome (epoch=${mgr.epoch})`);
78193
+ if (!this._isMappedGroup(conversationGroupId)) {
78194
+ this._welcomedUnmapped.set(conversationGroupId, Date.now());
78195
+ }
78196
+ this._reconcileForUnmappedGroup(conversationGroupId);
77667
78197
  await this._flushMlsHold(conversationGroupId);
77668
78198
  return;
77669
78199
  }
@@ -78305,6 +78835,7 @@ ${baseText}`;
78305
78835
  ownerDm1to1: true,
78306
78836
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
78307
78837
  };
78838
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
78308
78839
  this.emit("message", messageText, metadata);
78309
78840
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
78310
78841
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -78911,6 +79442,7 @@ ${baseText}`;
78911
79442
  ownerDm1to1: true,
78912
79443
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
78913
79444
  };
79445
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
78914
79446
  this.emit("message", messageText, metadata);
78915
79447
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
78916
79448
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -79231,6 +79763,7 @@ ${baseText}`;
79231
79763
  ownerDm1to1: true,
79232
79764
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
79233
79765
  };
79766
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
79234
79767
  this.emit("message", messageText, metadata);
79235
79768
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
79236
79769
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -80251,7 +80784,7 @@ ${actionsText}`);
80251
80784
  "use strict";
80252
80785
  init_llm_response_parser();
80253
80786
  init_llm_cost();
80254
- traceStore = new AsyncLocalStorage();
80787
+ traceStore = new AsyncLocalStorage2();
80255
80788
  }
80256
80789
  });
80257
80790
  init_tool_audit = __esm2({
@@ -100999,7 +101532,7 @@ data:
100999
101532
  await init_skill_telemetry();
101000
101533
  await init_policy_enforcer();
101001
101534
  init_room_protocol();
101002
- VERSION = true ? "0.23.51" : "0.0.0-dev";
101535
+ VERSION = true ? "0.23.52" : "0.0.0-dev";
101003
101536
  }
101004
101537
  });
101005
101538
  await init_index();
@@ -102860,13 +103393,28 @@ var RoomHushState = class {
102860
103393
  return t2 !== void 0 && now < t2;
102861
103394
  }
102862
103395
  };
103396
+ async function sendDm(channel, t2, text) {
103397
+ if ((t2.conversationId || t2.groupId) && typeof channel.runForConversation === "function") {
103398
+ await channel.runForConversation(
103399
+ t2.conversationId,
103400
+ () => channel.send(text),
103401
+ t2.groupId ? { groupId: t2.groupId } : void 0
103402
+ );
103403
+ } else {
103404
+ await channel.send(text);
103405
+ }
103406
+ }
102863
103407
  var ActiveTarget = class {
102864
103408
  target = null;
102865
103409
  setRoom(roomId) {
102866
103410
  this.target = { kind: "room", roomId };
102867
103411
  }
102868
- setDm() {
102869
- this.target = { kind: "dm" };
103412
+ setDm(conversationId, groupId) {
103413
+ this.target = {
103414
+ kind: "dm",
103415
+ ...conversationId ? { conversationId } : {},
103416
+ ...groupId ? { groupId } : {}
103417
+ };
102870
103418
  }
102871
103419
  get current() {
102872
103420
  return this.target;
@@ -102886,7 +103434,7 @@ var ActiveTarget = class {
102886
103434
  if (!t2) return;
102887
103435
  try {
102888
103436
  if (t2.kind === "room") await channel.sendToRoom(t2.roomId, text);
102889
- else await channel.send(text);
103437
+ else await sendDm(channel, t2, text);
102890
103438
  log(`said to ${where}`);
102891
103439
  } catch (err) {
102892
103440
  log(`send failed to ${where}: ${err instanceof Error ? err.message : String(err)}`);
@@ -102995,7 +103543,7 @@ function wireBridge(channel, session2, target, opts = {}) {
102995
103543
  } else {
102996
103544
  log("inbound 1:1 DM from owner");
102997
103545
  }
102998
- target.setDm();
103546
+ target.setDm(metadata?.conversationId, metadata?.conversationGroupId);
102999
103547
  session2.push(text, target.snapshotReply(channel, log), { autoReplyOnText: ownerAttested });
103000
103548
  });
103001
103549
  }
@@ -103100,7 +103648,7 @@ async function main() {
103100
103648
  const info = parseInfoFlags(process.argv.slice(2));
103101
103649
  if (info.showVersion || info.showHelp) {
103102
103650
  const version2 = buildClientVersion2(
103103
- true ? "0.4.22" : void 0
103651
+ true ? "0.4.23" : void 0
103104
103652
  );
103105
103653
  if (info.showVersion) printLine(version2);
103106
103654
  if (info.showHelp) {
@@ -103139,7 +103687,7 @@ async function main() {
103139
103687
  process.exit(0);
103140
103688
  }
103141
103689
  const cfg = loadConfig(process.env, process.argv.slice(2));
103142
- logLine(`[grok-bridge] version: ${true ? "0.4.22" : "dev"}`);
103690
+ logLine(`[grok-bridge] version: ${true ? "0.4.23" : "dev"}`);
103143
103691
  mkdirSync7(cfg.workspaceDir, { recursive: true });
103144
103692
  mkdirSync7(cfg.fenceHome, { recursive: true });
103145
103693
  seedFenceCredential({
@@ -103154,7 +103702,7 @@ async function main() {
103154
103702
  agentName: cfg.agentName,
103155
103703
  platform: "node",
103156
103704
  clientVersion: buildClientVersion2(
103157
- true ? "0.4.22" : void 0
103705
+ true ? "0.4.23" : void 0
103158
103706
  )
103159
103707
  });
103160
103708
  channelRef = channel;