@agentvault/openai-bridge 0.1.13 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -22,6 +22,8 @@ __export(dist_exports, {
22
22
  PolicyEnforcer: () => PolicyEnforcer,
23
23
  SecureChannel: () => SecureChannel,
24
24
  TOOL_INVOKE_SPAN_NAME: () => TOOL_INVOKE_SPAN_NAME,
25
+ TURN_FAILURE_CODES: () => TURN_FAILURE_CODES,
26
+ TurnFailure: () => TurnFailure,
25
27
  VERSION: () => VERSION,
26
28
  agentVaultPlugin: () => agentVaultPlugin,
27
29
  buildToolInvokeSpan: () => buildToolInvokeSpan,
@@ -42,6 +44,7 @@ __export(dist_exports, {
42
44
  handleTargetsRequest: () => handleTargetsRequest,
43
45
  historyRecoveryCodePath: () => historyRecoveryCodePath,
44
46
  invokeSkill: () => invokeSkill,
47
+ isOwnerNotice: () => isOwnerNotice,
45
48
  isUsingManagedRoutes: () => managedRoutesRequested,
46
49
  listAccountIds: () => listAccountIds,
47
50
  listTargets: () => listTargets,
@@ -52,10 +55,12 @@ __export(dist_exports, {
52
55
  mergeSkills: () => mergeSkills,
53
56
  offerHistoryRecoveryConfiguration: () => offerHistoryRecoveryConfiguration,
54
57
  owesRoomReply: () => owesRoomReply,
58
+ ownerNoticeFor: () => ownerNoticeFor,
55
59
  parseMentions: () => parseMentions,
56
60
  parseSkillMd: () => parseSkillMd,
57
61
  parseTarget: () => parseTarget,
58
62
  readMaskedHistoryRecoveryCode: () => readMaskedHistoryRecoveryCode,
63
+ reportModelTurnFailure: () => reportModelTurnFailure,
59
64
  reportSkillInvocation: () => reportSkillInvocation,
60
65
  reportToolInvoke: () => reportToolInvoke,
61
66
  requestHeartbeatNow: () => requestHeartbeatNow,
@@ -4153,8 +4158,8 @@ async function generateBackupCode() {
4153
4158
  return code;
4154
4159
  }
4155
4160
  function formatBackupCode(code) {
4156
- const clean5 = code.replace(/[-\s]/g, "").toUpperCase();
4157
- return clean5.match(/.{1,4}/g)?.join("-") ?? clean5;
4161
+ const clean6 = code.replace(/[-\s]/g, "").toUpperCase();
4162
+ return clean6.match(/.{1,4}/g)?.join("-") ?? clean6;
4158
4163
  }
4159
4164
  function normalizeBackupCode(input) {
4160
4165
  return input.replace(/[-\s]/g, "").toUpperCase();
@@ -11834,7 +11839,7 @@ function ownIdentity() {
11834
11839
  return `${PACKAGE}@${v2}`;
11835
11840
  }
11836
11841
  function buildSha() {
11837
- const raw = true ? "400b3a2" : "";
11842
+ const raw = true ? "0e95fe8" : "";
11838
11843
  const cleaned = (raw ?? "").trim();
11839
11844
  return !cleaned || cleaned === "unknown" ? null : cleaned;
11840
11845
  }
@@ -18527,7 +18532,55 @@ function reportSkillInvocation(opts) {
18527
18532
  spanBuffer.push(span);
18528
18533
  return span;
18529
18534
  }
18530
- 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, GENERIC_AGENT_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, DECRYPTED_IDS_FILE, 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, NOT_A_MEMBER_DETAIL, 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, KP_BACKOFF_INITIAL_MS, KP_BACKOFF_MAX_MS, KP_RACE_RETRY_MS, KP_RACE_RETRY_LIMIT, consoleLogger, short, WelcomeKeyPackageBackoff, init_welcome_kp_backoff, 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, _heartbeatFn, init_openclaw_compat, TOOL_INVOKE_SPAN_NAME, UNCLASSIFIED_ERROR, KNOWN_TOOL_ERROR_CODES, KNOWN_CODES, CLASS_NAME_RE, TOOL_NAME_RE, ERROR_TEXT_CODES, _conversation, init_tool_telemetry, 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;
18535
+ function asTurnFailureCode(code) {
18536
+ return typeof code === "string" && CODES.has(code) ? code : "model_error";
18537
+ }
18538
+ function clean5(value, max) {
18539
+ if (typeof value !== "string") return "";
18540
+ return value.replace(/@/g, "").replace(/\s+/g, " ").trim().slice(0, max).trim();
18541
+ }
18542
+ function ownerNoticeFor(code, ctx) {
18543
+ const a2 = clean5(ctx?.agentName, 80) || "Your agent";
18544
+ const p2 = clean5(ctx?.provider, 40) || "AI provider";
18545
+ const head = `${a2} couldn't answer this message`;
18546
+ switch (asTurnFailureCode(code)) {
18547
+ case "provider_auth_failed":
18548
+ return `${head}: its ${p2} sign-in expired. Sign in again on the agent's computer.`;
18549
+ case "provider_billing":
18550
+ return `${head}: its ${p2} account is out of credit or has a billing problem.`;
18551
+ case "model_rate_limited":
18552
+ return `${head}: it is being rate-limited by ${p2}. Try again in a few minutes.`;
18553
+ case "model_unavailable":
18554
+ return `${head}: the model it is set to use is no longer available.`;
18555
+ case "provider_unreachable":
18556
+ return `${head}: it can't reach ${p2} right now.`;
18557
+ case "ai_tool_unsupported":
18558
+ return `${head}: its AI tool needs attention on its computer.`;
18559
+ case "plan_limit_reached":
18560
+ return `${head}: it has reached its ${p2} plan's usage limit.`;
18561
+ default:
18562
+ return `${head}.`;
18563
+ }
18564
+ }
18565
+ function isOwnerNotice(text) {
18566
+ return typeof text === "string" && NOTICE_RE.test(text);
18567
+ }
18568
+ function reportModelTurnFailure(sink, report) {
18569
+ try {
18570
+ const code = asTurnFailureCode(report.code);
18571
+ const isPlan = code === "plan_limit_reached";
18572
+ reportToolInvoke(sink, {
18573
+ toolName: "model_turn",
18574
+ outcome: "error",
18575
+ errorKind: code,
18576
+ durationMs: report.durationMs,
18577
+ conversation: isPlan ? { kind: "unknown" } : report.conversation,
18578
+ ...isPlan && report.limitResetsAt !== void 0 ? { limitResetsAt: report.limitResetsAt } : {}
18579
+ });
18580
+ } catch {
18581
+ }
18582
+ }
18583
+ 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, GENERIC_AGENT_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, DECRYPTED_IDS_FILE, 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, NOT_A_MEMBER_DETAIL, 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, KP_BACKOFF_INITIAL_MS, KP_BACKOFF_MAX_MS, KP_RACE_RETRY_MS, KP_RACE_RETRY_LIMIT, consoleLogger, short, WelcomeKeyPackageBackoff, init_welcome_kp_backoff, 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, _heartbeatFn, init_openclaw_compat, TOOL_INVOKE_SPAN_NAME, UNCLASSIFIED_ERROR, KNOWN_TOOL_ERROR_CODES, KNOWN_CODES, CLASS_NAME_RE, TOOL_NAME_RE, ERROR_TEXT_CODES, _conversation, init_tool_telemetry, 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, TURN_FAILURE_CODES, CODES, TurnFailure, NOTICE_RE, init_turn_failure, VERSION, init_index;
18531
18584
  var init_dist = __esm({
18532
18585
  async "../plugin/dist/index.js"() {
18533
18586
  "use strict";
@@ -71529,6 +71582,12 @@ var init_dist = __esm({
71529
71582
  // #1467: a Muse turn failed — Meta answered 429, or anything else.
71530
71583
  "model_rate_limited",
71531
71584
  "model_error",
71585
+ // #1560: a failed model turn named for the owner (turn-failure.ts). Never send codes.
71586
+ "provider_auth_failed",
71587
+ "provider_billing",
71588
+ "model_unavailable",
71589
+ "provider_unreachable",
71590
+ "ai_tool_unsupported",
71532
71591
  UNCLASSIFIED_ERROR
71533
71592
  ];
71534
71593
  KNOWN_CODES = new Set(KNOWN_TOOL_ERROR_CODES);
@@ -73496,6 +73555,33 @@ ${text}`,
73496
73555
  const tag = `room:${roomId}`;
73497
73556
  return history.filter((e) => e.topicId === tag).slice(-maxMessages);
73498
73557
  }
73558
+ /**
73559
+ * #1560 — recent history of one person's 1:1 chat, for LLM context
73560
+ * injection by a bridge. Scoped by the group the inbound frame DECRYPTED
73561
+ * under (`opts.groupId`, #1416/#1418): never another person's entries, and
73562
+ * never a room's or an A2A channel's. Time-ordered, last `maxMessages`
73563
+ * (capped at 100). Synchronous and pure: no new storage, no network.
73564
+ */
73565
+ getConversationHistory(conversationId, maxMessages = 20, opts = {}) {
73566
+ if (!(maxMessages > 0)) return [];
73567
+ if (this._knownDmGroups().size === 0) return [];
73568
+ if (opts.groupId) {
73569
+ const convs = this._conversationsOfGroup(opts.groupId);
73570
+ if (convs.length > 0 && !convs.includes(conversationId)) return [];
73571
+ }
73572
+ return this._historyForCatchup("dm", void 0, void 0, {
73573
+ groupId: opts.groupId,
73574
+ conversationId
73575
+ }).slice(-Math.min(maxMessages, 100));
73576
+ }
73577
+ /** Every conversation mapped to `groupId` (one per browser of its person). */
73578
+ _conversationsOfGroup(groupId) {
73579
+ const out = [];
73580
+ for (const [convId, gid] of this._sessionGroupIds) {
73581
+ if (gid === groupId) out.push(convId);
73582
+ }
73583
+ return out;
73584
+ }
73499
73585
  /**
73500
73586
  * Encrypt and send a message to ALL owner devices (fanout).
73501
73587
  * Each session gets the same plaintext encrypted independently.
@@ -103081,6 +103167,34 @@ data:
103081
103167
  };
103082
103168
  }
103083
103169
  });
103170
+ init_turn_failure = __esm2({
103171
+ "src/turn-failure.ts"() {
103172
+ "use strict";
103173
+ init_tool_telemetry();
103174
+ TURN_FAILURE_CODES = [
103175
+ "provider_auth_failed",
103176
+ "provider_billing",
103177
+ "model_rate_limited",
103178
+ "model_unavailable",
103179
+ "provider_unreachable",
103180
+ "ai_tool_unsupported",
103181
+ "plan_limit_reached",
103182
+ "model_error"
103183
+ ];
103184
+ CODES = new Set(TURN_FAILURE_CODES);
103185
+ TurnFailure = class extends Error {
103186
+ code;
103187
+ exitCode;
103188
+ constructor(code, opts = {}, message = "Codex turn failed") {
103189
+ super(message);
103190
+ this.name = "TurnFailure";
103191
+ this.code = asTurnFailureCode(code);
103192
+ if (opts.exitCode !== void 0) this.exitCode = opts.exitCode;
103193
+ }
103194
+ };
103195
+ NOTICE_RE = /^[^\n@]{1,120} couldn't answer this message(?:\.|: [^\n]{1,200})$/;
103196
+ }
103197
+ });
103084
103198
  init_index = __esm2({
103085
103199
  async "src/index.ts"() {
103086
103200
  await init_channel();
@@ -103101,6 +103215,7 @@ data:
103101
103215
  await init_policy_enforcer();
103102
103216
  init_room_protocol();
103103
103217
  init_tool_telemetry();
103218
+ init_turn_failure();
103104
103219
  VERSION = true ? "0.23.64" : "0.0.0-dev";
103105
103220
  }
103106
103221
  });
@@ -103115,18 +103230,32 @@ import { join as join8 } from "node:path";
103115
103230
  async function findRollout(layout, id) {
103116
103231
  let visited = 0;
103117
103232
  const matches = [];
103233
+ let unwalked = false;
103234
+ const root3 = join8(layout.codex, "sessions");
103118
103235
  async function walk(directory, depth) {
103119
- const handle = await opendir(directory);
103236
+ let handle;
103237
+ try {
103238
+ handle = await opendir(directory);
103239
+ } catch (error2) {
103240
+ if (depth === 0 && error2.code === "ENOENT")
103241
+ throw new RolloutMissing();
103242
+ throw error2;
103243
+ }
103120
103244
  for await (const entry of handle) {
103121
103245
  if (++visited > 4096 || entry.isSymbolicLink())
103122
103246
  throw invalid();
103123
- if (entry.isDirectory() && depth < 3)
103124
- await walk(join8(directory, entry.name), depth + 1);
103125
- else if (entry.isFile() && entry.name.endsWith(`-${id}.jsonl`))
103247
+ if (entry.isDirectory()) {
103248
+ if (depth < 3)
103249
+ await walk(join8(directory, entry.name), depth + 1);
103250
+ else
103251
+ unwalked = true;
103252
+ } else if (entry.isFile() && entry.name.endsWith(`-${id}.jsonl`))
103126
103253
  matches.push(join8(directory, entry.name));
103127
103254
  }
103128
103255
  }
103129
- await walk(join8(layout.codex, "sessions"), 0);
103256
+ await walk(root3, 0);
103257
+ if (matches.length === 0)
103258
+ throw unwalked ? invalid() : new RolloutMissing();
103130
103259
  if (matches.length !== 1)
103131
103260
  throw invalid();
103132
103261
  return matches[0];
@@ -103207,19 +103336,26 @@ async function verifyFinalReply(layout, id, stdoutText, before) {
103207
103336
  throw invalid();
103208
103337
  }
103209
103338
  }
103210
- var UUID, invalid;
103339
+ var UUID, INVALID2, invalid, RolloutMissing;
103211
103340
  var init_rollout = __esm({
103212
103341
  "src/rollout.ts"() {
103213
103342
  "use strict";
103214
103343
  UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
103215
- invalid = () => new Error("Codex final reply could not be verified");
103344
+ INVALID2 = "Codex final reply could not be verified";
103345
+ invalid = () => new Error(INVALID2);
103346
+ RolloutMissing = class extends Error {
103347
+ constructor() {
103348
+ super(INVALID2);
103349
+ this.name = "RolloutMissing";
103350
+ }
103351
+ };
103216
103352
  }
103217
103353
  });
103218
103354
 
103219
103355
  // src/driver.ts
103220
103356
  import { spawn, execFile } from "node:child_process";
103221
103357
  import { constants as constants4 } from "node:fs";
103222
- import { mkdir as mkdir5, chmod as chmod3, readFile as readFile6, writeFile as writeFile4, rename as rename5, access, realpath } from "node:fs/promises";
103358
+ import { mkdir as mkdir5, chmod as chmod3, readFile as readFile6, writeFile as writeFile4, rename as rename5, access, realpath, link, unlink as unlink2 } from "node:fs/promises";
103223
103359
  import { createHash as createHash2, randomUUID as randomUUID5 } from "node:crypto";
103224
103360
  import { join as join9, isAbsolute } from "node:path";
103225
103361
  import { StringDecoder } from "node:string_decoder";
@@ -103243,7 +103379,7 @@ function childEnvironment(layout) {
103243
103379
  }
103244
103380
  function buildInvocation(layout, sessionId) {
103245
103381
  if (sessionId && !UUID2.test(sessionId))
103246
- throw new Error("Invalid stored Codex session");
103382
+ throw new TurnFailure("model_error", {}, "Invalid stored Codex session");
103247
103383
  const args = [
103248
103384
  "exec",
103249
103385
  "--json",
@@ -103286,16 +103422,65 @@ async function resolveCodex(path2 = process.env.PATH ?? "") {
103286
103422
  } catch {
103287
103423
  }
103288
103424
  }
103289
- throw new Error(`Install Codex CLI ${SUPPORTED_CODEX_VERSION} and put codex on PATH`);
103425
+ throw new TurnFailure("ai_tool_unsupported", {}, `Install Codex CLI ${SUPPORTED_CODEX_VERSION} and put codex on PATH`);
103290
103426
  }
103291
- async function checkVersion(binary, layout) {
103427
+ async function checkVersion(binary, layout, timeoutMs = 5e3) {
103292
103428
  if (!isAbsolute(binary))
103293
- throw new Error("Codex executable must be absolute");
103429
+ throw new TurnFailure("ai_tool_unsupported", {}, "Codex executable must be absolute");
103294
103430
  const version2 = await new Promise((resolve4, reject) => {
103295
- execFile(binary, ["--version"], { cwd: layout.work, env: childEnvironment(layout), timeout: 5e3, maxBuffer: 4096 }, (error2, stdout) => error2 ? reject(new Error("Cannot run Codex CLI; install the native 0.154.0 executable (the isolated child PATH is /usr/bin:/bin)")) : resolve4(stdout.trim()));
103431
+ execFile(binary, ["--version"], { cwd: layout.work, env: childEnvironment(layout), timeout: timeoutMs, maxBuffer: 4096 }, (error2, stdout) => {
103432
+ if (!error2)
103433
+ resolve4(stdout.trim());
103434
+ else if (error2.killed === true && error2.signal === "SIGTERM" && error2.code !== "ERR_CHILD_PROCESS_STDIO_MAXBUFFER")
103435
+ reject(new TurnFailure("model_error", {}, "Codex CLI did not answer --version in time"));
103436
+ else
103437
+ reject(new TurnFailure("ai_tool_unsupported", {}, "Cannot run Codex CLI; install the native 0.154.0 executable (the isolated child PATH is /usr/bin:/bin)"));
103438
+ });
103296
103439
  });
103297
103440
  if (version2 !== `codex-cli ${SUPPORTED_CODEX_VERSION}`)
103298
- throw new Error(`Unsupported Codex CLI; install ${SUPPORTED_CODEX_VERSION}`);
103441
+ throw new TurnFailure("ai_tool_unsupported", {}, `Unsupported Codex CLI; install ${SUPPORTED_CODEX_VERSION}`);
103442
+ }
103443
+ function classifyCodexFailure(text) {
103444
+ if (typeof text !== "string")
103445
+ return "model_error";
103446
+ if (/(?:status|error:?)\s+401\b|401 Unauthorized|could not be refreshed|sign in again|invalid_api_key|invalid_refresh_token/i.test(text))
103447
+ return "provider_auth_failed";
103448
+ if (/unexpected status 5\d\d|stream disconnected|error sending request|failed to lookup address|ENOTFOUND|ECONNREFUSED|ETIMEDOUT/.test(text))
103449
+ return "provider_unreachable";
103450
+ return "model_error";
103451
+ }
103452
+ async function keepFirstPrivate(path2, value) {
103453
+ const temporary = `${path2}.${randomUUID5()}.tmp`;
103454
+ await writeFile4(temporary, value, { mode: 384, flag: "wx" });
103455
+ try {
103456
+ await link(temporary, path2);
103457
+ } catch (error2) {
103458
+ if (error2.code !== "EEXIST")
103459
+ throw error2;
103460
+ } finally {
103461
+ await unlink2(temporary).catch(() => void 0);
103462
+ }
103463
+ }
103464
+ function seededPrompt(seed, prompt) {
103465
+ if (!seed)
103466
+ return prompt;
103467
+ const budget = MAX_PROMPT_BYTES - Buffer.byteLength(prompt) - 2;
103468
+ if (budget <= 0)
103469
+ return prompt;
103470
+ const bytes = Buffer.from(seed, "utf8");
103471
+ if (bytes.length <= budget)
103472
+ return `${seed}
103473
+
103474
+ ${prompt}`;
103475
+ let start = bytes.length - budget;
103476
+ while (start < bytes.length && (bytes[start] & 192) === 128)
103477
+ start++;
103478
+ let kept = bytes.subarray(start).toString("utf8");
103479
+ const newline = kept.indexOf("\n");
103480
+ kept = newline >= 0 ? kept.slice(newline + 1) : "";
103481
+ return kept ? `${kept}
103482
+
103483
+ ${prompt}` : prompt;
103299
103484
  }
103300
103485
  function parseTurnUsage(raw) {
103301
103486
  if (!raw || typeof raw !== "object")
@@ -103307,13 +103492,17 @@ function parseTurnUsage(raw) {
103307
103492
  const cached2 = count(u2.cached_input_tokens);
103308
103493
  return { model: CODEX_MODEL, inputTokens, outputTokens, ...cached2 !== void 0 ? { cachedInputTokens: cached2 } : {} };
103309
103494
  }
103310
- var SUPPORTED_CODEX_VERSION, CODE_MODE_WARNING, UUID2, CODEX_MODEL, count, CodexDriver;
103495
+ var SUPPORTED_CODEX_VERSION, CODE_MODE_WARNING, MODEL_METADATA_WARNING, MAX_PROMPT_BYTES, STDERR_PREFIX_BYTES, UUID2, CODEX_MODEL, count, CodexDriver;
103311
103496
  var init_driver = __esm({
103312
- "src/driver.ts"() {
103497
+ async "src/driver.ts"() {
103313
103498
  "use strict";
103314
103499
  init_rollout();
103500
+ await init_dist();
103315
103501
  SUPPORTED_CODEX_VERSION = "0.154.0";
103316
103502
  CODE_MODE_WARNING = "Code Mode is unavailable because code-mode host is disabled. Code mode will fail closed; enable `features.code_mode_host` and install `codex-code-mode-host`.";
103503
+ MODEL_METADATA_WARNING = /^Model metadata for `[^`\n]{1,200}` not found\. Defaulting to fallback metadata;/;
103504
+ MAX_PROMPT_BYTES = 128 * 1024;
103505
+ STDERR_PREFIX_BYTES = 8 * 1024;
103317
103506
  UUID2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
103318
103507
  CODEX_MODEL = "gpt-5.6-terra";
103319
103508
  count = (v2) => typeof v2 === "number" && Number.isSafeInteger(v2) && v2 >= 0 ? v2 : void 0;
@@ -103324,37 +103513,89 @@ var init_driver = __esm({
103324
103513
  options;
103325
103514
  busy = false;
103326
103515
  poisoned = false;
103327
- async run(key, prompt, signal) {
103328
- if (this.busy || this.poisoned || signal?.aborted || Buffer.byteLength(prompt) > 128 * 1024)
103329
- throw new Error("Codex turn failed");
103516
+ async run(key, prompt, signal, opts = {}) {
103517
+ if (this.busy || this.poisoned || signal?.aborted || Buffer.byteLength(prompt) > MAX_PROMPT_BYTES)
103518
+ throw new TurnFailure("model_error");
103330
103519
  this.busy = true;
103331
103520
  try {
103332
- const { binary, layout } = this.options;
103333
- await checkVersion(binary, layout);
103521
+ const { binary, layout, versionTimeoutMs } = this.options;
103522
+ await checkVersion(binary, layout, versionTimeoutMs);
103334
103523
  if (signal?.aborted)
103335
- throw new Error("Codex turn failed");
103524
+ throw new TurnFailure("model_error");
103336
103525
  const sessionFile = join9(layout.sessions, createHash2("sha256").update(key).digest("hex") + ".json");
103337
103526
  let sessionId;
103338
103527
  try {
103339
103528
  const stored = JSON.parse(await readFile6(sessionFile, "utf8"));
103340
103529
  if (typeof stored !== "string" || !UUID2.test(stored))
103341
- throw new Error("Invalid stored Codex session");
103530
+ throw new TurnFailure("model_error", {}, "Invalid stored Codex session");
103342
103531
  sessionId = stored;
103343
103532
  } catch (error2) {
103344
- if (error2.code !== "ENOENT")
103533
+ if (error2 instanceof TurnFailure || error2.code !== "ENOENT")
103345
103534
  throw error2;
103346
103535
  }
103347
- const before = sessionId ? await snapshotRollout(layout, sessionId) : void 0;
103348
- const result = await this.execute(prompt, sessionId, signal);
103536
+ const freshPrompt = seededPrompt(opts.freshContext, prompt);
103537
+ if (!sessionId) {
103538
+ const result2 = await this.execute(freshPrompt, void 0, signal);
103539
+ result2.text = await verifyFinalReply(layout, result2.sessionId, result2.text, void 0);
103540
+ if (signal?.aborted)
103541
+ throw new TurnFailure("model_error");
103542
+ await atomicPrivateWrite(sessionFile, JSON.stringify(result2.sessionId));
103543
+ return result2;
103544
+ }
103545
+ let before;
103546
+ try {
103547
+ before = await snapshotRollout(layout, sessionId);
103548
+ } catch (error2) {
103549
+ if (error2 instanceof RolloutMissing)
103550
+ return await this.recover(sessionFile, sessionId, freshPrompt, signal);
103551
+ throw new TurnFailure("model_error", {}, error2 instanceof Error ? error2.message : void 0);
103552
+ }
103553
+ let result;
103554
+ try {
103555
+ result = await this.execute(prompt, sessionId, signal);
103556
+ } catch (error2) {
103557
+ if (error2?.resumeRefused === true)
103558
+ return await this.recover(sessionFile, sessionId, freshPrompt, signal);
103559
+ throw error2;
103560
+ }
103349
103561
  result.text = await verifyFinalReply(layout, result.sessionId, result.text, before);
103350
103562
  if (signal?.aborted)
103351
- throw new Error("Codex turn failed");
103563
+ throw new TurnFailure("model_error");
103352
103564
  await atomicPrivateWrite(sessionFile, JSON.stringify(result.sessionId));
103353
103565
  return result;
103566
+ } catch (error2) {
103567
+ throw error2 instanceof TurnFailure ? error2 : new TurnFailure("model_error", {}, error2 instanceof Error ? error2.message : void 0);
103354
103568
  } finally {
103355
103569
  this.busy = false;
103356
103570
  }
103357
103571
  }
103572
+ /**
103573
+ * #1560 — the stored session is gone: run exactly one fresh, seeded session.
103574
+ * The stored id is replaced only after the fresh reply verifies; the first
103575
+ * replaced id is kept in `<file>.prev` and never overwritten.
103576
+ */
103577
+ async recover(sessionFile, oldId, freshPrompt, signal) {
103578
+ if (signal?.aborted || this.poisoned)
103579
+ throw new TurnFailure("model_error");
103580
+ const { layout } = this.options;
103581
+ const result = await this.execute(freshPrompt, void 0, signal);
103582
+ if (result.sessionId === oldId)
103583
+ throw new TurnFailure("model_error");
103584
+ try {
103585
+ result.text = await verifyFinalReply(layout, result.sessionId, result.text, void 0);
103586
+ } catch (error2) {
103587
+ throw new TurnFailure("model_error", {}, error2 instanceof Error ? error2.message : void 0);
103588
+ }
103589
+ if (signal?.aborted)
103590
+ throw new TurnFailure("model_error");
103591
+ await keepFirstPrivate(`${sessionFile}.prev`, JSON.stringify(oldId));
103592
+ await atomicPrivateWrite(sessionFile, JSON.stringify(result.sessionId));
103593
+ try {
103594
+ this.options.onRecovered?.("session_resume_failed");
103595
+ } catch {
103596
+ }
103597
+ return result;
103598
+ }
103358
103599
  execute(prompt, expectedId, signal) {
103359
103600
  const { binary, layout, timeoutMs = 12e4, killGraceMs = 500, maxLineBytes = 256 * 1024, maxOutputBytes = 2 * 1024 * 1024 } = this.options;
103360
103601
  const invocation = buildInvocation(layout, expectedId);
@@ -103362,6 +103603,9 @@ var init_driver = __esm({
103362
103603
  const child = spawn(binary, invocation.args, { cwd: invocation.cwd, env: invocation.env, stdio: ["pipe", "pipe", "pipe"], detached: true });
103363
103604
  let failed = false, closed = false, settled = false, started = false, terminal = false;
103364
103605
  let sessionId = "", text = "", buffered = "", bytes = 0;
103606
+ let eventText = "", itemText = "", errPrefix = "", errPrefixBytes = 0;
103607
+ let threadStarted = false, exitCode = null;
103608
+ let endedBy = "exit";
103365
103609
  let usage;
103366
103610
  const decoder2 = new StringDecoder("utf8");
103367
103611
  let killTimer;
@@ -103380,7 +103624,7 @@ var init_driver = __esm({
103380
103624
  clearTimeout(timeout);
103381
103625
  clearTimeout(killTimer);
103382
103626
  clearTimeout(reapTimer);
103383
- signal?.removeEventListener("abort", fail);
103627
+ signal?.removeEventListener("abort", onAbort);
103384
103628
  };
103385
103629
  const finish = (ok) => {
103386
103630
  if (settled)
@@ -103389,10 +103633,22 @@ var init_driver = __esm({
103389
103633
  cleanup();
103390
103634
  if (ok)
103391
103635
  resolve4({ text, sessionId, ...usage ? { usage } : {} });
103392
- else
103393
- reject(new Error("Codex turn failed"));
103636
+ else {
103637
+ let code = classifyCodexFailure(eventText);
103638
+ if (code === "model_error")
103639
+ code = classifyCodexFailure(itemText);
103640
+ if (code === "model_error" && !threadStarted)
103641
+ code = classifyCodexFailure(errPrefix);
103642
+ const resumeRefused = endedBy === "exit" && !threadStarted && typeof exitCode === "number" && /thread\/resume failed: no rollout found/.test(errPrefix);
103643
+ const error2 = new TurnFailure(code, typeof exitCode === "number" ? { exitCode } : {});
103644
+ Object.defineProperty(error2, "resumeRefused", { value: resumeRefused, enumerable: false });
103645
+ reject(error2);
103646
+ }
103647
+ eventText = itemText = errPrefix = "";
103394
103648
  };
103395
- const fail = () => {
103649
+ const fail = (why) => {
103650
+ if (!failed && why)
103651
+ endedBy = why;
103396
103652
  failed = true;
103397
103653
  text = "";
103398
103654
  if (killTimer || closed)
@@ -103404,10 +103660,11 @@ var init_driver = __esm({
103404
103660
  finish(false);
103405
103661
  }, killGraceMs + 5e3);
103406
103662
  };
103407
- const timeout = setTimeout(fail, timeoutMs);
103408
- signal?.addEventListener("abort", fail, { once: true });
103663
+ const onAbort = () => fail("abort");
103664
+ const timeout = setTimeout(() => fail("timeout"), timeoutMs);
103665
+ signal?.addEventListener("abort", onAbort, { once: true });
103409
103666
  if (signal?.aborted)
103410
- fail();
103667
+ onAbort();
103411
103668
  const line = (raw) => {
103412
103669
  if (failed)
103413
103670
  return;
@@ -103420,6 +103677,7 @@ var init_driver = __esm({
103420
103677
  if (sessionId || typeof e.thread_id !== "string" || !UUID2.test(e.thread_id) || expectedId && e.thread_id !== expectedId)
103421
103678
  throw new Error();
103422
103679
  sessionId = e.thread_id;
103680
+ threadStarted = true;
103423
103681
  break;
103424
103682
  case "turn.started":
103425
103683
  if (!sessionId || started)
@@ -103428,8 +103686,12 @@ var init_driver = __esm({
103428
103686
  break;
103429
103687
  case "item.completed":
103430
103688
  if (e.item?.type === "error") {
103431
- if (e.item.message !== CODE_MODE_WARNING)
103689
+ const message = e.item.message;
103690
+ const warning = message === CODE_MODE_WARNING || typeof message === "string" && MODEL_METADATA_WARNING.test(message);
103691
+ if (!warning) {
103692
+ itemText = typeof message === "string" ? message : "";
103432
103693
  throw new Error();
103694
+ }
103433
103695
  } else if (e.item?.type === "agent_message") {
103434
103696
  if (!started || typeof e.item.text !== "string")
103435
103697
  throw new Error();
@@ -103443,7 +103705,10 @@ var init_driver = __esm({
103443
103705
  usage = parseTurnUsage(e.usage);
103444
103706
  break;
103445
103707
  case "error":
103708
+ eventText = typeof e.message === "string" ? e.message : "";
103709
+ throw new Error();
103446
103710
  case "turn.failed":
103711
+ eventText = typeof e.error?.message === "string" ? e.error.message : "";
103447
103712
  throw new Error();
103448
103713
  case "item.started":
103449
103714
  case "item.updated":
@@ -103458,7 +103723,7 @@ var init_driver = __esm({
103458
103723
  child.stdout.on("data", (chunk) => {
103459
103724
  bytes += chunk.length;
103460
103725
  if (bytes > maxOutputBytes) {
103461
- fail();
103726
+ fail("overflow");
103462
103727
  return;
103463
103728
  }
103464
103729
  if (failed)
@@ -103471,17 +103736,23 @@ var init_driver = __esm({
103471
103736
  line(raw);
103472
103737
  }
103473
103738
  if (Buffer.byteLength(buffered) > maxLineBytes)
103474
- fail();
103739
+ fail("overflow");
103475
103740
  });
103476
103741
  child.stderr.on("data", (chunk) => {
103477
103742
  bytes += chunk.length;
103743
+ if (errPrefixBytes < STDERR_PREFIX_BYTES) {
103744
+ const part = chunk.subarray(0, STDERR_PREFIX_BYTES - errPrefixBytes);
103745
+ errPrefixBytes += part.length;
103746
+ errPrefix += part.toString("utf8");
103747
+ }
103478
103748
  if (bytes > maxOutputBytes)
103479
- fail();
103749
+ fail("overflow");
103480
103750
  });
103481
- child.stdin.on("error", fail);
103482
- child.on("error", fail);
103751
+ child.stdin.on("error", () => fail());
103752
+ child.on("error", () => fail());
103483
103753
  child.on("close", (code) => {
103484
103754
  closed = true;
103755
+ exitCode = code;
103485
103756
  killGroup("SIGKILL");
103486
103757
  const deadline = Date.now() + 5e3;
103487
103758
  const reaped = () => {
@@ -103513,7 +103784,7 @@ var init_driver = __esm({
103513
103784
  });
103514
103785
 
103515
103786
  // src/cli.ts
103516
- import { access as access2, readFile as readFile7, mkdir as mkdir6, unlink as unlink2, open as open6, stat as stat2 } from "node:fs/promises";
103787
+ import { access as access2, readFile as readFile7, mkdir as mkdir6, unlink as unlink3, open as open6, stat as stat2 } from "node:fs/promises";
103517
103788
  import { join as join10, isAbsolute as isAbsolute2 } from "node:path";
103518
103789
  import { createHash as createHash3 } from "node:crypto";
103519
103790
  function agentSlug(name) {
@@ -103736,7 +104007,7 @@ Pending invite: ${await exists(join10(root3, "pending-invite")) ? "present" : "m
103736
104007
  await invoke("/bin/launchctl", ["bootout", `gui/${deps.uid}/${spec.label}`]);
103737
104008
  else
103738
104009
  await invoke("/usr/bin/systemctl", ["--user", "disable", "--now", `${spec.label}.service`]);
103739
- await unlink2(spec.path).catch((error2) => {
104010
+ await unlink3(spec.path).catch((error2) => {
103740
104011
  if (error2.code !== "ENOENT")
103741
104012
  throw error2;
103742
104013
  });
@@ -103752,8 +104023,8 @@ var init_cli = __esm({
103752
104023
  async "src/cli.ts"() {
103753
104024
  "use strict";
103754
104025
  await init_dist();
103755
- init_driver();
103756
- VERSION2 = "0.1.13";
104026
+ await init_driver();
104027
+ VERSION2 = "0.1.14";
103757
104028
  HELP = `AgentVault OpenAI Bridge ${VERSION2}
103758
104029
  Usage: AV_AGENT_NAME=<name> agentvault-openai-bridge <command>
103759
104030
 
@@ -103792,7 +104063,7 @@ var init_bridge = __esm({
103792
104063
  this.waiting = [];
103793
104064
  for (const item of waiting)
103794
104065
  if (item.generation === this.generation && item.deviceId === this.channel.deviceId)
103795
- this.enqueue(item.kind, item.id, item.text);
104066
+ this.enqueue(item.kind, item.id, item.text, item.groupId);
103796
104067
  });
103797
104068
  this.listen("state", (state) => {
103798
104069
  if (state === "connecting") {
@@ -103803,10 +104074,8 @@ var init_bridge = __esm({
103803
104074
  this.invalidate();
103804
104075
  });
103805
104076
  this.listen("error", () => {
103806
- this.generation++;
103807
- this.active?.abort();
103808
104077
  });
103809
- this.listen("revoked", () => this.invalidate());
104078
+ this.listen("revoked", () => this.invalidate("revoked"));
103810
104079
  this.listen("room_hushed", (e) => {
103811
104080
  if (typeof e?.roomId !== "string")
103812
104081
  return;
@@ -103818,9 +104087,13 @@ var init_bridge = __esm({
103818
104087
  }
103819
104088
  });
103820
104089
  this.listen("message", (text, metadata) => {
103821
- if (metadata?.ownerDm1to1 !== true || metadata.roomId || typeof metadata.conversationId !== "string")
104090
+ if (metadata?.ownerDm1to1 !== true || metadata.roomId)
103822
104091
  return;
103823
- this.enqueue("dm", metadata.conversationId, text);
104092
+ if (typeof metadata.conversationId !== "string") {
104093
+ this.report("dm_dropped reason=unmapped_conversation");
104094
+ return;
104095
+ }
104096
+ this.enqueue("dm", metadata.conversationId, text, typeof metadata.conversationGroupId === "string" ? metadata.conversationGroupId : void 0);
103824
104097
  });
103825
104098
  this.listen("room_message", (e) => {
103826
104099
  if (typeof e?.roomId !== "string" || typeof e.plaintext !== "string" || this.hushed(e.roomId))
@@ -103843,6 +104116,8 @@ var init_bridge = __esm({
103843
104116
  ready = false;
103844
104117
  accepting = true;
103845
104118
  waiting = [];
104119
+ /** The reason each generation ended, keyed by the generation it ended (#1560). */
104120
+ cancelReasons = /* @__PURE__ */ new Map();
103846
104121
  stopped = false;
103847
104122
  active;
103848
104123
  hush = /* @__PURE__ */ new Map();
@@ -103854,14 +104129,40 @@ var init_bridge = __esm({
103854
104129
  hushed(id) {
103855
104130
  return (this.hush.get(id) ?? 0) > Date.now();
103856
104131
  }
103857
- invalidate() {
104132
+ /** Ends the current generation. Its reason is recorded BEFORE the bump, under
104133
+ * the generation it ends, so a later invalidate (stop after revoked) cannot
104134
+ * overwrite why the turns of that generation were cut. */
104135
+ invalidate(reason = "channel_state") {
103858
104136
  this.ready = false;
103859
104137
  this.accepting = false;
103860
104138
  this.waiting = [];
104139
+ this.cancelReasons.set(this.generation, reason);
104140
+ for (const key of this.cancelReasons.keys())
104141
+ if (key < this.generation - 32)
104142
+ this.cancelReasons.delete(key);
103861
104143
  this.generation++;
103862
104144
  this.active?.abort();
103863
104145
  }
103864
- enqueue(kind, id, text) {
104146
+ cancelReason(entryGeneration, target, kind, id) {
104147
+ if (entryGeneration !== this.generation)
104148
+ return this.cancelReasons.get(entryGeneration) ?? "unknown";
104149
+ if (target.deviceId !== this.channel.deviceId)
104150
+ return "device_changed";
104151
+ if (kind === "room" && this.hushed(id))
104152
+ return "hushed";
104153
+ return "unknown";
104154
+ }
104155
+ /** Recent entries as `sender: text`, without the bridge's own failure notices. */
104156
+ context(entries, current) {
104157
+ const kept = (entries ?? []).filter((entry) => !(entry.sender === "agent" && isOwnerNotice(entry.text)));
104158
+ const last = kept[kept.length - 1];
104159
+ if (current !== void 0 && last && last.sender === "owner" && (last.text === current || last.text.length > 0 && current.endsWith(`
104160
+
104161
+ ${last.text}`)))
104162
+ kept.pop();
104163
+ return kept.map((entry) => `${entry.sender}: ${entry.text}`).join("\n").slice(-8192);
104164
+ }
104165
+ enqueue(kind, id, text, groupId) {
103865
104166
  if (!this.accepting || this.stopped || !id || !this.channel.deviceId || typeof text !== "string" || !text.trim() || Buffer.byteLength(text) > 96 * 1024)
103866
104167
  return;
103867
104168
  if (this.pending + this.waiting.length >= this.maxQueue) {
@@ -103869,35 +104170,62 @@ var init_bridge = __esm({
103869
104170
  return;
103870
104171
  }
103871
104172
  if (!this.ready) {
103872
- this.waiting.push({ kind, id, text, deviceId: this.channel.deviceId, generation: this.generation });
104173
+ this.waiting.push({ kind, id, text, groupId, deviceId: this.channel.deviceId, generation: this.generation });
103873
104174
  return;
103874
104175
  }
103875
- const history = kind === "room" ? (this.channel.getRoomHistory?.(id, 20) ?? []).map((entry) => `${entry.sender}: ${entry.text}`).join("\n").slice(-8192) : "";
104176
+ const history = kind === "room" ? this.context(this.channel.getRoomHistory?.(id, 20)) : "";
104177
+ const seed = kind === "dm" ? this.context(this.channel.getConversationHistory?.(id, 20, { groupId }), text) : "";
104178
+ const freshContext = seed ? `Recent messages from this chat:
104179
+ ${seed}` : void 0;
103876
104180
  const target = { kind, id, deviceId: this.channel.deviceId };
103877
104181
  const generation = this.generation;
103878
104182
  const valid = () => this.ready && !this.stopped && generation === this.generation && target.deviceId === this.channel.deviceId && !(kind === "room" && this.hushed(id));
104183
+ const cancelled = () => this.report(`turn_cancelled reason=${this.cancelReason(generation, target, kind, id)}`);
103879
104184
  this.pending++;
103880
104185
  this.tail = this.tail.then(async () => {
103881
- if (!valid())
104186
+ if (!valid()) {
104187
+ cancelled();
103882
104188
  return;
104189
+ }
103883
104190
  const controller = new AbortController();
103884
104191
  this.active = controller;
103885
104192
  try {
103886
104193
  const startedAt = Date.now();
103887
- const reply = await this.driver.run(JSON.stringify([target.deviceId, kind, id]), `You are ${this.name}, an AgentVault conversational agent. Reply in plain text to this ${kind === "dm" ? "owner direct message" : "addressed room message"}. Filesystem, shell, web and integration tools are unavailable.
104194
+ let reply;
104195
+ try {
104196
+ reply = await this.driver.run(JSON.stringify([target.deviceId, kind, id]), `You are ${this.name}, an AgentVault conversational agent. Reply in plain text to this ${kind === "dm" ? "owner direct message" : "addressed room message"}. Filesystem, shell, web and integration tools are unavailable.
103888
104197
  ${history ? `Recent messages from this room (conversation context):
103889
104198
  ${history}
103890
104199
  ` : ""}
103891
104200
  Current message:
103892
- ${text}`, controller.signal);
104201
+ ${text}`, controller.signal, { freshContext });
104202
+ } catch (err) {
104203
+ if (controller.signal.aborted || !valid()) {
104204
+ cancelled();
104205
+ return;
104206
+ }
104207
+ await this.turnFailed(target, err, Date.now() - startedAt, controller.signal);
104208
+ return;
104209
+ }
103893
104210
  this.reportUsage(reply, Date.now() - startedAt);
103894
- if (!valid() || controller.signal.aborted)
104211
+ if (!valid() || controller.signal.aborted) {
104212
+ cancelled();
104213
+ return;
104214
+ }
104215
+ let cause;
104216
+ try {
104217
+ await this.deliver(target, reply.text, controller.signal, (e) => {
104218
+ cause = e;
104219
+ });
104220
+ } catch (err) {
104221
+ if (controller.signal.aborted || !valid())
104222
+ cancelled();
104223
+ else
104224
+ this.report(`reply_failed code=${classifyToolError(cause ?? err)}`);
103895
104225
  return;
103896
- await this.deliver(target, reply.text, controller.signal);
104226
+ }
103897
104227
  if (valid() && !controller.signal.aborted)
103898
104228
  this.report("delivered");
103899
- } catch {
103900
- this.report("turn_or_delivery_failed");
103901
104229
  } finally {
103902
104230
  this.active = void 0;
103903
104231
  }
@@ -103905,6 +104233,32 @@ ${text}`, controller.signal);
103905
104233
  this.pending--;
103906
104234
  });
103907
104235
  }
104236
+ /** #1560: a turn that failed (not one cancelled on purpose). RECORD FIRST —
104237
+ * the span and the log line — then post the notice, so a notice that stalls
104238
+ * or fails cannot lose the record. Only codes and the exit status are
104239
+ * logged, never the error's text. In a room the notice is the bare sentence:
104240
+ * the coded ones describe the owner's own provider account. */
104241
+ async turnFailed(target, err, durationMs, signal) {
104242
+ const code = err instanceof TurnFailure ? err.code : "model_error";
104243
+ const exitCode = err?.exitCode;
104244
+ const exit = typeof exitCode === "number" ? exitCode : "none";
104245
+ const sink = this.channel.telemetry;
104246
+ reportModelTurnFailure(sink && typeof sink.reportCustomSpan === "function" ? sink : null, {
104247
+ code,
104248
+ conversation: { kind: target.kind === "dm" ? "direct" : "room", id: target.id },
104249
+ durationMs
104250
+ });
104251
+ this.report(`turn_failed code=${code} exit=${exit}`);
104252
+ const notice = ownerNoticeFor(target.kind === "room" ? "model_error" : code, { agentName: this.channel.ownDisplayName?.trim() || this.name, provider: "OpenAI" });
104253
+ let cause;
104254
+ try {
104255
+ await this.deliverOnce(target, notice, signal, (e) => {
104256
+ cause = e;
104257
+ });
104258
+ } catch (noticeErr) {
104259
+ this.report(`notice_failed code=${classifyToolError(cause ?? noticeErr)}`);
104260
+ }
104261
+ }
103908
104262
  /** Health (2026-10-14): tokens for the model call. No cost — the bridge runs
103909
104263
  * on a ChatGPT login, so there is no per-token price to report honestly. */
103910
104264
  reportUsage(reply, latencyMs) {
@@ -103940,12 +104294,14 @@ ${text}`, controller.signal);
103940
104294
  } catch {
103941
104295
  }
103942
104296
  }
103943
- async deliver(target, text, signal) {
104297
+ async deliver(target, text, signal, onSendError = () => {
104298
+ }) {
103944
104299
  const startedAt = Date.now();
103945
104300
  let cause;
103946
104301
  try {
103947
104302
  await this.deliverOnce(target, text, signal, (e) => {
103948
104303
  cause = e;
104304
+ onSendError(e);
103949
104305
  });
103950
104306
  } catch (err) {
103951
104307
  this.reportReply(target, startedAt, { err: cause ?? err });
@@ -103969,7 +104325,7 @@ ${text}`, controller.signal);
103969
104325
  const timer = setTimeout(() => {
103970
104326
  finish(new Error("Delivery timed out"));
103971
104327
  this.stopped = true;
103972
- this.invalidate();
104328
+ this.invalidate("delivery_timeout");
103973
104329
  this.report("delivery_timeout");
103974
104330
  }, this.deliveryTimeoutMs);
103975
104331
  signal.addEventListener("abort", abort, { once: true });
@@ -103986,7 +104342,7 @@ ${text}`, controller.signal);
103986
104342
  }
103987
104343
  async stop() {
103988
104344
  this.stopped = true;
103989
- this.invalidate();
104345
+ this.invalidate("stop");
103990
104346
  for (const [event, fn] of this.listeners)
103991
104347
  this.channel.off(event, fn);
103992
104348
  this.listeners = [];
@@ -103997,7 +104353,7 @@ ${text}`, controller.signal);
103997
104353
  });
103998
104354
 
103999
104355
  // src/lock.ts
104000
- import { mkdir as mkdir7, open as open7, readFile as readFile8, rmdir, unlink as unlink3 } from "node:fs/promises";
104356
+ import { mkdir as mkdir7, open as open7, readFile as readFile8, rmdir, unlink as unlink4 } from "node:fs/promises";
104001
104357
  import { join as join11 } from "node:path";
104002
104358
  import { randomUUID as randomUUID6 } from "node:crypto";
104003
104359
  async function acquireLock(root3) {
@@ -104027,7 +104383,7 @@ async function acquireLock(root3) {
104027
104383
  if (error2.code !== "ESRCH")
104028
104384
  throw error2;
104029
104385
  }
104030
- await unlink3(path2);
104386
+ await unlink4(path2);
104031
104387
  }
104032
104388
  const file = await open7(path2, "wx", 384);
104033
104389
  try {
@@ -104041,7 +104397,7 @@ async function acquireLock(root3) {
104041
104397
  return async () => {
104042
104398
  const current = JSON.parse(await readFile8(path2, "utf8"));
104043
104399
  if (current.token === token)
104044
- await unlink3(path2);
104400
+ await unlink4(path2);
104045
104401
  };
104046
104402
  }
104047
104403
  var init_lock = __esm({
@@ -104053,11 +104409,15 @@ var init_lock = __esm({
104053
104409
  // src/runtime.ts
104054
104410
  var runtime_exports = {};
104055
104411
  __export(runtime_exports, {
104412
+ codexDriverOptions: () => codexDriverOptions,
104056
104413
  startBridge: () => startBridge
104057
104414
  });
104058
- import { unlink as unlink4, access as access3, mkdir as mkdir8, rename as rename6, chmod as chmod4, readFile as readFile9 } from "node:fs/promises";
104415
+ import { unlink as unlink5, access as access3, mkdir as mkdir8, rename as rename6, chmod as chmod4, readFile as readFile9 } from "node:fs/promises";
104059
104416
  import { join as join12 } from "node:path";
104060
104417
  import { randomUUID as randomUUID7 } from "node:crypto";
104418
+ function codexDriverOptions(config2, report) {
104419
+ return { binary: config2.binary, layout: config2.layout, onRecovered: (code) => report(`turn_recovered code=${code}`) };
104420
+ }
104061
104421
  async function startBridge(config2, injected) {
104062
104422
  const unlock = await acquireLock(config2.layout.root);
104063
104423
  const report = injected?.report ?? ((event) => {
@@ -104127,7 +104487,7 @@ async function startBridge(config2, injected) {
104127
104487
  const consumesInvite = !!config2.inviteToken && (config2.forceReEnroll || existing.length === 0);
104128
104488
  const options = { inviteToken: config2.inviteToken, dataDir: config2.layout.root, apiUrl: config2.apiUrl, agentName: config2.name, expectedFramework: "openai", forceReEnroll: config2.forceReEnroll ?? false, platform: "node", clientVersion: `@agentvault/openai-bridge@${VERSION2}` };
104129
104489
  channel = injected ? injected.createChannel(options) : new (await init_dist().then(() => dist_exports)).SecureChannel(options);
104130
- bridge = new OpenAIBridge(channel, injected?.driver ?? new CodexDriver({ binary: config2.binary, layout: config2.layout }), config2.name, (event) => {
104490
+ bridge = new OpenAIBridge(channel, injected?.driver ?? new CodexDriver(codexDriverOptions(config2, report)), config2.name, (event) => {
104131
104491
  report(event);
104132
104492
  if (event === "delivery_timeout") {
104133
104493
  deliveryFailed = true;
@@ -104141,7 +104501,7 @@ async function startBridge(config2, injected) {
104141
104501
  void (async () => {
104142
104502
  const path2 = join12(config2.layout.root, "pending-invite");
104143
104503
  if ((await readFile9(path2, "utf8")).trim() === config2.inviteToken)
104144
- await unlink4(path2);
104504
+ await unlink5(path2);
104145
104505
  })().catch(() => {
104146
104506
  });
104147
104507
  report("channel_ready");
@@ -104185,7 +104545,7 @@ async function startBridge(config2, injected) {
104185
104545
  var init_runtime = __esm({
104186
104546
  async "src/runtime.ts"() {
104187
104547
  "use strict";
104188
- init_driver();
104548
+ await init_driver();
104189
104549
  await init_bridge();
104190
104550
  await init_cli();
104191
104551
  init_lock();
@@ -104194,9 +104554,9 @@ var init_runtime = __esm({
104194
104554
 
104195
104555
  // src/index.ts
104196
104556
  await init_cli();
104197
- init_driver();
104557
+ await init_driver();
104198
104558
  await init_cli();
104199
- init_driver();
104559
+ await init_driver();
104200
104560
  await init_bridge();
104201
104561
  import { spawn as spawn2 } from "node:child_process";
104202
104562
  import { realpathSync } from "node:fs";