@agentvault/muse-bridge 0.1.26 → 0.1.27

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
@@ -94,6 +94,7 @@ import { readdir as readdir2, readFile as readFile4, writeFile as writeFile2, re
94
94
  import { join as join5 } from "node:path";
95
95
  import { randomUUID as randomUUID3 } from "node:crypto";
96
96
  import { EventEmitter } from "node:events";
97
+ import { AsyncLocalStorage } from "node:async_hooks";
97
98
  import { createServer } from "node:http";
98
99
  import { randomUUID as randomUUID4, createHash } from "node:crypto";
99
100
  import { readFileSync } from "node:fs";
@@ -103,7 +104,7 @@ import { join as join6 } from "node:path";
103
104
  import { readFile as readFile5 } from "node:fs/promises";
104
105
  import WebSocket from "ws";
105
106
  import { resolve as resolve2 } from "node:path";
106
- import { AsyncLocalStorage } from "node:async_hooks";
107
+ import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
107
108
  import { Http2ServerRequest as Http2ServerRequest2 } from "http2";
108
109
  import { Http2ServerRequest } from "http2";
109
110
  import { Readable as Readable2 } from "stream";
@@ -11787,11 +11788,11 @@ async function joinWithFirstMatchingKp(welcomeBytes, candidates) {
11787
11788
  return null;
11788
11789
  }
11789
11790
  function ownIdentity() {
11790
- const v2 = true ? "0.23.51" : FALLBACK;
11791
+ const v2 = true ? "0.23.52" : FALLBACK;
11791
11792
  return `${PACKAGE}@${v2}`;
11792
11793
  }
11793
11794
  function buildSha() {
11794
- const raw = true ? "753de79" : "";
11795
+ const raw = true ? "d7143c3" : "";
11795
11796
  const cleaned = (raw ?? "").trim();
11796
11797
  return !cleaned || cleaned === "unknown" ? null : cleaned;
11797
11798
  }
@@ -12595,11 +12596,38 @@ function _resetCompatCacheForTest() {
12595
12596
  _agentEventFn = null;
12596
12597
  _transcriptFn = null;
12597
12598
  }
12599
+ function ownerRoutingFrom(parsed) {
12600
+ const out = {};
12601
+ if (parsed.conversation_id !== void 0) {
12602
+ if (typeof parsed.conversation_id !== "string" || !parsed.conversation_id) return "'conversation_id' must be a string";
12603
+ out.conversationId = parsed.conversation_id;
12604
+ }
12605
+ if (parsed.audience !== void 0) {
12606
+ if (parsed.audience !== "person" && parsed.audience !== "everyone") {
12607
+ return `'audience' must be "person" or "everyone"`;
12608
+ }
12609
+ out.audience = parsed.audience;
12610
+ }
12611
+ return out;
12612
+ }
12613
+ function ambiguousOwnerRequest(channel, routing) {
12614
+ const check = channel.isUntargetedOwnerAmbiguous;
12615
+ if (typeof check !== "function" || !check.call(channel, routing)) return null;
12616
+ return { status: 409, body: { ok: false, error: AMBIGUOUS_OWNER_ERROR } };
12617
+ }
12618
+ function statusOf(receipt) {
12619
+ if (receipt.ambiguous) return 409;
12620
+ return receipt.ok ? 200 : 500;
12621
+ }
12598
12622
  async function handleSendRequest(parsed, channel) {
12599
12623
  const text = parsed.text;
12600
12624
  if (!text || typeof text !== "string") {
12601
12625
  return { status: 400, body: { ok: false, error: "Missing 'text' field" } };
12602
12626
  }
12627
+ const routing = ownerRoutingFrom(parsed);
12628
+ if (typeof routing === "string") {
12629
+ return { status: 400, body: { ok: false, error: routing } };
12630
+ }
12603
12631
  try {
12604
12632
  let target;
12605
12633
  let a2aTarget = parsed.hub_address ?? parsed.a2a_address ?? parsed.a2aAddress;
@@ -12617,10 +12645,10 @@ async function handleSendRequest(parsed, channel) {
12617
12645
  const receipt2 = await channel.deliver(
12618
12646
  { kind: "owner" },
12619
12647
  { type: "attachment", text, filePath: parsed.file_path },
12620
- { topicId: parsed.topicId }
12648
+ { topicId: parsed.topicId, ...routing, refuseIfAmbiguous: true }
12621
12649
  );
12622
12650
  return {
12623
- status: receipt2.ok ? 200 : 500,
12651
+ status: statusOf(receipt2),
12624
12652
  body: {
12625
12653
  ok: receipt2.ok,
12626
12654
  destination: receipt2.destination,
@@ -12634,6 +12662,8 @@ async function handleSendRequest(parsed, channel) {
12634
12662
  target,
12635
12663
  { type: "text", text },
12636
12664
  {
12665
+ ...routing,
12666
+ refuseIfAmbiguous: true,
12637
12667
  topicId: parsed.topicId,
12638
12668
  priority: parsed.priority,
12639
12669
  metadata: {
@@ -12643,7 +12673,7 @@ async function handleSendRequest(parsed, channel) {
12643
12673
  }
12644
12674
  );
12645
12675
  return {
12646
- status: receipt.ok ? 200 : 500,
12676
+ status: statusOf(receipt),
12647
12677
  body: {
12648
12678
  ok: receipt.ok,
12649
12679
  destination: receipt.destination,
@@ -12658,6 +12688,10 @@ async function handleActionRequest(parsed, channel) {
12658
12688
  if (!parsed.action || typeof parsed.action !== "string") {
12659
12689
  return { status: 400, body: { ok: false, error: "Missing 'action' field" } };
12660
12690
  }
12691
+ const routing = ownerRoutingFrom(parsed);
12692
+ if (typeof routing === "string") {
12693
+ return { status: 400, body: { ok: false, error: routing } };
12694
+ }
12661
12695
  try {
12662
12696
  const confirmation = {
12663
12697
  action: parsed.action,
@@ -12667,12 +12701,10 @@ async function handleActionRequest(parsed, channel) {
12667
12701
  estimated_cost: parsed.estimated_cost
12668
12702
  };
12669
12703
  const target = parsed.room_id && typeof parsed.room_id === "string" ? { kind: "room", roomId: parsed.room_id } : { kind: "owner" };
12670
- const receipt = await channel.deliver(
12671
- target,
12672
- { type: "action_confirmation", confirmation }
12673
- );
12704
+ const content = { type: "action_confirmation", confirmation };
12705
+ const receipt = await channel.deliver(target, content, { ...routing, refuseIfAmbiguous: true });
12674
12706
  return {
12675
- status: receipt.ok ? 200 : 500,
12707
+ status: statusOf(receipt),
12676
12708
  body: {
12677
12709
  ok: receipt.ok,
12678
12710
  destination: receipt.destination,
@@ -12697,6 +12729,12 @@ async function handleDecisionRequest(parsed, channel) {
12697
12729
  return { status: 400, body: { ok: false, error: "Each option must have 'option_id' and 'label'" } };
12698
12730
  }
12699
12731
  }
12732
+ const routing = ownerRoutingFrom(parsed);
12733
+ if (typeof routing === "string") {
12734
+ return { status: 400, body: { ok: false, error: routing } };
12735
+ }
12736
+ const ambiguous = ambiguousOwnerRequest(channel, routing);
12737
+ if (ambiguous) return ambiguous;
12700
12738
  try {
12701
12739
  const decision_id = await channel.sendDecisionRequest({
12702
12740
  title,
@@ -12705,7 +12743,7 @@ async function handleDecisionRequest(parsed, channel) {
12705
12743
  context_refs: parsed.context_refs,
12706
12744
  deadline: parsed.deadline,
12707
12745
  auto_action: parsed.auto_action
12708
- });
12746
+ }, routing);
12709
12747
  return { status: 200, body: { ok: true, decision_id } };
12710
12748
  } catch (err) {
12711
12749
  return { status: 500, body: { ok: false, error: String(err) } };
@@ -13240,7 +13278,7 @@ async function _handleInbound(params) {
13240
13278
  core.error?.(`[AgentVault] session record failed: ${String(err)}`);
13241
13279
  }
13242
13280
  });
13243
- await core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
13281
+ await channel.runForConversation(metadata.conversationId, () => core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
13244
13282
  ctx: ctxPayload,
13245
13283
  cfg,
13246
13284
  dispatcherOptions: {
@@ -13257,7 +13295,7 @@ async function _handleInbound(params) {
13257
13295
  }
13258
13296
  },
13259
13297
  replyOptions: {}
13260
- });
13298
+ }), { groupId: metadata.conversationGroupId });
13261
13299
  }
13262
13300
  function resolveBaseUrl(options) {
13263
13301
  const host = options?.host ?? "127.0.0.1";
@@ -18333,7 +18371,7 @@ function reportSkillInvocation(opts) {
18333
18371
  spanBuffer.push(span);
18334
18372
  return span;
18335
18373
  }
18336
- 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_exports2, 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;
18374
+ 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_exports2, 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;
18337
18375
  var init_dist = __esm({
18338
18376
  async "../plugin/dist/index.js"() {
18339
18377
  "use strict";
@@ -18386,6 +18424,12 @@ var init_dist = __esm({
18386
18424
  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";
18387
18425
  }
18388
18426
  });
18427
+ init_owner_routing = __esm2({
18428
+ "src/owner-routing.ts"() {
18429
+ "use strict";
18430
+ 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.`;
18431
+ }
18432
+ });
18389
18433
  init_envelope_text = __esm2({
18390
18434
  "src/envelope-text.ts"() {
18391
18435
  "use strict";
@@ -71217,6 +71261,7 @@ var init_dist = __esm({
71217
71261
  init_http_handlers = __esm2({
71218
71262
  "src/http-handlers.ts"() {
71219
71263
  "use strict";
71264
+ init_owner_routing();
71220
71265
  }
71221
71266
  });
71222
71267
  mcp_proxy_helpers_exports = {};
@@ -71246,6 +71291,7 @@ var init_dist = __esm({
71246
71291
  async "src/channel.ts"() {
71247
71292
  "use strict";
71248
71293
  init_abstention();
71294
+ init_owner_routing();
71249
71295
  init_envelope_text();
71250
71296
  init_mls_commit_classify();
71251
71297
  init_room_protocol();
@@ -71295,6 +71341,10 @@ var init_dist = __esm({
71295
71341
  OUTBOUND_DEDUPE_TYPES = /* @__PURE__ */ new Set(["text", "status_alert", "artifact", "attachment"]);
71296
71342
  RETRY_CANDIDATE_TTL_MS = 6e4;
71297
71343
  RETRY_CANDIDATE_MAX = 32;
71344
+ _turnConversation = new AsyncLocalStorage();
71345
+ PERSON_INVOLVED_WINDOW_MS = 5 * 6e4;
71346
+ ATTESTED_INBOUND_MAX = 64;
71347
+ UNMAPPED_RECONCILE_COOLDOWN_MS = 6e4;
71298
71348
  TOPIC_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
71299
71349
  ROOM_FULFIL_COOLDOWN_MS = 6e4;
71300
71350
  SecureChannel = class _SecureChannel extends EventEmitter {
@@ -71533,6 +71583,31 @@ ${text}`;
71533
71583
  _lastIncomingTopics = /* @__PURE__ */ new Map();
71534
71584
  /** Room ID from the most recent inbound room message — used as fallback for HTTP /send replies. */
71535
71585
  _lastInboundRoomId;
71586
+ /**
71587
+ * #1418: the most recent owner 1:1 message that reached the agent — the
71588
+ * person involved in whatever the agent says next without naming a
71589
+ * conversation (see `_involvedPerson`). In memory only: after a restart
71590
+ * there is no trigger, so untargeted content goes to the primary person.
71591
+ */
71592
+ _lastInboundDm;
71593
+ /** #1418: turns in progress (`runForConversation`). */
71594
+ _activeTurns = /* @__PURE__ */ new Set();
71595
+ /**
71596
+ * #1418: recent owner 1:1 messages that decrypted, keyed by
71597
+ * conversation|group — evidence of which conversation, group and browser
71598
+ * belong together (one person). In memory only, bounded.
71599
+ */
71600
+ _attestedInbound = /* @__PURE__ */ new Map();
71601
+ /** #1418: per UNMAPPED group (or conversation), the last time it asked for a reconcile. */
71602
+ _unmappedReconcileAt = /* @__PURE__ */ new Map();
71603
+ /**
71604
+ * #1418: 1:1 groups joined by a Welcome IN THIS PROCESS while no
71605
+ * conversation mapped them — a person who has not been learned yet, counted
71606
+ * as one until the next successful reconcile. Persisted husks never are.
71607
+ */
71608
+ _welcomedUnmapped = /* @__PURE__ */ new Map();
71609
+ /** #1418: what the last SUCCESSFUL reconcile reported live, and when it started. */
71610
+ _lastReconcile;
71536
71611
  /** Rate-limit: last resync_request timestamp per conversation (5-min cooldown). */
71537
71612
  _lastResyncRequest = /* @__PURE__ */ new Map();
71538
71613
  /** Dedup: last room/group welcome self-heal request timestamp per group (30s window). */
@@ -72138,6 +72213,379 @@ ${text}`;
72138
72213
  if (this._persisted?.groupId) known.add(this._persisted.groupId);
72139
72214
  return known;
72140
72215
  }
72216
+ // --- #1418: only the person involved ----------------------------------
72217
+ /**
72218
+ * Run `fn` as the work an inbound 1:1 message from `conversationId`
72219
+ * triggered. Untargeted owner content sent while it runs — from inside its
72220
+ * async call chain, or from anywhere while it is the only turn in progress —
72221
+ * goes to that conversation's person only.
72222
+ *
72223
+ * `opts.groupId` is the group that message DECRYPTED under
72224
+ * (`metadata.conversationGroupId`). Pass it: it outranks the local
72225
+ * conversation→group map, which can be stale, and it is all there is for a
72226
+ * frame whose conversation is not mapped yet. With neither an id nor a
72227
+ * group, `fn` runs unchanged.
72228
+ */
72229
+ async runForConversation(conversationId, fn, opts) {
72230
+ const groupId = typeof opts?.groupId === "string" && opts.groupId ? opts.groupId : void 0;
72231
+ if (!conversationId && !groupId) return fn();
72232
+ const store = { convId: conversationId || void 0, groupId, ended: false };
72233
+ this._activeTurns.add(store);
72234
+ try {
72235
+ return await _turnConversation.run(store, fn);
72236
+ } finally {
72237
+ store.ended = true;
72238
+ store.endedAt = Date.now();
72239
+ this._activeTurns.delete(store);
72240
+ }
72241
+ }
72242
+ /**
72243
+ * The turn this call chain belongs to (#1418) — running, or ended but
72244
+ * still within the window in which work it left behind is for its person.
72245
+ * `"expired"` once that window is over: the work is proactive now.
72246
+ */
72247
+ _currentTurn() {
72248
+ const store = _turnConversation.getStore();
72249
+ if (!store) return void 0;
72250
+ if (!store.ended) return store;
72251
+ return Date.now() - (store.endedAt ?? 0) < PERSON_INVOLVED_WINDOW_MS ? store : "expired";
72252
+ }
72253
+ /**
72254
+ * Record an owner 1:1 message that just decrypted (#1418).
72255
+ *
72256
+ * Always kept as evidence of which conversation, group and browser belong
72257
+ * together (see `_dmPeople`). It makes its person "the person involved" only
72258
+ * when it is RECENT by the server's `createdAt`: a frame replayed from
72259
+ * backlog on reconnect is not something anyone is waiting on an answer to.
72260
+ */
72261
+ _noteInboundDm(convId, groupId, opts = {}) {
72262
+ if (!convId && !groupId) return;
72263
+ const now = Date.now();
72264
+ const sentAt = opts.createdAt ? Date.parse(opts.createdAt) : NaN;
72265
+ const at = Number.isFinite(sentAt) ? Math.min(now, sentAt) : now;
72266
+ const sender = opts.senderDeviceId && opts.senderDeviceId !== this._deviceId ? opts.senderDeviceId : void 0;
72267
+ const key = `${convId ?? ""}|${groupId ?? ""}|${sender ?? ""}`;
72268
+ const prior = this._attestedInbound.get(key);
72269
+ this._attestedInbound.delete(key);
72270
+ this._attestedInbound.set(key, { convId, groupId, senderDeviceId: sender, at: Math.max(prior?.at ?? 0, at) });
72271
+ while (this._attestedInbound.size > ATTESTED_INBOUND_MAX) {
72272
+ const oldest = this._attestedInbound.keys().next().value;
72273
+ if (oldest === void 0) break;
72274
+ this._attestedInbound.delete(oldest);
72275
+ }
72276
+ if (this._lastInboundDm && this._lastInboundDm.at > at) return;
72277
+ this._lastInboundDm = {
72278
+ convId,
72279
+ groupId: groupId ?? (convId ? this._sessionGroupIds.get(convId) : void 0),
72280
+ at
72281
+ };
72282
+ }
72283
+ /** The group `convId`'s most recent inbound decrypted under, if any. */
72284
+ _attestedGroupOf(convId) {
72285
+ if (!convId) return void 0;
72286
+ let gid;
72287
+ for (const a2 of this._attestedInbound.values()) {
72288
+ if (a2.convId === convId && a2.groupId) gid = a2.groupId;
72289
+ }
72290
+ return gid;
72291
+ }
72292
+ /** Does some mapped conversation point at `groupId`? */
72293
+ _isMappedGroup(groupId) {
72294
+ for (const gid of this._sessionGroupIds.values()) if (gid === groupId) return true;
72295
+ return false;
72296
+ }
72297
+ /**
72298
+ * An owner message decrypted under a group no mapped conversation points at
72299
+ * (#1418): the map is stale — a Welcome landed before its conversation was
72300
+ * learned, or a conversation was recreated. Re-resolve it from the server.
72301
+ * Fire-and-forget and rate-limited per group: never awaited on the receive
72302
+ * or Welcome path, so it can never hold up MLS processing.
72303
+ */
72304
+ _reconcileForUnmappedGroup(groupId) {
72305
+ if (!groupId || this._isMappedGroup(groupId)) return;
72306
+ this._reconcileSoon(`g:${groupId}`);
72307
+ }
72308
+ /** The same for a Double Ratchet message on a conversation the map does not know. */
72309
+ _reconcileForUnmappedConversation(convId) {
72310
+ if (!convId || this._sessionGroupIds.size === 0 || this._sessionGroupIds.has(convId)) return;
72311
+ this._reconcileSoon(`c:${convId}`);
72312
+ }
72313
+ _reconcileSoon(key) {
72314
+ const now = Date.now();
72315
+ if (now - (this._unmappedReconcileAt.get(key) ?? 0) < UNMAPPED_RECONCILE_COOLDOWN_MS) return;
72316
+ this._unmappedReconcileAt.set(key, now);
72317
+ void Promise.resolve().then(() => this._reconcileConversationGroups()).catch((err) => console.warn("[SecureChannel] Conversation-group reconcile (unmapped group) failed:", err));
72318
+ }
72319
+ /** A conversation of `groupId`, for an MLS frame that named only its group. */
72320
+ _conversationOfGroup(groupId) {
72321
+ if (!groupId) return void 0;
72322
+ if (this._primaryConversationId && this._sessionGroupIds.get(this._primaryConversationId) === groupId) {
72323
+ return this._primaryConversationId;
72324
+ }
72325
+ for (const [convId, gid] of this._sessionGroupIds) {
72326
+ if (gid === groupId) return convId;
72327
+ }
72328
+ return void 0;
72329
+ }
72330
+ /** Is `convId` one of this agent's own 1:1 conversations (never a room's or an A2A channel's)? */
72331
+ _isOwnDmConversation(convId) {
72332
+ if (this._isNonDmConversation(convId)) return false;
72333
+ return this._sessions.has(convId) || this._sessionGroupIds.has(convId) || !!this._persisted?.mlsConversations?.[convId] || convId === this._primaryConversationId;
72334
+ }
72335
+ /**
72336
+ * #1418 — the PEOPLE this agent has a 1:1 with, or `undefined` when it
72337
+ * cannot tell (no conversation is mapped: then it behaves as before #1418).
72338
+ *
72339
+ * People, not groups. Since #1399 one person has one group, but an agent
72340
+ * also keeps joined groups that are nobody's any more — husks of deleted or
72341
+ * recreated conversations. Measured 2026-10-24: wren held 13 joined groups
72342
+ * for 1 mapped, loopita 2 for 1, wowzer 2 for 1. Counting joined groups made
72343
+ * all three single-person agents look like several people, and their
72344
+ * replies could go only to a dead group.
72345
+ *
72346
+ * So a person is built from the conversations the server mapped, joined by
72347
+ * evidence that two things are the same person:
72348
+ * - the same group (a legacy group shared by several people cannot be told
72349
+ * apart, so it stays one — exactly the pre-#1418 behaviour);
72350
+ * - the same owner browser (a browser belongs to exactly one person);
72351
+ * - a message that decrypted under a group, from a conversation and browser.
72352
+ * A joined group nothing maps and nobody has spoken in is not a person. A
72353
+ * message on an unmapped group from a browser nobody knows IS someone —
72354
+ * that fails closed, toward "only them".
72355
+ */
72356
+ _dmPeople() {
72357
+ if (this._sessionGroupIds.size === 0) return void 0;
72358
+ const parent2 = /* @__PURE__ */ new Map();
72359
+ const add4 = (x2) => {
72360
+ if (!parent2.has(x2)) parent2.set(x2, x2);
72361
+ };
72362
+ const find = (x2) => {
72363
+ let root3 = x2;
72364
+ while (parent2.get(root3) !== root3) root3 = parent2.get(root3);
72365
+ return root3;
72366
+ };
72367
+ const union2 = (a2, b2) => {
72368
+ if (!a2 || !b2) return;
72369
+ add4(a2);
72370
+ add4(b2);
72371
+ const ra2 = find(a2), rb = find(b2);
72372
+ if (ra2 !== rb) parent2.set(ra2, rb);
72373
+ };
72374
+ const ownerOf = (convId) => {
72375
+ const owner = this._sessions.get(convId)?.ownerDeviceId ?? this._persisted?.sessions?.[convId]?.ownerDeviceId;
72376
+ return owner ? `d:${owner}` : void 0;
72377
+ };
72378
+ for (const [convId, gid] of this._sessionGroupIds) {
72379
+ add4(`c:${convId}`);
72380
+ union2(`c:${convId}`, `g:${gid}`);
72381
+ union2(`c:${convId}`, ownerOf(convId));
72382
+ }
72383
+ const primary = this._primaryConversationId || this._persisted?.primaryConversationId;
72384
+ const primaryGid = this._persisted?.groupId;
72385
+ if (primary && primaryGid && (parent2.has(`c:${primary}`) || parent2.has(`g:${primaryGid}`))) {
72386
+ union2(`c:${primary}`, `g:${primaryGid}`);
72387
+ }
72388
+ for (const gid of this._welcomedUnmapped.keys()) add4(`g:${gid}`);
72389
+ const records = [...this._attestedInbound.values()].map((a2) => ({
72390
+ a: a2,
72391
+ nodes: [
72392
+ a2.convId ? `c:${a2.convId}` : void 0,
72393
+ a2.groupId ? `g:${a2.groupId}` : void 0,
72394
+ a2.senderDeviceId ? `d:${a2.senderDeviceId}` : void 0
72395
+ ].filter((n2) => !!n2)
72396
+ }));
72397
+ const placed = /* @__PURE__ */ new Set();
72398
+ const place = (i2) => {
72399
+ const { a: a2, nodes } = records[i2];
72400
+ for (const n2 of nodes) add4(n2);
72401
+ for (const n2 of nodes.slice(1)) union2(nodes[0], n2);
72402
+ if (a2.convId && this._sessionGroupIds.has(a2.convId)) union2(`c:${a2.convId}`, ownerOf(a2.convId));
72403
+ placed.add(i2);
72404
+ };
72405
+ const linkKnown = () => {
72406
+ for (let progress = true; progress; ) {
72407
+ progress = false;
72408
+ records.forEach((r2, i2) => {
72409
+ if (!placed.has(i2) && r2.nodes.some((n2) => parent2.has(n2))) {
72410
+ place(i2);
72411
+ progress = true;
72412
+ }
72413
+ });
72414
+ }
72415
+ };
72416
+ linkKnown();
72417
+ records.forEach((r2, i2) => {
72418
+ if (!placed.has(i2) && this._mayBeNewPerson(r2.a)) place(i2);
72419
+ });
72420
+ linkKnown();
72421
+ const roots = /* @__PURE__ */ new Set();
72422
+ for (const node2 of parent2.keys()) {
72423
+ if (!node2.startsWith("d:")) roots.add(find(node2));
72424
+ }
72425
+ return {
72426
+ count: roots.size,
72427
+ keyOf: (convId, groupId) => {
72428
+ if (convId && parent2.has(`c:${convId}`)) return find(`c:${convId}`);
72429
+ if (groupId && parent2.has(`g:${groupId}`)) return find(`g:${groupId}`);
72430
+ return void 0;
72431
+ }
72432
+ };
72433
+ }
72434
+ /**
72435
+ * May this inbound evidence stand for a person nobody knows yet (#1418)?
72436
+ * Only if it was sent recently, and the last successful reconcile — when it
72437
+ * started after the message was sent — listed its conversation or group.
72438
+ */
72439
+ _mayBeNewPerson(a2) {
72440
+ if (Date.now() - a2.at >= PERSON_INVOLVED_WINDOW_MS) return false;
72441
+ const r2 = this._lastReconcile;
72442
+ if (r2 && a2.at <= r2.at && !(a2.convId && r2.convs.has(a2.convId)) && !(a2.groupId && r2.groups.has(a2.groupId))) return false;
72443
+ return true;
72444
+ }
72445
+ /** More than one person has a 1:1 with this agent (#1418). Unknown counts as one: the old behaviour. */
72446
+ _isMultiPerson() {
72447
+ return (this._dmPeople()?.count ?? 0) > 1;
72448
+ }
72449
+ /**
72450
+ * The group a turn's message decrypted under, for placing the turn when its
72451
+ * conversation is not mapped (a mapped conversation already names its person).
72452
+ */
72453
+ _turnGroup(turn) {
72454
+ return turn.groupId ?? this._attestedGroupOf(turn.convId);
72455
+ }
72456
+ /** The people with a 1:1 turn in progress, one turn each (#1418). */
72457
+ _activeTurnPeople() {
72458
+ const people = this._dmPeople();
72459
+ const out = /* @__PURE__ */ new Map();
72460
+ for (const turn of this._activeTurns) {
72461
+ if (turn.convId && (turn.groupId ? this._isNonDmConversation(turn.convId) : !this._isOwnDmConversation(turn.convId))) continue;
72462
+ const gid = this._turnGroup(turn);
72463
+ const key = people?.keyOf(turn.convId, gid) ?? (gid ? `g:${gid}` : `c:${turn.convId}`);
72464
+ if (!out.has(key)) out.set(key, turn);
72465
+ }
72466
+ return out;
72467
+ }
72468
+ /**
72469
+ * The person an untargeted owner message is for (#1418), in order:
72470
+ *
72471
+ * 1. the turn this call chain belongs to — always, and only, that
72472
+ * conversation, reached on the group its message decrypted under. A turn
72473
+ * never borrows another conversation's turn: one it cannot place fails
72474
+ * closed to its own conversation. Work the turn left running (a timer, a
72475
+ * dispatch orphaned by the turn budget) stays with that person for
72476
+ * `PERSON_INVOLVED_WINDOW_MS` after the turn, then is proactive (4);
72477
+ * 2. with no turn context (a skill's HTTP call), the one person with a turn
72478
+ * in progress;
72479
+ * 3. the last inbound 1:1 message, if it is recent — a reply produced in
72480
+ * response to it;
72481
+ * 4. otherwise the content is proactive: the PRIMARY conversation's person.
72482
+ */
72483
+ _involvedPerson() {
72484
+ const person = (convId, groupId, reason) => ({
72485
+ convId,
72486
+ groupId: groupId ?? this._attestedGroupOf(convId) ?? (convId ? this._sessionGroupIds.get(convId) : void 0),
72487
+ reason
72488
+ });
72489
+ const turn = this._currentTurn();
72490
+ if (turn && turn !== "expired") {
72491
+ return person(turn.convId ?? this._conversationOfGroup(turn.groupId), turn.groupId, turn.ended ? "outlived-turn" : "turn");
72492
+ }
72493
+ if (turn === "expired") return this._primaryPerson();
72494
+ const active = this._activeTurnPeople();
72495
+ if (active.size === 1) {
72496
+ const [only] = active.values();
72497
+ return person(only.convId ?? this._conversationOfGroup(only.groupId), only.groupId, "active-turn");
72498
+ }
72499
+ const last = this._lastInboundDm;
72500
+ if (active.size === 0 && last && Date.now() - last.at < PERSON_INVOLVED_WINDOW_MS) {
72501
+ return person(last.convId ?? this._conversationOfGroup(last.groupId), last.groupId, "last-inbound");
72502
+ }
72503
+ return this._primaryPerson();
72504
+ }
72505
+ /** The PRIMARY conversation's person — where proactive content goes. */
72506
+ _primaryPerson() {
72507
+ const primary = this._primaryConversationId || this._persisted?.primaryConversationId || void 0;
72508
+ const primaryGroup = (primary ? this._sessionGroupIds.get(primary) : void 0) ?? this._persisted?.groupId;
72509
+ return {
72510
+ convId: primary,
72511
+ groupId: primaryGroup ?? this._attestedGroupOf(primary),
72512
+ reason: "primary"
72513
+ };
72514
+ }
72515
+ /**
72516
+ * #1418 — would an untargeted owner send right now have to GUESS between
72517
+ * people? True only with no turn context while two or more people have a
72518
+ * turn in progress. The local HTTP API refuses such a request (409) and
72519
+ * asks for a conversation instead of picking one.
72520
+ */
72521
+ isUntargetedOwnerAmbiguous(options) {
72522
+ if (options?.conversationId !== void 0 || options?.audience === "everyone") return false;
72523
+ if (this._currentTurn()) return false;
72524
+ if (!this._isMultiPerson()) return false;
72525
+ return this._activeTurnPeople().size > 1;
72526
+ }
72527
+ /**
72528
+ * Who an UNTARGETED owner send reaches, or `null` for "every session, as
72529
+ * before". `null` when the caller chose `audience: "everyone"`, and when the
72530
+ * agent has one person (or cannot tell how many) — nothing to choose
72531
+ * between, so its recipients are exactly what they always were.
72532
+ */
72533
+ _untargetedAudience(options) {
72534
+ if (options?.conversationId !== void 0) return null;
72535
+ if (options?.audience === "everyone") return null;
72536
+ if (!this._isMultiPerson()) return null;
72537
+ return this._involvedPerson();
72538
+ }
72539
+ /** A stable name for who an untargeted owner send reaches right now, or undefined when that is "everyone, as before". */
72540
+ _audienceTag(options) {
72541
+ if (options?.audience === "everyone") return "everyone";
72542
+ const person = this._untargetedAudience(options);
72543
+ return person ? `person:${person.groupId ?? person.convId ?? ""}` : void 0;
72544
+ }
72545
+ /** Does conversation `convId` belong to `person`? A conversation nothing ties to them fails closed. */
72546
+ _isPersonsConversation(person, convId) {
72547
+ if (convId === person.convId) return true;
72548
+ const gid = this._sessionGroupIds.get(convId);
72549
+ if (gid !== void 0 && gid === person.groupId) return true;
72550
+ const people = this._dmPeople();
72551
+ const theirs = people?.keyOf(person.convId, person.groupId);
72552
+ return theirs !== void 0 && people.keyOf(convId, gid) === theirs;
72553
+ }
72554
+ /**
72555
+ * #1418: the Double Ratchet sessions an owner-bound FILE (attachment or
72556
+ * artifact) goes to, bucketed by the conversation its blob is uploaded
72557
+ * under. The blob is uploaded under a conversation of the person who gets
72558
+ * it — the backend only lets that conversation's participants download it —
72559
+ * so an explicit "everyone" uploads once per person.
72560
+ */
72561
+ _ownerFileRecipients(routing) {
72562
+ const roomConvIds = /* @__PURE__ */ new Set();
72563
+ for (const room of Object.values(this._persisted?.rooms ?? {})) {
72564
+ for (const cid of room.conversationIds ?? []) roomConvIds.add(cid);
72565
+ }
72566
+ const live = [...this._sessions].filter(([convId, session]) => session.activated && !roomConvIds.has(convId)).map(([convId]) => convId);
72567
+ const person = routing?.conversationId !== void 0 ? { convId: routing.conversationId, groupId: this._sessionGroupIds.get(routing.conversationId), reason: "target" } : this._untargetedAudience(routing);
72568
+ if (person) {
72569
+ const convIds = live.filter((convId) => this._isPersonsConversation(person, convId));
72570
+ const uploadConvId = person.convId ?? convIds[0];
72571
+ return uploadConvId && convIds.length > 0 ? [{ uploadConvId, convIds }] : [];
72572
+ }
72573
+ if (live.length === 0) return [];
72574
+ if (!this._isMultiPerson()) {
72575
+ return [{ uploadConvId: this._primaryConversationId, convIds: live }];
72576
+ }
72577
+ const people = this._dmPeople();
72578
+ const buckets = /* @__PURE__ */ new Map();
72579
+ for (const convId of live) {
72580
+ const gid = this._sessionGroupIds.get(convId);
72581
+ const key = people?.keyOf(convId, gid) ?? gid ?? `c:${convId}`;
72582
+ buckets.set(key, [...buckets.get(key) ?? [], convId]);
72583
+ }
72584
+ return [...buckets.values()].map((convIds) => ({
72585
+ uploadConvId: convIds.includes(this._primaryConversationId) ? this._primaryConversationId : convIds[0],
72586
+ convIds
72587
+ }));
72588
+ }
72141
72589
  /** The group a DM history entry belongs to (see the forms above). */
72142
72590
  _dmEntryScope(entry, known) {
72143
72591
  const t2 = entry.topicId ?? "";
@@ -72709,6 +73157,7 @@ ${text}`;
72709
73157
  Promise.resolve().then(() => (init_openclaw_compat(), openclaw_compat_exports)).then(({ requestHeartbeatNow: requestHeartbeatNow2 }) => requestHeartbeatNow2({ reason: "channel-send" })).catch(() => {
72710
73158
  });
72711
73159
  const targetConvId = options?.conversationId;
73160
+ const audience = this._untargetedAudience(options);
72712
73161
  const explicitTopicId = options?.topicId;
72713
73162
  const targeted = targetConvId !== void 0;
72714
73163
  const frameHistoryContexts = [];
@@ -72747,7 +73196,7 @@ ${text}`;
72747
73196
  if (this._persisted?.mlsGroups && this._state === "ready" && this._ws) {
72748
73197
  const targetSharedGid = targetConvId ? this._sessionGroupIds?.get(targetConvId) : void 0;
72749
73198
  console.log(
72750
- `[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)"}`
73199
+ `[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)"}`
72751
73200
  );
72752
73201
  const skipped = [];
72753
73202
  for (const [gid, entry] of Object.entries(this._persisted.mlsGroups)) {
@@ -72755,6 +73204,10 @@ ${text}`;
72755
73204
  skipped.push(`${gid.slice(0, 8)}:not-target`);
72756
73205
  continue;
72757
73206
  }
73207
+ if (audience && gid !== audience.groupId) {
73208
+ skipped.push(`${gid.slice(0, 8)}:not-involved`);
73209
+ continue;
73210
+ }
72758
73211
  if (!entry.mlsGroupId) {
72759
73212
  skipped.push(`${gid.slice(0, 8)}:no-mlsGroupId`);
72760
73213
  continue;
@@ -72811,6 +73264,7 @@ ${text}`;
72811
73264
  if (!session.activated) continue;
72812
73265
  if (roomConvIds.has(convId)) continue;
72813
73266
  if (targetConvId && convId !== targetConvId) continue;
73267
+ if (audience && !this._isPersonsConversation(audience, convId)) continue;
72814
73268
  const convGroupId = this._sessionGroupIds?.get(convId);
72815
73269
  if (convGroupId && sentSharedGroupIds.has(convGroupId)) {
72816
73270
  sentCount++;
@@ -72929,6 +73383,7 @@ ${text}`;
72929
73383
  if (this._persisted?.mlsConversations && this._state === "ready" && this._ws) {
72930
73384
  for (const [mlsConvId, entry] of Object.entries(this._persisted.mlsConversations)) {
72931
73385
  if (targetConvId && mlsConvId !== targetConvId) continue;
73386
+ if (audience && !this._isPersonsConversation(audience, mlsConvId)) continue;
72932
73387
  if (this._sessions.has(mlsConvId)) continue;
72933
73388
  if (roomConvIds.has(mlsConvId)) continue;
72934
73389
  const mlsOnlyConvGroupId = this._sessionGroupIds?.get(mlsConvId);
@@ -73052,7 +73507,7 @@ ${text}`;
73052
73507
  */
73053
73508
  sendActivitySpan(spanData) {
73054
73509
  if (!this._ws || this._ws.readyState !== WebSocket.OPEN) return;
73055
- const pluginVersion = true ? "0.23.51" : "0.0.0-dev";
73510
+ const pluginVersion = true ? "0.23.52" : "0.0.0-dev";
73056
73511
  const agentName = this.config.agentName ?? "Agent";
73057
73512
  const resource = {
73058
73513
  "service.name": "agentvault-agent",
@@ -73104,7 +73559,7 @@ ${text}`;
73104
73559
  * Builds a structured envelope with decision metadata and sends it
73105
73560
  * as a high-priority message. Returns the generated decision_id.
73106
73561
  */
73107
- async sendDecisionRequest(request) {
73562
+ async sendDecisionRequest(request, routing) {
73108
73563
  const decision_id = `dec_${randomUUID4().replace(/-/g, "").slice(0, 16)}`;
73109
73564
  const payload = JSON.stringify({
73110
73565
  type: "message",
@@ -73115,6 +73570,8 @@ ${text}`;
73115
73570
  }
73116
73571
  });
73117
73572
  await this.send(payload, {
73573
+ conversationId: routing?.conversationId,
73574
+ audience: routing?.audience,
73118
73575
  messageType: "decision_request",
73119
73576
  priority: "high",
73120
73577
  metadata: {
@@ -73521,6 +73978,7 @@ ${text}`;
73521
73978
  const jwt = this._deviceJwt ?? this._persisted?.deviceJwt;
73522
73979
  if (!jwt || !this._persisted) return false;
73523
73980
  let rows;
73981
+ const reconcileStartedAt = Date.now();
73524
73982
  try {
73525
73983
  const res = await fetch(`${this.config.apiUrl}/api/v1/conversations`, {
73526
73984
  headers: { Authorization: `Bearer ${jwt}` }
@@ -73549,6 +74007,19 @@ ${text}`;
73549
74007
  }
73550
74008
  this._sessionGroupIds = new Map(mine.map((r2) => [r2.id, r2.group_id]));
73551
74009
  this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
74010
+ {
74011
+ const convs = new Set(mine.map((r2) => r2.id));
74012
+ const groups = new Set(mine.map((r2) => r2.group_id));
74013
+ this._lastReconcile = { at: reconcileStartedAt, convs, groups };
74014
+ for (const [key, a2] of this._attestedInbound) {
74015
+ if (a2.at > reconcileStartedAt) continue;
74016
+ if (a2.convId && convs.has(a2.convId) || a2.groupId && groups.has(a2.groupId)) continue;
74017
+ this._attestedInbound.delete(key);
74018
+ }
74019
+ for (const [gid, at] of this._welcomedUnmapped) {
74020
+ if (at <= reconcileStartedAt) this._welcomedUnmapped.delete(gid);
74021
+ }
74022
+ }
73552
74023
  const joined = mine.find((r2) => this._persisted.mlsGroups?.[r2.group_id]);
73553
74024
  const primary = mine.find((r2) => r2.id === this._persisted.primaryConversationId) ?? joined ?? mine[0];
73554
74025
  if (!mine.some((r2) => r2.id === this._persisted.primaryConversationId)) {
@@ -73742,7 +74213,7 @@ ${text}`;
73742
74213
  }
73743
74214
  this._heartbeatCallback = null;
73744
74215
  }
73745
- async sendStatusAlert(alert) {
74216
+ async sendStatusAlert(alert, routing) {
73746
74217
  const priority = alert.severity === "error" || alert.severity === "critical" ? "high" : "normal";
73747
74218
  const envelope = {
73748
74219
  title: alert.title,
@@ -73756,52 +74227,61 @@ ${text}`;
73756
74227
  await this.send(
73757
74228
  JSON.stringify(envelope),
73758
74229
  {
74230
+ conversationId: routing?.conversationId,
74231
+ audience: routing?.audience,
73759
74232
  messageType: "status_alert",
73760
74233
  priority,
73761
74234
  metadata: { severity: alert.severity }
73762
74235
  }
73763
74236
  );
73764
74237
  }
73765
- async sendArtifact(artifact) {
74238
+ async sendArtifact(artifact, routing) {
73766
74239
  if (this._state !== "ready" || this._sessions.size === 0 || !this._ws) {
73767
74240
  throw new Error("Channel is not ready");
73768
74241
  }
73769
- const attachMeta = await this._uploadAttachment(artifact.filePath, this._primaryConversationId);
73770
- const envelope = JSON.stringify({
73771
- type: "artifact",
73772
- blob_id: attachMeta.blobId,
73773
- blob_url: attachMeta.blobUrl,
73774
- filename: artifact.filename,
73775
- mime_type: artifact.mimeType,
73776
- size_bytes: attachMeta.size,
73777
- description: artifact.description,
73778
- attachment: attachMeta
73779
- });
73780
74242
  const messageGroupId = randomUUID4();
73781
74243
  const pendingWsSends = [];
73782
- for (const [convId, session] of this._sessions) {
73783
- if (!session.activated) continue;
73784
- const encrypted = session.ratchet.encrypt(envelope);
73785
- const transport = encryptedMessageToTransport(encrypted);
73786
- pendingWsSends.push(
73787
- JSON.stringify({
73788
- event: "message",
73789
- data: {
73790
- conversation_id: convId,
73791
- header_blob: transport.header_blob,
73792
- ciphertext: transport.ciphertext,
73793
- message_group_id: messageGroupId,
73794
- message_type: "artifact_share"
73795
- }
73796
- })
73797
- );
74244
+ const buckets = this._ownerFileRecipients(routing);
74245
+ if (buckets.length === 0) {
74246
+ console.warn("[SecureChannel] sendArtifact(): no live session for the person involved \u2014 nothing sent");
74247
+ throw new Error("No conversation is ready to receive this file");
74248
+ }
74249
+ for (const bucket of buckets) {
74250
+ const attachMeta = await this._uploadAttachment(artifact.filePath, bucket.uploadConvId);
74251
+ const envelope = JSON.stringify({
74252
+ type: "artifact",
74253
+ blob_id: attachMeta.blobId,
74254
+ blob_url: attachMeta.blobUrl,
74255
+ filename: artifact.filename,
74256
+ mime_type: artifact.mimeType,
74257
+ size_bytes: attachMeta.size,
74258
+ description: artifact.description,
74259
+ attachment: attachMeta
74260
+ });
74261
+ for (const convId of bucket.convIds) {
74262
+ const session = this._sessions.get(convId);
74263
+ const encrypted = session.ratchet.encrypt(envelope);
74264
+ const transport = encryptedMessageToTransport(encrypted);
74265
+ pendingWsSends.push(
74266
+ JSON.stringify({
74267
+ event: "message",
74268
+ data: {
74269
+ conversation_id: convId,
74270
+ header_blob: transport.header_blob,
74271
+ ciphertext: transport.ciphertext,
74272
+ message_group_id: messageGroupId,
74273
+ message_type: "artifact_share"
74274
+ }
74275
+ })
74276
+ );
74277
+ }
73798
74278
  }
73799
74279
  await this._persistState();
73800
74280
  for (const frame of pendingWsSends) {
73801
74281
  this._ws.send(frame);
73802
74282
  }
73803
74283
  }
73804
- async sendActionConfirmation(confirmation) {
74284
+ async sendActionConfirmation(confirmation, routing) {
73805
74285
  const envelope = {
73806
74286
  type: "action_confirmation",
73807
74287
  action: confirmation.action,
@@ -73812,6 +74292,8 @@ ${text}`;
73812
74292
  await this.send(
73813
74293
  JSON.stringify(envelope),
73814
74294
  {
74295
+ conversationId: routing?.conversationId,
74296
+ audience: routing?.audience,
73815
74297
  messageType: "action_confirmation",
73816
74298
  metadata: { status: confirmation.status }
73817
74299
  }
@@ -73917,9 +74399,23 @@ ${text}`;
73917
74399
  } else {
73918
74400
  return { ok: false, destination: { kind: "owner" }, error: "Unknown target kind", timestamp: ts };
73919
74401
  }
74402
+ if (resolved.kind === "owner" && options?.refuseIfAmbiguous && this.isUntargetedOwnerAmbiguous(options)) {
74403
+ console.log(`[deliver] target=owner content=${content.type} result=REFUSED: ambiguous (several people mid-turn)`);
74404
+ return { ok: false, ambiguous: true, destination: resolved, error: AMBIGUOUS_OWNER_ERROR, timestamp: ts };
74405
+ }
73920
74406
  let dedupeKey = null;
73921
74407
  try {
73922
- dedupeKey = outboundDedupeKey(resolved, content, options);
74408
+ let audienceTag;
74409
+ try {
74410
+ audienceTag = resolved.kind === "owner" && options?.conversationId === void 0 ? this._audienceTag(options) : void 0;
74411
+ } catch {
74412
+ audienceTag = void 0;
74413
+ }
74414
+ dedupeKey = outboundDedupeKey(
74415
+ resolved,
74416
+ content,
74417
+ audienceTag ? { ...options, conversationId: audienceTag } : options
74418
+ );
73923
74419
  if (dedupeKey) {
73924
74420
  const now = Date.now();
73925
74421
  const recent = this._recentDeliveries ??= /* @__PURE__ */ new Map();
@@ -73939,6 +74435,10 @@ ${text}`;
73939
74435
  }
73940
74436
  try {
73941
74437
  let decisionId;
74438
+ const ownerRouting = {
74439
+ conversationId: options?.conversationId,
74440
+ audience: options?.audience
74441
+ };
73942
74442
  if (content.type === "text") {
73943
74443
  if (resolved.kind === "room") {
73944
74444
  await this.sendToRoom(resolved.id, content.text, {
@@ -73957,6 +74457,7 @@ ${text}`;
73957
74457
  } else {
73958
74458
  await this.send(content.text, {
73959
74459
  conversationId: options?.conversationId,
74460
+ audience: options?.audience,
73960
74461
  topicId: options?.topicId,
73961
74462
  messageType: options?.metadata?.message_type,
73962
74463
  priority: options?.priority,
@@ -73969,7 +74470,7 @@ ${text}`;
73969
74470
  console.log(`[deliver] target=${resolved.kind}:${resolved.id} content=decision_request result=FAIL: ${err}`);
73970
74471
  return { ok: false, destination: resolved, error: err, timestamp: ts };
73971
74472
  }
73972
- decisionId = await this.sendDecisionRequest(content.request);
74473
+ decisionId = await this.sendDecisionRequest(content.request, ownerRouting);
73973
74474
  } else if (content.type === "status_alert") {
73974
74475
  if (resolved.kind === "room") {
73975
74476
  const envelope = {
@@ -73987,7 +74488,7 @@ ${text}`;
73987
74488
  metadata: { severity: content.alert.severity }
73988
74489
  });
73989
74490
  } else if (resolved.kind === "owner") {
73990
- await this.sendStatusAlert(content.alert);
74491
+ await this.sendStatusAlert(content.alert, ownerRouting);
73991
74492
  } else {
73992
74493
  return { ok: false, destination: resolved, error: "Status alerts cannot be sent to A2A targets", timestamp: ts };
73993
74494
  }
@@ -73995,7 +74496,7 @@ ${text}`;
73995
74496
  if (resolved.kind === "room") {
73996
74497
  await this.sendActionConfirmationToRoom(resolved.id, content.confirmation);
73997
74498
  } else if (resolved.kind === "owner") {
73998
- await this.sendActionConfirmation(content.confirmation);
74499
+ await this.sendActionConfirmation(content.confirmation, ownerRouting);
73999
74500
  } else {
74000
74501
  return { ok: false, destination: resolved, error: "Action confirmations cannot be sent to A2A targets", timestamp: ts };
74001
74502
  }
@@ -74003,13 +74504,14 @@ ${text}`;
74003
74504
  if (resolved.kind !== "owner") {
74004
74505
  return { ok: false, destination: resolved, error: "Artifacts can only be sent to owner", timestamp: ts };
74005
74506
  }
74006
- await this.sendArtifact(content.artifact);
74507
+ await this.sendArtifact(content.artifact, ownerRouting);
74007
74508
  } else if (content.type === "attachment") {
74008
74509
  if (resolved.kind !== "owner") {
74009
74510
  return { ok: false, destination: resolved, error: "Attachments can only be sent to owner", timestamp: ts };
74010
74511
  }
74011
74512
  await this.sendWithAttachment(content.text, content.filePath, {
74012
- topicId: options?.topicId
74513
+ topicId: options?.topicId,
74514
+ ...ownerRouting
74013
74515
  });
74014
74516
  }
74015
74517
  const targetLabel = resolved.kind === "owner" ? "owner" : `${resolved.kind}:${resolved.id?.slice(0, 8)}...`;
@@ -75182,7 +75684,7 @@ ${text}`;
75182
75684
  agentVersion: this.config.agentVersion ?? "0.0.0",
75183
75685
  // __AV_VERSION__ is injected by esbuild from package.json at build time.
75184
75686
  // Falls back to "0.0.0-dev" in non-bundled contexts (tests).
75185
- pluginVersion: true ? "0.23.51" : "0.0.0-dev"
75687
+ pluginVersion: true ? "0.23.52" : "0.0.0-dev"
75186
75688
  });
75187
75689
  this._telemetryReporter.startAutoFlush(3e4);
75188
75690
  }
@@ -75510,7 +76012,7 @@ ${text}`;
75510
76012
  agentVersion: this.config.agentVersion ?? "0.0.0",
75511
76013
  // __AV_VERSION__ is injected by esbuild from package.json at build time.
75512
76014
  // Falls back to "0.0.0-dev" in non-bundled contexts (tests).
75513
- pluginVersion: true ? "0.23.51" : "0.0.0-dev"
76015
+ pluginVersion: true ? "0.23.52" : "0.0.0-dev"
75514
76016
  });
75515
76017
  this._telemetryReporter.startAutoFlush(3e4);
75516
76018
  }
@@ -76051,9 +76553,18 @@ ${text}`;
76051
76553
  messageType,
76052
76554
  { groupId: dmGroupId, conversationId: convId }
76053
76555
  );
76556
+ const dmConvId = convId ?? this._conversationOfGroup(dmGroupId);
76557
+ this._noteInboundDm(dmConvId, dmGroupId, { createdAt: data.created_at, senderDeviceId });
76558
+ this._reconcileForUnmappedGroup(dmGroupId);
76054
76559
  const metadata = {
76055
76560
  messageId: data.message_id ?? `mls_${Date.now()}`,
76056
- conversationId: convId ?? this._primaryConversationId,
76561
+ // A frame on a KNOWN group that no conversation maps yet is not the
76562
+ // primary person's: leave the conversation unnamed rather than hand
76563
+ // the reply to someone else; `conversationGroupId` still places it.
76564
+ conversationId: dmConvId ?? (dmGroupId ? void 0 : this._primaryConversationId),
76565
+ // #1418: the group this message decrypted under — attested, so a turn
76566
+ // answers here even when the local map is stale.
76567
+ conversationGroupId: dmGroupId,
76057
76568
  timestamp: data.created_at ?? (/* @__PURE__ */ new Date()).toISOString(),
76058
76569
  topicId,
76059
76570
  // #621: positive attestation that this decrypted under the OWNER'S 1:1
@@ -76308,6 +76819,13 @@ ${messageText}`;
76308
76819
  // envelope text before the fold; `emitText` is the folded copy.
76309
76820
  caption: messageText
76310
76821
  };
76822
+ if (!roomId) {
76823
+ this._noteInboundDm(convId, void 0, {
76824
+ createdAt: msgData.created_at,
76825
+ senderDeviceId: msgData.sender_device_id
76826
+ });
76827
+ this._reconcileForUnmappedConversation(convId);
76828
+ }
76311
76829
  this.emit("message", emitText, metadata);
76312
76830
  Promise.resolve(this.config.onMessage?.(emitText, metadata)).catch((err) => {
76313
76831
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -76456,34 +76974,41 @@ ${baseText}`;
76456
76974
  if (this._state !== "ready" || this._sessions.size === 0 || !this._ws) {
76457
76975
  throw new Error("Channel is not ready");
76458
76976
  }
76459
- const attachMeta = await this._uploadAttachment(filePath, this._primaryConversationId);
76460
76977
  const messageGroupId = randomUUID4();
76461
76978
  const pendingWsSends = [];
76462
76979
  const frameHistoryContexts = [];
76463
- for (const [convId, session] of this._sessions) {
76464
- if (!session.activated) continue;
76465
- const topicId = this._topicForFrame(void 0, convId, options?.topicId, false, false);
76466
- const envelope = JSON.stringify({
76467
- type: "message",
76468
- text: plaintext,
76469
- topicId,
76470
- attachment: attachMeta
76471
- });
76472
- const encrypted = session.ratchet.encrypt(envelope);
76473
- const transport = encryptedMessageToTransport(encrypted);
76474
- pendingWsSends.push(
76475
- JSON.stringify({
76476
- event: "message",
76477
- data: {
76478
- conversation_id: convId,
76479
- header_blob: transport.header_blob,
76480
- ciphertext: transport.ciphertext,
76481
- message_group_id: messageGroupId,
76482
- topic_id: topicId
76483
- }
76484
- })
76485
- );
76486
- frameHistoryContexts.push(this._dmHistoryContext(topicId, void 0, convId));
76980
+ const buckets = this._ownerFileRecipients(options);
76981
+ if (buckets.length === 0) {
76982
+ console.warn("[SecureChannel] sendWithAttachment(): no live session for the person involved \u2014 nothing sent");
76983
+ throw new Error("No conversation is ready to receive this file");
76984
+ }
76985
+ for (const bucket of buckets) {
76986
+ const attachMeta = await this._uploadAttachment(filePath, bucket.uploadConvId);
76987
+ for (const convId of bucket.convIds) {
76988
+ const session = this._sessions.get(convId);
76989
+ const topicId = this._topicForFrame(void 0, convId, options?.topicId, false, false);
76990
+ const envelope = JSON.stringify({
76991
+ type: "message",
76992
+ text: plaintext,
76993
+ topicId,
76994
+ attachment: attachMeta
76995
+ });
76996
+ const encrypted = session.ratchet.encrypt(envelope);
76997
+ const transport = encryptedMessageToTransport(encrypted);
76998
+ pendingWsSends.push(
76999
+ JSON.stringify({
77000
+ event: "message",
77001
+ data: {
77002
+ conversation_id: convId,
77003
+ header_blob: transport.header_blob,
77004
+ ciphertext: transport.ciphertext,
77005
+ message_group_id: messageGroupId,
77006
+ topic_id: topicId
77007
+ }
77008
+ })
77009
+ );
77010
+ frameHistoryContexts.push(this._dmHistoryContext(topicId, void 0, convId));
77011
+ }
76487
77012
  }
76488
77013
  await this._persistState();
76489
77014
  let deliveredFrames = 0;
@@ -76643,10 +77168,15 @@ ${baseText}`;
76643
77168
  `[SecureChannel] New owner device linked: ${event.owner_device_id.slice(0, 8)}...`
76644
77169
  );
76645
77170
  try {
77171
+ if (event.group_id && !this._sessionGroupIds.has(event.conversation_id)) {
77172
+ this._sessionGroupIds.set(event.conversation_id, event.group_id);
77173
+ this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
77174
+ }
76646
77175
  if (!event.owner_identity_public_key) {
76647
77176
  console.error(
76648
77177
  `[SecureChannel] device_linked event missing owner keys for conv ${event.conversation_id.slice(0, 8)}...`
76649
77178
  );
77179
+ await this._persistState();
76650
77180
  return;
76651
77181
  }
76652
77182
  const identity = this._persisted.identityKeypair;
@@ -76681,10 +77211,6 @@ ${baseText}`;
76681
77211
  if (event.owner_hub_id) {
76682
77212
  this._persisted.ownerHubId = event.owner_hub_id;
76683
77213
  }
76684
- if (event.group_id && !this._sessionGroupIds.has(event.conversation_id)) {
76685
- this._sessionGroupIds.set(event.conversation_id, event.group_id);
76686
- this._persisted.conversationGroupIds = Object.fromEntries(this._sessionGroupIds);
76687
- }
76688
77214
  await this._persistState();
76689
77215
  console.log(
76690
77216
  `[SecureChannel] Session initialized for device ${event.owner_device_id.slice(0, 8)}... (conv ${event.conversation_id.slice(0, 8)}...)`
@@ -78354,6 +78880,10 @@ ${baseText}`;
78354
78880
  await this._persistState();
78355
78881
  }
78356
78882
  console.log(`[SecureChannel] Joined shared 1:1 MLS group for group ${conversationGroupId.slice(0, 8)} via Welcome (epoch=${mgr.epoch})`);
78883
+ if (!this._isMappedGroup(conversationGroupId)) {
78884
+ this._welcomedUnmapped.set(conversationGroupId, Date.now());
78885
+ }
78886
+ this._reconcileForUnmappedGroup(conversationGroupId);
78357
78887
  await this._flushMlsHold(conversationGroupId);
78358
78888
  return;
78359
78889
  }
@@ -78995,6 +79525,7 @@ ${baseText}`;
78995
79525
  ownerDm1to1: true,
78996
79526
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
78997
79527
  };
79528
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
78998
79529
  this.emit("message", messageText, metadata);
78999
79530
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
79000
79531
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -79601,6 +80132,7 @@ ${baseText}`;
79601
80132
  ownerDm1to1: true,
79602
80133
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
79603
80134
  };
80135
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
79604
80136
  this.emit("message", messageText, metadata);
79605
80137
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
79606
80138
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -79921,6 +80453,7 @@ ${baseText}`;
79921
80453
  ownerDm1to1: true,
79922
80454
  ...decisionReply ? { messageType: "decision_response", decision: decisionReply } : {}
79923
80455
  };
80456
+ this._noteInboundDm(msg.conversation_id, void 0, { createdAt: msg.created_at, senderDeviceId: msg.sender_device_id });
79924
80457
  this.emit("message", messageText, metadata);
79925
80458
  Promise.resolve(this.config.onMessage?.(messageText, metadata)).catch((err) => {
79926
80459
  console.error("[SecureChannel] onMessage callback error:", err);
@@ -80941,7 +81474,7 @@ ${actionsText}`);
80941
81474
  "use strict";
80942
81475
  init_llm_response_parser();
80943
81476
  init_llm_cost();
80944
- traceStore = new AsyncLocalStorage();
81477
+ traceStore = new AsyncLocalStorage2();
80945
81478
  }
80946
81479
  });
80947
81480
  init_tool_audit = __esm2({
@@ -101689,7 +102222,7 @@ data:
101689
102222
  await init_skill_telemetry();
101690
102223
  await init_policy_enforcer();
101691
102224
  init_room_protocol();
101692
- VERSION = true ? "0.23.51" : "0.0.0-dev";
102225
+ VERSION = true ? "0.23.52" : "0.0.0-dev";
101693
102226
  }
101694
102227
  });
101695
102228
  await init_index();
@@ -103448,13 +103981,28 @@ var RoomHushState = class {
103448
103981
  return t2 !== void 0 && now < t2;
103449
103982
  }
103450
103983
  };
103984
+ async function sendDm(channel, t2, text) {
103985
+ if ((t2.conversationId || t2.groupId) && typeof channel.runForConversation === "function") {
103986
+ await channel.runForConversation(
103987
+ t2.conversationId,
103988
+ () => channel.send(text),
103989
+ t2.groupId ? { groupId: t2.groupId } : void 0
103990
+ );
103991
+ } else {
103992
+ await channel.send(text);
103993
+ }
103994
+ }
103451
103995
  var ActiveTarget = class {
103452
103996
  target = null;
103453
103997
  setRoom(roomId) {
103454
103998
  this.target = { kind: "room", roomId };
103455
103999
  }
103456
- setDm() {
103457
- this.target = { kind: "dm" };
104000
+ setDm(conversationId, groupId) {
104001
+ this.target = {
104002
+ kind: "dm",
104003
+ ...conversationId ? { conversationId } : {},
104004
+ ...groupId ? { groupId } : {}
104005
+ };
103458
104006
  }
103459
104007
  get current() {
103460
104008
  return this.target;
@@ -103467,7 +104015,7 @@ var ActiveTarget = class {
103467
104015
  if (!t2) return;
103468
104016
  try {
103469
104017
  if (t2.kind === "room") await channel.sendToRoom(t2.roomId, text);
103470
- else await channel.send(text);
104018
+ else await sendDm(channel, t2, text);
103471
104019
  log(`said to ${where}`);
103472
104020
  } catch (err) {
103473
104021
  log(`send failed to ${where}: ${err instanceof Error ? err.message : String(err)}`);
@@ -103583,7 +104131,7 @@ function wireBridge(channel, session, target, opts = {}) {
103583
104131
  } else {
103584
104132
  log("inbound 1:1 DM from owner");
103585
104133
  }
103586
- target.setDm();
104134
+ target.setDm(metadata?.conversationId, metadata?.conversationGroupId);
103587
104135
  session.push(text, target.snapshotReply(channel, log), { autoReplyOnText: ownerAttested });
103588
104136
  });
103589
104137
  }
@@ -103634,7 +104182,7 @@ function mkdir700(path2) {
103634
104182
  chmodSync5(path2, 448);
103635
104183
  }
103636
104184
  function packageVersion() {
103637
- return true ? "0.1.26" : void 0;
104185
+ return true ? "0.1.27" : void 0;
103638
104186
  }
103639
104187
  function helpText(version2) {
103640
104188
  return [