@openclaw/imessage 2026.9.4 → 2026.9.5
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/assets/activity.svg +40 -0
- package/assets/icon.png +0 -0
- package/dist/{actions.runtime-CzvR20qT.js → .setup/actions.runtime-B-qGAkYG.mjs} +106 -176
- package/dist/.setup/api-DcUWvBmD.mjs +10 -0
- package/dist/.setup/api-_NoJAo2x.mjs +14 -0
- package/dist/{approval-handler.runtime-B6JGnxQf.js → .setup/approval-handler.runtime-CkG235P7.mjs} +27 -27
- package/dist/{approval-reactions-BM_AwHPq.js → .setup/approval-reactions-CX1-6KeG.mjs} +32 -32
- package/dist/{channel-BwKxE8Ge.js → .setup/channel-CCbYCQiN.mjs} +25 -17
- package/dist/{channel.runtime-BGwNkU9Z.js → .setup/channel.runtime-Kw4iCQax.mjs} +7 -5
- package/dist/{group-policy-Duro87b4.js → .setup/group-policy-BoOAkmoQ.mjs} +35 -75
- package/dist/{media-contract-pns3TSS5.js → .setup/media-contract-BpPh5Oh1.mjs} +1 -1
- package/dist/.setup/message-tool-api-DZSH-2gY.mjs +148 -0
- package/dist/{monitor-xaD-9h0b.js → .setup/monitor-CSeWJ3Qh.mjs} +223 -149
- package/dist/{question-reactions-9tBYB1_F.js → .setup/question-reactions-lm8OxWbb.mjs} +2 -2
- package/dist/{remote-file-5n5LznCa.js → .setup/remote-file-4RbwiXYh.mjs} +11 -8
- package/dist/{sanitize-outbound-C6UF2cvr.js → .setup/sanitize-outbound-o1ePXajW.mjs} +83 -47
- package/dist/{send-CIHiLtcY.js → .setup/send-DXiUWygv.mjs} +157 -173
- package/dist/{state-migrations-D-fyHVcb.js → .setup/state-migrations-CIwg07l5.mjs} +3 -3
- package/dist/{message-tool-api-CUoFESHj.js → .setup/targets-Cc9vthzI.mjs} +53 -155
- package/dist/api.js +9 -14
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/media-contract-api.js +1 -1
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +7 -6
- package/dist/session-binding-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -1
- package/dist/src/send-receipt-db.worker.js +35 -0
- package/node_modules/typebox/build/compile/validator.d.mts +1 -1
- package/node_modules/typebox/build/compile/validator.mjs +1 -1
- package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
- package/node_modules/typebox/build/format/iri.mjs +5 -1
- package/node_modules/typebox/build/guard/emit.mjs +2 -4
- package/node_modules/typebox/build/guard/guard.mjs +6 -18
- package/node_modules/typebox/build/guard/string.mjs +16 -24
- package/node_modules/typebox/build/schema/build.mjs +2 -2
- package/node_modules/typebox/build/schema/check.mjs +1 -1
- package/node_modules/typebox/build/schema/compile.d.mts +3 -2
- package/node_modules/typebox/build/schema/compile.mjs +8 -8
- package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
- package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
- package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
- package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
- package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
- package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
- package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
- package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
- package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
- package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
- package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
- package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
- package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
- package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
- package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
- package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
- package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
- package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
- package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
- package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
- package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
- package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
- package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
- package/node_modules/typebox/build/schema/errors.d.mts +2 -2
- package/node_modules/typebox/build/schema/errors.mjs +8 -14
- package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
- package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
- package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
- package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
- package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
- package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
- package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
- package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
- package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
- package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
- package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
- package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
- package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
- package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
- package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
- package/node_modules/typebox/build/schema/parse.d.mts +1 -0
- package/node_modules/typebox/build/schema/parse.mjs +10 -5
- package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
- package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
- package/node_modules/typebox/build/schema/schema.d.mts +2 -0
- package/node_modules/typebox/build/schema/schema.mjs +2 -0
- package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
- package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +59 -89
- package/node_modules/zod/README.md +27 -0
- package/node_modules/zod/compile.cjs +77 -0
- package/node_modules/zod/compile.d.cts +1 -0
- package/node_modules/zod/compile.d.ts +1 -0
- package/node_modules/zod/compile.js +52 -0
- package/node_modules/zod/index.cjs +2 -2
- package/node_modules/zod/index.d.cts +1 -2
- package/node_modules/zod/index.d.ts +1 -2
- package/node_modules/zod/index.js +5 -2
- package/node_modules/zod/package.json +13 -2
- package/node_modules/zod/src/compile.ts +56 -0
- package/node_modules/zod/src/index.ts +5 -2
- package/node_modules/zod/src/v3/ZodError.ts +22 -12
- package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
- package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
- package/node_modules/zod/src/v3/types.ts +5 -5
- package/node_modules/zod/src/v4/classic/checks.ts +1 -0
- package/node_modules/zod/src/v4/classic/compat.ts +26 -18
- package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
- package/node_modules/zod/src/v4/classic/errors.ts +59 -44
- package/node_modules/zod/src/v4/classic/external.ts +12 -9
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +140 -78
- package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
- package/node_modules/zod/src/v4/classic/index.ts +2 -2
- package/node_modules/zod/src/v4/classic/iso.ts +2 -72
- package/node_modules/zod/src/v4/classic/parse.ts +10 -4
- package/node_modules/zod/src/v4/classic/schemas.ts +452 -262
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +135 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +30 -1
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +720 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
- package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +155 -13
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +11 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +274 -6
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +425 -10
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +281 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +47 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +46 -9
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +245 -12
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +234 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +33 -2
- package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +127 -5
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +11 -2
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1585 -173
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
- package/node_modules/zod/src/v4/core/api.ts +48 -12
- package/node_modules/zod/src/v4/core/checks.ts +57 -44
- package/node_modules/zod/src/v4/core/compile.ts +2188 -0
- package/node_modules/zod/src/v4/core/core.ts +98 -19
- package/node_modules/zod/src/v4/core/doc.ts +11 -7
- package/node_modules/zod/src/v4/core/errors.ts +115 -24
- package/node_modules/zod/src/v4/core/index.ts +3 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +6 -1
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +257 -93
- package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
- package/node_modules/zod/src/v4/core/memoizer.ts +284 -0
- package/node_modules/zod/src/v4/core/parse.ts +131 -38
- package/node_modules/zod/src/v4/core/regexes.ts +30 -13
- package/node_modules/zod/src/v4/core/registries.ts +2 -2
- package/node_modules/zod/src/v4/core/schemas.ts +759 -461
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +969 -0
- package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
- package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +1639 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
- package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +31 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +275 -42
- package/node_modules/zod/src/v4/core/util.ts +268 -42
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/core/visit.ts +193 -0
- package/node_modules/zod/src/v4/index.ts +3 -3
- package/node_modules/zod/src/v4/locales/ar.ts +3 -0
- package/node_modules/zod/src/v4/locales/az.ts +3 -0
- package/node_modules/zod/src/v4/locales/be.ts +10 -0
- package/node_modules/zod/src/v4/locales/bg.ts +3 -0
- package/node_modules/zod/src/v4/locales/bn.ts +121 -0
- package/node_modules/zod/src/v4/locales/ca.ts +3 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +138 -0
- package/node_modules/zod/src/v4/locales/cs.ts +3 -0
- package/node_modules/zod/src/v4/locales/da.ts +5 -2
- package/node_modules/zod/src/v4/locales/de.ts +3 -0
- package/node_modules/zod/src/v4/locales/el.ts +1 -0
- package/node_modules/zod/src/v4/locales/en.ts +15 -4
- package/node_modules/zod/src/v4/locales/eo.ts +3 -0
- package/node_modules/zod/src/v4/locales/es.ts +2 -0
- package/node_modules/zod/src/v4/locales/fa.ts +3 -0
- package/node_modules/zod/src/v4/locales/fi.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr.ts +19 -14
- package/node_modules/zod/src/v4/locales/gu.ts +121 -0
- package/node_modules/zod/src/v4/locales/he.ts +6 -1
- package/node_modules/zod/src/v4/locales/hi.ts +124 -0
- package/node_modules/zod/src/v4/locales/hr.ts +2 -0
- package/node_modules/zod/src/v4/locales/hu.ts +3 -0
- package/node_modules/zod/src/v4/locales/hy.ts +9 -0
- package/node_modules/zod/src/v4/locales/id.ts +3 -0
- package/node_modules/zod/src/v4/locales/index.ts +10 -0
- package/node_modules/zod/src/v4/locales/is.ts +3 -0
- package/node_modules/zod/src/v4/locales/it.ts +3 -0
- package/node_modules/zod/src/v4/locales/ja.ts +3 -0
- package/node_modules/zod/src/v4/locales/ka.ts +3 -0
- package/node_modules/zod/src/v4/locales/km.ts +3 -0
- package/node_modules/zod/src/v4/locales/kn.ts +124 -0
- package/node_modules/zod/src/v4/locales/ko.ts +3 -0
- package/node_modules/zod/src/v4/locales/lt.ts +2 -0
- package/node_modules/zod/src/v4/locales/mk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ms.ts +3 -0
- package/node_modules/zod/src/v4/locales/ne.ts +126 -0
- package/node_modules/zod/src/v4/locales/nl.ts +3 -0
- package/node_modules/zod/src/v4/locales/nn.ts +119 -0
- package/node_modules/zod/src/v4/locales/no.ts +5 -2
- package/node_modules/zod/src/v4/locales/ota.ts +3 -0
- package/node_modules/zod/src/v4/locales/pl.ts +3 -0
- package/node_modules/zod/src/v4/locales/ps.ts +3 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +159 -0
- package/node_modules/zod/src/v4/locales/pt.ts +99 -58
- package/node_modules/zod/src/v4/locales/ro.ts +1 -0
- package/node_modules/zod/src/v4/locales/ru.ts +10 -0
- package/node_modules/zod/src/v4/locales/sk.ts +121 -0
- package/node_modules/zod/src/v4/locales/sl.ts +3 -0
- package/node_modules/zod/src/v4/locales/sv.ts +5 -2
- package/node_modules/zod/src/v4/locales/ta.ts +3 -0
- package/node_modules/zod/src/v4/locales/th.ts +3 -0
- package/node_modules/zod/src/v4/locales/tk.ts +111 -0
- package/node_modules/zod/src/v4/locales/tr.ts +3 -0
- package/node_modules/zod/src/v4/locales/uk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ur.ts +3 -0
- package/node_modules/zod/src/v4/locales/uz.ts +1 -0
- package/node_modules/zod/src/v4/locales/vi.ts +3 -0
- package/node_modules/zod/src/v4/locales/yo.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +3 -0
- package/node_modules/zod/src/v4/mini/checks.ts +1 -0
- package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
- package/node_modules/zod/src/v4/mini/external.ts +10 -1
- package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
- package/node_modules/zod/src/v4/mini/parse.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +135 -56
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
- package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +72 -5
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +21 -0
- package/node_modules/zod/v3/ZodError.cjs +22 -12
- package/node_modules/zod/v3/ZodError.d.cts +1 -1
- package/node_modules/zod/v3/ZodError.d.ts +1 -1
- package/node_modules/zod/v3/ZodError.js +22 -12
- package/node_modules/zod/v3/types.cjs +7 -5
- package/node_modules/zod/v3/types.js +7 -5
- package/node_modules/zod/v4/classic/checks.cjs +2 -1
- package/node_modules/zod/v4/classic/checks.d.cts +1 -1
- package/node_modules/zod/v4/classic/checks.d.ts +1 -1
- package/node_modules/zod/v4/classic/checks.js +1 -1
- package/node_modules/zod/v4/classic/compat.d.cts +9 -11
- package/node_modules/zod/v4/classic/compat.d.ts +9 -11
- package/node_modules/zod/v4/classic/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.js +13 -0
- package/node_modules/zod/v4/classic/errors.cjs +43 -34
- package/node_modules/zod/v4/classic/errors.d.cts +3 -4
- package/node_modules/zod/v4/classic/errors.d.ts +3 -4
- package/node_modules/zod/v4/classic/errors.js +43 -34
- package/node_modules/zod/v4/classic/external.cjs +30 -27
- package/node_modules/zod/v4/classic/external.d.cts +5 -2
- package/node_modules/zod/v4/classic/external.d.ts +5 -2
- package/node_modules/zod/v4/classic/external.js +5 -8
- package/node_modules/zod/v4/classic/from-json-schema.cjs +136 -75
- package/node_modules/zod/v4/classic/from-json-schema.js +136 -75
- package/node_modules/zod/v4/classic/in-out.cjs +63 -0
- package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
- package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
- package/node_modules/zod/v4/classic/in-out.js +36 -0
- package/node_modules/zod/v4/classic/index.cjs +2 -2
- package/node_modules/zod/v4/classic/index.d.cts +1 -2
- package/node_modules/zod/v4/classic/index.d.ts +1 -2
- package/node_modules/zod/v4/classic/index.js +2 -2
- package/node_modules/zod/v4/classic/iso.cjs +11 -22
- package/node_modules/zod/v4/classic/iso.d.cts +2 -17
- package/node_modules/zod/v4/classic/iso.d.ts +2 -17
- package/node_modules/zod/v4/classic/iso.js +2 -17
- package/node_modules/zod/v4/classic/parse.cjs +4 -1
- package/node_modules/zod/v4/classic/parse.d.cts +17 -4
- package/node_modules/zod/v4/classic/parse.d.ts +17 -4
- package/node_modules/zod/v4/classic/parse.js +1 -0
- package/node_modules/zod/v4/classic/schemas.cjs +498 -398
- package/node_modules/zod/v4/classic/schemas.d.cts +53 -18
- package/node_modules/zod/v4/classic/schemas.d.ts +53 -18
- package/node_modules/zod/v4/classic/schemas.js +492 -396
- package/node_modules/zod/v4/core/api.cjs +23 -4
- package/node_modules/zod/v4/core/api.d.cts +13 -9
- package/node_modules/zod/v4/core/api.d.ts +13 -9
- package/node_modules/zod/v4/core/api.js +21 -4
- package/node_modules/zod/v4/core/checks.cjs +37 -31
- package/node_modules/zod/v4/core/checks.d.cts +13 -13
- package/node_modules/zod/v4/core/checks.d.ts +13 -13
- package/node_modules/zod/v4/core/checks.js +37 -31
- package/node_modules/zod/v4/core/compile.cjs +1813 -0
- package/node_modules/zod/v4/core/compile.d.cts +51 -0
- package/node_modules/zod/v4/core/compile.d.ts +51 -0
- package/node_modules/zod/v4/core/compile.js +1783 -0
- package/node_modules/zod/v4/core/core.cjs +81 -18
- package/node_modules/zod/v4/core/core.d.cts +16 -4
- package/node_modules/zod/v4/core/core.d.ts +16 -4
- package/node_modules/zod/v4/core/core.js +82 -19
- package/node_modules/zod/v4/core/doc.cjs +5 -7
- package/node_modules/zod/v4/core/doc.d.cts +3 -1
- package/node_modules/zod/v4/core/doc.d.ts +3 -1
- package/node_modules/zod/v4/core/doc.js +5 -7
- package/node_modules/zod/v4/core/errors.cjs +110 -25
- package/node_modules/zod/v4/core/errors.d.cts +4 -0
- package/node_modules/zod/v4/core/errors.d.ts +4 -0
- package/node_modules/zod/v4/core/errors.js +110 -25
- package/node_modules/zod/v4/core/index.cjs +5 -1
- package/node_modules/zod/v4/core/index.d.cts +3 -0
- package/node_modules/zod/v4/core/index.d.ts +3 -0
- package/node_modules/zod/v4/core/index.js +3 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +4 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.js +4 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +264 -95
- package/node_modules/zod/v4/core/json-schema-processors.js +243 -97
- package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
- package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
- package/node_modules/zod/v4/core/memoizer.cjs +272 -0
- package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
- package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
- package/node_modules/zod/v4/core/memoizer.js +265 -0
- package/node_modules/zod/v4/core/parse.cjs +96 -34
- package/node_modules/zod/v4/core/parse.d.cts +14 -11
- package/node_modules/zod/v4/core/parse.d.ts +14 -11
- package/node_modules/zod/v4/core/parse.js +94 -33
- package/node_modules/zod/v4/core/regexes.cjs +27 -15
- package/node_modules/zod/v4/core/regexes.d.cts +2 -0
- package/node_modules/zod/v4/core/regexes.d.ts +2 -0
- package/node_modules/zod/v4/core/regexes.js +24 -13
- package/node_modules/zod/v4/core/registries.js +2 -2
- package/node_modules/zod/v4/core/schemas.cjs +537 -326
- package/node_modules/zod/v4/core/schemas.d.cts +100 -31
- package/node_modules/zod/v4/core/schemas.d.ts +100 -31
- package/node_modules/zod/v4/core/schemas.js +526 -325
- package/node_modules/zod/v4/core/to-json-schema.cjs +242 -39
- package/node_modules/zod/v4/core/to-json-schema.d.cts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.d.ts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.js +241 -39
- package/node_modules/zod/v4/core/util.cjs +212 -31
- package/node_modules/zod/v4/core/util.d.cts +58 -1
- package/node_modules/zod/v4/core/util.d.ts +58 -1
- package/node_modules/zod/v4/core/util.js +202 -30
- package/node_modules/zod/v4/core/versions.cjs +2 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +195 -0
- package/node_modules/zod/v4/core/visit.d.cts +30 -0
- package/node_modules/zod/v4/core/visit.d.ts +30 -0
- package/node_modules/zod/v4/core/visit.js +169 -0
- package/node_modules/zod/v4/index.cjs +15 -5
- package/node_modules/zod/v4/index.d.cts +2 -2
- package/node_modules/zod/v4/index.d.ts +2 -2
- package/node_modules/zod/v4/index.js +3 -2
- package/node_modules/zod/v4/locales/ar.cjs +3 -0
- package/node_modules/zod/v4/locales/ar.js +3 -0
- package/node_modules/zod/v4/locales/az.cjs +3 -0
- package/node_modules/zod/v4/locales/az.js +3 -0
- package/node_modules/zod/v4/locales/be.cjs +10 -0
- package/node_modules/zod/v4/locales/be.js +10 -0
- package/node_modules/zod/v4/locales/bg.cjs +3 -0
- package/node_modules/zod/v4/locales/bg.js +3 -0
- package/node_modules/zod/v4/locales/bn.cjs +138 -0
- package/node_modules/zod/v4/locales/bn.d.cts +5 -0
- package/node_modules/zod/v4/locales/bn.d.ts +4 -0
- package/node_modules/zod/v4/locales/bn.js +111 -0
- package/node_modules/zod/v4/locales/ca.cjs +3 -0
- package/node_modules/zod/v4/locales/ca.js +3 -0
- package/node_modules/zod/v4/locales/ckb.cjs +158 -0
- package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
- package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
- package/node_modules/zod/v4/locales/ckb.js +131 -0
- package/node_modules/zod/v4/locales/cs.cjs +3 -0
- package/node_modules/zod/v4/locales/cs.js +3 -0
- package/node_modules/zod/v4/locales/da.cjs +5 -2
- package/node_modules/zod/v4/locales/da.js +5 -2
- package/node_modules/zod/v4/locales/de.cjs +3 -0
- package/node_modules/zod/v4/locales/de.js +3 -0
- package/node_modules/zod/v4/locales/el.cjs +1 -0
- package/node_modules/zod/v4/locales/el.js +1 -0
- package/node_modules/zod/v4/locales/en.cjs +14 -4
- package/node_modules/zod/v4/locales/en.js +14 -4
- package/node_modules/zod/v4/locales/eo.cjs +3 -0
- package/node_modules/zod/v4/locales/eo.js +3 -0
- package/node_modules/zod/v4/locales/es.cjs +2 -0
- package/node_modules/zod/v4/locales/es.js +2 -0
- package/node_modules/zod/v4/locales/fa.cjs +3 -0
- package/node_modules/zod/v4/locales/fa.js +3 -0
- package/node_modules/zod/v4/locales/fi.cjs +3 -0
- package/node_modules/zod/v4/locales/fi.js +3 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +3 -0
- package/node_modules/zod/v4/locales/fr-CA.js +3 -0
- package/node_modules/zod/v4/locales/fr.cjs +16 -14
- package/node_modules/zod/v4/locales/fr.js +16 -14
- package/node_modules/zod/v4/locales/gu.cjs +138 -0
- package/node_modules/zod/v4/locales/gu.d.cts +5 -0
- package/node_modules/zod/v4/locales/gu.d.ts +4 -0
- package/node_modules/zod/v4/locales/gu.js +111 -0
- package/node_modules/zod/v4/locales/he.cjs +5 -0
- package/node_modules/zod/v4/locales/he.js +5 -0
- package/node_modules/zod/v4/locales/hi.cjs +136 -0
- package/node_modules/zod/v4/locales/hi.d.cts +5 -0
- package/node_modules/zod/v4/locales/hi.d.ts +4 -0
- package/node_modules/zod/v4/locales/hi.js +109 -0
- package/node_modules/zod/v4/locales/hr.cjs +2 -0
- package/node_modules/zod/v4/locales/hr.js +2 -0
- package/node_modules/zod/v4/locales/hu.cjs +3 -0
- package/node_modules/zod/v4/locales/hu.js +3 -0
- package/node_modules/zod/v4/locales/hy.cjs +9 -0
- package/node_modules/zod/v4/locales/hy.js +9 -0
- package/node_modules/zod/v4/locales/id.cjs +3 -0
- package/node_modules/zod/v4/locales/id.js +3 -0
- package/node_modules/zod/v4/locales/index.cjs +22 -2
- package/node_modules/zod/v4/locales/index.d.cts +10 -0
- package/node_modules/zod/v4/locales/index.d.ts +10 -0
- package/node_modules/zod/v4/locales/index.js +10 -0
- package/node_modules/zod/v4/locales/is.cjs +3 -0
- package/node_modules/zod/v4/locales/is.js +3 -0
- package/node_modules/zod/v4/locales/it.cjs +3 -0
- package/node_modules/zod/v4/locales/it.js +3 -0
- package/node_modules/zod/v4/locales/ja.cjs +3 -0
- package/node_modules/zod/v4/locales/ja.js +3 -0
- package/node_modules/zod/v4/locales/ka.cjs +3 -0
- package/node_modules/zod/v4/locales/ka.js +3 -0
- package/node_modules/zod/v4/locales/km.cjs +3 -0
- package/node_modules/zod/v4/locales/km.js +3 -0
- package/node_modules/zod/v4/locales/kn.cjs +141 -0
- package/node_modules/zod/v4/locales/kn.d.cts +5 -0
- package/node_modules/zod/v4/locales/kn.d.ts +4 -0
- package/node_modules/zod/v4/locales/kn.js +114 -0
- package/node_modules/zod/v4/locales/ko.cjs +3 -0
- package/node_modules/zod/v4/locales/ko.js +3 -0
- package/node_modules/zod/v4/locales/lt.cjs +2 -0
- package/node_modules/zod/v4/locales/lt.js +2 -0
- package/node_modules/zod/v4/locales/mk.cjs +3 -0
- package/node_modules/zod/v4/locales/mk.js +3 -0
- package/node_modules/zod/v4/locales/ms.cjs +3 -0
- package/node_modules/zod/v4/locales/ms.js +3 -0
- package/node_modules/zod/v4/locales/ne.cjs +136 -0
- package/node_modules/zod/v4/locales/ne.d.cts +5 -0
- package/node_modules/zod/v4/locales/ne.d.ts +4 -0
- package/node_modules/zod/v4/locales/ne.js +109 -0
- package/node_modules/zod/v4/locales/nl.cjs +3 -0
- package/node_modules/zod/v4/locales/nl.js +3 -0
- package/node_modules/zod/v4/locales/nn.cjs +138 -0
- package/node_modules/zod/v4/locales/nn.d.cts +5 -0
- package/node_modules/zod/v4/locales/nn.d.ts +4 -0
- package/node_modules/zod/v4/locales/nn.js +111 -0
- package/node_modules/zod/v4/locales/no.cjs +5 -2
- package/node_modules/zod/v4/locales/no.js +5 -2
- package/node_modules/zod/v4/locales/ota.cjs +3 -0
- package/node_modules/zod/v4/locales/ota.js +3 -0
- package/node_modules/zod/v4/locales/pl.cjs +3 -0
- package/node_modules/zod/v4/locales/pl.js +3 -0
- package/node_modules/zod/v4/locales/ps.cjs +3 -0
- package/node_modules/zod/v4/locales/ps.js +3 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +168 -0
- package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt-BR.js +141 -0
- package/node_modules/zod/v4/locales/pt.cjs +87 -55
- package/node_modules/zod/v4/locales/pt.js +87 -55
- package/node_modules/zod/v4/locales/ro.cjs +1 -0
- package/node_modules/zod/v4/locales/ro.js +1 -0
- package/node_modules/zod/v4/locales/ru.cjs +10 -0
- package/node_modules/zod/v4/locales/ru.js +10 -0
- package/node_modules/zod/v4/locales/sk.cjs +141 -0
- package/node_modules/zod/v4/locales/sk.d.cts +5 -0
- package/node_modules/zod/v4/locales/sk.d.ts +4 -0
- package/node_modules/zod/v4/locales/sk.js +114 -0
- package/node_modules/zod/v4/locales/sl.cjs +3 -0
- package/node_modules/zod/v4/locales/sl.js +3 -0
- package/node_modules/zod/v4/locales/sv.cjs +5 -2
- package/node_modules/zod/v4/locales/sv.js +5 -2
- package/node_modules/zod/v4/locales/ta.cjs +3 -0
- package/node_modules/zod/v4/locales/ta.js +3 -0
- package/node_modules/zod/v4/locales/th.cjs +3 -0
- package/node_modules/zod/v4/locales/th.js +3 -0
- package/node_modules/zod/v4/locales/tk.cjs +132 -0
- package/node_modules/zod/v4/locales/tk.d.cts +5 -0
- package/node_modules/zod/v4/locales/tk.d.ts +4 -0
- package/node_modules/zod/v4/locales/tk.js +105 -0
- package/node_modules/zod/v4/locales/tr.cjs +3 -0
- package/node_modules/zod/v4/locales/tr.js +3 -0
- package/node_modules/zod/v4/locales/uk.cjs +3 -0
- package/node_modules/zod/v4/locales/uk.js +3 -0
- package/node_modules/zod/v4/locales/ur.cjs +3 -0
- package/node_modules/zod/v4/locales/ur.js +3 -0
- package/node_modules/zod/v4/locales/uz.cjs +1 -0
- package/node_modules/zod/v4/locales/uz.js +1 -0
- package/node_modules/zod/v4/locales/vi.cjs +3 -0
- package/node_modules/zod/v4/locales/vi.js +3 -0
- package/node_modules/zod/v4/locales/yo.cjs +3 -0
- package/node_modules/zod/v4/locales/yo.js +3 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-CN.js +3 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-TW.js +3 -0
- package/node_modules/zod/v4/mini/checks.cjs +2 -1
- package/node_modules/zod/v4/mini/checks.d.cts +1 -1
- package/node_modules/zod/v4/mini/checks.d.ts +1 -1
- package/node_modules/zod/v4/mini/checks.js +1 -1
- package/node_modules/zod/v4/mini/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.js +13 -0
- package/node_modules/zod/v4/mini/external.cjs +12 -1
- package/node_modules/zod/v4/mini/external.d.cts +5 -2
- package/node_modules/zod/v4/mini/external.d.ts +5 -2
- package/node_modules/zod/v4/mini/external.js +3 -1
- package/node_modules/zod/v4/mini/in-out.cjs +63 -0
- package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
- package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
- package/node_modules/zod/v4/mini/in-out.js +36 -0
- package/node_modules/zod/v4/mini/parse.cjs +3 -1
- package/node_modules/zod/v4/mini/parse.d.cts +1 -1
- package/node_modules/zod/v4/mini/parse.d.ts +1 -1
- package/node_modules/zod/v4/mini/parse.js +1 -1
- package/node_modules/zod/v4/mini/schemas.cjs +75 -47
- package/node_modules/zod/v4/mini/schemas.d.cts +43 -13
- package/node_modules/zod/v4/mini/schemas.d.ts +43 -13
- package/node_modules/zod/v4/mini/schemas.js +71 -45
- package/openclaw.plugin.json +12 -28
- package/package.json +12 -7
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- package/dist/{accounts-CCirBEIm.js → .setup/accounts-Dv0uksBG.mjs} +2 -2
- /package/dist/{config-schema-CCbTcJEV.js → .setup/config-schema-CCbTcJEV.mjs} +0 -0
- /package/dist/{conversation-bindings-GDQ_Laxj.js → .setup/conversation-bindings-GDQ_Laxj.mjs} +0 -0
- /package/dist/{outbound-send-deps-B-QEsLSM.js → .setup/outbound-send-deps-B-QEsLSM.mjs} +0 -0
- /package/dist/{reaction-context-Br-vAJFp.js → .setup/reaction-context-Br-vAJFp.mjs} +0 -0
- /package/dist/{rolldown-runtime-D7D4PA-g.js → .setup/rolldown-runtime-D7D4PA-g.mjs} +0 -0
- /package/dist/{runtime-Cza4CY5T.js → .setup/runtime-Cza4CY5T.mjs} +0 -0
- /package/dist/{state-contract-DvahEY4X.js → .setup/state-contract-DvahEY4X.mjs} +0 -0
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { f as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { n as
|
|
11
|
-
import { n as
|
|
1
|
+
import { c as parseIMessageTarget, o as normalizeIMessageHandle, r as isAllowedIMessageReplyContextSender, s as parseIMessageAllowTarget, t as formatIMessageChatTarget } from "./targets-Cc9vthzI.mjs";
|
|
2
|
+
import { d as resolveIMessageChatDbLookupPath, f as resolveIMessageHomeDir, l as resolveIMessageRemoteHost, o as resolveIMessageAccount } from "./accounts-Dv0uksBG.mjs";
|
|
3
|
+
import { r as imessageRpcSupportsMethod } from "./message-tool-api-DZSH-2gY.mjs";
|
|
4
|
+
import { b as resolveIMessageDirectChatService, d as isKnownFromMeIMessageMessageId, f as rememberIMessageReplyCache, o as createIMessageRpcClient, r as sanitizeOutboundText } from "./sanitize-outbound-o1ePXajW.mjs";
|
|
5
|
+
import { d as probeIMessagePrivateApi, r as resolveIMessageInboundConversationId, u as probeIMessage } from "./group-policy-BoOAkmoQ.mjs";
|
|
6
|
+
import { t as getIMessageRuntime } from "./runtime-Cza4CY5T.mjs";
|
|
7
|
+
import { d as resolveIMessageEchoMediaKey, l as capFailureRetriesMap, t as IMESSAGE_CATCHUP_CURSOR_NAMESPACE, u as resolveIMessageCatchupCursorKey } from "./state-contract-DvahEY4X.mjs";
|
|
8
|
+
import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-BpPh5Oh1.mjs";
|
|
9
|
+
import { i as registerIMessageApprovalReactionTarget, n as handleIMessageApprovalReaction, o as listPendingIMessageApprovalReactionPollTargets, r as maybeResolveIMessageApprovalReaction, s as buildIMessageApprovalConversationKeyForInbound } from "./approval-reactions-CX1-6KeG.mjs";
|
|
10
|
+
import { c as iMessageApprovalControlBindings, n as hasPersistedIMessageEcho, r as stripLeadingEchoTextCorruptionMarkers, s as maybeResolveIMessageApprovalPollVote, t as sendMessageIMessage } from "./send-DXiUWygv.mjs";
|
|
11
|
+
import { n as normalizeIMessageGuid, t as resolveIMessageReactionContext } from "./reaction-context-Br-vAJFp.mjs";
|
|
12
|
+
import { n as maybeResolveIMessageQuestionReaction, t as hasIMessageQuestionReactionTarget } from "./question-reactions-lm8OxWbb.mjs";
|
|
13
|
+
import { asSafeIntegerInRange, hasNonEmptyString, isRecord, normalizeOptionalString, normalizeStringEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
12
14
|
import { bindIngressLifecycleToReplyOptions, createChannelIngressError, createChannelIngressMonitor, createChannelMessageReplyPipeline, resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
|
|
13
|
-
import {
|
|
15
|
+
import { resolveTextChunkLimit } from "openclaw/plugin-sdk/reply-runtime";
|
|
14
16
|
import { resolveAgentRoute, resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
|
|
15
17
|
import path from "node:path";
|
|
16
18
|
import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
|
|
17
|
-
import { asSafeIntegerInRange, hasNonEmptyString, isRecord, normalizeOptionalString, normalizeStringEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
18
19
|
import fs from "node:fs/promises";
|
|
19
20
|
import { createNonExitingRuntime, danger, logVerbose, shouldLogVerbose, warn } from "openclaw/plugin-sdk/runtime-env";
|
|
20
21
|
import { isInboundPathAllowed, kindFromMime } from "openclaw/plugin-sdk/media-runtime";
|
|
@@ -37,7 +38,7 @@ import { channelReadyPatch } from "openclaw/plugin-sdk/gateway-runtime";
|
|
|
37
38
|
import { redactIdentifier } from "openclaw/plugin-sdk/logging-core";
|
|
38
39
|
import { DEFAULT_GROUP_HISTORY_LIMIT, createChannelHistoryWindow } from "openclaw/plugin-sdk/reply-history";
|
|
39
40
|
import { resolveDefaultGroupPolicy, resolveOpenProviderRuntimeGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
|
|
40
|
-
import { openLocalFileSafely, resolvePinnedMainDmOwnerFromAllowlist } from "openclaw/plugin-sdk/security-runtime";
|
|
41
|
+
import { FsSafeError, openLocalFileSafely, resolvePinnedMainDmOwnerFromAllowlist } from "openclaw/plugin-sdk/security-runtime";
|
|
41
42
|
import { getSessionEntry, readSessionUpdatedAt, resolveSendPolicy, resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
|
|
42
43
|
import { openNodeSqliteDatabase } from "openclaw/plugin-sdk/sqlite-runtime";
|
|
43
44
|
import { waitForTransportReady } from "openclaw/plugin-sdk/transport-ready-runtime";
|
|
@@ -46,16 +47,18 @@ import { resolveMarkdownTableMode as resolveMarkdownTableMode$1 } from "openclaw
|
|
|
46
47
|
import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
|
|
47
48
|
import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
|
|
48
49
|
import { deliverTextOrMediaReply, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
|
|
50
|
+
import { chunkMarkdownTextWithMode as chunkTextWithMode, resolveChunkMode } from "openclaw/plugin-sdk/reply-chunking";
|
|
49
51
|
import { createDedupeCache } from "openclaw/plugin-sdk/dedupe-runtime";
|
|
50
52
|
import { hasControlCommand } from "openclaw/plugin-sdk/command-auth-native";
|
|
51
53
|
import { resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context-visibility-runtime";
|
|
52
54
|
import { isRecord as isRecord$1 } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
55
|
+
import { readFileHandleBounded } from "openclaw/plugin-sdk/file-access-runtime";
|
|
53
56
|
import { saveMediaBuffer } from "openclaw/plugin-sdk/media-store";
|
|
54
57
|
import { loadWebMedia } from "openclaw/plugin-sdk/web-media";
|
|
55
58
|
import { enqueueSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
|
|
56
59
|
//#region extensions/imessage/src/approval-reaction-poller.ts
|
|
57
60
|
const RECENT_CHAT_LIMIT = 50;
|
|
58
|
-
const PER_CHAT_HISTORY_LIMIT = 30;
|
|
61
|
+
const PER_CHAT_HISTORY_LIMIT$1 = 30;
|
|
59
62
|
function normalizeChatId(value) {
|
|
60
63
|
return asPositiveFiniteNumber(value) ?? null;
|
|
61
64
|
}
|
|
@@ -89,7 +92,7 @@ async function listRecentChatIds(client) {
|
|
|
89
92
|
async function fetchRecentHistory(params) {
|
|
90
93
|
return ((await params.client.request("messages.history", {
|
|
91
94
|
chat_id: params.chatId,
|
|
92
|
-
limit: PER_CHAT_HISTORY_LIMIT
|
|
95
|
+
limit: PER_CHAT_HISTORY_LIMIT$1
|
|
93
96
|
}, { timeoutMs: 1e4 })).messages ?? []).filter((message) => Boolean(message && typeof message === "object"));
|
|
94
97
|
}
|
|
95
98
|
function buildReactionPayload(params) {
|
|
@@ -129,14 +132,14 @@ function buildConversationKeyFromMessage(message) {
|
|
|
129
132
|
...normalizeChatId(message.chat_id) !== null ? { chatId: message.chat_id } : {}
|
|
130
133
|
};
|
|
131
134
|
}
|
|
132
|
-
function bindObservedConversation(params) {
|
|
135
|
+
async function bindObservedConversation(params) {
|
|
133
136
|
const nowMs = asDateTimestampMs(Date.now());
|
|
134
137
|
const expiresAtMs = asDateTimestampMs(params.target.expiresAtMs);
|
|
135
138
|
if (nowMs === void 0 || expiresAtMs === void 0 || expiresAtMs <= nowMs) return;
|
|
136
139
|
const ttlMs = expiresAtMs - nowMs;
|
|
137
140
|
const conversation = buildConversationKeyFromMessage(params.message);
|
|
138
141
|
const messageIds = /* @__PURE__ */ new Set([...enumerateMessageGuidCandidates(params.target.messageId), ...enumerateMessageGuidCandidates(params.message.guid ?? "")]);
|
|
139
|
-
|
|
142
|
+
await Promise.all([...messageIds].map((messageId) => registerIMessageApprovalReactionTarget({
|
|
140
143
|
accountId: params.target.accountId,
|
|
141
144
|
conversation,
|
|
142
145
|
messageId,
|
|
@@ -144,7 +147,7 @@ function bindObservedConversation(params) {
|
|
|
144
147
|
approvalKind: params.target.approvalKind,
|
|
145
148
|
allowedDecisions: params.target.allowedDecisions,
|
|
146
149
|
ttlMs
|
|
147
|
-
});
|
|
150
|
+
})));
|
|
148
151
|
}
|
|
149
152
|
async function pollPendingIMessageApprovalReactions(params) {
|
|
150
153
|
const targets = await listPendingIMessageApprovalReactionPollTargets({ accountId: params.accountId });
|
|
@@ -169,7 +172,7 @@ async function pollPendingIMessageApprovalReactions(params) {
|
|
|
169
172
|
if (!targetGuid) continue;
|
|
170
173
|
const target = pendingByMessageId.get(targetGuid) ?? pendingByMessageId.get(normalizeIMessageGuid(targetGuid));
|
|
171
174
|
if (!target) continue;
|
|
172
|
-
bindObservedConversation({
|
|
175
|
+
await bindObservedConversation({
|
|
173
176
|
target,
|
|
174
177
|
message
|
|
175
178
|
});
|
|
@@ -270,16 +273,11 @@ const DEFAULT_MAX_FAILURE_RETRIES = 10;
|
|
|
270
273
|
const MAX_MAX_FAILURE_RETRIES = 1e3;
|
|
271
274
|
const cursorWriteQueue = new KeyedAsyncQueue();
|
|
272
275
|
function openCatchupCursorStore() {
|
|
273
|
-
return getIMessageRuntime().state.
|
|
276
|
+
return getIMessageRuntime().state.openKeyedStore({
|
|
274
277
|
namespace: IMESSAGE_CATCHUP_CURSOR_NAMESPACE,
|
|
275
278
|
maxEntries: 256
|
|
276
279
|
});
|
|
277
280
|
}
|
|
278
|
-
function updateCatchupCursorStore(key, updateValue) {
|
|
279
|
-
const store = openCatchupCursorStore();
|
|
280
|
-
if (!store.update) throw new Error("iMessage catchup cursor persistence requires atomic plugin-state update.");
|
|
281
|
-
return store.update(key, updateValue);
|
|
282
|
-
}
|
|
283
281
|
function enqueueCursorWrite(accountId, fn) {
|
|
284
282
|
const key = resolveIMessageCatchupCursorKey(accountId);
|
|
285
283
|
return cursorWriteQueue.enqueue(key, fn);
|
|
@@ -308,39 +306,58 @@ function normalizeIMessageCatchupCursor(value) {
|
|
|
308
306
|
...hasRetries ? { failureRetries } : {}
|
|
309
307
|
};
|
|
310
308
|
}
|
|
311
|
-
function readIMessageCatchupCursor(accountId) {
|
|
312
|
-
return normalizeIMessageCatchupCursor(openCatchupCursorStore().lookup(resolveIMessageCatchupCursorKey(accountId)));
|
|
313
|
-
}
|
|
314
309
|
async function loadIMessageCatchupCursor(accountId) {
|
|
315
|
-
return
|
|
310
|
+
return normalizeIMessageCatchupCursor(await openCatchupCursorStore().lookup(resolveIMessageCatchupCursorKey(accountId)));
|
|
316
311
|
}
|
|
317
|
-
function buildIMessageCatchupCursor(next) {
|
|
312
|
+
function buildIMessageCatchupCursor(next, updatedAt) {
|
|
318
313
|
const sanitized = sanitizeFailureRetriesInput(next.failureRetries);
|
|
319
314
|
const hasRetries = Object.keys(sanitized).length > 0;
|
|
320
315
|
return {
|
|
321
316
|
lastSeenMs: next.lastSeenMs,
|
|
322
317
|
lastSeenRowid: next.lastSeenRowid,
|
|
323
|
-
updatedAt
|
|
318
|
+
updatedAt,
|
|
324
319
|
...hasRetries ? { failureRetries: sanitized } : {}
|
|
325
320
|
};
|
|
326
321
|
}
|
|
327
|
-
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
322
|
+
function decideCatchupCursorSave(existingValue, cursor, allowCursorRewindForRetries) {
|
|
323
|
+
const existing = normalizeIMessageCatchupCursor(existingValue);
|
|
324
|
+
if (existing && cursor.lastSeenRowid < existing.lastSeenRowid) {
|
|
325
|
+
if (!allowCursorRewindForRetries) return {
|
|
326
|
+
operation: "update",
|
|
327
|
+
action: "keep"
|
|
328
|
+
};
|
|
329
|
+
return {
|
|
330
|
+
operation: "update",
|
|
331
|
+
action: "set",
|
|
332
|
+
value: buildIMessageCatchupCursor({
|
|
334
333
|
lastSeenMs: cursor.lastSeenMs,
|
|
335
334
|
lastSeenRowid: cursor.lastSeenRowid,
|
|
336
335
|
failureRetries: {
|
|
337
336
|
...existing.failureRetries,
|
|
338
337
|
...cursor.failureRetries
|
|
339
338
|
}
|
|
340
|
-
})
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
|
|
339
|
+
}, cursor.updatedAt)
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
operation: "update",
|
|
344
|
+
action: "set",
|
|
345
|
+
value: cursor
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
async function saveIMessageCatchupCursor(accountId, next, options = {}) {
|
|
349
|
+
const cursor = buildIMessageCatchupCursor(next, Date.now());
|
|
350
|
+
const allowCursorRewindForRetries = options.allowCursorRewindForRetries === true;
|
|
351
|
+
const store = openCatchupCursorStore();
|
|
352
|
+
if (!store.observe || !store.compareAndApply) throw new Error("iMessage catchup cursor persistence requires plugin-state comparison support.");
|
|
353
|
+
const key = resolveIMessageCatchupCursorKey(accountId);
|
|
354
|
+
let observation = await store.observe(key);
|
|
355
|
+
for (;;) {
|
|
356
|
+
const intent = decideCatchupCursorSave(observation.value, cursor, allowCursorRewindForRetries);
|
|
357
|
+
const result = await store.compareAndApply(key, observation.comparison, intent);
|
|
358
|
+
if (result.status !== "conflict") return;
|
|
359
|
+
observation = result.current;
|
|
360
|
+
}
|
|
344
361
|
}
|
|
345
362
|
function clampInt(value, min, max, fallback) {
|
|
346
363
|
return resolveIntegerOption(value, fallback, {
|
|
@@ -357,22 +374,41 @@ function resolveCatchupConfig(raw) {
|
|
|
357
374
|
maxFailureRetries: clampInt(raw?.maxFailureRetries, 1, MAX_MAX_FAILURE_RETRIES, DEFAULT_MAX_FAILURE_RETRIES)
|
|
358
375
|
};
|
|
359
376
|
}
|
|
377
|
+
function decideLiveCatchupCursorAdvance(existingValue, next, maxFailureRetries) {
|
|
378
|
+
const cursor = normalizeIMessageCatchupCursor(existingValue);
|
|
379
|
+
if (cursor && next.lastSeenRowid <= cursor.lastSeenRowid) return {
|
|
380
|
+
operation: "update",
|
|
381
|
+
action: "keep"
|
|
382
|
+
};
|
|
383
|
+
if (Object.values(cursor?.failureRetries ?? {}).some((count) => count < maxFailureRetries)) return {
|
|
384
|
+
operation: "update",
|
|
385
|
+
action: "keep"
|
|
386
|
+
};
|
|
387
|
+
return {
|
|
388
|
+
operation: "update",
|
|
389
|
+
action: "set",
|
|
390
|
+
value: buildIMessageCatchupCursor({
|
|
391
|
+
lastSeenMs: Math.max(cursor?.lastSeenMs ?? next.lastSeenMs, next.lastSeenMs),
|
|
392
|
+
lastSeenRowid: next.lastSeenRowid,
|
|
393
|
+
failureRetries: cursor?.failureRetries
|
|
394
|
+
}, next.updatedAt)
|
|
395
|
+
};
|
|
396
|
+
}
|
|
360
397
|
async function advanceIMessageCatchupCursor(accountId, next, config) {
|
|
361
398
|
if (!Number.isFinite(next.lastSeenMs) || !Number.isFinite(next.lastSeenRowid)) return false;
|
|
362
399
|
return await enqueueCursorWrite(accountId, async () => {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}
|
|
375
|
-
return advanced;
|
|
400
|
+
const cursor = buildIMessageCatchupCursor(next, Date.now());
|
|
401
|
+
const maxFailureRetries = config.maxFailureRetries;
|
|
402
|
+
const store = openCatchupCursorStore();
|
|
403
|
+
if (!store.observe || !store.compareAndApply) throw new Error("iMessage catchup cursor persistence requires plugin-state comparison support.");
|
|
404
|
+
const key = resolveIMessageCatchupCursorKey(accountId);
|
|
405
|
+
let observation = await store.observe(key);
|
|
406
|
+
for (;;) {
|
|
407
|
+
const intent = decideLiveCatchupCursorAdvance(observation.value, cursor, maxFailureRetries);
|
|
408
|
+
const result = await store.compareAndApply(key, observation.comparison, intent);
|
|
409
|
+
if (result.status !== "conflict") return result.status === "applied";
|
|
410
|
+
observation = result.current;
|
|
411
|
+
}
|
|
376
412
|
});
|
|
377
413
|
}
|
|
378
414
|
/**
|
|
@@ -594,7 +630,7 @@ function parseIMessageNotification(raw) {
|
|
|
594
630
|
}
|
|
595
631
|
//#endregion
|
|
596
632
|
//#region extensions/imessage/src/monitor/catchup-bridge.ts
|
|
597
|
-
const
|
|
633
|
+
const PER_CHAT_HISTORY_LIMIT = 500;
|
|
598
634
|
const CATCHUP_CHATS_LIST_LIMIT = 200;
|
|
599
635
|
const CATCHUP_RPC_TIMEOUT_MS = 3e4;
|
|
600
636
|
/**
|
|
@@ -638,7 +674,6 @@ async function runIMessageCatchup(params) {
|
|
|
638
674
|
}
|
|
639
675
|
const chats = chatsResult?.chats ?? [];
|
|
640
676
|
const collected = [];
|
|
641
|
-
const perChatLimit = Math.min(limit, PER_CHAT_HISTORY_LIMIT_CAP);
|
|
642
677
|
let historyFetchFailed = false;
|
|
643
678
|
let rawWatermarkRowid = -Infinity;
|
|
644
679
|
let rawWatermarkMs = -Infinity;
|
|
@@ -651,7 +686,7 @@ async function runIMessageCatchup(params) {
|
|
|
651
686
|
try {
|
|
652
687
|
historyResult = await client.request("messages.history", {
|
|
653
688
|
chat_id: chatId,
|
|
654
|
-
limit:
|
|
689
|
+
limit: PER_CHAT_HISTORY_LIMIT,
|
|
655
690
|
start: sinceISO,
|
|
656
691
|
attachments: includeAttachments
|
|
657
692
|
}, { timeoutMs: CATCHUP_RPC_TIMEOUT_MS });
|
|
@@ -758,7 +793,6 @@ async function runIMessageCatchup(params) {
|
|
|
758
793
|
*/
|
|
759
794
|
const MAX_COALESCED_TEXT_CHARS = 4e3;
|
|
760
795
|
const MAX_COALESCED_ATTACHMENTS = 20;
|
|
761
|
-
const MAX_COALESCED_ENTRIES = 10;
|
|
762
796
|
/**
|
|
763
797
|
* Combine consecutive same-sender iMessage payloads into a single payload for
|
|
764
798
|
* downstream dispatch. Used for the general inbound debounce
|
|
@@ -773,44 +807,56 @@ function combineIMessagePayloads(payloads) {
|
|
|
773
807
|
if (payloads.length === 0) throw new Error("combineIMessagePayloads: cannot combine empty payloads");
|
|
774
808
|
const first = expectDefined(payloads[0], "first iMessage payload to coalesce");
|
|
775
809
|
if (payloads.length === 1) return first;
|
|
776
|
-
const last = expectDefined(payloads.at(-1), "last iMessage payload to coalesce");
|
|
777
|
-
const boundedPayloads = payloads.length > MAX_COALESCED_ENTRIES ? [...payloads.slice(0, 9), last] : payloads;
|
|
778
810
|
const seenTexts = /* @__PURE__ */ new Set();
|
|
779
811
|
const textParts = [];
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
seenTexts.add(normalized);
|
|
786
|
-
textParts.push(text);
|
|
787
|
-
}
|
|
788
|
-
let combinedText = textParts.join(" ");
|
|
789
|
-
if (combinedText.length > MAX_COALESCED_TEXT_CHARS) combinedText = `${sliceUtf16Safe(combinedText, 0, MAX_COALESCED_TEXT_CHARS)}…[truncated]`;
|
|
790
|
-
const allAttachments = boundedPayloads.flatMap((p) => p.attachments ?? []).slice(0, MAX_COALESCED_ATTACHMENTS);
|
|
791
|
-
const createdAts = payloads.map((p) => p.created_at).filter((c) => typeof c === "string" && c.length > 0);
|
|
792
|
-
const latestCreatedAt = createdAts.length > 0 ? createdAts.reduce((a, b) => a > b ? a : b) : first.created_at;
|
|
812
|
+
const allAttachments = [];
|
|
813
|
+
const seenGuids = /* @__PURE__ */ new Set();
|
|
814
|
+
const coalescedMessageGuids = [];
|
|
815
|
+
let textLength = 0;
|
|
816
|
+
let latestCreatedAt;
|
|
793
817
|
let maxRowid = -Infinity;
|
|
794
818
|
let maxDateMs = -Infinity;
|
|
819
|
+
let reply;
|
|
820
|
+
let payloadIndex = 0;
|
|
795
821
|
for (const payload of payloads) {
|
|
822
|
+
const keepContent = payloadIndex < 9 || payloadIndex === payloads.length - 1;
|
|
823
|
+
payloadIndex += 1;
|
|
824
|
+
const createdAt = payload.created_at;
|
|
825
|
+
if (typeof createdAt === "string" && createdAt.length > 0 && (latestCreatedAt === void 0 || createdAt > latestCreatedAt)) latestCreatedAt = createdAt;
|
|
796
826
|
if (typeof payload.id === "number" && Number.isFinite(payload.id)) maxRowid = Math.max(maxRowid, payload.id);
|
|
797
|
-
const dateMs = typeof
|
|
827
|
+
const dateMs = typeof createdAt === "string" ? Date.parse(createdAt) : NaN;
|
|
798
828
|
if (Number.isFinite(dateMs)) maxDateMs = Math.max(maxDateMs, dateMs);
|
|
799
|
-
}
|
|
800
|
-
const seenGuids = /* @__PURE__ */ new Set();
|
|
801
|
-
const coalescedMessageGuids = [];
|
|
802
|
-
for (const payload of payloads) {
|
|
803
829
|
const guid = payload.guid?.trim();
|
|
804
|
-
if (
|
|
805
|
-
|
|
806
|
-
|
|
830
|
+
if (guid && !seenGuids.has(guid)) {
|
|
831
|
+
seenGuids.add(guid);
|
|
832
|
+
coalescedMessageGuids.push(guid);
|
|
833
|
+
}
|
|
834
|
+
if (!reply && (payload.thread_originator_guid != null || payload.reply_to_guid != null)) reply = payload;
|
|
835
|
+
if (!keepContent) continue;
|
|
836
|
+
const text = textLength <= MAX_COALESCED_TEXT_CHARS ? (payload.text ?? "").trim() : "";
|
|
837
|
+
if (text) {
|
|
838
|
+
const normalized = seenTexts.size > 0 ? text.toLowerCase() : void 0;
|
|
839
|
+
if (normalized === void 0 || !seenTexts.has(normalized)) {
|
|
840
|
+
const separatorLength = textParts.length > 0 ? 1 : 0;
|
|
841
|
+
const part = text.slice(0, 4001 - textLength - separatorLength);
|
|
842
|
+
textParts.push(part);
|
|
843
|
+
textLength += separatorLength + part.length;
|
|
844
|
+
if (textLength <= MAX_COALESCED_TEXT_CHARS) seenTexts.add(normalized ?? text.toLowerCase());
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
if (allAttachments.length < MAX_COALESCED_ATTACHMENTS) for (const attachment of payload.attachments ?? []) {
|
|
848
|
+
allAttachments.push(attachment);
|
|
849
|
+
if (allAttachments.length === MAX_COALESCED_ATTACHMENTS) break;
|
|
850
|
+
}
|
|
807
851
|
}
|
|
808
|
-
|
|
852
|
+
let combinedText = textParts.join(" ");
|
|
853
|
+
if (textLength > MAX_COALESCED_TEXT_CHARS) combinedText = `${sliceUtf16Safe(combinedText, 0, MAX_COALESCED_TEXT_CHARS)}…[truncated]`;
|
|
854
|
+
reply ??= first;
|
|
809
855
|
return {
|
|
810
856
|
...first,
|
|
811
857
|
text: combinedText,
|
|
812
858
|
attachments: allAttachments.length > 0 ? allAttachments : null,
|
|
813
|
-
created_at: latestCreatedAt,
|
|
859
|
+
created_at: latestCreatedAt ?? first.created_at,
|
|
814
860
|
thread_originator_guid: reply.thread_originator_guid ?? null,
|
|
815
861
|
reply_to_guid: reply.reply_to_guid ?? null,
|
|
816
862
|
reply_to_text: reply.reply_to_text ?? null,
|
|
@@ -1140,10 +1186,10 @@ var DefaultSentMessageCache = class {
|
|
|
1140
1186
|
}
|
|
1141
1187
|
this.cleanup();
|
|
1142
1188
|
}
|
|
1143
|
-
has(scope, lookup, options = false) {
|
|
1189
|
+
async has(scope, lookup, options = false) {
|
|
1144
1190
|
this.cleanup();
|
|
1145
1191
|
const resolvedOptions = typeof options === "boolean" ? { skipIdShortCircuit: options } : options;
|
|
1146
|
-
if (hasPersistedIMessageEcho({
|
|
1192
|
+
if (await hasPersistedIMessageEcho({
|
|
1147
1193
|
scope,
|
|
1148
1194
|
text: lookup.text,
|
|
1149
1195
|
media: lookup.media,
|
|
@@ -1467,14 +1513,14 @@ function rememberIMessageSkippedFromMeForSelfChatDedupe(params) {
|
|
|
1467
1513
|
});
|
|
1468
1514
|
else if (isAmbiguousSelfThread) params.selfChatCache?.remember(lookup);
|
|
1469
1515
|
}
|
|
1470
|
-
function hasIMessageEchoMatch(params) {
|
|
1516
|
+
async function hasIMessageEchoMatch(params) {
|
|
1471
1517
|
const scopes = typeof params.scope === "string" ? [params.scope] : params.scope;
|
|
1472
1518
|
for (const scope of scopes) {
|
|
1473
1519
|
if (!scope) continue;
|
|
1474
|
-
for (const messageId of params.messageIds) if (params.echoCache.has(scope, { messageId })) return true;
|
|
1520
|
+
for (const messageId of params.messageIds) if (await params.echoCache.has(scope, { messageId })) return true;
|
|
1475
1521
|
const fallbackMessageId = params.messageIds[0];
|
|
1476
1522
|
if (!params.text && !params.media && !fallbackMessageId) continue;
|
|
1477
|
-
if (params.echoCache.has(scope, {
|
|
1523
|
+
if (await params.echoCache.has(scope, {
|
|
1478
1524
|
text: params.text,
|
|
1479
1525
|
media: params.media,
|
|
1480
1526
|
messageId: fallbackMessageId
|
|
@@ -1485,16 +1531,17 @@ function hasIMessageEchoMatch(params) {
|
|
|
1485
1531
|
}
|
|
1486
1532
|
return false;
|
|
1487
1533
|
}
|
|
1488
|
-
function isKnownFromMeIMessageReactionTarget(params) {
|
|
1489
|
-
const {
|
|
1534
|
+
async function isKnownFromMeIMessageReactionTarget(params) {
|
|
1535
|
+
const { accountId, chatId, chatGuid, chatIdentifier } = params;
|
|
1490
1536
|
const ctx = {
|
|
1491
1537
|
accountId,
|
|
1492
1538
|
chatId,
|
|
1493
1539
|
chatGuid,
|
|
1494
1540
|
chatIdentifier
|
|
1495
1541
|
};
|
|
1496
|
-
|
|
1497
|
-
|
|
1542
|
+
const isKnownFromMe = params.isKnownFromMeMessageId ?? isKnownFromMeIMessageMessageId;
|
|
1543
|
+
for (const messageId of params.messageIds) if (await isKnownFromMe(messageId, ctx)) return true;
|
|
1544
|
+
return false;
|
|
1498
1545
|
}
|
|
1499
1546
|
/**
|
|
1500
1547
|
* Per-group `systemPrompt` resolution. Mirrors `resolveWhatsAppGroupSystemPrompt`
|
|
@@ -1581,7 +1628,7 @@ async function resolveIMessageInboundDecision(params) {
|
|
|
1581
1628
|
chatIdentifier,
|
|
1582
1629
|
sender
|
|
1583
1630
|
});
|
|
1584
|
-
if (params.echoCache && (bodyText || inboundMessageId || mediaFacts.length > 0) && hasIMessageEchoMatch({
|
|
1631
|
+
if (params.echoCache && (bodyText || inboundMessageId || mediaFacts.length > 0) && await hasIMessageEchoMatch({
|
|
1585
1632
|
echoCache: params.echoCache,
|
|
1586
1633
|
scope: echoScope,
|
|
1587
1634
|
text: bodyText || void 0,
|
|
@@ -1709,7 +1756,7 @@ async function resolveIMessageInboundDecision(params) {
|
|
|
1709
1756
|
};
|
|
1710
1757
|
const targetGuid = reactionContext.targetGuid;
|
|
1711
1758
|
const targetGuids = reactionContext.targetGuids ?? (targetGuid ? [targetGuid] : []);
|
|
1712
|
-
const targetIsOwn = Boolean(targetGuid && (params.echoCache && hasIMessageEchoMatch({
|
|
1759
|
+
const targetIsOwn = Boolean(targetGuid && (params.echoCache && await hasIMessageEchoMatch({
|
|
1713
1760
|
echoCache: params.echoCache,
|
|
1714
1761
|
scope: buildIMessageEchoScope({
|
|
1715
1762
|
accountId: params.accountId,
|
|
@@ -1720,14 +1767,14 @@ async function resolveIMessageInboundDecision(params) {
|
|
|
1720
1767
|
sender
|
|
1721
1768
|
}),
|
|
1722
1769
|
messageIds: targetGuids
|
|
1723
|
-
}) ||
|
|
1724
|
-
|
|
1770
|
+
}) || await isKnownFromMeIMessageReactionTarget({
|
|
1771
|
+
messageIds: targetGuids,
|
|
1725
1772
|
accountId: params.accountId,
|
|
1726
1773
|
chatId,
|
|
1727
1774
|
chatGuid,
|
|
1728
1775
|
chatIdentifier,
|
|
1729
1776
|
isKnownFromMeMessageId: params.isKnownFromMeMessageId
|
|
1730
|
-
})))
|
|
1777
|
+
})));
|
|
1731
1778
|
if (notificationMode === "own" && !targetIsOwn) return {
|
|
1732
1779
|
kind: "drop",
|
|
1733
1780
|
reason: "reaction target not sent by agent"
|
|
@@ -1780,7 +1827,7 @@ async function resolveIMessageInboundDecision(params) {
|
|
|
1780
1827
|
chatIdentifier,
|
|
1781
1828
|
sender
|
|
1782
1829
|
});
|
|
1783
|
-
if (hasIMessageEchoMatch({
|
|
1830
|
+
if (await hasIMessageEchoMatch({
|
|
1784
1831
|
echoCache: params.echoCache,
|
|
1785
1832
|
scope: echoScope,
|
|
1786
1833
|
text: bodyText || void 0,
|
|
@@ -1924,7 +1971,7 @@ async function buildIMessageInboundContext(params) {
|
|
|
1924
1971
|
const chatId = decision.chatId;
|
|
1925
1972
|
const chatTarget = decision.isGroup && chatId != null ? formatIMessageChatTarget(chatId) : void 0;
|
|
1926
1973
|
const messageGuid = normalizeReplyField(params.message.guid);
|
|
1927
|
-
const messageSid = (messageGuid ? rememberIMessageReplyCache({
|
|
1974
|
+
const messageSid = (messageGuid ? await rememberIMessageReplyCache({
|
|
1928
1975
|
accountId: decision.route.accountId,
|
|
1929
1976
|
messageId: messageGuid,
|
|
1930
1977
|
chatGuid: decision.chatGuid,
|
|
@@ -2302,19 +2349,6 @@ async function assertAllowedCanonicalAttachmentPath(params) {
|
|
|
2302
2349
|
roots: canonicalRoots
|
|
2303
2350
|
})) throw new Error("attachment path resolves outside allowed roots");
|
|
2304
2351
|
}
|
|
2305
|
-
async function readPinnedAttachmentBytes(handle, maxBytes) {
|
|
2306
|
-
const chunks = [];
|
|
2307
|
-
let totalBytes = 0;
|
|
2308
|
-
while (totalBytes <= maxBytes) {
|
|
2309
|
-
const remaining = maxBytes + 1 - totalBytes;
|
|
2310
|
-
const chunk = Buffer.allocUnsafe(Math.min(65536, remaining));
|
|
2311
|
-
const { bytesRead } = await handle.read(chunk, 0, chunk.length, null);
|
|
2312
|
-
if (bytesRead === 0) return Buffer.concat(chunks, totalBytes);
|
|
2313
|
-
chunks.push(chunk.subarray(0, bytesRead));
|
|
2314
|
-
totalBytes += bytesRead;
|
|
2315
|
-
}
|
|
2316
|
-
throw new Error(`attachment exceeds ${Math.round(maxBytes / 1048576)}MB limit`);
|
|
2317
|
-
}
|
|
2318
2352
|
async function readAttachmentBuffer(params) {
|
|
2319
2353
|
const opened = await (params.deps.openLocalFileSafely ?? openLocalFileSafely)({ filePath: params.attachmentPath });
|
|
2320
2354
|
try {
|
|
@@ -2323,7 +2357,10 @@ async function readAttachmentBuffer(params) {
|
|
|
2323
2357
|
canonicalPath: opened.realPath,
|
|
2324
2358
|
allowedRoots: params.allowedRoots
|
|
2325
2359
|
});
|
|
2326
|
-
const buffer = await
|
|
2360
|
+
const buffer = await readFileHandleBounded(opened.handle, params.maxBytes).catch((error) => {
|
|
2361
|
+
if (error instanceof FsSafeError && error.code === "too-large") throw new Error(`attachment exceeds ${Math.round(params.maxBytes / 1048576)}MB limit`);
|
|
2362
|
+
throw error;
|
|
2363
|
+
});
|
|
2327
2364
|
if (isHeicAttachment(params.attachmentPath, params.mimeType)) try {
|
|
2328
2365
|
const convert = params.deps.convertHeicToJpeg;
|
|
2329
2366
|
return {
|
|
@@ -2481,15 +2518,14 @@ function enqueueIMessageReactionSystemEvent(params) {
|
|
|
2481
2518
|
}
|
|
2482
2519
|
//#endregion
|
|
2483
2520
|
//#region extensions/imessage/src/monitor/recovery-cursor.ts
|
|
2484
|
-
const
|
|
2485
|
-
|
|
2521
|
+
const RECOVERY_CURSOR_STORE_OPTIONS = {
|
|
2522
|
+
namespace: "imessage.recovery-cursor",
|
|
2523
|
+
maxEntries: 64
|
|
2524
|
+
};
|
|
2486
2525
|
const LEGACY_CATCHUP_CURSOR_NAMESPACE = "imessage.catchup-cursors";
|
|
2487
2526
|
const LEGACY_CATCHUP_CURSOR_MAX_ENTRIES = 256;
|
|
2488
2527
|
function openRecoveryCursorStore() {
|
|
2489
|
-
return getIMessageRuntime().state.
|
|
2490
|
-
namespace: IMESSAGE_RECOVERY_CURSOR_NAMESPACE,
|
|
2491
|
-
maxEntries: IMESSAGE_RECOVERY_CURSOR_MAX_ENTRIES
|
|
2492
|
-
});
|
|
2528
|
+
return getIMessageRuntime().state.openKeyedStore(RECOVERY_CURSOR_STORE_OPTIONS);
|
|
2493
2529
|
}
|
|
2494
2530
|
function normalizeLocalDbPath(dbPath) {
|
|
2495
2531
|
let resolved = dbPath.trim();
|
|
@@ -2521,67 +2557,105 @@ function resolveIMessageRecoveryCursorDbIdentity(params) {
|
|
|
2521
2557
|
function recoveryCursorStoreKey(accountId, dbIdentity) {
|
|
2522
2558
|
return `${accountId}\u0000${dbIdentity}`;
|
|
2523
2559
|
}
|
|
2524
|
-
function
|
|
2560
|
+
function decideRecoveryCursorUpdate(current, update) {
|
|
2561
|
+
if (update.kind === "rewind") {
|
|
2562
|
+
if (current?.lastRowid !== update.expectedRowid) return;
|
|
2563
|
+
} else if (current && current.lastRowid >= update.rowid) return;
|
|
2564
|
+
return { lastRowid: update.rowid };
|
|
2565
|
+
}
|
|
2566
|
+
async function applyRecoveryCursorUpdate(key, update) {
|
|
2567
|
+
const state = getIMessageRuntime().state;
|
|
2568
|
+
const store = state.openKeyedStore(RECOVERY_CURSOR_STORE_OPTIONS);
|
|
2569
|
+
if (!store.observe || !store.compareAndApply) {
|
|
2570
|
+
const legacy = state.openSyncKeyedStore(RECOVERY_CURSOR_STORE_OPTIONS);
|
|
2571
|
+
if (!legacy.update) throw new Error("iMessage recovery cursor persistence requires atomic update support.");
|
|
2572
|
+
let result;
|
|
2573
|
+
legacy.update(key, (current) => {
|
|
2574
|
+
const next = decideRecoveryCursorUpdate(current, update);
|
|
2575
|
+
result = next ?? current;
|
|
2576
|
+
return next;
|
|
2577
|
+
});
|
|
2578
|
+
return result;
|
|
2579
|
+
}
|
|
2580
|
+
const observe = store.observe.bind(store);
|
|
2581
|
+
const compareAndApply = store.compareAndApply.bind(store);
|
|
2582
|
+
let observation = await observe(key);
|
|
2583
|
+
for (;;) {
|
|
2584
|
+
const next = decideRecoveryCursorUpdate(observation.value, update);
|
|
2585
|
+
if (!next) return observation.value;
|
|
2586
|
+
const result = await compareAndApply(key, observation.comparison, {
|
|
2587
|
+
operation: "update",
|
|
2588
|
+
action: "set",
|
|
2589
|
+
value: next
|
|
2590
|
+
});
|
|
2591
|
+
if (result.status !== "conflict") return next;
|
|
2592
|
+
observation = result.current;
|
|
2593
|
+
}
|
|
2594
|
+
}
|
|
2595
|
+
async function readRecoveryCursor(accountId, dbIdentity) {
|
|
2525
2596
|
try {
|
|
2526
2597
|
const store = openRecoveryCursorStore();
|
|
2527
2598
|
const key = recoveryCursorStoreKey(accountId, dbIdentity);
|
|
2528
|
-
const value = store.lookup(key);
|
|
2599
|
+
const value = await store.lookup(key);
|
|
2529
2600
|
if (value) return Number.isFinite(value.lastRowid) ? value.lastRowid : null;
|
|
2530
|
-
const legacy = store.consume(accountId);
|
|
2601
|
+
const legacy = await store.consume(accountId);
|
|
2531
2602
|
if (legacy && Number.isFinite(legacy.lastRowid)) {
|
|
2532
|
-
store.
|
|
2533
|
-
|
|
2603
|
+
await store.registerIfAbsent(key, { lastRowid: legacy.lastRowid });
|
|
2604
|
+
const adopted = await store.lookup(key);
|
|
2605
|
+
return adopted && Number.isFinite(adopted.lastRowid) ? adopted.lastRowid : null;
|
|
2534
2606
|
}
|
|
2535
2607
|
return null;
|
|
2536
2608
|
} catch {
|
|
2537
2609
|
return null;
|
|
2538
2610
|
}
|
|
2539
2611
|
}
|
|
2540
|
-
function migrateLegacyCatchupCursor(accountId, dbIdentity) {
|
|
2612
|
+
async function migrateLegacyCatchupCursor(accountId, dbIdentity) {
|
|
2541
2613
|
try {
|
|
2542
|
-
const legacy = getIMessageRuntime().state.
|
|
2614
|
+
const legacy = getIMessageRuntime().state.openKeyedStore({
|
|
2543
2615
|
namespace: LEGACY_CATCHUP_CURSOR_NAMESPACE,
|
|
2544
2616
|
maxEntries: LEGACY_CATCHUP_CURSOR_MAX_ENTRIES
|
|
2545
2617
|
});
|
|
2546
2618
|
const key = createHash("sha256").update(accountId, "utf8").digest("hex").slice(0, 32);
|
|
2547
|
-
const value = legacy.consume(key);
|
|
2619
|
+
const value = await legacy.consume(key);
|
|
2548
2620
|
const rowid = typeof value?.lastSeenRowid === "number" && Number.isFinite(value.lastSeenRowid) ? value.lastSeenRowid : null;
|
|
2549
|
-
if (rowid !== null) advanceIMessageRecoveryCursor(accountId, dbIdentity, rowid);
|
|
2621
|
+
if (rowid !== null) await advanceIMessageRecoveryCursor(accountId, dbIdentity, rowid);
|
|
2550
2622
|
return rowid;
|
|
2551
2623
|
} catch {
|
|
2552
2624
|
return null;
|
|
2553
2625
|
}
|
|
2554
2626
|
}
|
|
2555
|
-
function reconcileRecoveryCursorToWatermark(accountId, dbIdentity, cursorRowid, watermarkRowid) {
|
|
2627
|
+
async function reconcileRecoveryCursorToWatermark(accountId, dbIdentity, cursorRowid, watermarkRowid) {
|
|
2556
2628
|
if (cursorRowid === null || watermarkRowid === null || cursorRowid <= watermarkRowid) return cursorRowid;
|
|
2557
2629
|
try {
|
|
2558
|
-
|
|
2630
|
+
return (await applyRecoveryCursorUpdate(recoveryCursorStoreKey(accountId, dbIdentity), {
|
|
2631
|
+
kind: "rewind",
|
|
2632
|
+
rowid: watermarkRowid,
|
|
2633
|
+
expectedRowid: cursorRowid
|
|
2634
|
+
}))?.lastRowid ?? watermarkRowid;
|
|
2559
2635
|
} catch {
|
|
2560
2636
|
return watermarkRowid;
|
|
2561
2637
|
}
|
|
2562
|
-
return watermarkRowid;
|
|
2563
2638
|
}
|
|
2564
2639
|
/**
|
|
2565
2640
|
* Last durably admitted rowid for this account on `dbIdentity`, or null when
|
|
2566
2641
|
* none is recorded yet (including when the only stored cursor belongs to a
|
|
2567
2642
|
* different database).
|
|
2568
2643
|
*/
|
|
2569
|
-
function loadIMessageRecoveryCursor(accountId, dbIdentity, options = {}) {
|
|
2644
|
+
async function loadIMessageRecoveryCursor(accountId, dbIdentity, options = {}) {
|
|
2570
2645
|
const watermarkRowid = typeof options.watermarkRowid === "number" && Number.isFinite(options.watermarkRowid) ? options.watermarkRowid : null;
|
|
2571
|
-
const current = readRecoveryCursor(accountId, dbIdentity);
|
|
2572
|
-
if (current !== null) return reconcileRecoveryCursorToWatermark(accountId, dbIdentity, current, watermarkRowid);
|
|
2646
|
+
const current = await readRecoveryCursor(accountId, dbIdentity);
|
|
2647
|
+
if (current !== null) return await reconcileRecoveryCursorToWatermark(accountId, dbIdentity, current, watermarkRowid);
|
|
2573
2648
|
if (options.migrateLegacyCatchup === false) return null;
|
|
2574
|
-
return reconcileRecoveryCursorToWatermark(accountId, dbIdentity, migrateLegacyCatchupCursor(accountId, dbIdentity), watermarkRowid);
|
|
2649
|
+
return await reconcileRecoveryCursorToWatermark(accountId, dbIdentity, await migrateLegacyCatchupCursor(accountId, dbIdentity), watermarkRowid);
|
|
2575
2650
|
}
|
|
2576
2651
|
/** Advance the cursor forward to `rowid` (monotonic per database; never rewinds). */
|
|
2577
|
-
function advanceIMessageRecoveryCursor(accountId, dbIdentity, rowid) {
|
|
2652
|
+
async function advanceIMessageRecoveryCursor(accountId, dbIdentity, rowid) {
|
|
2578
2653
|
if (!Number.isFinite(rowid)) return;
|
|
2579
2654
|
try {
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
store.register(key, { lastRowid: rowid });
|
|
2655
|
+
await applyRecoveryCursorUpdate(recoveryCursorStoreKey(accountId, dbIdentity), {
|
|
2656
|
+
kind: "advance",
|
|
2657
|
+
rowid
|
|
2658
|
+
});
|
|
2585
2659
|
} catch {}
|
|
2586
2660
|
}
|
|
2587
2661
|
//#endregion
|
|
@@ -2905,7 +2979,7 @@ async function monitorIMessageProvider(opts = {}) {
|
|
|
2905
2979
|
dbPath,
|
|
2906
2980
|
remoteHost
|
|
2907
2981
|
});
|
|
2908
|
-
const recoveryCursorRowid = loadIMessageRecoveryCursor(accountInfo.accountId, recoveryCursorDbIdentity, {
|
|
2982
|
+
const recoveryCursorRowid = await loadIMessageRecoveryCursor(accountInfo.accountId, recoveryCursorDbIdentity, {
|
|
2909
2983
|
migrateLegacyCatchup: !catchupCfg.enabled,
|
|
2910
2984
|
watermarkRowid: recoveryBoundaryRowid
|
|
2911
2985
|
});
|
|
@@ -2919,7 +2993,7 @@ async function monitorIMessageProvider(opts = {}) {
|
|
|
2919
2993
|
for (const value of values) min = min === null ? value : Math.min(min, value);
|
|
2920
2994
|
return min;
|
|
2921
2995
|
}
|
|
2922
|
-
function advanceRecoveryCursorAfterDurableEnqueue(rowid) {
|
|
2996
|
+
async function advanceRecoveryCursorAfterDurableEnqueue(rowid) {
|
|
2923
2997
|
if (catchupCfg.enabled) return;
|
|
2924
2998
|
failedRecoveryCursorRowids.delete(rowid);
|
|
2925
2999
|
durableRecoveryCursorRowids.add(rowid);
|
|
@@ -2927,7 +3001,7 @@ async function monitorIMessageProvider(opts = {}) {
|
|
|
2927
3001
|
const holdFloor = minSetValue(failedRecoveryCursorRowids);
|
|
2928
3002
|
const nextCursorRowid = holdFloor !== null && maxDurableRowid >= holdFloor ? holdFloor - 1 : maxDurableRowid;
|
|
2929
3003
|
if (nextCursorRowid >= 0 && nextCursorRowid > latestAdvancedRecoveryCursorRowid) {
|
|
2930
|
-
advanceIMessageRecoveryCursor(accountInfo.accountId, recoveryCursorDbIdentity, nextCursorRowid);
|
|
3004
|
+
await advanceIMessageRecoveryCursor(accountInfo.accountId, recoveryCursorDbIdentity, nextCursorRowid);
|
|
2931
3005
|
latestAdvancedRecoveryCursorRowid = nextCursorRowid;
|
|
2932
3006
|
for (const durableRowid of durableRecoveryCursorRowids) if (durableRowid <= nextCursorRowid) durableRecoveryCursorRowids.delete(durableRowid);
|
|
2933
3007
|
}
|
|
@@ -3190,10 +3264,10 @@ async function monitorIMessageProvider(opts = {}) {
|
|
|
3190
3264
|
}
|
|
3191
3265
|
}
|
|
3192
3266
|
const storePath = resolveStorePath(cfg.session?.store, { agentId: decision.route.agentId });
|
|
3193
|
-
const privateApiStatus =
|
|
3267
|
+
const privateApiStatus = await probeIMessagePrivateApi(cliPath, probeTimeoutMs);
|
|
3194
3268
|
const supportsTyping = imessageRpcSupportsMethod(privateApiStatus, "typing");
|
|
3195
3269
|
const supportsRead = imessageRpcSupportsMethod(privateApiStatus, "read");
|
|
3196
|
-
if (privateApiStatus
|
|
3270
|
+
if (privateApiStatus.available) {
|
|
3197
3271
|
if (!supportsTyping || !supportsRead) warnIfImsgUpgradeNeeded.fireOnce(privateApiStatus.rpcMethods, runtime);
|
|
3198
3272
|
}
|
|
3199
3273
|
const configuredTypingMode = resolveConfiguredIMessageTypingMode(cfg, decision.route.agentId);
|
|
@@ -3566,7 +3640,7 @@ async function monitorIMessageProvider(opts = {}) {
|
|
|
3566
3640
|
return { kind: "deferred" };
|
|
3567
3641
|
},
|
|
3568
3642
|
onDurableEnqueue: async (facts) => {
|
|
3569
|
-
advanceRecoveryCursorAfterDurableEnqueue(facts.rowid);
|
|
3643
|
+
await advanceRecoveryCursorAfterDurableEnqueue(facts.rowid);
|
|
3570
3644
|
await maybeAdvanceLiveCatchupCursor({
|
|
3571
3645
|
id: facts.rowid,
|
|
3572
3646
|
created_at: facts.createdAt
|