@gaodefa/daocore 2026.5.25 → 2026.5.26

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.
Files changed (1740) hide show
  1. package/dist/abort-By0wxKlI.js +277 -0
  2. package/dist/abort.runtime-C7zfjxBp.js +2 -0
  3. package/dist/abort.runtime.js +1 -1
  4. package/dist/account-inspect-DTeLlJz-.js +173 -0
  5. package/dist/accounts-B776XBaL.js +119 -0
  6. package/dist/accounts-CLyZILFF.js +107 -0
  7. package/dist/accounts-DiXgq14W.js +107 -0
  8. package/dist/accounts-iTlRLYN8.js +2 -0
  9. package/dist/acp/control-plane/manager.d.ts +2 -1
  10. package/dist/acp-runtime-D9YQyGax.js +26 -0
  11. package/dist/acp-spawn-CWciV70C.js +1275 -0
  12. package/dist/acp-spawn-DjaS4O_V.js +2 -0
  13. package/dist/acp-stateful-target-driver-ByvGCj_i.js +89 -0
  14. package/dist/action-kill-DXeOA6YH.js +33 -0
  15. package/dist/action-runtime-BjQnG6qb.js +469 -0
  16. package/dist/action-runtime-api-a73ODsYk.js +2 -0
  17. package/dist/action-send-B_F3xwIu.js +39 -0
  18. package/dist/action-spawn-BFiW7gZJ.js +47 -0
  19. package/dist/actions-Bi7eE2I6.js +161 -0
  20. package/dist/actions.runtime-DmtbCLld.js +5 -0
  21. package/dist/agent-BOI4AdYK.js +3 -0
  22. package/dist/agent-DQPyDWP5.js +2 -0
  23. package/dist/agent-command-ClCxEw82.js +1367 -0
  24. package/dist/agent-command-DKqx29vm.d.ts +105 -0
  25. package/dist/agent-components.runtime-C5wxy4D_.js +10 -0
  26. package/dist/agent-components.runtime.js +1 -1
  27. package/dist/agent-harness-BsBVO7nU.d.ts +146 -0
  28. package/dist/agent-harness-runtime-CkdXIMHI.js +180 -0
  29. package/dist/agent-harness-runtime-KHFO733B.d.ts +691 -0
  30. package/dist/agent-harness-task-runtime-CDtn5RjX.js +140 -0
  31. package/dist/agent-runner-execution-lXW8y0i2.js +1713 -0
  32. package/dist/agent-runner-utils-OdM9hLGt.js +266 -0
  33. package/dist/agent-runner.runtime-fZnfhCJI.js +3455 -0
  34. package/dist/agent-runner.runtime.js +1 -1
  35. package/dist/agent-runtime-Dp0RDnX1.js +229 -0
  36. package/dist/agent-via-gateway-vsBf3nqZ.js +463 -0
  37. package/dist/agents/pi-embedded-runner/tool-split.d.ts +1 -1
  38. package/dist/agents.commands.add-C94vGOFH.js +304 -0
  39. package/dist/agents.commands.delete-D-p2NL4v.js +128 -0
  40. package/dist/api-BZ2QC7WM.js +2 -0
  41. package/dist/api-BmYK5Dge.js +6 -0
  42. package/dist/api-CGdlHCIH.js +3 -0
  43. package/dist/api-CGjlsXii.js +134 -0
  44. package/dist/api-DGqp6wZo.js +2 -0
  45. package/dist/api-DKpE-zdY.js +639 -0
  46. package/dist/api-DNyivJXK.d.ts +52 -0
  47. package/dist/apply-GK4z5lYw.js +54 -0
  48. package/dist/apply-_yxsBkiR.js +41 -0
  49. package/dist/approval-handler.runtime-C7d9p3DG.js +130 -0
  50. package/dist/assistant-B-h25aRy.js +291 -0
  51. package/dist/attachment-normalize-DWZ4Nrn-.js +225 -0
  52. package/dist/attempt-execution-BY9C1EOu.js +558 -0
  53. package/dist/attempt-execution.runtime-SR7eolDa.js +3 -0
  54. package/dist/attempt-execution.runtime.js +1 -1
  55. package/dist/attempt-execution.shared-h6uYmkJz.js +38 -0
  56. package/dist/attempt.prompt-helpers-COc5m_TZ.js +475 -0
  57. package/dist/attempt.tool-run-context-CAtfgOqC.js +2094 -0
  58. package/dist/auth-BdkNYTYU.js +541 -0
  59. package/dist/banner-0TOO6XHd.js +397 -0
  60. package/dist/banner-DTHug6Ey.js +2 -0
  61. package/dist/binding-routing-BJ_A83Nl.js +113 -0
  62. package/dist/binding-targets-D5dmPh4R.js +121 -0
  63. package/dist/bot-DX1uG3P-.js +7894 -0
  64. package/dist/bot-deps-BpaYejaN.js +2 -0
  65. package/dist/bot-deps-CKFDy5y3.js +747 -0
  66. package/dist/bot-message-context.runtime-BKOeRg34.js +7 -0
  67. package/dist/bot-message-context.runtime.js +1 -1
  68. package/dist/bot-message-context.session.runtime-xgZdFv6P.js +12 -0
  69. package/dist/bot-message-context.session.runtime.js +1 -1
  70. package/dist/bot-native-commands.delivery.runtime-DDMQrRfJ.js +4 -0
  71. package/dist/bot-native-commands.delivery.runtime.js +1 -1
  72. package/dist/bot-native-commands.runtime-CVVvUz0h.js +13 -0
  73. package/dist/bot-native-commands.runtime.js +1 -1
  74. package/dist/bridge-server-37OWsDZc.js +113 -0
  75. package/dist/browser-cli-BC_6aZJV.js +2 -0
  76. package/dist/browser-cli-Dg1ipmgf.js +230 -0
  77. package/dist/browser-cli-actions-input-B0QuzzSW.js +473 -0
  78. package/dist/browser-cli-actions-observe-C246bas5.js +81 -0
  79. package/dist/browser-cli-debug-F64e_v4B.js +137 -0
  80. package/dist/browser-cli-inspect-Srn6eWjO.js +104 -0
  81. package/dist/browser-cli-manage-CaZ97-Me.js +443 -0
  82. package/dist/browser-cli-resize-CUR20fvZ.js +26 -0
  83. package/dist/browser-cli-shared-BhphnFVo.js +50 -0
  84. package/dist/browser-cli-state-CzaNXNWF.js +337 -0
  85. package/dist/browser-control-auth-DTY0Wx2B.js +2 -0
  86. package/dist/browser-profiles-BDGPPDJ7.js +2 -0
  87. package/dist/browser-runtime-aqBKI8Oi.js +384 -0
  88. package/dist/build-CG7aTzO9.js +257 -0
  89. package/dist/build-info.json +3 -3
  90. package/dist/bundled/boot-md/handler.js +2 -2
  91. package/dist/bundled/session-memory/handler.js +1 -1
  92. package/dist/bundled-channel-config-schema-vrKpzJVf.d.ts +3163 -0
  93. package/dist/call-Za47o1YZ.d.ts +43 -0
  94. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  95. package/dist/capability-cli-BhF26gVm.js +1782 -0
  96. package/dist/channel-5RHqx1Ge.d.ts +26 -0
  97. package/dist/channel-5_XS0Mss.js +508 -0
  98. package/dist/channel-7L-vyWOO.js +362 -0
  99. package/dist/channel-B07xPK0L.d.ts +114 -0
  100. package/dist/channel-B9b-GX-e.d.ts +14 -0
  101. package/dist/channel-BBWX_bA0.d.ts +7 -0
  102. package/dist/channel-BVxTyJ0I.js +376 -0
  103. package/dist/channel-BWIsr1r-.js +808 -0
  104. package/dist/channel-Ba0p4xM-.js +1134 -0
  105. package/dist/channel-Bi2nTop1.js +481 -0
  106. package/dist/channel-Bj29iFgF.js +740 -0
  107. package/dist/channel-Bl8tKAuG.d.ts +427 -0
  108. package/dist/channel-Bqy7BYGm.d.ts +28 -0
  109. package/dist/channel-BvzHMdKo.d.ts +8 -0
  110. package/dist/channel-C6G6-tH6.js +562 -0
  111. package/dist/channel-CBhuuq-_.js +2126 -0
  112. package/dist/channel-CMmVpcnl.js +867 -0
  113. package/dist/channel-COc7idAe.js +653 -0
  114. package/dist/channel-CcsuLAYt.d.ts +49 -0
  115. package/dist/channel-CjfuHhSU.js +1556 -0
  116. package/dist/channel-Cquy73C-.js +1249 -0
  117. package/dist/channel-Cu7Jxm_X.d.ts +104 -0
  118. package/dist/channel-CzvuskEn.js +955 -0
  119. package/dist/channel-D6u-243v.js +1777 -0
  120. package/dist/channel-DId5JNlc.d.ts +47 -0
  121. package/dist/channel-DR8PbP31.js +238 -0
  122. package/dist/channel-DUYRu5km.d.ts +7 -0
  123. package/dist/channel-DUZ0s98I.js +1496 -0
  124. package/dist/channel-DXelghSl.d.ts +8 -0
  125. package/dist/channel-FhfE8D-t.d.ts +6 -0
  126. package/dist/channel-PEX_yYEO.d.ts +64 -0
  127. package/dist/channel-aWqPl-K4.d.ts +106 -0
  128. package/dist/channel-actions.runtime-BzEqt_Va.js +265 -0
  129. package/dist/channel-actions.runtime.js +1 -1
  130. package/dist/channel-cSdO0kAq.d.ts +8 -0
  131. package/dist/channel-core-ClgodQav.d.ts +6 -0
  132. package/dist/channel-core-DDZnTvT6.js +5 -0
  133. package/dist/channel-entry-contract-Bzkb_oJX.d.ts +112 -0
  134. package/dist/channel-inbound-C2wLEE7Q.js +80 -0
  135. package/dist/channel-lifecycle-DCTZ2J_8.d.ts +126 -0
  136. package/dist/channel-pairing-pKisqGWj.d.ts +58 -0
  137. package/dist/channel-plugin-runtime-B8AWkA0i.js +998 -0
  138. package/dist/channel-plugin-runtime-ntEeH9SC.d.ts +7 -0
  139. package/dist/channel-runtime-CciKN6E5.js +408 -0
  140. package/dist/channel-za2kUUnL.d.ts +12 -0
  141. package/dist/channel.runtime-BQN8Bkb0.js +254 -0
  142. package/dist/channel.runtime-BXeGEvv7.js +21009 -0
  143. package/dist/channel.runtime-C40ILulM.js +1008 -0
  144. package/dist/channel.runtime-CJ2DSojv.js +733 -0
  145. package/dist/channel.runtime-CUaygROD.js +652 -0
  146. package/dist/channel.runtime-CcCbJhDb.js +88 -0
  147. package/dist/channel.runtime-DJbKu9D3.js +4 -0
  148. package/dist/channel.runtime-DgRuSo5T.js +109 -0
  149. package/dist/channel.runtime-tRXUD2p2.js +2528 -0
  150. package/dist/channel.setup-3aVku-g-.js +1098 -0
  151. package/dist/channel.setup-Cau-V9UT.d.ts +7 -0
  152. package/dist/channel.setup-DT7Z9egu.js +343 -0
  153. package/dist/channel.setup-DhlkGTJV.js +10 -0
  154. package/dist/channel.setup-P5V7jWHY.d.ts +6 -0
  155. package/dist/channel.setup-x333W0eZ.d.ts +8 -0
  156. package/dist/chat-D3LWYymW.js +2666 -0
  157. package/dist/chrome--ATU1T0X.js +1503 -0
  158. package/dist/cli/run-main.js +9 -9
  159. package/dist/cli-D8hIXnS1.js +1341 -0
  160. package/dist/cli-backend-C1JA33SE.d.ts +5 -0
  161. package/dist/cli-backend-D8WmqNqJ.d.ts +5 -0
  162. package/dist/cli-compaction-jmi3u2HG.js +347 -0
  163. package/dist/cli-daS2Mzjd.d.ts +20 -0
  164. package/dist/cli-metadata-Cy9MEdPv.js +22 -0
  165. package/dist/cli-runner-DuT8oeZF.js +540 -0
  166. package/dist/cli-runner-DvKgnkCL.js +2 -0
  167. package/dist/cli-runner.runtime-B-aD16MD.js +4 -0
  168. package/dist/cli-runner.runtime-DofcKX1U.js +3 -0
  169. package/dist/cli-runner.runtime.js +1 -1
  170. package/dist/cli-shared-BFZytJBA.d.ts +20 -0
  171. package/dist/cli-startup-metadata.json +13 -13
  172. package/dist/client-B5IcAlfB.js +650 -0
  173. package/dist/client-adapter-CXA67h2E.js +897 -0
  174. package/dist/client-factory-aY6TuKfQ.js +9 -0
  175. package/dist/command-auth-DS9XgXEG.js +135 -0
  176. package/dist/command-execution-startup-DQOLt5Sz.js +87 -0
  177. package/dist/command-handlers-DqxF-IM9.js +1609 -0
  178. package/dist/command-registry-BSVx1oOc.js +4 -0
  179. package/dist/command-registry-CsPIOiQ3.js +9 -0
  180. package/dist/command-registry-core-Bzu5ff5F.js +110 -0
  181. package/dist/command-status.runtime-MKsizBC-.js +90 -0
  182. package/dist/command-status.runtime.js +1 -1
  183. package/dist/commands-B6Y6rqal.d.ts +113 -0
  184. package/dist/commands-acp-ClJofWty.js +74 -0
  185. package/dist/commands-compact.runtime-7VqYX4tS.js +10 -0
  186. package/dist/commands-compact.runtime.js +1 -1
  187. package/dist/commands-handlers.runtime-Dfqf_Oyp.js +6154 -0
  188. package/dist/commands-handlers.runtime.js +1 -1
  189. package/dist/commands-status-CRaEj9Vf.js +16 -0
  190. package/dist/commands-status-uDaqCP2F.js +3 -0
  191. package/dist/commands-status.runtime-uDaqCP2F.js +3 -0
  192. package/dist/commands-status.runtime.js +1 -1
  193. package/dist/commands-subagents-control.runtime-BaYcGLtc.js +2 -0
  194. package/dist/commands-subagents-control.runtime-C4xMpLed.js +3 -0
  195. package/dist/commands-subagents-control.runtime.js +1 -1
  196. package/dist/commands-system-prompt-C3lzz7wW.js +162 -0
  197. package/dist/commands-system-prompt-DpiW5FkQ.js +2 -0
  198. package/dist/commands.runtime-l4fGcB5c.js +176 -0
  199. package/dist/commands.runtime.js +1 -1
  200. package/dist/commitments/runtime.js +1 -1
  201. package/dist/compact-Dq0mi-y_.js +480 -0
  202. package/dist/compact-voJdoXm-.js +1141 -0
  203. package/dist/compact.runtime-BNLPSDQQ.js +12 -0
  204. package/dist/compact.runtime.js +1 -1
  205. package/dist/completion-cli-qHUelvvd.js +315 -0
  206. package/dist/computer-use-dP3FCUtq.js +367 -0
  207. package/dist/config-BDGPPDJ7.js +2 -0
  208. package/dist/config-Dg3sgjXu.js +373 -0
  209. package/dist/config-cli-INHPnZOG.js +1633 -0
  210. package/dist/config-mutations-CAgnXnDt.js +159 -0
  211. package/dist/config-schema-BkkovNaj.d.ts +20 -0
  212. package/dist/configure-M1VU0h9O.js +3 -0
  213. package/dist/configure.commands-CM8RXyn3.js +1251 -0
  214. package/dist/configure.commands-PvOJd4nu.js +2 -0
  215. package/dist/context-engine-host-compat-D7I7Q63Z.js +288 -0
  216. package/dist/context-engine-host-compat-DGHUiQUV.js +2 -0
  217. package/dist/context-engine-lifecycle-Zsi-S6qy.js +1274 -0
  218. package/dist/contracts-testkit-Ch7UfUw6.d.ts +145 -0
  219. package/dist/control-auth-BKUTwIvH.js +114 -0
  220. package/dist/control-service-CKUzEAa0.js +145 -0
  221. package/dist/control-ui/assets/agents-CUjpwxUf.js +1008 -0
  222. package/dist/control-ui/assets/channel-config-extras-Dd4z5RQ8.js +2 -0
  223. package/dist/control-ui/assets/channels-554ojNKp.js +367 -0
  224. package/dist/control-ui/assets/cron-BAd2PXq5.js +1013 -0
  225. package/dist/control-ui/assets/debug-BGCb3cT4.js +97 -0
  226. package/dist/control-ui/assets/index-BXico1DI.js +7370 -0
  227. package/dist/control-ui/assets/instances-EkBPy6m3.js +57 -0
  228. package/dist/control-ui/assets/logs-zcOeZekZ.js +74 -0
  229. package/dist/control-ui/assets/nodes-BymRwDa6.js +436 -0
  230. package/dist/control-ui/assets/sessions-C_oSuy7x.js +399 -0
  231. package/dist/control-ui/assets/skills-BVjEetcV.js +314 -0
  232. package/dist/control-ui/assets/skills-shared-weS2ZYM5.js +11 -0
  233. package/dist/control-ui/index.html +1 -1
  234. package/dist/control-ui/sw.js +1 -1
  235. package/dist/conversation-binding-runtime-rXAYUZyM.js +4 -0
  236. package/dist/conversation-runtime-CV0pSg81.js +31 -0
  237. package/dist/core-BV0irASW.js +282 -0
  238. package/dist/core-DIjsbXou.d.ts +224 -0
  239. package/dist/core-api-CyhjZVzn.js +5 -0
  240. package/dist/core-api-YdHGjff8.js +2 -0
  241. package/dist/crestodian/crestodian.js +1 -1
  242. package/dist/crestodian/rescue-message.js +1 -1
  243. package/dist/crestodian-n5FVHIW5.js +55 -0
  244. package/dist/daocore-runtime-DhfJoXrT.d.ts +151 -0
  245. package/dist/daocore-tools-CXDZ1Xhe.js +11727 -0
  246. package/dist/dashboard-CeQV6L1K.js +263 -0
  247. package/dist/delivery-D7LfafSk.js +1002 -0
  248. package/dist/dev-BSY4rs1s.js +97 -0
  249. package/dist/dialogue-DWFnjTiN.js +37 -0
  250. package/dist/dir-fetch-tool-BnlEyfZh.js +565 -0
  251. package/dist/dir-list-tool-Blhg_vTH.js +100 -0
  252. package/dist/direct-dm-DJPIaf5J.js +64 -0
  253. package/dist/directive-handling.fast-lane-DGV6PZYZ.js +68 -0
  254. package/dist/directive-handling.impl-CTDwclQa.js +818 -0
  255. package/dist/directive-handling.impl-_zI0_GsT.js +2 -0
  256. package/dist/directive-handling.model-selection-C8lG4FHQ.js +122 -0
  257. package/dist/directive-handling.persist.runtime-CmLb1evR.js +263 -0
  258. package/dist/directive-handling.persist.runtime.js +1 -1
  259. package/dist/dispatch-DvZRbIrc.js +1640 -0
  260. package/dist/dispatch-acp-transcript.runtime-PehNIsnR.js +40 -0
  261. package/dist/dispatch-acp-transcript.runtime.js +1 -1
  262. package/dist/dispatch-acp.runtime-Dg8ft-Ve.js +18 -0
  263. package/dist/dispatch-acp.runtime.js +1 -1
  264. package/dist/doctor-DJFM3lrT.js +6 -0
  265. package/dist/doctor-_ob4EiVf.js +2 -0
  266. package/dist/doctor-config-flow-D6iEk-en.js +1741 -0
  267. package/dist/doctor-core-checks-CCfWWL1-.js +573 -0
  268. package/dist/doctor-core-checks-CqkHUVcZ.js +2 -0
  269. package/dist/doctor-health-CrNPft4G.js +65 -0
  270. package/dist/doctor-health-contributions-Bwu5M_GQ.js +696 -0
  271. package/dist/doctor-lint-B2Wb_jEn.js +94 -0
  272. package/dist/doctor-prompter-cXq7RExi.js +58 -0
  273. package/dist/doctor-state-integrity-DfYyVFbQ.js +1231 -0
  274. package/dist/dynamic-tools-CbHsYkuk.js +486 -0
  275. package/dist/embedded-backend-IYuqoxzv.js +579 -0
  276. package/dist/embedded-gateway-stub.runtime-BjJ_93Pp.js +12 -0
  277. package/dist/embedded-gateway-stub.runtime.js +1 -1
  278. package/dist/embedding-provider-B50jxKn8.d.ts +65 -0
  279. package/dist/embedding-provider-DOktf4gm.d.ts +21 -0
  280. package/dist/embedding-provider-DZOjws8e.d.ts +16 -0
  281. package/dist/entry.d.ts +1 -1
  282. package/dist/entry.js +1 -1
  283. package/dist/exec-approvals-VjIKwFog.js +149 -0
  284. package/dist/extensionAPI.js +1 -1
  285. package/dist/extensions/active-memory/index.d.ts +1 -1
  286. package/dist/extensions/active-memory/index.js +1 -1
  287. package/dist/extensions/admin-http-rpc/index.d.ts +1 -1
  288. package/dist/extensions/admin-http-rpc/index.js +1 -1
  289. package/dist/extensions/alibaba/index.d.ts +1 -1
  290. package/dist/extensions/anthropic/api.d.ts +3 -3
  291. package/dist/extensions/anthropic/cli-backend-api.d.ts +2 -2
  292. package/dist/extensions/anthropic/cli-backend.d.ts +1 -1
  293. package/dist/extensions/anthropic/cli-migration.d.ts +1 -1
  294. package/dist/extensions/anthropic/cli-shared.d.ts +1 -1
  295. package/dist/extensions/anthropic/contract-api.d.ts +1 -1
  296. package/dist/extensions/anthropic/index.d.ts +1 -1
  297. package/dist/extensions/anthropic/provider-contract-api.d.ts +1 -1
  298. package/dist/extensions/anthropic/provider-discovery.d.ts +1 -1
  299. package/dist/extensions/anthropic/provider-policy-api.d.ts +1 -1
  300. package/dist/extensions/anthropic/register.runtime.d.ts +1 -1
  301. package/dist/extensions/anthropic/replay-policy.d.ts +1 -1
  302. package/dist/extensions/anthropic/setup-api.d.ts +1 -1
  303. package/dist/extensions/anthropic/stream-wrappers.d.ts +1 -1
  304. package/dist/extensions/anthropic/test-api.d.ts +2 -2
  305. package/dist/extensions/arcee/index.d.ts +1 -1
  306. package/dist/extensions/azure-speech/index.d.ts +1 -1
  307. package/dist/extensions/azure-speech/speech-provider.d.ts +1 -1
  308. package/dist/extensions/bonjour/index.d.ts +1 -1
  309. package/dist/extensions/browser/browser-bridge.js +1 -1
  310. package/dist/extensions/browser/browser-config.js +4 -4
  311. package/dist/extensions/browser/browser-control-auth.js +2 -2
  312. package/dist/extensions/browser/browser-doctor.js +2 -2
  313. package/dist/extensions/browser/browser-maintenance.js +1 -1
  314. package/dist/extensions/browser/browser-profiles.js +2 -2
  315. package/dist/extensions/browser/browser-runtime-api.js +11 -11
  316. package/dist/extensions/browser/cli-metadata.d.ts +1 -1
  317. package/dist/extensions/browser/cli-metadata.js +1 -1
  318. package/dist/extensions/browser/index.d.ts +1 -1
  319. package/dist/extensions/browser/index.js +1 -1
  320. package/dist/extensions/browser/plugin-registration.d.ts +1 -1
  321. package/dist/extensions/browser/plugin-registration.js +1 -1
  322. package/dist/extensions/browser/register.runtime.d.ts +2 -2
  323. package/dist/extensions/browser/register.runtime.js +4 -4
  324. package/dist/extensions/browser/runtime-api.d.ts +3 -3
  325. package/dist/extensions/browser/runtime-api.js +13 -13
  326. package/dist/extensions/browser/setup-api.d.ts +1 -1
  327. package/dist/extensions/byteplus/index.d.ts +1 -1
  328. package/dist/extensions/byteplus/provider-discovery.d.ts +1 -1
  329. package/dist/extensions/canvas/cli-metadata.d.ts +1 -1
  330. package/dist/extensions/canvas/index.d.ts +1 -1
  331. package/dist/extensions/canvas/index.js +1 -1
  332. package/dist/extensions/canvas/runtime-api.d.ts +2 -2
  333. package/dist/extensions/canvas/setup-api.d.ts +1 -1
  334. package/dist/extensions/cerebras/index.d.ts +1 -1
  335. package/dist/extensions/chutes/index.d.ts +1 -1
  336. package/dist/extensions/clickclack/api.d.ts +2 -2
  337. package/dist/extensions/clickclack/api.js +2 -2
  338. package/dist/extensions/clickclack/channel-plugin-api.d.ts +1 -1
  339. package/dist/extensions/clickclack/channel-plugin-api.js +1 -1
  340. package/dist/extensions/clickclack/index.d.ts +2 -2
  341. package/dist/extensions/clickclack/runtime-api.d.ts +2 -2
  342. package/dist/extensions/clickclack/runtime-api.js +2 -2
  343. package/dist/extensions/cloudflare-ai-gateway/index.d.ts +1 -1
  344. package/dist/extensions/cloudflare-ai-gateway/stream-wrappers.d.ts +1 -1
  345. package/dist/extensions/comfy/index.d.ts +1 -1
  346. package/dist/extensions/copilot-proxy/index.d.ts +1 -1
  347. package/dist/extensions/copilot-proxy/runtime-api.d.ts +2 -2
  348. package/dist/extensions/deepgram/index.d.ts +1 -1
  349. package/dist/extensions/deepgram/realtime-transcription-provider.d.ts +1 -1
  350. package/dist/extensions/deepgram/test-api.d.ts +1 -1
  351. package/dist/extensions/deepinfra/api.d.ts +2 -2
  352. package/dist/extensions/deepinfra/embedding-provider.d.ts +1 -1
  353. package/dist/extensions/deepinfra/index.d.ts +1 -1
  354. package/dist/extensions/deepinfra/memory-embedding-adapter.d.ts +1 -1
  355. package/dist/extensions/deepinfra/speech-provider.d.ts +1 -1
  356. package/dist/extensions/deepseek/api.d.ts +1 -1
  357. package/dist/extensions/deepseek/index.d.ts +1 -1
  358. package/dist/extensions/deepseek/provider-discovery.d.ts +1 -1
  359. package/dist/extensions/deepseek/provider-policy-api.d.ts +1 -1
  360. package/dist/extensions/deepseek/stream.d.ts +1 -1
  361. package/dist/extensions/deepseek/thinking.d.ts +1 -1
  362. package/dist/extensions/device-pair/api.d.ts +3 -3
  363. package/dist/extensions/device-pair/api.js +1 -1
  364. package/dist/extensions/device-pair/index.d.ts +1 -1
  365. package/dist/extensions/device-pair/notify.d.ts +1 -1
  366. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  367. package/dist/extensions/document-extract/index.d.ts +1 -1
  368. package/dist/extensions/duckduckgo/index.d.ts +1 -1
  369. package/dist/extensions/elevenlabs/index.d.ts +1 -1
  370. package/dist/extensions/elevenlabs/realtime-transcription-provider.d.ts +1 -1
  371. package/dist/extensions/elevenlabs/setup-api.d.ts +1 -1
  372. package/dist/extensions/elevenlabs/speech-provider.d.ts +1 -1
  373. package/dist/extensions/elevenlabs/test-api.d.ts +2 -2
  374. package/dist/extensions/exa/index.d.ts +1 -1
  375. package/dist/extensions/fal/index.d.ts +1 -1
  376. package/dist/extensions/fal/provider-contract-api.d.ts +1 -1
  377. package/dist/extensions/fal/provider-registration.d.ts +1 -1
  378. package/dist/extensions/file-transfer/index.d.ts +1 -1
  379. package/dist/extensions/file-transfer/index.js +4 -4
  380. package/dist/extensions/firecrawl/index.d.ts +1 -1
  381. package/dist/extensions/fireworks/index.d.ts +1 -1
  382. package/dist/extensions/fireworks/provider-policy-api.d.ts +1 -1
  383. package/dist/extensions/fireworks/stream.d.ts +1 -1
  384. package/dist/extensions/fireworks/thinking-policy.d.ts +1 -1
  385. package/dist/extensions/github-copilot/embeddings.d.ts +1 -1
  386. package/dist/extensions/github-copilot/index.d.ts +1 -1
  387. package/dist/extensions/github-copilot/models.d.ts +1 -1
  388. package/dist/extensions/github-copilot/register.runtime.d.ts +2 -2
  389. package/dist/extensions/github-copilot/stream.d.ts +1 -1
  390. package/dist/extensions/google/api.d.ts +5 -5
  391. package/dist/extensions/google/cli-backend.d.ts +1 -1
  392. package/dist/extensions/google/embedding-batch.d.ts +1 -1
  393. package/dist/extensions/google/embedding-provider.d.ts +1 -1
  394. package/dist/extensions/google/gemini-cli-provider.d.ts +1 -1
  395. package/dist/extensions/google/index.d.ts +1 -1
  396. package/dist/extensions/google/memory-embedding-adapter.d.ts +1 -1
  397. package/dist/extensions/google/provider-contract-api.d.ts +1 -1
  398. package/dist/extensions/google/provider-hooks.d.ts +2 -2
  399. package/dist/extensions/google/provider-models.d.ts +1 -1
  400. package/dist/extensions/google/provider-policy-api.d.ts +1 -1
  401. package/dist/extensions/google/provider-policy.d.ts +1 -1
  402. package/dist/extensions/google/provider-registration.d.ts +1 -1
  403. package/dist/extensions/google/realtime-voice-provider.d.ts +1 -1
  404. package/dist/extensions/google/runtime-api.d.ts +3 -3
  405. package/dist/extensions/google/setup-api.d.ts +1 -1
  406. package/dist/extensions/google/speech-provider.d.ts +1 -1
  407. package/dist/extensions/google/test-api.d.ts +2 -2
  408. package/dist/extensions/google/thinking-api.d.ts +1 -1
  409. package/dist/extensions/google/thinking.d.ts +1 -1
  410. package/dist/extensions/google/transport-stream.d.ts +1 -1
  411. package/dist/extensions/gradium/index.d.ts +1 -1
  412. package/dist/extensions/gradium/speech-provider.d.ts +1 -1
  413. package/dist/extensions/groq/index.d.ts +1 -1
  414. package/dist/extensions/huggingface/index.d.ts +1 -1
  415. package/dist/extensions/image-generation-core/api.d.ts +4 -4
  416. package/dist/extensions/image-generation-core/runtime-api.d.ts +1 -1
  417. package/dist/extensions/imessage/api.d.ts +2 -2
  418. package/dist/extensions/imessage/api.js +2 -2
  419. package/dist/extensions/imessage/channel-plugin-api.d.ts +1 -1
  420. package/dist/extensions/imessage/channel-plugin-api.js +1 -1
  421. package/dist/extensions/imessage/index.d.ts +2 -2
  422. package/dist/extensions/imessage/message-tool-api.d.ts +1 -1
  423. package/dist/extensions/imessage/runtime-api.d.ts +4 -4
  424. package/dist/extensions/imessage/runtime-api.js +3 -3
  425. package/dist/extensions/imessage/setup-entry.d.ts +2 -2
  426. package/dist/extensions/imessage/test-api.d.ts +1 -1
  427. package/dist/extensions/inworld/index.d.ts +1 -1
  428. package/dist/extensions/inworld/speech-provider.d.ts +1 -1
  429. package/dist/extensions/irc/api.d.ts +1 -1
  430. package/dist/extensions/irc/api.js +2 -2
  431. package/dist/extensions/irc/channel-plugin-api.d.ts +1 -1
  432. package/dist/extensions/irc/channel-plugin-api.js +1 -1
  433. package/dist/extensions/irc/index.d.ts +2 -2
  434. package/dist/extensions/irc/setup-entry.d.ts +2 -2
  435. package/dist/extensions/kilocode/index.d.ts +1 -1
  436. package/dist/extensions/kimi-coding/index.d.ts +1 -1
  437. package/dist/extensions/kimi-coding/stream.d.ts +1 -1
  438. package/dist/extensions/litellm/index.d.ts +1 -1
  439. package/dist/extensions/llm-task/api.d.ts +2 -2
  440. package/dist/extensions/llm-task/index.d.ts +1 -1
  441. package/dist/extensions/llm-task/index.js +1 -1
  442. package/dist/extensions/lmstudio/api.d.ts +1 -1
  443. package/dist/extensions/lmstudio/index.d.ts +1 -1
  444. package/dist/extensions/lmstudio/memory-embedding-adapter.d.ts +1 -1
  445. package/dist/extensions/mattermost/api.js +1 -1
  446. package/dist/extensions/mattermost/channel-plugin-api.d.ts +2 -2
  447. package/dist/extensions/mattermost/channel-plugin-api.js +1 -1
  448. package/dist/extensions/mattermost/channel-plugin-runtime.d.ts +1 -1
  449. package/dist/extensions/mattermost/channel-plugin-runtime.js +1 -1
  450. package/dist/extensions/mattermost/index.d.ts +2 -2
  451. package/dist/extensions/mattermost/policy-api.js +1 -1
  452. package/dist/extensions/mattermost/runtime-api.d.ts +9 -9
  453. package/dist/extensions/mattermost/runtime-api.js +2 -2
  454. package/dist/extensions/mattermost/setup-entry.d.ts +2 -2
  455. package/dist/extensions/mattermost/slash-route-api.d.ts +1 -1
  456. package/dist/extensions/mattermost/slash-route-api.js +1 -1
  457. package/dist/extensions/memory-core/api.d.ts +1 -1
  458. package/dist/extensions/memory-core/cli-metadata.d.ts +1 -1
  459. package/dist/extensions/memory-core/cli-metadata.js +1 -1
  460. package/dist/extensions/memory-core/index.d.ts +1 -1
  461. package/dist/extensions/memory-core/manager-runtime.d.ts +1 -1
  462. package/dist/extensions/memory-core/runtime-api.d.ts +2 -2
  463. package/dist/extensions/memory-wiki/api.d.ts +3 -3
  464. package/dist/extensions/memory-wiki/cli-metadata.d.ts +1 -1
  465. package/dist/extensions/memory-wiki/index.d.ts +1 -1
  466. package/dist/extensions/memory-wiki/setup-api.d.ts +1 -1
  467. package/dist/extensions/microsoft/index.d.ts +1 -1
  468. package/dist/extensions/microsoft/speech-provider.d.ts +1 -1
  469. package/dist/extensions/microsoft/test-api.d.ts +1 -1
  470. package/dist/extensions/microsoft-foundry/auth.d.ts +1 -1
  471. package/dist/extensions/microsoft-foundry/cli.d.ts +1 -1
  472. package/dist/extensions/microsoft-foundry/index.d.ts +1 -1
  473. package/dist/extensions/microsoft-foundry/onboard.d.ts +3 -3
  474. package/dist/extensions/microsoft-foundry/provider.d.ts +1 -1
  475. package/dist/extensions/microsoft-foundry/runtime.d.ts +1 -1
  476. package/dist/extensions/microsoft-foundry/shared-runtime.d.ts +1 -1
  477. package/dist/extensions/microsoft-foundry/shared.d.ts +1 -1
  478. package/dist/extensions/migrate-claude/apply.d.ts +1 -1
  479. package/dist/extensions/migrate-claude/apply.js +1 -1
  480. package/dist/extensions/migrate-claude/config.d.ts +1 -1
  481. package/dist/extensions/migrate-claude/helpers.d.ts +1 -1
  482. package/dist/extensions/migrate-claude/index.d.ts +1 -1
  483. package/dist/extensions/migrate-claude/index.js +1 -1
  484. package/dist/extensions/migrate-claude/memory.d.ts +2 -2
  485. package/dist/extensions/migrate-claude/plan.d.ts +1 -1
  486. package/dist/extensions/migrate-claude/plan.js +1 -1
  487. package/dist/extensions/migrate-claude/provider.d.ts +1 -1
  488. package/dist/extensions/migrate-claude/provider.js +1 -1
  489. package/dist/extensions/migrate-claude/skills.d.ts +2 -2
  490. package/dist/extensions/migrate-claude/targets.d.ts +1 -1
  491. package/dist/extensions/migrate-claude/targets.js +1 -1
  492. package/dist/extensions/migrate-hermes/apply.d.ts +1 -1
  493. package/dist/extensions/migrate-hermes/apply.js +1 -1
  494. package/dist/extensions/migrate-hermes/config.d.ts +1 -1
  495. package/dist/extensions/migrate-hermes/helpers.d.ts +1 -1
  496. package/dist/extensions/migrate-hermes/index.d.ts +1 -1
  497. package/dist/extensions/migrate-hermes/index.js +1 -1
  498. package/dist/extensions/migrate-hermes/items.d.ts +1 -1
  499. package/dist/extensions/migrate-hermes/model.d.ts +1 -1
  500. package/dist/extensions/migrate-hermes/model.js +1 -1
  501. package/dist/extensions/migrate-hermes/plan.d.ts +1 -1
  502. package/dist/extensions/migrate-hermes/plan.js +1 -1
  503. package/dist/extensions/migrate-hermes/provider.d.ts +1 -1
  504. package/dist/extensions/migrate-hermes/provider.js +1 -1
  505. package/dist/extensions/migrate-hermes/secrets.d.ts +2 -2
  506. package/dist/extensions/migrate-hermes/secrets.js +1 -1
  507. package/dist/extensions/migrate-hermes/skills.d.ts +2 -2
  508. package/dist/extensions/migrate-hermes/targets.d.ts +1 -1
  509. package/dist/extensions/migrate-hermes/targets.js +1 -1
  510. package/dist/extensions/minimax/index.d.ts +1 -1
  511. package/dist/extensions/minimax/provider-contract-api.d.ts +1 -1
  512. package/dist/extensions/minimax/provider-registration.d.ts +1 -1
  513. package/dist/extensions/minimax/speech-provider.d.ts +1 -1
  514. package/dist/extensions/mistral/embedding-provider.d.ts +1 -1
  515. package/dist/extensions/mistral/index.d.ts +1 -1
  516. package/dist/extensions/mistral/memory-embedding-adapter.d.ts +1 -1
  517. package/dist/extensions/mistral/realtime-transcription-provider.d.ts +1 -1
  518. package/dist/extensions/mistral/test-api.d.ts +1 -1
  519. package/dist/extensions/moonshot/index.d.ts +1 -1
  520. package/dist/extensions/moonshot/provider-contract-api.d.ts +1 -1
  521. package/dist/extensions/moonshot/provider-discovery.d.ts +1 -1
  522. package/dist/extensions/nvidia/index.d.ts +1 -1
  523. package/dist/extensions/oc-path/cli-metadata.d.ts +1 -1
  524. package/dist/extensions/oc-path/cli-registration.d.ts +1 -1
  525. package/dist/extensions/oc-path/index.d.ts +1 -1
  526. package/dist/extensions/ollama/api.d.ts +1 -1
  527. package/dist/extensions/ollama/index.d.ts +1 -1
  528. package/dist/extensions/ollama/provider-discovery.d.ts +1 -1
  529. package/dist/extensions/ollama/provider-policy-api.d.ts +1 -1
  530. package/dist/extensions/ollama/runtime-api.d.ts +1 -1
  531. package/dist/extensions/open-prose/index.d.ts +1 -1
  532. package/dist/extensions/open-prose/runtime-api.d.ts +2 -2
  533. package/dist/extensions/openai/api.d.ts +4 -4
  534. package/dist/extensions/openai/embedding-batch.d.ts +1 -1
  535. package/dist/extensions/openai/embedding-provider.d.ts +1 -1
  536. package/dist/extensions/openai/index.d.ts +1 -1
  537. package/dist/extensions/openai/memory-embedding-adapter.d.ts +1 -1
  538. package/dist/extensions/openai/openai-codex-oauth.runtime.d.ts +1 -1
  539. package/dist/extensions/openai/openai-codex-provider.d.ts +1 -1
  540. package/dist/extensions/openai/openai-provider.d.ts +1 -1
  541. package/dist/extensions/openai/prompt-overlay.d.ts +1 -1
  542. package/dist/extensions/openai/provider-contract-api.d.ts +1 -1
  543. package/dist/extensions/openai/provider-policy-api.d.ts +1 -1
  544. package/dist/extensions/openai/realtime-transcription-provider.d.ts +1 -1
  545. package/dist/extensions/openai/realtime-voice-provider.d.ts +1 -1
  546. package/dist/extensions/openai/register.runtime.d.ts +6 -6
  547. package/dist/extensions/openai/replay-policy.d.ts +1 -1
  548. package/dist/extensions/openai/setup-api.d.ts +1 -1
  549. package/dist/extensions/openai/shared.d.ts +3 -3
  550. package/dist/extensions/openai/speech-provider.d.ts +1 -1
  551. package/dist/extensions/openai/test-api.d.ts +3 -3
  552. package/dist/extensions/openai/thinking-policy.d.ts +1 -1
  553. package/dist/extensions/openai/transport-policy.d.ts +1 -1
  554. package/dist/extensions/opencode/index.d.ts +1 -1
  555. package/dist/extensions/opencode/provider-policy-api.d.ts +1 -1
  556. package/dist/extensions/opencode-go/index.d.ts +1 -1
  557. package/dist/extensions/opencode-go/provider-catalog.d.ts +1 -1
  558. package/dist/extensions/opencode-go/stream.d.ts +1 -1
  559. package/dist/extensions/openrouter/api.d.ts +1 -1
  560. package/dist/extensions/openrouter/index.d.ts +1 -1
  561. package/dist/extensions/openrouter/provider-contract-api.d.ts +1 -1
  562. package/dist/extensions/openrouter/provider-policy-api.d.ts +1 -1
  563. package/dist/extensions/openrouter/speech-provider.d.ts +1 -1
  564. package/dist/extensions/openrouter/stream.d.ts +1 -1
  565. package/dist/extensions/openrouter/test-api.d.ts +1 -1
  566. package/dist/extensions/openrouter/thinking-policy.d.ts +1 -1
  567. package/dist/extensions/openrouter/video-generation-provider.d.ts +1 -1
  568. package/dist/extensions/openrouter/video-model-catalog.d.ts +1 -1
  569. package/dist/extensions/perplexity/index.d.ts +1 -1
  570. package/dist/extensions/phone-control/index.d.ts +1 -1
  571. package/dist/extensions/phone-control/runtime-api.d.ts +2 -2
  572. package/dist/extensions/policy/api.js +1 -1
  573. package/dist/extensions/policy/index.d.ts +1 -1
  574. package/dist/extensions/policy/index.js +2 -2
  575. package/dist/extensions/qianfan/index.d.ts +1 -1
  576. package/dist/extensions/qwen/api.d.ts +1 -1
  577. package/dist/extensions/qwen/index.d.ts +1 -1
  578. package/dist/extensions/qwen/stream.d.ts +1 -1
  579. package/dist/extensions/runway/index.d.ts +1 -1
  580. package/dist/extensions/searxng/index.d.ts +1 -1
  581. package/dist/extensions/senseaudio/index.d.ts +1 -1
  582. package/dist/extensions/sglang/index.d.ts +1 -1
  583. package/dist/extensions/signal/api.d.ts +3 -3
  584. package/dist/extensions/signal/api.js +6 -6
  585. package/dist/extensions/signal/channel-entry.d.ts +2 -2
  586. package/dist/extensions/signal/channel-plugin-api.d.ts +1 -1
  587. package/dist/extensions/signal/channel-plugin-api.js +1 -1
  588. package/dist/extensions/signal/index.d.ts +2 -2
  589. package/dist/extensions/signal/reaction-runtime-api.js +1 -1
  590. package/dist/extensions/signal/runtime-api.d.ts +7 -7
  591. package/dist/extensions/signal/runtime-api.js +7 -7
  592. package/dist/extensions/signal/setup-entry.d.ts +2 -2
  593. package/dist/extensions/skill-workshop/api.d.ts +2 -2
  594. package/dist/extensions/skill-workshop/api.js +1 -1
  595. package/dist/extensions/skill-workshop/index.d.ts +1 -1
  596. package/dist/extensions/skill-workshop/index.js +2 -2
  597. package/dist/extensions/speech-core/api.d.ts +3 -3
  598. package/dist/extensions/speech-core/runtime-api.d.ts +2 -2
  599. package/dist/extensions/stepfun/index.d.ts +1 -1
  600. package/dist/extensions/synthetic/index.d.ts +1 -1
  601. package/dist/extensions/talk-voice/api.d.ts +2 -2
  602. package/dist/extensions/talk-voice/index.d.ts +1 -1
  603. package/dist/extensions/tavily/index.d.ts +1 -1
  604. package/dist/extensions/telegram/account-inspect-api.js +1 -1
  605. package/dist/extensions/telegram/api.d.ts +4 -4
  606. package/dist/extensions/telegram/api.js +11 -11
  607. package/dist/extensions/telegram/channel-plugin-api.d.ts +2 -2
  608. package/dist/extensions/telegram/channel-plugin-api.js +2 -2
  609. package/dist/extensions/telegram/contract-api.d.ts +1 -1
  610. package/dist/extensions/telegram/contract-api.js +3 -3
  611. package/dist/extensions/telegram/index.d.ts +2 -2
  612. package/dist/extensions/telegram/runtime-api.d.ts +4 -4
  613. package/dist/extensions/telegram/runtime-api.js +7 -7
  614. package/dist/extensions/telegram/security-audit-contract-api.js +1 -1
  615. package/dist/extensions/telegram/setup-entry.d.ts +2 -2
  616. package/dist/extensions/telegram/setup-plugin-api.d.ts +1 -1
  617. package/dist/extensions/telegram/setup-plugin-api.js +1 -1
  618. package/dist/extensions/telegram/test-api.js +2 -2
  619. package/dist/extensions/tencent/index.d.ts +1 -1
  620. package/dist/extensions/tencent/provider-discovery.d.ts +1 -1
  621. package/dist/extensions/thread-ownership/api.d.ts +2 -2
  622. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  623. package/dist/extensions/together/index.d.ts +1 -1
  624. package/dist/extensions/tokenjuice/index.d.ts +1 -1
  625. package/dist/extensions/tokenjuice/tool-result-middleware.d.ts +1 -1
  626. package/dist/extensions/tts-local-cli/index.d.ts +1 -1
  627. package/dist/extensions/tts-local-cli/speech-provider.d.ts +1 -1
  628. package/dist/extensions/venice/index.d.ts +1 -1
  629. package/dist/extensions/venice/stream.d.ts +1 -1
  630. package/dist/extensions/vercel-ai-gateway/index.d.ts +1 -1
  631. package/dist/extensions/vercel-ai-gateway/thinking.d.ts +1 -1
  632. package/dist/extensions/video-generation-core/api.d.ts +3 -3
  633. package/dist/extensions/video-generation-core/runtime-api.d.ts +1 -1
  634. package/dist/extensions/vllm/api.d.ts +1 -1
  635. package/dist/extensions/vllm/index.d.ts +1 -1
  636. package/dist/extensions/vllm/stream.d.ts +1 -1
  637. package/dist/extensions/volcengine/index.d.ts +1 -1
  638. package/dist/extensions/volcengine/provider-discovery.d.ts +1 -1
  639. package/dist/extensions/volcengine/speech-provider.d.ts +1 -1
  640. package/dist/extensions/voyage/embedding-batch.d.ts +1 -1
  641. package/dist/extensions/voyage/embedding-provider.d.ts +1 -1
  642. package/dist/extensions/voyage/index.d.ts +1 -1
  643. package/dist/extensions/voyage/memory-embedding-adapter.d.ts +1 -1
  644. package/dist/extensions/vydra/index.d.ts +1 -1
  645. package/dist/extensions/vydra/speech-provider.d.ts +1 -1
  646. package/dist/extensions/web-readability/index.d.ts +1 -1
  647. package/dist/extensions/webhooks/api.d.ts +2 -2
  648. package/dist/extensions/webhooks/api.js +1 -1
  649. package/dist/extensions/webhooks/index.d.ts +1 -1
  650. package/dist/extensions/webhooks/index.js +1 -1
  651. package/dist/extensions/webhooks/runtime-api.d.ts +2 -2
  652. package/dist/extensions/xai/api.d.ts +1 -1
  653. package/dist/extensions/xai/index.d.ts +1 -1
  654. package/dist/extensions/xai/index.js +4 -4
  655. package/dist/extensions/xai/provider-contract-api.d.ts +1 -1
  656. package/dist/extensions/xai/provider-discovery.d.ts +1 -1
  657. package/dist/extensions/xai/provider-models.d.ts +1 -1
  658. package/dist/extensions/xai/provider-policy-api.d.ts +1 -1
  659. package/dist/extensions/xai/realtime-transcription-provider.d.ts +1 -1
  660. package/dist/extensions/xai/realtime-transcription-provider.js +1 -1
  661. package/dist/extensions/xai/setup-api.d.ts +1 -1
  662. package/dist/extensions/xai/speech-provider.d.ts +1 -1
  663. package/dist/extensions/xai/speech-provider.js +1 -1
  664. package/dist/extensions/xai/stream.d.ts +1 -1
  665. package/dist/extensions/xai/test-api.js +1 -1
  666. package/dist/extensions/xai/tts.js +1 -1
  667. package/dist/extensions/xai/web-search.js +1 -1
  668. package/dist/extensions/xai/xai-oauth.d.ts +1 -1
  669. package/dist/extensions/xai/xai-oauth.js +1 -1
  670. package/dist/extensions/xiaomi/index.d.ts +1 -1
  671. package/dist/extensions/xiaomi/speech-provider.d.ts +1 -1
  672. package/dist/extensions/xiaomi/stream.d.ts +1 -1
  673. package/dist/extensions/xiaomi/thinking.d.ts +1 -1
  674. package/dist/extensions/zai/index.d.ts +1 -1
  675. package/dist/file-fetch-tool-smMykVXl.js +124 -0
  676. package/dist/file-write-tool-yEYLZ2hU.js +127 -0
  677. package/dist/format-DyREJP5V.js +1145 -0
  678. package/dist/gateway/protocol/index.d.ts +1 -1
  679. package/dist/gateway-cli-D4yhwJa8.js +435 -0
  680. package/dist/gateway-method-runtime-B8AOnwqD.js +21 -0
  681. package/dist/gateway-runtime-BqKz92h9.d.ts +163 -0
  682. package/dist/gemini-cli-provider-wUxyeRzT.d.ts +6 -0
  683. package/dist/get-reply-Co-_Qlr-.js +4689 -0
  684. package/dist/get-reply-from-config.runtime-BcbRKxzJ.js +2 -0
  685. package/dist/get-reply-from-config.runtime.js +1 -1
  686. package/dist/graph-users-CF7Dlee2.js +1419 -0
  687. package/dist/group-access-BTU-w5S5.js +112 -0
  688. package/dist/group-keys-B_lbVBmI.d.ts +17 -0
  689. package/dist/handle-action.guild-admin-DS29y_6h.js +288 -0
  690. package/dist/harness-d9YmZWA3.js +61 -0
  691. package/dist/health-Cov1Kryj.js +4 -0
  692. package/dist/heartbeat-runner-B2wo_xDj.js +5 -0
  693. package/dist/heartbeat-runner.runtime-DrHZD-P2.js +4 -0
  694. package/dist/heartbeat-runner.runtime.js +1 -1
  695. package/dist/help-BgDd1atJ.js +136 -0
  696. package/dist/hook-runtime-UU80d5qW.d.ts +108 -0
  697. package/dist/hooks-CgXKCJSD.js +534 -0
  698. package/dist/http-registry-CBDAGRJy.d.ts +23 -0
  699. package/dist/image-generation-runtime-BFOnMPYD.d.ts +21 -0
  700. package/dist/inbound-direct-dm-runtime-DjOHl6c_.js +2 -0
  701. package/dist/inbound-reply-dispatch-BCTiM2jm.js +148 -0
  702. package/dist/index-D7Vsu6c4.d.ts +3971 -0
  703. package/dist/index.d.ts +1 -1
  704. package/dist/index.js +1 -1
  705. package/dist/init-CreYGHpp.js +59 -0
  706. package/dist/inline-buttons-C94TOhmL.js +40 -0
  707. package/dist/interactive-dispatch-AIMj_vt7.d.ts +143 -0
  708. package/dist/interactive-dispatch-Bh_T3uZG.d.ts +56 -0
  709. package/dist/internal-events-B6D5bqsn.js +90 -0
  710. package/dist/isolated-agent-9faqxl7c.js +1118 -0
  711. package/dist/isolated-agent-CaY4uTcE.js +2 -0
  712. package/dist/lifecycle-pTz4liUn.js +571 -0
  713. package/dist/list.probe-B8pt-DOd.js +449 -0
  714. package/dist/list.status-command-Wgmt361J.js +789 -0
  715. package/dist/llm-slug-generator-Do4oXnXl.js +78 -0
  716. package/dist/llm-slug-generator.js +1 -1
  717. package/dist/loader-BFBzvUK_.d.ts +142 -0
  718. package/dist/local-dispatch.runtime-7keeuHHm.js +9 -0
  719. package/dist/local-dispatch.runtime.js +1 -1
  720. package/dist/manager-D058VQAp.d.ts +10 -0
  721. package/dist/manager-DerRaxsV.d.ts +356 -0
  722. package/dist/manager.core-DKeUsAcV.d.ts +198 -0
  723. package/dist/manager.runtime-B3nVh8Nl.js +2714 -0
  724. package/dist/manager.runtime.js +1 -1
  725. package/dist/markdown-to-line-CZLeX0SL.js +811 -0
  726. package/dist/mcp-http-LaAmzBev.js +2 -0
  727. package/dist/mcp-http-M4GjuKFd.js +555 -0
  728. package/dist/media-understanding-provider-DLA6VsQZ.js +339 -0
  729. package/dist/memory-core-host-engine-storage-MF-67Z8w.d.ts +54 -0
  730. package/dist/memory-embedding-adapter-CEwgurWU.d.ts +5 -0
  731. package/dist/message-actions-Dlv-B5yk.js +145 -0
  732. package/dist/message-handler-2HSbEoAi.js +384 -0
  733. package/dist/message-handler-XiApv_iS.js +1715 -0
  734. package/dist/message-handler.preflight-CN-g4nxs.js +1125 -0
  735. package/dist/message-handler.process-BzVq3Lq_.js +1484 -0
  736. package/dist/migration-BXmTbRk9.d.ts +45 -0
  737. package/dist/model-Ci5kQ7PA.d.ts +33 -0
  738. package/dist/model-Sqz99RFi.js +74 -0
  739. package/dist/model-selection-Bh9QtqlJ.js +272 -0
  740. package/dist/models-C_dD1FNN.js +2 -0
  741. package/dist/models-CtpB-fi2.js +104 -0
  742. package/dist/models-Cxa7r3rl.d.ts +24 -0
  743. package/dist/models-cli-I2sJE5tg.js +256 -0
  744. package/dist/monitor-B4J6Kn4-.js +60 -0
  745. package/dist/monitor-BIFxJ3Ql.js +2788 -0
  746. package/dist/monitor-BTkcXHvw.js +834 -0
  747. package/dist/monitor-BX7Encm5.js +1657 -0
  748. package/dist/monitor-CZsJ4D3J.js +4377 -0
  749. package/dist/monitor-CvKt9k7P.js +2 -0
  750. package/dist/monitor-Dy9phiVJ.js +1370 -0
  751. package/dist/monitor-auth-CjtJPc9C.js +179 -0
  752. package/dist/monitor-jQpVHEky.js +715 -0
  753. package/dist/monitor-polling.runtime-Li4-3e2G.js +883 -0
  754. package/dist/monitor-polling.runtime.js +1 -1
  755. package/dist/monitor-webhook.runtime-CQ2kN5ya.js +387 -0
  756. package/dist/monitor-webhook.runtime.js +1 -1
  757. package/dist/monitor.account-CFdazLEm.js +5233 -0
  758. package/dist/monitor.runtime-B774iFU_.js +2 -0
  759. package/dist/monitor.runtime.js +1 -1
  760. package/dist/monitor.webhook-NNrWA5P9.js +180 -0
  761. package/dist/node-cli-sessions-Ct-6bGab.js +1228 -0
  762. package/dist/onboard-DEUA1HCQ.js +733 -0
  763. package/dist/onboard-helpers-Cupkjkec.js +251 -0
  764. package/dist/onboard-helpers-D1Pvowo1.js +6 -0
  765. package/dist/onboard-remote-BN_7wNqG.js +2 -0
  766. package/dist/onboard-remote-BqYAK5dF.js +212 -0
  767. package/dist/onboard-skills-BM40qOkc.js +160 -0
  768. package/dist/onboard-skills-rSLgDOzB.js +2 -0
  769. package/dist/openai-codex-provider-Fo-TKiyf.d.ts +5 -0
  770. package/dist/openai-http-BRnxRJ_y.js +824 -0
  771. package/dist/openai-provider-BqDrspuV.d.ts +5 -0
  772. package/dist/openresponses-http-Dg3OL0qA.js +1173 -0
  773. package/dist/operations-jvr0A8cu.js +805 -0
  774. package/dist/outbound-adapter-BJej9JpO.js +543 -0
  775. package/dist/outbound-session-route-D3QVwFKr.js +45 -0
  776. package/dist/outbound.runtime-gdOoPtOh.js +2 -0
  777. package/dist/outbound.runtime.js +1 -1
  778. package/dist/pairing-store-C-WQTUHq.d.ts +87 -0
  779. package/dist/pi-embedded-CwD_xrGP.js +3796 -0
  780. package/dist/pi-embedded-DL6l8KBl.js +4 -0
  781. package/dist/pi-embedded.runtime-DyGCj24d.js +4 -0
  782. package/dist/pi-embedded.runtime.js +1 -1
  783. package/dist/pi-tools-BzbgexEG.js +2413 -0
  784. package/dist/plan-HWBV2Rhq.js +112 -0
  785. package/dist/plan-iN77JYw-.js +81 -0
  786. package/dist/plugin-BbOOGgCS.d.ts +17 -0
  787. package/dist/plugin-CbNvjum_.js +12396 -0
  788. package/dist/plugin-app-cache-key-CHpwYM0e.js +46 -0
  789. package/dist/plugin-enabled-DjbDhNRG.js +233 -0
  790. package/dist/plugin-entry-B3_M6paP.d.ts +47 -0
  791. package/dist/plugin-registration-BM_Iko3e.js +88 -0
  792. package/dist/plugin-runtime-QzTPitsy.d.ts +117 -0
  793. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  794. package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
  795. package/dist/plugin-sdk/acp-runtime.js +2 -2
  796. package/dist/plugin-sdk/agent-harness-runtime.js +6 -6
  797. package/dist/plugin-sdk/agent-harness-task-runtime.js +1 -1
  798. package/dist/plugin-sdk/agent-harness.js +7 -7
  799. package/dist/plugin-sdk/agent-runtime.js +2 -2
  800. package/dist/plugin-sdk/channel-core.js +2 -2
  801. package/dist/plugin-sdk/channel-inbound.js +2 -2
  802. package/dist/plugin-sdk/channel-test-helpers.js +1 -1
  803. package/dist/plugin-sdk/command-auth.js +1 -1
  804. package/dist/plugin-sdk/command-status-runtime.js +1 -1
  805. package/dist/plugin-sdk/compat.js +1 -1
  806. package/dist/plugin-sdk/conversation-binding-runtime.js +2 -2
  807. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  808. package/dist/plugin-sdk/core.js +2 -2
  809. package/dist/plugin-sdk/direct-dm.js +1 -1
  810. package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
  811. package/dist/plugin-sdk/health.js +2 -2
  812. package/dist/plugin-sdk/inbound-reply-dispatch.js +1 -1
  813. package/dist/plugin-sdk/index.js +1 -1
  814. package/dist/plugin-sdk/mattermost.js +1 -1
  815. package/dist/plugin-sdk/plugin-test-contracts.js +2 -2
  816. package/dist/plugin-sdk/provider-test-contracts.js +4 -4
  817. package/dist/plugin-sdk/reply-runtime.js +4 -4
  818. package/dist/plugin-sdk/testing.js +2 -2
  819. package/dist/plugin-sdk/zalouser.js +1 -1
  820. package/dist/plugin-service-CVyMm03C.js +1229 -0
  821. package/dist/plugin-service-bHD8oLfO.d.ts +24 -0
  822. package/dist/plugins/build-smoke-entry.d.ts +2 -2
  823. package/dist/plugins/loader.d.ts +1 -1
  824. package/dist/plugins/provider-discovery.runtime.d.ts +1 -1
  825. package/dist/plugins/provider-runtime.runtime.d.ts +1 -1
  826. package/dist/plugins/runtime/index.js +4 -4
  827. package/dist/policy-B2lTxn8H.js +680 -0
  828. package/dist/policy-Bp9GYcSZ.js +138 -0
  829. package/dist/prepare.runtime-CxhQeo9l.js +732 -0
  830. package/dist/prepare.runtime.js +1 -1
  831. package/dist/preview-warnings-FVRS7Mcs.js +392 -0
  832. package/dist/probe-BRLc43oX.js +47 -0
  833. package/dist/probe-C1eD9yG7.js +2204 -0
  834. package/dist/probe-C1giMJtz.js +682 -0
  835. package/dist/probe-rIUNPFef.js +2 -0
  836. package/dist/program-DfIqBXRH.js +131 -0
  837. package/dist/prompt-overlay-Bq3sUpDV.d.ts +23 -0
  838. package/dist/provider-BCxvG42s.js +152 -0
  839. package/dist/provider-BHPMcHk-.js +32 -0
  840. package/dist/provider-CIAQ8D7q.js +32 -0
  841. package/dist/provider-api-key-auth-BsEQw2pm.d.ts +27 -0
  842. package/dist/provider-auth-result-B204hPXB.d.ts +21 -0
  843. package/dist/provider-catalog-runtime-Dcyw8skT.d.ts +23 -0
  844. package/dist/provider-catalog-shared-qfgsIQS-.d.ts +62 -0
  845. package/dist/provider-dispatcher-DyJDef6y.js +22 -0
  846. package/dist/provider-dispatcher.runtime.js +1 -1
  847. package/dist/provider-hook-runtime-NiAPyKFa.d.ts +61 -0
  848. package/dist/provider-j7cYms68.js +8735 -0
  849. package/dist/provider-model-shared-BwE02tDa.d.ts +143 -0
  850. package/dist/provider-models-hfm5XTTN.d.ts +12 -0
  851. package/dist/provider-policy-BB7uTrIp.d.ts +30 -0
  852. package/dist/provider-registration-DEjYSu9M.d.ts +6 -0
  853. package/dist/provider-registry-D5hn-VAM.d.ts +8 -0
  854. package/dist/provider-registry-DHIsMEbc.d.ts +8 -0
  855. package/dist/provider-registry-VyHjmzoh.d.ts +30 -0
  856. package/dist/provider-runtime-CdtuIOgf.d.ts +359 -0
  857. package/dist/provider-self-hosted-setup-xR0Nsu7L.d.ts +74 -0
  858. package/dist/provider-session.runtime-CmNY15Mr.js +9 -0
  859. package/dist/provider-session.runtime.js +1 -1
  860. package/dist/provider-stream-CxVko1CO.d.ts +140 -0
  861. package/dist/provider-stream-shared-BxFPKFGe.d.ts +128 -0
  862. package/dist/provider.runtime-DJO3dwrX.js +2 -0
  863. package/dist/provider.runtime.js +1 -1
  864. package/dist/providers.runtime-CJOUbS2S.d.ts +25 -0
  865. package/dist/public-surface-loader-CgBnme5n.js +114 -0
  866. package/dist/pw-ai-UeRWGzcL.js +3029 -0
  867. package/dist/pw-role-snapshot-BtlutwlO.js +333 -0
  868. package/dist/reaction-level-DWOV-qJM.js +19 -0
  869. package/dist/reaction-runtime-api-5ZiPcbGJ.js +116 -0
  870. package/dist/realtime-transcription-CZadifvk.d.ts +43 -0
  871. package/dist/realtime-transcription-provider-BF9HxM3d.d.ts +5 -0
  872. package/dist/realtime-transcription-provider-Bcj92hEI.d.ts +32 -0
  873. package/dist/realtime-transcription-provider-DKZ9iHkc.d.ts +28 -0
  874. package/dist/realtime-transcription-provider-DcsAmQEp.js +205 -0
  875. package/dist/realtime-transcription-provider-DhjVTTqb.d.ts +37 -0
  876. package/dist/realtime-voice-B2W34yTP.d.ts +333 -0
  877. package/dist/realtime-voice-provider-CgNNrGwQ.d.ts +5 -0
  878. package/dist/register-Dga1nJRL.js +2178 -0
  879. package/dist/register.agent-VIgyZLKG.js +156 -0
  880. package/dist/register.configure-C21zJ4Qb.js +16 -0
  881. package/dist/register.crestodian-Bam6mUXr.js +24 -0
  882. package/dist/register.maintenance-D9E-Hh90.js +83 -0
  883. package/dist/register.onboard-BnUcaZsb.js +113 -0
  884. package/dist/register.runtime-BdRAp4xz.js +54 -0
  885. package/dist/register.runtime-D3abILg7.d.ts +6 -0
  886. package/dist/register.setup-Bq-9IQdV.js +40 -0
  887. package/dist/register.subclis-DubBtg8Z.js +31 -0
  888. package/dist/register.subclis-H_qmmDFx.js +3 -0
  889. package/dist/register.subclis-core-fg3DalSH.js +273 -0
  890. package/dist/registry-CPtiHUu_.d.ts +91 -0
  891. package/dist/registry-types-XtFJDNYl.d.ts +392 -0
  892. package/dist/repair-sequencing-Dn0sDvBE.js +640 -0
  893. package/dist/reply-delivery-DZGfRh-W.js +196 -0
  894. package/dist/reply-runtime-BdCPL-OF.js +11 -0
  895. package/dist/reply-runtime-DuaOZ9MH.d.ts +34 -0
  896. package/dist/reply.runtime-BcbRKxzJ.js +2 -0
  897. package/dist/reply.runtime.js +1 -1
  898. package/dist/request-Ca681Kt1.js +54 -0
  899. package/dist/resolve-allowlist-DWjCzDq1.js +220 -0
  900. package/dist/result-fallback-classifier-BWIh0wzc.js +79 -0
  901. package/dist/root-help-8a3TWleF.js +43 -0
  902. package/dist/route-BsWREv6-.js +469 -0
  903. package/dist/route-resolution-D8FyF30I.js +274 -0
  904. package/dist/routes-BxkaJuyM.js +3602 -0
  905. package/dist/routes-DdwFgSv9.js +2 -0
  906. package/dist/run-attempt-Ca7HP1Nd.js +7704 -0
  907. package/dist/run-command-JwrnqCIB.js +2 -0
  908. package/dist/run-command-wWvfXyIf.js +23 -0
  909. package/dist/run-embedded.runtime-0QIAc8PG.js +4 -0
  910. package/dist/run-embedded.runtime.js +1 -1
  911. package/dist/run-execution-cli.runtime-LhD-S0h_.js +4 -0
  912. package/dist/run-execution-cli.runtime.js +1 -1
  913. package/dist/run-executor.runtime.js +1 -1
  914. package/dist/run-prKMVvM2.js +1162 -0
  915. package/dist/run-subagent-registry.runtime-C07jSlV2.js +2 -0
  916. package/dist/run-subagent-registry.runtime.js +1 -1
  917. package/dist/runtime-3PDZU_1b.d.ts +17 -0
  918. package/dist/runtime-7Xhj2T8S.js +6179 -0
  919. package/dist/runtime-CXUwJU3q.js +438 -0
  920. package/dist/runtime-DeQypuDs.js +1287 -0
  921. package/dist/runtime-api-0djTIsuz.js +13 -0
  922. package/dist/runtime-api-9CEihqK3.d.ts +3151 -0
  923. package/dist/runtime-api-Bz1h0p3i.js +17 -0
  924. package/dist/runtime-api-CLcJZKu2.js +13 -0
  925. package/dist/runtime-api-Ce7axAAW.js +24 -0
  926. package/dist/runtime-api-CoAsju8a.js +4 -0
  927. package/dist/runtime-api-DEuynhDr.js +3 -0
  928. package/dist/runtime-api-oZFIOS9l.js +21 -0
  929. package/dist/runtime-api.actions-Blt2bAHw.d.ts +23 -0
  930. package/dist/runtime-api.actions-DWLRlSej.js +3 -0
  931. package/dist/runtime-api.monitor-DtXB3_sf.js +6 -0
  932. package/dist/runtime-api.send-BU586hbs.js +4 -0
  933. package/dist/runtime-api.send-BygcWA7R.d.ts +38 -0
  934. package/dist/runtime-api.threads-Djhr5AJy.js +2 -0
  935. package/dist/runtime-channel-BIgBTs_X.js +2 -0
  936. package/dist/runtime-channel-CsUTBjYU.js +150 -0
  937. package/dist/runtime-embedded-pi.runtime-Rszd_KCt.js +2 -0
  938. package/dist/runtime-embedded-pi.runtime.js +1 -1
  939. package/dist/runtime-taskflow-s80xQc2H.d.ts +435 -0
  940. package/dist/sanitize-outbound-2umQeW_U.js +127 -0
  941. package/dist/sdk-setup-tools-TiaNam05.js +8 -0
  942. package/dist/secrets-BmyFSkt-.js +113 -0
  943. package/dist/secrets-cli-DPAwFvtH.js +149 -0
  944. package/dist/security-audit-BR9FBcLD.js +122 -0
  945. package/dist/security-audit-RKut1lWG.js +118 -0
  946. package/dist/security-audit.runtime-Pe7YbS9P.js +2 -0
  947. package/dist/security-audit.runtime.js +1 -1
  948. package/dist/selection-Cqhmjpyl.js +16157 -0
  949. package/dist/selection-xFFMaq92.js +3 -0
  950. package/dist/send-BDHagrwl.js +1631 -0
  951. package/dist/send-BETlETJ5.d.ts +231 -0
  952. package/dist/send-BV_O_Ljd.js +192 -0
  953. package/dist/send-CpcmWYrM.d.ts +104 -0
  954. package/dist/send-W-DVyil6.js +2 -0
  955. package/dist/send-jUp2-szO.js +143 -0
  956. package/dist/send.components-BR_yPtKv.js +500 -0
  957. package/dist/send.components-CK7UbpRP.js +2 -0
  958. package/dist/send.runtime-DHLfdHbS.js +2 -0
  959. package/dist/send.runtime.js +1 -1
  960. package/dist/send.types-D_3tsfSL.d.ts +159 -0
  961. package/dist/server-DRcdRu6J.js +73 -0
  962. package/dist/server-Ddv-oAKv.js +24 -0
  963. package/dist/server-close.runtime.d.ts +1 -1
  964. package/dist/server-close.runtime.js +1 -1
  965. package/dist/server-context-9rW0Cvdw.js +2 -0
  966. package/dist/server-context-uRD5N8_D.js +955 -0
  967. package/dist/server-cron-BClEPtbv.js +2 -0
  968. package/dist/server-cron-CNGar45o.js +2989 -0
  969. package/dist/server-methods-CAMhJf7g.js +16494 -0
  970. package/dist/server-node-events-DW5DoAxk.js +596 -0
  971. package/dist/server-plugin-bootstrap-CqX4dDcN.js +70 -0
  972. package/dist/server-plugins-BIhs3eCz.js +432 -0
  973. package/dist/server-reload-handlers-54HSfSr7.js +714 -0
  974. package/dist/server-restart-sentinel-C47-O08k.js +747 -0
  975. package/dist/server-restart-sentinel-Cx-3Rzl0.js +2 -0
  976. package/dist/server-runtime-services-D-SWzUww.js +267 -0
  977. package/dist/server-runtime-services-D0GOFPFq.js +2 -0
  978. package/dist/server-startup-plugins-C8pzVvkb.js +113 -0
  979. package/dist/server-startup-post-attach-2xoGJJts.js +716 -0
  980. package/dist/server-ws-runtime-Dywo6GC-.js +349 -0
  981. package/dist/server.impl-xK22fZyJ.js +2586 -0
  982. package/dist/service-Ci8roOZn.js +1446 -0
  983. package/dist/session-binding-BsdbGBhb.js +219 -0
  984. package/dist/session-binding-D42jROcb.js +2 -0
  985. package/dist/session-kill-http-kU4rUj1_.js +121 -0
  986. package/dist/session-reset-service-DkCGElAA.js +625 -0
  987. package/dist/session-route-hmQSEijy.js +93 -0
  988. package/dist/session-status.runtime-Dsz-54he.js +2 -0
  989. package/dist/session-status.runtime.js +1 -1
  990. package/dist/session-subagent-reactivation.runtime-CYJIkiW8.js +2 -0
  991. package/dist/session-subagent-reactivation.runtime.js +1 -1
  992. package/dist/session-tab-registry-YfQve--K.js +521 -0
  993. package/dist/sessions-history-http-DeuZSSGj.js +430 -0
  994. package/dist/sessions.runtime-wAccC8Lk.js +2 -0
  995. package/dist/sessions.runtime.js +1 -1
  996. package/dist/setup-B8caUFIZ.js +586 -0
  997. package/dist/setup-CgHGdMpV.js +2 -0
  998. package/dist/setup-api-Uew7qBry.js +29 -0
  999. package/dist/setup-core-BP_fjsmA.js +174 -0
  1000. package/dist/setup-onboard-configure-help-fast-path-ykLp2JqU.js +64 -0
  1001. package/dist/setup-surface-BgEGrdZ3.js +320 -0
  1002. package/dist/setup-surface-BvSqsFEu.js +221 -0
  1003. package/dist/setup-surface-CHzMJ7_T.js +405 -0
  1004. package/dist/setup-surface-DYm3Xvgt.js +288 -0
  1005. package/dist/setup.finalize-BgLIjblM.js +582 -0
  1006. package/dist/setup.gateway-config-BBguRpIc.js +281 -0
  1007. package/dist/setup.migration-import-BY06brv-.js +200 -0
  1008. package/dist/setup.migration-import-Igj5NMey.js +2 -0
  1009. package/dist/shared-client-GL2KQ2Eu.js +2 -0
  1010. package/dist/shared-client-Mc7bTBoQ.js +629 -0
  1011. package/dist/shared-moi7PK0C.js +121 -0
  1012. package/dist/shared-rlOyTpAw.d.ts +115 -0
  1013. package/dist/side-question-BEHswpGw.js +683 -0
  1014. package/dist/simple-completion-runtime-CsXJkjY5.d.ts +73 -0
  1015. package/dist/skill-tool-dispatch.runtime-O5uXeees.js +143 -0
  1016. package/dist/skill-tool-dispatch.runtime.js +1 -1
  1017. package/dist/slash-state-BAYUTcHl.js +2166 -0
  1018. package/dist/speech-BAP4NgqI.d.ts +47 -0
  1019. package/dist/speech-core-DZmhKq_b.d.ts +36 -0
  1020. package/dist/speech-provider-22oDk8Tz.js +184 -0
  1021. package/dist/speech-provider-79S_bTlE.d.ts +8 -0
  1022. package/dist/speech-provider-BYJna1nq.d.ts +5 -0
  1023. package/dist/speech-provider-BvKhsuyg.d.ts +5 -0
  1024. package/dist/speech-provider-CdVIHtT6.d.ts +5 -0
  1025. package/dist/speech-provider-OiRKJFwo.d.ts +8 -0
  1026. package/dist/speech-provider-xUDd1kmD.d.ts +34 -0
  1027. package/dist/src-C8wkJgE6.js +4256 -0
  1028. package/dist/startup-context-BhLJufFU.js +313 -0
  1029. package/dist/status-C20LHDLA.js +73 -0
  1030. package/dist/status-message-CmzgS8zM.js +484 -0
  1031. package/dist/status-message.runtime-iG6qi7wn.js +6 -0
  1032. package/dist/status-message.runtime.js +1 -1
  1033. package/dist/status-subagents.runtime-D49P_RIr.js +18 -0
  1034. package/dist/status-subagents.runtime.js +1 -1
  1035. package/dist/status-text-BI7Q1z4U.js +296 -0
  1036. package/dist/status.runtime-RQes0TI5.js +2 -0
  1037. package/dist/sticker-cache-Dh4joqan.js +206 -0
  1038. package/dist/sticker-vision.runtime-5SRgpo_k.js +17 -0
  1039. package/dist/sticker-vision.runtime.js +1 -1
  1040. package/dist/stream-BrMwI7HV.d.ts +10 -0
  1041. package/dist/stream-Bx_akKgo.d.ts +16 -0
  1042. package/dist/stream-D094UIVI.d.ts +5 -0
  1043. package/dist/stream-D5DoOmTT.d.ts +19 -0
  1044. package/dist/stream-Tt9cSOCl.d.ts +120 -0
  1045. package/dist/stream-wrappers-CUkNtyZK.d.ts +21 -0
  1046. package/dist/subagent-announce-BEPlkjCS.js +354 -0
  1047. package/dist/subagent-announce-delivery-jcxPIfNG.js +958 -0
  1048. package/dist/subagent-control-DdMWVJXs.js +508 -0
  1049. package/dist/subagent-hooks-BsTVb6ur.js +2 -0
  1050. package/dist/subagent-hooks-CBlMBrss.js +2 -0
  1051. package/dist/subagent-hooks-Ch5oDUxb.js +116 -0
  1052. package/dist/subagent-hooks-DmUeAwY3.js +146 -0
  1053. package/dist/subagent-hooks-PNuPbYEl.js +2 -0
  1054. package/dist/subagent-hooks-api-BQ051dF0.js +23 -0
  1055. package/dist/subagent-hooks-api-DcVS0aJZ.js +22 -0
  1056. package/dist/subagent-hooks-api-Dlbc5Mtd.js +23 -0
  1057. package/dist/subagent-hooks-dwsegI07.js +230 -0
  1058. package/dist/subagent-orphan-recovery-Cl_y6Poi.js +352 -0
  1059. package/dist/subagent-registry-BVVgDSdq.d.ts +1 -0
  1060. package/dist/subagent-registry-BosUdBW6.js +2351 -0
  1061. package/dist/subagent-registry-Bxd6vaAO.js +3 -0
  1062. package/dist/subagent-registry-read-BVVgDSdq.d.ts +1 -0
  1063. package/dist/subagent-registry.runtime.js +1 -1
  1064. package/dist/subagent-session-cleanup-Bd6d93qi.js +525 -0
  1065. package/dist/subagent-spawn-ViO3XAR1.js +1164 -0
  1066. package/dist/target-id-Bje_v2Ax.js +107 -0
  1067. package/dist/targets-9q_q5M9n.d.ts +10 -0
  1068. package/dist/targets-C4byiOgQ.js +19 -0
  1069. package/dist/targets-J0MVE-dD.js +44 -0
  1070. package/dist/targets-ZMEvyNa8.js +19 -0
  1071. package/dist/targets-qBcfKetP.d.ts +10 -0
  1072. package/dist/task-registry-control.runtime.d.ts +1 -1
  1073. package/dist/task-registry-control.runtime.js +1 -1
  1074. package/dist/telegram/token.js +1 -1
  1075. package/dist/testing-Dk757Ggg.js +267 -0
  1076. package/dist/thinking-policy-DO6T8IfK.d.ts +5 -0
  1077. package/dist/thread-bindings-CYrmTzFY.js +232 -0
  1078. package/dist/thread-bindings-Cf7fkXxk.js +571 -0
  1079. package/dist/thread-bindings-DI6LNGbW.js +8 -0
  1080. package/dist/thread-bindings-DdmuKtVD.js +228 -0
  1081. package/dist/thread-bindings.discord-api-C01V3kFk.js +187 -0
  1082. package/dist/thread-bindings.manager--WOGVrL-.js +2 -0
  1083. package/dist/thread-bindings.manager-HzjqZNiL.js +536 -0
  1084. package/dist/thread-lifecycle-CJKTxWnQ.js +1614 -0
  1085. package/dist/token-D-FQ8AQz.js +134 -0
  1086. package/dist/tool-DTCfs0DU.js +139 -0
  1087. package/dist/tool-actions.runtime-Cb3iA3Os.js +534 -0
  1088. package/dist/tool-actions.runtime.js +1 -1
  1089. package/dist/tool-plugin-CbbLM31f.d.ts +77 -0
  1090. package/dist/tool-resolution-CbqzNutV.js +149 -0
  1091. package/dist/tool-split-bLqMPHTZ.d.ts +19 -0
  1092. package/dist/tools-effective-inventory-BsAax-ML.js +204 -0
  1093. package/dist/tools-invoke-http-DAqZxikd.js +67 -0
  1094. package/dist/tools-invoke-shared-CsVRemTL.js +200 -0
  1095. package/dist/transport-stream-DOXZsjVL.d.ts +42 -0
  1096. package/dist/tts-Ckj6MJNr.js +66 -0
  1097. package/dist/tui-CwwCXMCq.js +2 -0
  1098. package/dist/tui-DpJn3v2D.js +4709 -0
  1099. package/dist/tui-backend-DQ9wF5es.js +256 -0
  1100. package/dist/tui-cli-k3AYPBn3.js +37 -0
  1101. package/dist/types--0xYmMG9.d.ts +786 -0
  1102. package/dist/types-CMDl9l_P2.d.ts +3650 -0
  1103. package/dist/types.public-DvhPzYJi.d.ts +70 -0
  1104. package/dist/update-cli-DB5Doqld.js +3664 -0
  1105. package/dist/video-generation-runtime-CTQN-4SI.d.ts +21 -0
  1106. package/dist/video-model-catalog-CTyt4dXa.d.ts +16 -0
  1107. package/dist/vision-tools-Dp0JrLRi.js +1409 -0
  1108. package/dist/web-search-B0yvxuiq.js +62 -0
  1109. package/dist/web-search-provider.runtime-B-cNT-5J.js +2 -0
  1110. package/dist/web-search-provider.runtime-HhmIlk_Z.js +328 -0
  1111. package/dist/web-search-provider.runtime.js +1 -1
  1112. package/dist/webhook-targets-3u4hOqRl.d.ts +99 -0
  1113. package/dist/xai-oauth-cZGjnEjh.js +479 -0
  1114. package/dist/xai-user-agent-DA8le6vP.js +32 -0
  1115. package/dist/zod-schema.core-i5HaY1T4.d.ts +166 -0
  1116. package/package.json +1 -1
  1117. package/dist/abort-CvuLeqr1.js +0 -277
  1118. package/dist/abort.runtime-DNoavlKn.js +0 -2
  1119. package/dist/account-inspect-ByX21U_z.js +0 -173
  1120. package/dist/accounts-B0sjdn0w.js +0 -119
  1121. package/dist/accounts-BF_AfTED.js +0 -107
  1122. package/dist/accounts-DX1c8NKM.js +0 -107
  1123. package/dist/accounts-EA2GGTep.js +0 -2
  1124. package/dist/acp-runtime-BC8oA7xM.js +0 -26
  1125. package/dist/acp-spawn-CPYDCZ95.js +0 -2
  1126. package/dist/acp-spawn-Cqi47GCL.js +0 -1275
  1127. package/dist/acp-stateful-target-driver-CcWMRAQ2.js +0 -89
  1128. package/dist/action-kill-CZrPfOIS.js +0 -33
  1129. package/dist/action-runtime-DuhVKLRJ.js +0 -469
  1130. package/dist/action-runtime-api-BKaUWi7b.js +0 -2
  1131. package/dist/action-send-_NpIHMwj.js +0 -39
  1132. package/dist/action-spawn-Dymn4rUo.js +0 -47
  1133. package/dist/actions-Bk_WaEAa.js +0 -161
  1134. package/dist/actions.runtime-Hh7HYOlJ.js +0 -5
  1135. package/dist/agent-CQzGVmy1.js +0 -2
  1136. package/dist/agent-ClmYyW81.js +0 -3
  1137. package/dist/agent-command-D5KxwCVS.d.ts +0 -141
  1138. package/dist/agent-command-DbU2fo-p.js +0 -1367
  1139. package/dist/agent-components.runtime-BpXJmJXk.js +0 -10
  1140. package/dist/agent-harness-D8c6PLE_.d.ts +0 -146
  1141. package/dist/agent-harness-runtime-AHXS4Jj3.d.ts +0 -691
  1142. package/dist/agent-harness-runtime-TzbK9YTz.js +0 -180
  1143. package/dist/agent-harness-task-runtime-CZWJEsKk.js +0 -140
  1144. package/dist/agent-runner-execution-CmHT78Vr.js +0 -1713
  1145. package/dist/agent-runner-utils-B0i1PW18.js +0 -266
  1146. package/dist/agent-runner.runtime-B6Ah_MlB.js +0 -3455
  1147. package/dist/agent-runtime-BOMioAX6.js +0 -229
  1148. package/dist/agent-via-gateway-DfxQCPit.js +0 -463
  1149. package/dist/agents.commands.add-CszEBxoJ.js +0 -304
  1150. package/dist/agents.commands.delete-ulnJ7RH9.js +0 -128
  1151. package/dist/api-6SmEQDkK.js +0 -134
  1152. package/dist/api-B7QdoMF5.js +0 -2
  1153. package/dist/api-BBgby6ck.js +0 -639
  1154. package/dist/api-DwKV-xfM.d.ts +0 -52
  1155. package/dist/api-RfjCqA7Y.js +0 -6
  1156. package/dist/api-VDkFlOiv.js +0 -2
  1157. package/dist/api-We4xoZFr.js +0 -3
  1158. package/dist/apply-Cgtzilem.js +0 -41
  1159. package/dist/apply-Csp3U8cA.js +0 -54
  1160. package/dist/approval-handler.runtime-aQaSBbpF.js +0 -130
  1161. package/dist/assistant-UMyirSUH.js +0 -291
  1162. package/dist/attachment-normalize-BupK-_Ox.js +0 -225
  1163. package/dist/attempt-execution-oLlyFjHk.js +0 -558
  1164. package/dist/attempt-execution.runtime-Cq8RE0x_.js +0 -3
  1165. package/dist/attempt-execution.shared-DyBzUJGB.js +0 -38
  1166. package/dist/attempt.prompt-helpers-CVBP6t5J.js +0 -475
  1167. package/dist/attempt.tool-run-context-UU1BUUC9.js +0 -2094
  1168. package/dist/auth-BDaK_y-g.js +0 -541
  1169. package/dist/banner-VbID973v.js +0 -2
  1170. package/dist/banner-W77piyz6.js +0 -397
  1171. package/dist/binding-routing-DahKvjr3.js +0 -113
  1172. package/dist/binding-targets-C3mqUdUT.js +0 -121
  1173. package/dist/bot-DonUKEuy.js +0 -7894
  1174. package/dist/bot-deps-CroXwZeM.js +0 -747
  1175. package/dist/bot-deps-DKoy3x0l.js +0 -2
  1176. package/dist/bot-message-context.runtime-BI_zyqDu.js +0 -7
  1177. package/dist/bot-message-context.session.runtime-Cpy2H9Ez.js +0 -12
  1178. package/dist/bot-native-commands.delivery.runtime-CsHg3h1O.js +0 -4
  1179. package/dist/bot-native-commands.runtime-rmoBpwZY.js +0 -13
  1180. package/dist/bridge-server-BmDNWgHD.js +0 -113
  1181. package/dist/browser-cli-BQLwmLw3.js +0 -2
  1182. package/dist/browser-cli-CHHIN-of.js +0 -230
  1183. package/dist/browser-cli-actions-input-DBZ7uwag.js +0 -473
  1184. package/dist/browser-cli-actions-observe-BdH2-WTk.js +0 -81
  1185. package/dist/browser-cli-debug-C82Apbgb.js +0 -137
  1186. package/dist/browser-cli-inspect-CrO1qca7.js +0 -104
  1187. package/dist/browser-cli-manage-Dgm1IUZT.js +0 -443
  1188. package/dist/browser-cli-resize-DqgMr3DY.js +0 -26
  1189. package/dist/browser-cli-shared-BTnXMCKA.js +0 -50
  1190. package/dist/browser-cli-state-DT3bVOtg.js +0 -337
  1191. package/dist/browser-control-auth-BRwKCt45.js +0 -2
  1192. package/dist/browser-profiles-DhGtxK9v.js +0 -2
  1193. package/dist/browser-runtime-BL6b-qtr.js +0 -384
  1194. package/dist/build-33AnG55F.js +0 -257
  1195. package/dist/bundled-channel-config-schema-4eXcH-RE.d.ts +0 -3163
  1196. package/dist/call-dct8amtn.d.ts +0 -43
  1197. package/dist/capability-cli-D-KoVyyP.js +0 -1782
  1198. package/dist/channel-0tgrzPag.js +0 -867
  1199. package/dist/channel-4g20sJKJ.d.ts +0 -104
  1200. package/dist/channel-6tG8jWsw.d.ts +0 -8
  1201. package/dist/channel-7OEbQ8xS.d.ts +0 -6
  1202. package/dist/channel-7rVapSdN.d.ts +0 -8
  1203. package/dist/channel-B1fZN0iI.d.ts +0 -427
  1204. package/dist/channel-B5Q7fRiN.js +0 -1134
  1205. package/dist/channel-BEg_0h_C.d.ts +0 -12
  1206. package/dist/channel-BNp1J_eZ.js +0 -376
  1207. package/dist/channel-BP6RWm-M.d.ts +0 -47
  1208. package/dist/channel-BRjqrJfj.d.ts +0 -49
  1209. package/dist/channel-BUoyH_tP.d.ts +0 -114
  1210. package/dist/channel-BVBG4Tmn.d.ts +0 -28
  1211. package/dist/channel-Bap23sAx.js +0 -481
  1212. package/dist/channel-BhZ7x0SB.d.ts +0 -26
  1213. package/dist/channel-Bxod9CjX.js +0 -508
  1214. package/dist/channel-C6LASGjS.js +0 -808
  1215. package/dist/channel-COWZEKCw.js +0 -1249
  1216. package/dist/channel-CRAIreZ3.js +0 -238
  1217. package/dist/channel-CVY2hnJh.js +0 -1556
  1218. package/dist/channel-CgKdh_Jd.d.ts +0 -106
  1219. package/dist/channel-Cxo62btA.js +0 -1496
  1220. package/dist/channel-D5SzoyWI.js +0 -562
  1221. package/dist/channel-DE4vIsYF.d.ts +0 -64
  1222. package/dist/channel-DOdRHxJg.js +0 -1777
  1223. package/dist/channel-DZygtXdy.js +0 -362
  1224. package/dist/channel-DfhOnM71.d.ts +0 -7
  1225. package/dist/channel-DhZiptRe.d.ts +0 -8
  1226. package/dist/channel-DqPZviVV.js +0 -2126
  1227. package/dist/channel-Dssy3NQA.js +0 -740
  1228. package/dist/channel-actions.runtime-CDaMC9SV.js +0 -265
  1229. package/dist/channel-buMY8xZQ.d.ts +0 -7
  1230. package/dist/channel-core-CBhC_PNR.js +0 -5
  1231. package/dist/channel-core-x9b94azO.d.ts +0 -6
  1232. package/dist/channel-cvGHll3-.js +0 -955
  1233. package/dist/channel-entry-contract-BfZdcgTS.d.ts +0 -112
  1234. package/dist/channel-inbound-CNdyzYlz.js +0 -80
  1235. package/dist/channel-l8amaSI9.js +0 -653
  1236. package/dist/channel-lifecycle-DCl2GbRW.d.ts +0 -125
  1237. package/dist/channel-pairing-BRqfYy30.d.ts +0 -58
  1238. package/dist/channel-plugin-runtime-CvcVGjj4.js +0 -998
  1239. package/dist/channel-plugin-runtime-D5n9A86n.d.ts +0 -7
  1240. package/dist/channel-runtime-BAbg8Dcv.js +0 -408
  1241. package/dist/channel-sWtDTVwd.d.ts +0 -14
  1242. package/dist/channel.runtime-9o-iF8zm.js +0 -2528
  1243. package/dist/channel.runtime-BotO7RD0.js +0 -21009
  1244. package/dist/channel.runtime-BrDb4cP8.js +0 -88
  1245. package/dist/channel.runtime-C1cLfrDt.js +0 -254
  1246. package/dist/channel.runtime-CTM3VO2E.js +0 -4
  1247. package/dist/channel.runtime-CnodqvCJ.js +0 -733
  1248. package/dist/channel.runtime-Dmr8503H.js +0 -1008
  1249. package/dist/channel.runtime-DqzR3Gd9.js +0 -109
  1250. package/dist/channel.runtime-LOf0PHu_.js +0 -652
  1251. package/dist/channel.setup-1leD5F5B.js +0 -343
  1252. package/dist/channel.setup-D9UyWhXM.js +0 -1098
  1253. package/dist/channel.setup-DkVld-9Z.d.ts +0 -7
  1254. package/dist/channel.setup-DxT4prSl.d.ts +0 -8
  1255. package/dist/channel.setup-IHNFkdUD.js +0 -10
  1256. package/dist/channel.setup-YwXqilBB.d.ts +0 -6
  1257. package/dist/chat-DrycI6KH.js +0 -2666
  1258. package/dist/chrome-CgGY9FsG.js +0 -1503
  1259. package/dist/cli-backend-B3aNoTD4.d.ts +0 -5
  1260. package/dist/cli-backend-BVUFOLXj.d.ts +0 -5
  1261. package/dist/cli-compaction-DPmSHZx7.js +0 -347
  1262. package/dist/cli-metadata-eFfCoGmY.js +0 -22
  1263. package/dist/cli-nmYmL8lb.js +0 -1341
  1264. package/dist/cli-runner-BTOYShgV.js +0 -2
  1265. package/dist/cli-runner-DgXAxJVr.js +0 -540
  1266. package/dist/cli-runner.runtime-BeMsKcaS.js +0 -4
  1267. package/dist/cli-runner.runtime-DMD8X8-h.js +0 -3
  1268. package/dist/cli-shared-BAuePn3e.d.ts +0 -20
  1269. package/dist/cli-v6XF4hHd.d.ts +0 -20
  1270. package/dist/client-CKLZqMCW.js +0 -650
  1271. package/dist/client-adapter-B_0W-6Fx.js +0 -897
  1272. package/dist/client-factory-CdMLQFeA.js +0 -9
  1273. package/dist/command-auth-BxYfnQzs.js +0 -135
  1274. package/dist/command-execution-startup-CiV5yFW1.js +0 -87
  1275. package/dist/command-handlers-BAWROGlt.js +0 -1609
  1276. package/dist/command-registry-BqTMebZr.js +0 -4
  1277. package/dist/command-registry-C2Y8GeJl.js +0 -9
  1278. package/dist/command-registry-core-Bi-d0-WH.js +0 -110
  1279. package/dist/command-status.runtime-BSXHZzOq.js +0 -90
  1280. package/dist/commands-Z6AfrJar.d.ts +0 -113
  1281. package/dist/commands-acp-BYWOkjAx.js +0 -74
  1282. package/dist/commands-compact.runtime-Cyb7Pu12.js +0 -10
  1283. package/dist/commands-handlers.runtime-DdJ20XTn.js +0 -6154
  1284. package/dist/commands-status-6uhiUw13.js +0 -3
  1285. package/dist/commands-status-BJ5AnkOG.js +0 -16
  1286. package/dist/commands-status.runtime-6uhiUw13.js +0 -3
  1287. package/dist/commands-subagents-control.runtime-DZrrLjSk.js +0 -2
  1288. package/dist/commands-subagents-control.runtime-_R3XgUpp.js +0 -3
  1289. package/dist/commands-system-prompt-CHGtJPnx.js +0 -162
  1290. package/dist/commands-system-prompt-CM23NlDu.js +0 -2
  1291. package/dist/commands.runtime-DUEbtHG1.js +0 -176
  1292. package/dist/compact-BA6lVtLj.js +0 -480
  1293. package/dist/compact-BfC-utPW.js +0 -1141
  1294. package/dist/compact.runtime-BRL2wCqh.js +0 -12
  1295. package/dist/completion-cli-CYKoLZLl.js +0 -315
  1296. package/dist/computer-use-BWgYktaW.js +0 -367
  1297. package/dist/config-B_HanwOV.js +0 -373
  1298. package/dist/config-DhGtxK9v.js +0 -2
  1299. package/dist/config-cli-CI5UtWr-.js +0 -1633
  1300. package/dist/config-mutations-D2GtlLMA.js +0 -159
  1301. package/dist/config-schema-BKOfHz23.d.ts +0 -20
  1302. package/dist/configure-CuPwIiwW.js +0 -3
  1303. package/dist/configure.commands-BWpwrafi.js +0 -1251
  1304. package/dist/configure.commands-qzipmoDP.js +0 -2
  1305. package/dist/context-engine-host-compat-D246ZMR2.js +0 -2
  1306. package/dist/context-engine-host-compat-KMl-oqCw.js +0 -288
  1307. package/dist/context-engine-lifecycle-DvEDHkQz.js +0 -1274
  1308. package/dist/contracts-testkit-Ym3exIK5.d.ts +0 -145
  1309. package/dist/control-auth-B_RiUaHt.js +0 -114
  1310. package/dist/control-service-DcQFx6_O.js +0 -145
  1311. package/dist/control-ui/assets/agents-Bc8cIfWF.js +0 -1008
  1312. package/dist/control-ui/assets/channel-config-extras-DQru4ECs.js +0 -2
  1313. package/dist/control-ui/assets/channels-BfncerPV.js +0 -367
  1314. package/dist/control-ui/assets/cron-DHLcga_r.js +0 -1013
  1315. package/dist/control-ui/assets/debug-DprDzDn1.js +0 -97
  1316. package/dist/control-ui/assets/index-XTZKpkBL.js +0 -7370
  1317. package/dist/control-ui/assets/instances-D1_lOT13.js +0 -57
  1318. package/dist/control-ui/assets/logs-DINx8syb.js +0 -74
  1319. package/dist/control-ui/assets/nodes-BH4XOUmD.js +0 -436
  1320. package/dist/control-ui/assets/sessions-D5Xt25SY.js +0 -399
  1321. package/dist/control-ui/assets/skills-BmayrBHY.js +0 -314
  1322. package/dist/control-ui/assets/skills-shared-CHaYSJ_s.js +0 -11
  1323. package/dist/conversation-binding-runtime-_jhzwiiC.js +0 -4
  1324. package/dist/conversation-runtime-F5kCN0Sj.js +0 -31
  1325. package/dist/core-BpeKfqbI.d.ts +0 -224
  1326. package/dist/core-DE71gncT.js +0 -282
  1327. package/dist/core-api-B4L5WkKc.js +0 -5
  1328. package/dist/core-api-Q9oM19yY.js +0 -2
  1329. package/dist/crestodian-DLpxYmzP.js +0 -55
  1330. package/dist/daocore-runtime-BnYtDbMC.d.ts +0 -151
  1331. package/dist/daocore-tools-wNTIZIO3.js +0 -11727
  1332. package/dist/dashboard-SHmcCcnT.js +0 -263
  1333. package/dist/delivery-BA4di5Tw.js +0 -1002
  1334. package/dist/dev-Cr2Dhgoc.js +0 -97
  1335. package/dist/dialogue-xI4qAuLY.js +0 -37
  1336. package/dist/dir-fetch-tool-6d4yElM4.js +0 -565
  1337. package/dist/dir-list-tool-D2k-hax6.js +0 -100
  1338. package/dist/direct-dm-eGyFHTug.js +0 -64
  1339. package/dist/directive-handling.fast-lane-Ci1l6GN_.js +0 -68
  1340. package/dist/directive-handling.impl-Co3i_YQ4.js +0 -818
  1341. package/dist/directive-handling.impl-DHKC0TrU.js +0 -2
  1342. package/dist/directive-handling.model-selection-bv5KrHOw.js +0 -122
  1343. package/dist/directive-handling.persist.runtime-CPLg-YHh.js +0 -263
  1344. package/dist/dispatch-CdvERWY-.js +0 -1640
  1345. package/dist/dispatch-acp-transcript.runtime-BhQo1XEg.js +0 -40
  1346. package/dist/dispatch-acp.runtime-Dtiu2EgE.js +0 -18
  1347. package/dist/doctor-BzsPHvLP.js +0 -2
  1348. package/dist/doctor-Cg4FWB15.js +0 -6
  1349. package/dist/doctor-config-flow-SYjHcyu4.js +0 -1741
  1350. package/dist/doctor-core-checks-75amkN-e.js +0 -2
  1351. package/dist/doctor-core-checks-B1fu7KDm.js +0 -573
  1352. package/dist/doctor-health-contributions-BMdJKStr.js +0 -696
  1353. package/dist/doctor-health-vLyDQqfq.js +0 -65
  1354. package/dist/doctor-lint-DfvFyBgL.js +0 -94
  1355. package/dist/doctor-prompter-C-dTuOnw.js +0 -58
  1356. package/dist/doctor-state-integrity-Cv-ECLuv.js +0 -1231
  1357. package/dist/dynamic-tools-BG8ijDFH.js +0 -486
  1358. package/dist/embedded-backend-bRfALCWz.js +0 -579
  1359. package/dist/embedded-gateway-stub.runtime-CAh3IhtZ.js +0 -12
  1360. package/dist/embedding-provider-B7kg9IhC.d.ts +0 -16
  1361. package/dist/embedding-provider-jB1zjkZy.d.ts +0 -65
  1362. package/dist/embedding-provider-sea2CddJ.d.ts +0 -21
  1363. package/dist/exec-approvals-BBa28Sct.js +0 -149
  1364. package/dist/file-fetch-tool-DRIsI7eQ.js +0 -124
  1365. package/dist/file-write-tool-vTMh7eW6.js +0 -127
  1366. package/dist/format-nrhTS41q.js +0 -1145
  1367. package/dist/gateway-cli-CCgw11Ik.js +0 -435
  1368. package/dist/gateway-method-runtime-BNAVGCC_.js +0 -21
  1369. package/dist/gateway-runtime-DGdJumdK.d.ts +0 -163
  1370. package/dist/gemini-cli-provider-Bbpd5lx5.d.ts +0 -6
  1371. package/dist/get-reply-DGFCqKen.js +0 -4689
  1372. package/dist/get-reply-from-config.runtime-l7NTyCh5.js +0 -2
  1373. package/dist/graph-users-CGpakgek.js +0 -1419
  1374. package/dist/group-access-D095jQ78.js +0 -112
  1375. package/dist/group-keys-DnxWQtll.d.ts +0 -17
  1376. package/dist/handle-action.guild-admin-B3pALmMq.js +0 -288
  1377. package/dist/harness-Bs-sPbOD.js +0 -61
  1378. package/dist/health-4gWMIKHu.js +0 -4
  1379. package/dist/heartbeat-runner-Sky_Rjw7.js +0 -5
  1380. package/dist/heartbeat-runner.runtime-CRZ-NbrW.js +0 -4
  1381. package/dist/help-B68Ov4LD.js +0 -136
  1382. package/dist/hook-runtime-Cm73yH0T.d.ts +0 -107
  1383. package/dist/hooks-DWSdYas_.js +0 -534
  1384. package/dist/http-registry-CHKiFHCC.d.ts +0 -23
  1385. package/dist/image-generation-runtime-p-dfXZTf.d.ts +0 -21
  1386. package/dist/inbound-direct-dm-runtime-5z3W9Oqn.js +0 -2
  1387. package/dist/inbound-reply-dispatch-D7NeeFC1.js +0 -148
  1388. package/dist/index-CKAHTIU4.d.ts +0 -3971
  1389. package/dist/init-BXF3o80o.js +0 -59
  1390. package/dist/inline-buttons-DsHwKEVU.js +0 -40
  1391. package/dist/interactive-dispatch-BsKWomnh.d.ts +0 -143
  1392. package/dist/interactive-dispatch-CItEYOu3.d.ts +0 -56
  1393. package/dist/internal-events-TAN9dPEj.js +0 -90
  1394. package/dist/isolated-agent-CTrVGI6q.js +0 -2
  1395. package/dist/isolated-agent-DPyibJ8B.js +0 -1118
  1396. package/dist/lifecycle-BwTg0Djv.js +0 -571
  1397. package/dist/list.probe-BpM4PKu7.js +0 -449
  1398. package/dist/list.status-command-BbcloYBd.js +0 -789
  1399. package/dist/llm-slug-generator-UG7Bhj_y.js +0 -78
  1400. package/dist/loader-D6z2PEKl.d.ts +0 -142
  1401. package/dist/local-dispatch.runtime-CU6Y-BDa.js +0 -9
  1402. package/dist/manager-C3AVKMSl.d.ts +0 -356
  1403. package/dist/manager-CSN9j9hh.d.ts +0 -205
  1404. package/dist/manager.runtime-Da5LiiaQ.js +0 -2714
  1405. package/dist/markdown-to-line-BnESmsY4.js +0 -811
  1406. package/dist/mcp-http-C38KS7On.js +0 -2
  1407. package/dist/mcp-http-CcGhAZcF.js +0 -555
  1408. package/dist/media-understanding-provider-BCz5dVl6.js +0 -339
  1409. package/dist/memory-core-host-engine-storage-sWQlfr8J.d.ts +0 -54
  1410. package/dist/memory-embedding-adapter-BrGY0ecB.d.ts +0 -5
  1411. package/dist/message-actions-CQURSOZH.js +0 -145
  1412. package/dist/message-handler-C2U3bt-X.js +0 -1715
  1413. package/dist/message-handler-CwZfuHhP.js +0 -384
  1414. package/dist/message-handler.preflight-Cosa3kg0.js +0 -1125
  1415. package/dist/message-handler.process-BlKFMYXw.js +0 -1484
  1416. package/dist/migration-hAtbc95i.d.ts +0 -45
  1417. package/dist/model-B8M2deNL.js +0 -74
  1418. package/dist/model-Ck-vNyGd.d.ts +0 -33
  1419. package/dist/model-selection-v2wQWgsT.js +0 -272
  1420. package/dist/models-B7IiQBWY.js +0 -104
  1421. package/dist/models-CnWFsPX6.d.ts +0 -24
  1422. package/dist/models-DMNzBNgt.js +0 -2
  1423. package/dist/models-cli-CQaOg02d.js +0 -256
  1424. package/dist/monitor-Bd9kOezJ.js +0 -1370
  1425. package/dist/monitor-Cy6D6MyS.js +0 -715
  1426. package/dist/monitor-DStY23C4.js +0 -834
  1427. package/dist/monitor-DnF8eltK.js +0 -1657
  1428. package/dist/monitor-DrFJ63I1.js +0 -4377
  1429. package/dist/monitor-J8jOsDaJ.js +0 -60
  1430. package/dist/monitor-auth-DKkbt_CR.js +0 -179
  1431. package/dist/monitor-jp3H9Ri_.js +0 -2
  1432. package/dist/monitor-polling.runtime-DPCAacPc.js +0 -883
  1433. package/dist/monitor-tBNmyf1s.js +0 -2788
  1434. package/dist/monitor-webhook.runtime-BnjEsLRS.js +0 -387
  1435. package/dist/monitor.account-Gh8FuMEq.js +0 -5233
  1436. package/dist/monitor.runtime-Bdh6dxyq.js +0 -2
  1437. package/dist/monitor.webhook-BosT2ylg.js +0 -180
  1438. package/dist/node-cli-sessions-B0_DtIxz.js +0 -1228
  1439. package/dist/onboard-CiTp3HuT.js +0 -733
  1440. package/dist/onboard-helpers-6NgX4RkW.js +0 -251
  1441. package/dist/onboard-helpers-BwxJT_0T.js +0 -6
  1442. package/dist/onboard-remote-CNCFouj7.js +0 -212
  1443. package/dist/onboard-remote-DXzWgH_H.js +0 -2
  1444. package/dist/onboard-skills-Dx58zrXg.js +0 -160
  1445. package/dist/onboard-skills-qaynAMqw.js +0 -2
  1446. package/dist/openai-codex-provider-Bj9cyh4I.d.ts +0 -5
  1447. package/dist/openai-http-Dp0cp01u.js +0 -824
  1448. package/dist/openai-provider-Dm3YkkWf.d.ts +0 -5
  1449. package/dist/openresponses-http-acbxr5UW.js +0 -1173
  1450. package/dist/operations-BZVuEl9E.js +0 -805
  1451. package/dist/outbound-adapter-BKGzT1Rl.js +0 -543
  1452. package/dist/outbound-session-route-mWVuRF9I.js +0 -45
  1453. package/dist/outbound.runtime-BTjY78St.js +0 -2
  1454. package/dist/pairing-challenge-DD0D0sfM.d.ts +0 -87
  1455. package/dist/pi-embedded-CFP2IrYS.js +0 -3796
  1456. package/dist/pi-embedded-D8caT0Nm.js +0 -4
  1457. package/dist/pi-embedded.runtime-eBik36nq.js +0 -4
  1458. package/dist/pi-tools-DOiFN8QJ.js +0 -2413
  1459. package/dist/plan-Cq2-YWkv.js +0 -112
  1460. package/dist/plan-DZacZ3Zv.js +0 -81
  1461. package/dist/plugin-BcNkVMQf.d.ts +0 -17
  1462. package/dist/plugin-app-cache-key-CBK84hKp.js +0 -46
  1463. package/dist/plugin-enabled-CMfz3hfi.js +0 -233
  1464. package/dist/plugin-entry-BS5QKDoz.d.ts +0 -47
  1465. package/dist/plugin-k9ChkvvX.js +0 -12396
  1466. package/dist/plugin-registration-DzPoDboh.js +0 -88
  1467. package/dist/plugin-runtime-BNGhLQ-_.d.ts +0 -117
  1468. package/dist/plugin-service-BynKHNHj.d.ts +0 -24
  1469. package/dist/plugin-service-Ckp9CgP5.js +0 -1229
  1470. package/dist/policy-CBa8yH5k.js +0 -680
  1471. package/dist/policy-Dlam-IbU.js +0 -138
  1472. package/dist/prepare.runtime-B8h04--2.js +0 -732
  1473. package/dist/preview-warnings-DPDK9HPk.js +0 -392
  1474. package/dist/probe-Bts3wK7l.js +0 -682
  1475. package/dist/probe-ByHrOECy.js +0 -47
  1476. package/dist/probe-CXqCx5yV.js +0 -2204
  1477. package/dist/probe-fhhJ0LMx.js +0 -2
  1478. package/dist/program-DfNLP_PI.js +0 -131
  1479. package/dist/prompt-overlay-qKGGXVs-.d.ts +0 -23
  1480. package/dist/provider-CeG5mirD.js +0 -8735
  1481. package/dist/provider-D_TXf9b1.js +0 -152
  1482. package/dist/provider-Fb0fhEC5.js +0 -32
  1483. package/dist/provider-api-key-auth-BIph5btg.d.ts +0 -27
  1484. package/dist/provider-auth-result-BFvMZrH6.d.ts +0 -21
  1485. package/dist/provider-catalog-runtime-Du74RUel.d.ts +0 -23
  1486. package/dist/provider-catalog-shared-B3nN3sf2.d.ts +0 -62
  1487. package/dist/provider-dispatcher-DQ0FP7Oj.js +0 -22
  1488. package/dist/provider-hook-runtime-CRpS8VJ_.d.ts +0 -61
  1489. package/dist/provider-model-shared-GrPEK3SY.d.ts +0 -143
  1490. package/dist/provider-models-iUJVn9QI.d.ts +0 -12
  1491. package/dist/provider-policy-DliVEM__.d.ts +0 -30
  1492. package/dist/provider-registration-BxzmE1yB.d.ts +0 -6
  1493. package/dist/provider-registry-B4AQXjYK.d.ts +0 -8
  1494. package/dist/provider-registry-BHyB46kI.d.ts +0 -30
  1495. package/dist/provider-registry-CnfpUSqh.d.ts +0 -8
  1496. package/dist/provider-runtime-D3j0VBbF.d.ts +0 -359
  1497. package/dist/provider-self-hosted-setup-_11XAmRH.d.ts +0 -74
  1498. package/dist/provider-session.runtime-CIMJ-7ay.js +0 -9
  1499. package/dist/provider-stream-mWxYXsAm.d.ts +0 -140
  1500. package/dist/provider-stream-shared-QayId-fm.d.ts +0 -128
  1501. package/dist/provider-xNaUQ5Lv.js +0 -32
  1502. package/dist/provider.runtime-CGsYbZGk.js +0 -2
  1503. package/dist/providers.runtime-fmZQlSRt.d.ts +0 -25
  1504. package/dist/public-surface-loader-CuVkM64A.js +0 -114
  1505. package/dist/pw-ai-BDGftH9e.js +0 -3029
  1506. package/dist/pw-role-snapshot-C_P091Iv.js +0 -333
  1507. package/dist/reaction-level-DKxiNfWB.js +0 -19
  1508. package/dist/reaction-runtime-api-TY4aPHui.js +0 -116
  1509. package/dist/realtime-transcription-CmRx7wX7.d.ts +0 -43
  1510. package/dist/realtime-transcription-provider-BNca2pAl.js +0 -205
  1511. package/dist/realtime-transcription-provider-Csl2NRiB.d.ts +0 -5
  1512. package/dist/realtime-transcription-provider-CtUTdTS4.d.ts +0 -37
  1513. package/dist/realtime-transcription-provider-DKd69ns6.d.ts +0 -28
  1514. package/dist/realtime-transcription-provider-DPj1VZIg.d.ts +0 -32
  1515. package/dist/realtime-voice-CVgV9cqF.d.ts +0 -333
  1516. package/dist/realtime-voice-provider-CmtxwZon.d.ts +0 -5
  1517. package/dist/register-DLjqO2vR.js +0 -2178
  1518. package/dist/register.agent-FV7a6yzo.js +0 -156
  1519. package/dist/register.configure-DrkSyKW3.js +0 -16
  1520. package/dist/register.crestodian-CQGAa8z2.js +0 -24
  1521. package/dist/register.maintenance-tocHfiS3.js +0 -83
  1522. package/dist/register.onboard-BomHnBGE.js +0 -113
  1523. package/dist/register.runtime-6AmV3Vgs.js +0 -54
  1524. package/dist/register.runtime-CSz0gVBB.d.ts +0 -6
  1525. package/dist/register.setup-ENYtNAA5.js +0 -40
  1526. package/dist/register.subclis-BC6TefAM.js +0 -31
  1527. package/dist/register.subclis-DZdEZgSS.js +0 -3
  1528. package/dist/register.subclis-core-C-EfowrU.js +0 -273
  1529. package/dist/registry-VitXYFE8.d.ts +0 -91
  1530. package/dist/registry-types-C4eAzEgQ.d.ts +0 -392
  1531. package/dist/repair-sequencing-l8dFaytn.js +0 -640
  1532. package/dist/reply-delivery-DdeUWVuk.js +0 -196
  1533. package/dist/reply-runtime-Bd91JEZL.js +0 -11
  1534. package/dist/reply.runtime-l7NTyCh5.js +0 -2
  1535. package/dist/request-BY_4UukN.js +0 -54
  1536. package/dist/resolve-allowlist-C4lmxl4V.js +0 -220
  1537. package/dist/result-fallback-classifier-XORMMp30.js +0 -79
  1538. package/dist/root-help-CTW0Wyrf.js +0 -43
  1539. package/dist/route-dOf1WMkJ.js +0 -469
  1540. package/dist/route-resolution-BddNYZEI.js +0 -274
  1541. package/dist/routes-D0xw72Lf.js +0 -3602
  1542. package/dist/routes-TXSPQFWS.js +0 -2
  1543. package/dist/run-DpvUuaWB.js +0 -1162
  1544. package/dist/run-attempt-Bet0PiSc.js +0 -7704
  1545. package/dist/run-command-C5vMVqMt.js +0 -23
  1546. package/dist/run-command-pNDd7NqP.js +0 -2
  1547. package/dist/run-embedded.runtime-CBZV6YWj.js +0 -4
  1548. package/dist/run-execution-cli.runtime-DTQLV8tA.js +0 -4
  1549. package/dist/run-subagent-registry.runtime-DJCvSdhY.js +0 -2
  1550. package/dist/runtime-CNXeG8vX.js +0 -1287
  1551. package/dist/runtime-DEOSWxv9.js +0 -438
  1552. package/dist/runtime-DbTiSX85.d.ts +0 -17
  1553. package/dist/runtime-api-BCM7T4WV.js +0 -17
  1554. package/dist/runtime-api-BTnMvj8L.js +0 -13
  1555. package/dist/runtime-api-By6LEySM.js +0 -3
  1556. package/dist/runtime-api-Cd0b5LPQ.js +0 -4
  1557. package/dist/runtime-api-CtuDiikz.js +0 -21
  1558. package/dist/runtime-api-DjySILXC.js +0 -13
  1559. package/dist/runtime-api-XJTq_pyQ.js +0 -24
  1560. package/dist/runtime-api-k3v6Q0lb2.d.ts +0 -3151
  1561. package/dist/runtime-api.actions-BmsSg8Ai.js +0 -3
  1562. package/dist/runtime-api.actions-C2-n4QQ5.d.ts +0 -23
  1563. package/dist/runtime-api.monitor-DSk7Pd5H.js +0 -6
  1564. package/dist/runtime-api.send-D3sPncy9.js +0 -4
  1565. package/dist/runtime-api.send-t0FX9tXf.d.ts +0 -38
  1566. package/dist/runtime-api.threads-BK9cB4L1.js +0 -2
  1567. package/dist/runtime-channel--Wjr2ePx.js +0 -150
  1568. package/dist/runtime-channel-WdTa9hHZ.js +0 -2
  1569. package/dist/runtime-embedded-pi.runtime-BNYBvaxo.js +0 -2
  1570. package/dist/runtime-r3jS5wSq.js +0 -6179
  1571. package/dist/runtime-taskflow-DMBY6o56.d.ts +0 -435
  1572. package/dist/sanitize-outbound-D6IBCCpn.js +0 -127
  1573. package/dist/sdk-setup-tools-DcDrd8tW.js +0 -8
  1574. package/dist/secrets-OV1uTwRt.js +0 -113
  1575. package/dist/secrets-cli-llC7t41S.js +0 -149
  1576. package/dist/security-audit-BM_fypcl.js +0 -118
  1577. package/dist/security-audit-CQ2yKgF8.js +0 -122
  1578. package/dist/security-audit.runtime-CRgJUegH.js +0 -2
  1579. package/dist/selection-DkJ7MaPC.js +0 -16157
  1580. package/dist/selection-LeUiOSn0.js +0 -3
  1581. package/dist/send-B5TXXeBz.d.ts +0 -231
  1582. package/dist/send-C0ZHzB6o.js +0 -1631
  1583. package/dist/send-CXL3cM-w.js +0 -192
  1584. package/dist/send-CuDA29HM.js +0 -2
  1585. package/dist/send-D7qhwK7Z.js +0 -143
  1586. package/dist/send-DEMaBWpw.d.ts +0 -105
  1587. package/dist/send.components-BNeg1zrc.js +0 -2
  1588. package/dist/send.components-DwRyC_Hc.js +0 -500
  1589. package/dist/send.runtime-DBIUdxpO.js +0 -2
  1590. package/dist/send.types-DywwIqYK.d.ts +0 -160
  1591. package/dist/server-DGcm6Swr.js +0 -24
  1592. package/dist/server-DPvleC-x.js +0 -73
  1593. package/dist/server-context-BWBM4f-_.js +0 -955
  1594. package/dist/server-context-CFgwcLlu.js +0 -2
  1595. package/dist/server-cron-C1kChsjw.js +0 -2989
  1596. package/dist/server-cron-CS1EP5Li.js +0 -2
  1597. package/dist/server-methods-BcIlC8iD.js +0 -16494
  1598. package/dist/server-node-events-BAZCvZOy.js +0 -596
  1599. package/dist/server-plugin-bootstrap-cQUi21Uu.js +0 -70
  1600. package/dist/server-plugins-BRFre223.js +0 -432
  1601. package/dist/server-reload-handlers-DfcsAX-5.js +0 -714
  1602. package/dist/server-restart-sentinel-CFX5zQkM.js +0 -747
  1603. package/dist/server-restart-sentinel-DUvs77Q0.js +0 -2
  1604. package/dist/server-runtime-services-0vm5XmvV.js +0 -2
  1605. package/dist/server-runtime-services-CLz_vkLy.js +0 -267
  1606. package/dist/server-startup-plugins-CPXqqIRV.js +0 -113
  1607. package/dist/server-startup-post-attach-BkNe1Z6g.js +0 -716
  1608. package/dist/server-ws-runtime-rcJeRHFO.js +0 -349
  1609. package/dist/server.impl-a6knQ-N8.js +0 -2586
  1610. package/dist/service-H-BcELwS.js +0 -1446
  1611. package/dist/session-binding-BQliaqL7.js +0 -2
  1612. package/dist/session-binding-DPvZil_F.js +0 -219
  1613. package/dist/session-kill-http-DJMipluP.js +0 -121
  1614. package/dist/session-reset-service-Dn9FU5wA.js +0 -625
  1615. package/dist/session-route-JLWNmJxD.js +0 -93
  1616. package/dist/session-status.runtime-D0OptHcW.js +0 -2
  1617. package/dist/session-subagent-reactivation.runtime-BUmf1vNS.js +0 -2
  1618. package/dist/session-tab-registry-CoBvJVRj.js +0 -521
  1619. package/dist/sessions-history-http-B8CkLDAn.js +0 -430
  1620. package/dist/sessions.runtime-DbNqS_Gy.js +0 -2
  1621. package/dist/setup-CTZUUn1s.js +0 -586
  1622. package/dist/setup-D6fXOEjD.js +0 -2
  1623. package/dist/setup-api-DLPEXHCv.js +0 -29
  1624. package/dist/setup-core-DLXb29jm.js +0 -174
  1625. package/dist/setup-onboard-configure-help-fast-path-CrcZmKPI.js +0 -64
  1626. package/dist/setup-surface--Cct-rCt.js +0 -288
  1627. package/dist/setup-surface-CW8YN207.js +0 -320
  1628. package/dist/setup-surface-DIxcfqD0.js +0 -221
  1629. package/dist/setup-surface-IJ6kmKgi.js +0 -405
  1630. package/dist/setup.finalize-gWpWnCCk.js +0 -582
  1631. package/dist/setup.gateway-config-D_DaSfpW.js +0 -281
  1632. package/dist/setup.migration-import-CYZjCkle.js +0 -2
  1633. package/dist/setup.migration-import-CZJU4scH.js +0 -200
  1634. package/dist/shared-Bp_Fgv6B.js +0 -121
  1635. package/dist/shared-CLqPY0yv.d.ts +0 -115
  1636. package/dist/shared-client-OQdg8NGC.js +0 -629
  1637. package/dist/shared-client-dk1ICVBm.js +0 -2
  1638. package/dist/side-question-CbhRW3UI.js +0 -683
  1639. package/dist/simple-completion-runtime-XIF65b47.d.ts +0 -73
  1640. package/dist/skill-tool-dispatch.runtime-EcycYnWE.js +0 -143
  1641. package/dist/slash-state-BoX6WwB5.js +0 -2166
  1642. package/dist/speech-CvkJG5Mt.d.ts +0 -47
  1643. package/dist/speech-core-MG83lB3i.d.ts +0 -36
  1644. package/dist/speech-provider-1EN9hT-3.d.ts +0 -8
  1645. package/dist/speech-provider-67ebyEcs.js +0 -184
  1646. package/dist/speech-provider-B6tb45De.d.ts +0 -5
  1647. package/dist/speech-provider-C74wAyBX.d.ts +0 -5
  1648. package/dist/speech-provider-CYJoZZpj.d.ts +0 -8
  1649. package/dist/speech-provider-DavEMdKC.d.ts +0 -34
  1650. package/dist/speech-provider-DvFtveg6.d.ts +0 -5
  1651. package/dist/src-CbfOifft.js +0 -4256
  1652. package/dist/startup-context-YF24NARp.js +0 -313
  1653. package/dist/status-message-CcrZdfCO.js +0 -484
  1654. package/dist/status-message.runtime-Cptt1EPV.js +0 -6
  1655. package/dist/status-subagents.runtime-v2eijc4R.js +0 -18
  1656. package/dist/status-text-BWwar3Yc.js +0 -296
  1657. package/dist/status-tn3uQDY7.js +0 -73
  1658. package/dist/status.runtime-BFjTHLiQ.js +0 -2
  1659. package/dist/sticker-cache-Cs7LV_3a.js +0 -206
  1660. package/dist/sticker-vision.runtime-CyPMpoCs.js +0 -17
  1661. package/dist/stream-1rWKMSqV.d.ts +0 -16
  1662. package/dist/stream-Bk9TnoRV.d.ts +0 -10
  1663. package/dist/stream-DZeY9rhs.d.ts +0 -120
  1664. package/dist/stream-DgCoKjcL.d.ts +0 -19
  1665. package/dist/stream-exnufPSG.d.ts +0 -5
  1666. package/dist/stream-wrappers-D2EuY1tP.d.ts +0 -21
  1667. package/dist/subagent-announce-CRjGGxSB.js +0 -354
  1668. package/dist/subagent-announce-delivery-CbfRRdwt.js +0 -958
  1669. package/dist/subagent-control-VTsWynTB.js +0 -508
  1670. package/dist/subagent-hooks-BB__aHul.js +0 -2
  1671. package/dist/subagent-hooks-Cb5fJ2H0.js +0 -146
  1672. package/dist/subagent-hooks-CwVBMhp_.js +0 -2
  1673. package/dist/subagent-hooks-Cx9_GAMF.js +0 -116
  1674. package/dist/subagent-hooks-DOJhvTDx.js +0 -230
  1675. package/dist/subagent-hooks-DUMqhB3r.js +0 -2
  1676. package/dist/subagent-hooks-api-BDGmCxB2.js +0 -22
  1677. package/dist/subagent-hooks-api-CcTdPqP1.js +0 -23
  1678. package/dist/subagent-hooks-api-D18tQta6.js +0 -23
  1679. package/dist/subagent-orphan-recovery-6bNIX25Q.js +0 -352
  1680. package/dist/subagent-registry-DokIxoQ6.js +0 -2351
  1681. package/dist/subagent-registry-tlyJE0hN.js +0 -3
  1682. package/dist/subagent-session-cleanup-BWHQ6rcm.js +0 -525
  1683. package/dist/subagent-spawn-BUdUAwoc.js +0 -1164
  1684. package/dist/target-id-CI1U3MSO.js +0 -107
  1685. package/dist/targets-CbBORUXB.d.ts +0 -10
  1686. package/dist/targets-CgmlXrhv.js +0 -44
  1687. package/dist/targets-D-jSrLUN.js +0 -19
  1688. package/dist/targets-DPDu8x6v.js +0 -19
  1689. package/dist/targets-D_fXvxrg.d.ts +0 -10
  1690. package/dist/testing-D-48HuIK.js +0 -267
  1691. package/dist/thinking-policy-CY16OlCs.d.ts +0 -5
  1692. package/dist/thread-bindings-B9J0nGG7.js +0 -232
  1693. package/dist/thread-bindings-BByWvFZq.js +0 -8
  1694. package/dist/thread-bindings-Cxjm2mLg.js +0 -571
  1695. package/dist/thread-bindings-DQWmglaO.js +0 -228
  1696. package/dist/thread-bindings.discord-api-DWWDvMgL.js +0 -187
  1697. package/dist/thread-bindings.manager-CQW6bNs5.js +0 -2
  1698. package/dist/thread-bindings.manager-DpBYBs9s.js +0 -536
  1699. package/dist/thread-lifecycle-PpB8gTx1.js +0 -1614
  1700. package/dist/token-CBy6YYM_.js +0 -134
  1701. package/dist/tool-BCHcwX9p.js +0 -139
  1702. package/dist/tool-actions.runtime-Cwxr2NmB.js +0 -534
  1703. package/dist/tool-plugin-DHZYdwyJ.d.ts +0 -77
  1704. package/dist/tool-resolution-DQpf531V.js +0 -149
  1705. package/dist/tool-split-ClZW5eN5.d.ts +0 -19
  1706. package/dist/tools-effective-inventory-BHxeIAri.js +0 -204
  1707. package/dist/tools-invoke-http-Bv2LES5Q.js +0 -67
  1708. package/dist/tools-invoke-shared-Cf_ifab9.js +0 -200
  1709. package/dist/transport-stream-D_pZ9Qwv.d.ts +0 -42
  1710. package/dist/tts-CjTcF0YS.js +0 -66
  1711. package/dist/tui-D3_WpyGV.js +0 -2
  1712. package/dist/tui-Y8IezK6P.js +0 -4709
  1713. package/dist/tui-backend-BIJbrfDK.js +0 -256
  1714. package/dist/tui-cli-YVLQJGLU.js +0 -37
  1715. package/dist/types-CnKegQ41.d.ts +0 -786
  1716. package/dist/types-Dyry5PA_2.d.ts +0 -3650
  1717. package/dist/types.public-AUFnQi6j.d.ts +0 -70
  1718. package/dist/update-cli-B7MOXy4Y.js +0 -3664
  1719. package/dist/video-generation-runtime-Cc8klYNS.d.ts +0 -21
  1720. package/dist/video-model-catalog-XG42YlJS.d.ts +0 -16
  1721. package/dist/vision-tools-kEwnV2UO.js +0 -1409
  1722. package/dist/web-search-DH1W_lfx.js +0 -62
  1723. package/dist/web-search-provider.runtime-BX9TezsY.js +0 -328
  1724. package/dist/web-search-provider.runtime-BhRjYeyp.js +0 -2
  1725. package/dist/webhook-targets--wGRjxMd.d.ts +0 -99
  1726. package/dist/xai-oauth-BZQ--94U.js +0 -479
  1727. package/dist/xai-user-agent-SpZaKTGR.js +0 -32
  1728. package/dist/zod-schema.core-BhLPa6BF.d.ts +0 -166
  1729. /package/dist/{accounts-CqgATPC-2.d.ts → accounts-CqgATPC-.d.ts} +0 -0
  1730. /package/dist/{acp-runtime-backend-DU5R8SXu.js → acp-runtime-backend-DHyoMnZY.js} +0 -0
  1731. /package/dist/{channel-actions-Ce2Sna1a.js → channel-actions-B5OPAiNK.js} +0 -0
  1732. /package/dist/{command-status-runtime-Cj5vB8lc.js → command-status-runtime-BqQvv1BR.js} +0 -0
  1733. /package/dist/{delegate-BeKeQwNR.js → delegate-B1QIF1j8.js} +0 -0
  1734. /package/dist/{dispatch-acp-DXlzEM_A.js → dispatch-acp-Ch9ZmM4b.js} +0 -0
  1735. /package/dist/{heartbeat-runner-Dncw_0KS.js → heartbeat-runner-BkgH94IS.js} +0 -0
  1736. /package/dist/{library-6cU4n1-c.js → library-DP1oARlw.js} +0 -0
  1737. /package/dist/{run-executor.runtime-DjwaphFT.js → run-executor.runtime-Czk4Lxkj.js} +0 -0
  1738. /package/dist/{video-generation-core-BVVgDSdq.d.ts → server-plugins-BVVgDSdq.d.ts} +0 -0
  1739. /package/dist/{shared-BE5PSFeb.js → shared-SiM6kZAE.js} +0 -0
  1740. /package/dist/{model-ref-mtPT-mlX.d.ts → video-generation-core-mtPT-mlX.d.ts} +0 -0
@@ -0,0 +1,2788 @@
1
+ import { v as resolveStateDir } from "./paths-ZwPDM6zn.js";
2
+ import { c as isRecord, y as truncateUtf16Safe } from "./utils-CNnMhEDp.js";
3
+ import { s as normalizeStringEntries } from "./string-normalization-DiPHgdft.js";
4
+ import { t as createNonExitingRuntime } from "./runtime-E_A14BX_.js";
5
+ import { n as resolvePreferredDaoCoreTmpDir } from "./tmp-daocore-dir-kDRsiZXM.js";
6
+ import { a as shouldLogVerbose, r as logVerbose, s as warn, t as danger } from "./globals-CTkTxjGR.js";
7
+ import { i as getRuntimeConfig } from "./io-CcynUC5m.js";
8
+ import { t as sanitizeTerminalText } from "./safe-text-J_0sTthZ.js";
9
+ import { u as resolveStorePath } from "./paths-8MFrTNIB.js";
10
+ import { a as readSessionUpdatedAt } from "./store-BMkMyEnW.js";
11
+ import { c as kindFromMime } from "./mime-DppuT-pZ.js";
12
+ import { a as enqueueSystemEvent } from "./system-events-BcFIWc-9.js";
13
+ import { h as isInsideCode, m as findCodeRegions } from "./assistant-visible-text-BoF6Ixue.js";
14
+ import { r as stripInlineDirectiveTagsForDelivery } from "./directive-tags-CClLEtM7.js";
15
+ import { i as writeJsonFileAtomically, n as readJsonFileWithFallback } from "./json-store-GaAZLixM.js";
16
+ import { a as settleReplyDispatcher, t as dispatchInboundMessage } from "./dispatch-DvZRbIrc.js";
17
+ import { i as deliverTextOrMediaReply, m as resolveSendableOutboundReplyParts } from "./reply-payload-DMPQsrQC.js";
18
+ import { n as resolveChannelGroupRequireMention, t as resolveChannelGroupPolicy } from "./group-policy-BZKACSgl.js";
19
+ import { a as resolveInboundLastRouteSessionKey, i as resolveAgentRoute } from "./resolve-route-CRSNQKby.js";
20
+ import { a as readChannelAllowFromStore, d as upsertChannelPairingRequest } from "./pairing-store-CxQuF0Pk.js";
21
+ import { n as resolveInboundMentionDecision } from "./mention-gating-3P8aSD7o.js";
22
+ import { c as defineStableChannelIngressIdentity, n as createChannelIngressResolver } from "./runtime-GmtZRRes.js";
23
+ import { a as warnMissingProviderGroupPolicyFallbackOnce, i as resolveOpenProviderRuntimeGroupPolicy, r as resolveDefaultGroupPolicy } from "./runtime-group-policy-CmZDlIwd.js";
24
+ import { l as resolvePinnedMainDmOwnerFromAllowlist } from "./dm-policy-shared-DvyNntb4.js";
25
+ import { u as saveMediaBuffer } from "./store-53qCOCD8.js";
26
+ import { t as loadWebMedia } from "./web-media-Cvh2Nkiu.js";
27
+ import { i as resolveHumanDelayConfig } from "./identity-CQsFzQh6.js";
28
+ import { c as resolveTextChunkLimit, o as chunkTextWithMode, s as resolveChunkMode } from "./chunk-DirkQqDP.js";
29
+ import { t as createMessageReceiptFromOutboundResults } from "./receipt-vrVTwZtS.js";
30
+ import { t as isInboundPathAllowed } from "./inbound-path-policy-DEbcUBWg.js";
31
+ import "./temp-path-B9Am6Z7s.js";
32
+ import { t as resolveOutboundAttachmentFromUrl } from "./outbound-attachment-U5O0c_aP.js";
33
+ import { n as buildMentionRegexes, r as matchesMentionPatterns } from "./mentions-CxYnZfYf.js";
34
+ import { n as createReplyDispatcherWithTyping } from "./reply-dispatcher-C3a0y_0v.js";
35
+ import { t as finalizeInboundContext } from "./inbound-context-Cg0uCtqQ.js";
36
+ import "./runtime-env-B7syXtKu.js";
37
+ import "./string-coerce-runtime-DcopKqDR.js";
38
+ import "./state-paths-C63v_0Tp.js";
39
+ import "./routing-tpBhvjSA.js";
40
+ import { t as hasControlCommand } from "./command-detection-4C6lkmWa.js";
41
+ import { a as resolveEnvelopeFormatOptions, i as formatInboundFromLabel, r as formatInboundEnvelope } from "./envelope-DUI2KFD9.js";
42
+ import { t as recordInboundSession } from "./session-DzYTJdkx.js";
43
+ import "./history-tSxfyRRl.js";
44
+ import { t as createChannelReplyPipeline } from "./reply-pipeline-Bm6cMDK_.js";
45
+ import { t as evaluateSupplementalContextVisibility } from "./context-visibility-C9pX_aod.js";
46
+ import { t as createChannelHistoryWindow } from "./history-window-C5iLdHGW.js";
47
+ import { t as resolveMarkdownTableMode } from "./markdown-tables-Dk_iPU8Q.js";
48
+ import { t as convertMarkdownTables } from "./tables-Bff93hv8.js";
49
+ import "./channel-policy-BdHBOuWF.js";
50
+ import "./reply-history-DtXwRuqo.js";
51
+ import { t as requireRuntimeConfig } from "./plugin-config-runtime-Do2X7q_h.js";
52
+ import { t as resolveChannelContextVisibilityMode } from "./context-visibility-Si-TIKp_.js";
53
+ import "./reply-runtime-BdCPL-OF.js";
54
+ import { d as runInboundReplyTurn } from "./inbound-reply-dispatch-BCTiM2jm.js";
55
+ import { t as waitForTransportReady } from "./transport-ready-CxrgFDFi.js";
56
+ import "./web-media-DkR41HE5.js";
57
+ import "./system-event-runtime-C-Rn-SPr.js";
58
+ import "./transport-ready-runtime-CObgq_V-.js";
59
+ import { r as normalizeScpRemoteHost } from "./scp-host-CIH1Vnml.js";
60
+ import "./runtime-config-snapshot-LpIAYlab.js";
61
+ import "./media-runtime-BgoHtCXx.js";
62
+ import "./media-store-OUXlIgle.js";
63
+ import { n as resolveConfiguredBindingRoute, r as resolveRuntimeConversationBindingRoute } from "./binding-routing-BJ_A83Nl.js";
64
+ import "./conversation-runtime-CV0pSg81.js";
65
+ import "./text-chunking-CAiWc6uE.js";
66
+ import "./agent-runtime-Dp0RDnX1.js";
67
+ import "./security-runtime-ZkIitjef.js";
68
+ import "./markdown-table-runtime-xR9__QEn.js";
69
+ import "./command-auth-native-A9u4UiS4.js";
70
+ import { n as logInboundDrop, r as logTypingFailure } from "./logging-Dr3f0mtP.js";
71
+ import "./channel-feedback-TFG-nswW.js";
72
+ import { o as createChannelInboundDebouncer, s as shouldDebounceTextInbound } from "./channel-inbound-C2wLEE7Q.js";
73
+ import "./channel-ingress-runtime-DztBpKpZ.js";
74
+ import { a as deliverInboundReplyWithMessageSendContext } from "./channel-message-BntYSBp1.js";
75
+ import { t as createChannelPairingChallengeIssuer } from "./channel-pairing-DH0uve3l.js";
76
+ import "./session-store-runtime-iBECMRQO.js";
77
+ import "./text-utility-runtime-Ca71VHQh.js";
78
+ import { i as resolveIMessageAccount } from "./accounts-DteRRvB9.js";
79
+ import { t as createIMessageRpcClient } from "./client-gxUhSVxo.js";
80
+ import { n as imessageRpcSupportsMethod, t as getCachedIMessagePrivateApiStatus } from "./private-api-status-hXzk6Zzf.js";
81
+ import { c as parseIMessageTarget, o as normalizeIMessageHandle, r as isAllowedIMessageReplyContextSender, s as parseIMessageAllowTarget, t as formatIMessageChatTarget } from "./targets-B75TeI7V.js";
82
+ import { n as isKnownFromMeIMessageMessageId, r as rememberIMessageReplyCache } from "./monitor-reply-cache-EAySxtp2.js";
83
+ import { t as probeIMessage } from "./probe-CdjBA0Db.js";
84
+ import { n as resolveIMessageInboundConversationId, t as sanitizeOutboundText } from "./sanitize-outbound-2umQeW_U.js";
85
+ import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-RbwqUy7-.js";
86
+ import { t as extractMarkdownFormatRuns } from "./markdown-format-Cqti91oT.js";
87
+ import fs from "node:fs";
88
+ import path from "node:path";
89
+ import fs$1 from "node:fs/promises";
90
+ import { createHash } from "node:crypto";
91
+ //#region extensions/imessage/src/chat.ts
92
+ function buildChatTargetParams(to, opts) {
93
+ const cfg = requireRuntimeConfig(opts.cfg, "iMessage chat action");
94
+ const account = opts.account ?? resolveIMessageAccount({
95
+ cfg,
96
+ accountId: opts.accountId
97
+ });
98
+ const target = parseIMessageTarget(opts.chatId ? formatIMessageChatTarget(opts.chatId) : to);
99
+ const params = {};
100
+ if (target.kind === "chat_id") params.chat_id = target.chatId;
101
+ else if (target.kind === "chat_guid") params.chat_guid = target.chatGuid;
102
+ else if (target.kind === "chat_identifier") params.chat_identifier = target.chatIdentifier;
103
+ else params.to = target.to;
104
+ return {
105
+ params,
106
+ service: opts.service ?? (target.kind === "handle" ? target.service : void 0) ?? account.config.service,
107
+ region: opts.region?.trim() || account.config.region?.trim() || "US",
108
+ account
109
+ };
110
+ }
111
+ async function runChatAction(method, params, opts) {
112
+ const cfg = requireRuntimeConfig(opts.cfg, "iMessage chat action");
113
+ const account = opts.account ?? resolveIMessageAccount({
114
+ cfg,
115
+ accountId: opts.accountId
116
+ });
117
+ const cliPath = opts.cliPath?.trim() || account.config.cliPath?.trim() || "imsg";
118
+ const dbPath = opts.dbPath?.trim() || account.config.dbPath?.trim();
119
+ const client = opts.client ?? await createIMessageRpcClient({
120
+ cliPath,
121
+ dbPath
122
+ });
123
+ const shouldClose = !opts.client;
124
+ try {
125
+ return await client.request(method, params, { timeoutMs: opts.timeoutMs });
126
+ } finally {
127
+ if (shouldClose) await client.stop();
128
+ }
129
+ }
130
+ async function sendIMessageTyping(to, isTyping, opts) {
131
+ const { params, service } = buildChatTargetParams(to, opts);
132
+ params.typing = isTyping;
133
+ if (service) params.service = service;
134
+ await runChatAction("typing", params, opts);
135
+ }
136
+ async function markIMessageChatRead(to, opts) {
137
+ const { params } = buildChatTargetParams(to, opts);
138
+ await runChatAction("read", params, opts);
139
+ }
140
+ //#endregion
141
+ //#region extensions/imessage/src/monitor/persisted-echo-cache.ts
142
+ const PERSISTED_ECHO_TTL_MS = 720 * 60 * 1e3;
143
+ const MAX_PERSISTED_ECHO_ENTRIES = 256;
144
+ const PERSISTED_ECHO_DIR_MODE = 448;
145
+ const PERSISTED_ECHO_FILE_MODE = 384;
146
+ function resolvePersistedEchoPath() {
147
+ return path.join(resolveStateDir(), "imessage", "sent-echoes.jsonl");
148
+ }
149
+ function clampPersistedEchoModes(filePath) {
150
+ try {
151
+ fs.chmodSync(path.dirname(filePath), PERSISTED_ECHO_DIR_MODE);
152
+ fs.chmodSync(filePath, PERSISTED_ECHO_FILE_MODE);
153
+ } catch {}
154
+ }
155
+ function normalizeText$1(text) {
156
+ return text?.replace(/\r\n?/g, "\n").trim() || void 0;
157
+ }
158
+ function normalizeMessageId(messageId) {
159
+ const normalized = messageId?.trim();
160
+ if (!normalized || normalized === "ok" || normalized === "unknown") return;
161
+ return normalized;
162
+ }
163
+ function parseEntry(line) {
164
+ try {
165
+ const parsed = JSON.parse(line);
166
+ if (typeof parsed.scope !== "string" || typeof parsed.timestamp !== "number") return null;
167
+ return {
168
+ scope: parsed.scope,
169
+ text: typeof parsed.text === "string" ? parsed.text : void 0,
170
+ messageId: typeof parsed.messageId === "string" ? parsed.messageId : void 0,
171
+ timestamp: parsed.timestamp
172
+ };
173
+ } catch {
174
+ return null;
175
+ }
176
+ }
177
+ let mirror = null;
178
+ let persistenceFailureLogged = false;
179
+ function reportFailure(scope, err) {
180
+ if (persistenceFailureLogged) return;
181
+ persistenceFailureLogged = true;
182
+ logVerbose(`imessage echo-cache: ${scope} disabled after first failure: ${String(err)}`);
183
+ }
184
+ function loadMirrorIfStale() {
185
+ const filePath = resolvePersistedEchoPath();
186
+ let mtimeMs;
187
+ try {
188
+ mtimeMs = fs.statSync(filePath).mtimeMs;
189
+ } catch (err) {
190
+ if (err?.code !== "ENOENT") reportFailure("stat", err);
191
+ mirror = {
192
+ entries: [],
193
+ mtimeMs: 0
194
+ };
195
+ return;
196
+ }
197
+ if (mirror && mirror.mtimeMs === mtimeMs) return;
198
+ let raw;
199
+ try {
200
+ raw = fs.readFileSync(filePath, "utf8");
201
+ } catch (err) {
202
+ reportFailure("read", err);
203
+ mirror = {
204
+ entries: [],
205
+ mtimeMs
206
+ };
207
+ return;
208
+ }
209
+ const cutoff = Date.now() - PERSISTED_ECHO_TTL_MS;
210
+ mirror = {
211
+ entries: raw.split(/\n+/).map(parseEntry).filter((entry) => Boolean(entry && entry.timestamp >= cutoff)).slice(-256),
212
+ mtimeMs
213
+ };
214
+ }
215
+ function readRecentEntries() {
216
+ loadMirrorIfStale();
217
+ return mirror?.entries ?? [];
218
+ }
219
+ const COMPACT_AT_ENTRY_COUNT = MAX_PERSISTED_ECHO_ENTRIES * 2;
220
+ function compactRecentEntries(entries) {
221
+ const filePath = resolvePersistedEchoPath();
222
+ try {
223
+ fs.mkdirSync(path.dirname(filePath), {
224
+ recursive: true,
225
+ mode: PERSISTED_ECHO_DIR_MODE
226
+ });
227
+ fs.writeFileSync(filePath, entries.map((entry) => JSON.stringify(entry)).join("\n") + (entries.length ? "\n" : ""), {
228
+ encoding: "utf8",
229
+ mode: PERSISTED_ECHO_FILE_MODE
230
+ });
231
+ clampPersistedEchoModes(filePath);
232
+ } catch (err) {
233
+ reportFailure("compact", err);
234
+ return;
235
+ }
236
+ let mtimeMs = 0;
237
+ try {
238
+ mtimeMs = fs.statSync(filePath).mtimeMs;
239
+ } catch {}
240
+ mirror = {
241
+ entries: [...entries],
242
+ mtimeMs
243
+ };
244
+ }
245
+ function appendEntry(entry) {
246
+ const filePath = resolvePersistedEchoPath();
247
+ try {
248
+ fs.mkdirSync(path.dirname(filePath), {
249
+ recursive: true,
250
+ mode: PERSISTED_ECHO_DIR_MODE
251
+ });
252
+ fs.appendFileSync(filePath, `${JSON.stringify(entry)}\n`, {
253
+ encoding: "utf8",
254
+ mode: PERSISTED_ECHO_FILE_MODE
255
+ });
256
+ clampPersistedEchoModes(filePath);
257
+ } catch (err) {
258
+ reportFailure("append", err);
259
+ return;
260
+ }
261
+ let mtimeMs = 0;
262
+ try {
263
+ mtimeMs = fs.statSync(filePath).mtimeMs;
264
+ } catch {}
265
+ if (mirror) mirror = {
266
+ entries: [...mirror.entries, entry],
267
+ mtimeMs
268
+ };
269
+ else mirror = {
270
+ entries: [entry],
271
+ mtimeMs
272
+ };
273
+ }
274
+ function rememberPersistedIMessageEcho(params) {
275
+ const entry = {
276
+ scope: params.scope,
277
+ text: normalizeText$1(params.text),
278
+ messageId: normalizeMessageId(params.messageId),
279
+ timestamp: Date.now()
280
+ };
281
+ if (!entry.text && !entry.messageId) return;
282
+ loadMirrorIfStale();
283
+ appendEntry(entry);
284
+ const total = mirror?.entries.length ?? 0;
285
+ const cutoff = Date.now() - PERSISTED_ECHO_TTL_MS;
286
+ const oldestStale = mirror?.entries[0] && mirror.entries[0].timestamp < cutoff;
287
+ if (total > COMPACT_AT_ENTRY_COUNT || oldestStale) compactRecentEntries((mirror?.entries ?? []).filter((e) => e.timestamp >= cutoff).slice(-256));
288
+ }
289
+ function hasPersistedIMessageEcho(params) {
290
+ const text = normalizeText$1(params.text);
291
+ const messageId = normalizeMessageId(params.messageId);
292
+ if (!text && !messageId) return false;
293
+ for (const entry of readRecentEntries()) {
294
+ if (entry.scope !== params.scope) continue;
295
+ if (messageId && entry.messageId === messageId) return true;
296
+ if (text && entry.text === text) return true;
297
+ }
298
+ return false;
299
+ }
300
+ //#endregion
301
+ //#region extensions/imessage/src/send.ts
302
+ const MAX_REPLY_TO_ID_LENGTH = 256;
303
+ function stripUnsafeReplyTagChars(value) {
304
+ let next = "";
305
+ for (const ch of value) {
306
+ const code = ch.charCodeAt(0);
307
+ if (code >= 0 && code <= 31 || code === 127 || ch === "[" || ch === "]") continue;
308
+ next += ch;
309
+ }
310
+ return next;
311
+ }
312
+ function sanitizeReplyToId(rawReplyToId) {
313
+ const trimmed = rawReplyToId?.trim();
314
+ if (!trimmed) return;
315
+ const sanitized = stripUnsafeReplyTagChars(trimmed).trim();
316
+ if (!sanitized) return;
317
+ if (sanitized.length > MAX_REPLY_TO_ID_LENGTH) return sanitized.slice(0, MAX_REPLY_TO_ID_LENGTH);
318
+ return sanitized;
319
+ }
320
+ function resolveMessageId(result) {
321
+ if (!result) return null;
322
+ const raw = typeof result.messageId === "string" && result.messageId.trim() || typeof result.message_id === "string" && result.message_id.trim() || typeof result.id === "string" && result.id.trim() || typeof result.guid === "string" && result.guid.trim() || (typeof result.message_id === "number" ? String(result.message_id) : null) || (typeof result.id === "number" ? String(result.id) : null);
323
+ return raw ? raw.trim() : null;
324
+ }
325
+ function resolveOutboundEchoText(text, mediaContentType) {
326
+ if (text.trim()) return text;
327
+ const kind = kindFromMime(mediaContentType ?? void 0);
328
+ if (!kind) return;
329
+ return kind === "image" ? "<media:image>" : `<media:${kind}>`;
330
+ }
331
+ function createIMessageSendReceipt(params) {
332
+ const messageId = params.messageId.trim();
333
+ const results = messageId && messageId !== "unknown" && messageId !== "ok" ? [{
334
+ channel: "imessage",
335
+ messageId,
336
+ meta: { targetKind: params.target.kind }
337
+ }] : [];
338
+ if (results[0]) {
339
+ if (params.target.kind === "chat_id") results[0].chatId = String(params.target.chatId);
340
+ else if (params.target.kind === "chat_guid") results[0].conversationId = params.target.chatGuid;
341
+ else if (params.target.kind === "chat_identifier") results[0].conversationId = params.target.chatIdentifier;
342
+ }
343
+ const receiptParams = {
344
+ results,
345
+ kind: params.kind
346
+ };
347
+ if (params.replyToId) receiptParams.replyToId = params.replyToId;
348
+ return createMessageReceiptFromOutboundResults(receiptParams);
349
+ }
350
+ function resolveOutboundEchoScope(params) {
351
+ if (params.target.kind === "chat_id") return `${params.accountId}:${formatIMessageChatTarget(params.target.chatId)}`;
352
+ if (params.target.kind === "chat_guid") return `${params.accountId}:chat_guid:${params.target.chatGuid}`;
353
+ if (params.target.kind === "chat_identifier") return `${params.accountId}:chat_identifier:${params.target.chatIdentifier}`;
354
+ return `${params.accountId}:imessage:${params.target.to}`;
355
+ }
356
+ async function sendMessageIMessage(to, text, opts) {
357
+ const cfg = requireRuntimeConfig(opts.config, "iMessage send");
358
+ const account = opts.account ?? resolveIMessageAccount({
359
+ cfg,
360
+ accountId: opts.accountId
361
+ });
362
+ const cliPath = opts.cliPath?.trim() || account.config.cliPath?.trim() || "imsg";
363
+ const dbPath = opts.dbPath?.trim() || account.config.dbPath?.trim();
364
+ const target = parseIMessageTarget(opts.chatId ? formatIMessageChatTarget(opts.chatId) : to);
365
+ const service = opts.service ?? (target.kind === "handle" ? target.service : void 0) ?? account.config.service;
366
+ const region = opts.region?.trim() || account.config.region?.trim() || "US";
367
+ const maxBytes = typeof opts.maxBytes === "number" ? opts.maxBytes : typeof account.config.mediaMaxMb === "number" ? account.config.mediaMaxMb * 1024 * 1024 : 16 * 1024 * 1024;
368
+ let message = text ?? "";
369
+ let filePath;
370
+ let mediaContentType;
371
+ if (opts.mediaUrl?.trim()) {
372
+ const resolved = await (opts.resolveAttachmentImpl ?? resolveOutboundAttachmentFromUrl)(opts.mediaUrl.trim(), maxBytes, {
373
+ localRoots: opts.mediaLocalRoots,
374
+ readFile: opts.mediaReadFile
375
+ });
376
+ filePath = resolved.path;
377
+ mediaContentType = resolved.contentType ?? void 0;
378
+ }
379
+ if (!message.trim() && !filePath) throw new Error("iMessage send requires text or media");
380
+ if (message.trim()) {
381
+ const tableMode = resolveMarkdownTableMode({
382
+ cfg,
383
+ channel: "imessage",
384
+ accountId: account.accountId
385
+ });
386
+ message = convertMarkdownTables(message, tableMode);
387
+ }
388
+ message = stripInlineDirectiveTagsForDelivery(message).text;
389
+ if (!message.trim() && !filePath) throw new Error("iMessage send requires text or media");
390
+ const formatted = message.trim() ? extractMarkdownFormatRuns(message) : {
391
+ text: message,
392
+ ranges: []
393
+ };
394
+ message = formatted.text;
395
+ if (!message.trim() && !filePath) throw new Error("iMessage send requires text or media");
396
+ const echoText = resolveOutboundEchoText(message, filePath ? mediaContentType : void 0);
397
+ const resolvedReplyToId = sanitizeReplyToId(opts.replyToId);
398
+ const params = {
399
+ text: message,
400
+ service: service || "auto",
401
+ region
402
+ };
403
+ if (resolvedReplyToId) params.reply_to = resolvedReplyToId;
404
+ if (formatted.ranges.length > 0) params.formatting = formatted.ranges;
405
+ if (filePath) params.file = filePath;
406
+ if (target.kind === "chat_id") params.chat_id = target.chatId;
407
+ else if (target.kind === "chat_guid") params.chat_guid = target.chatGuid;
408
+ else if (target.kind === "chat_identifier") params.chat_identifier = target.chatIdentifier;
409
+ else params.to = target.to;
410
+ const client = opts.client ?? (opts.createClient ? await opts.createClient({
411
+ cliPath,
412
+ dbPath
413
+ }) : await createIMessageRpcClient({
414
+ cliPath,
415
+ dbPath
416
+ }));
417
+ const shouldClose = !opts.client;
418
+ try {
419
+ const result = await client.request("send", params, { timeoutMs: opts.timeoutMs });
420
+ const resolvedId = resolveMessageId(result);
421
+ const messageId = resolvedId ?? (result?.ok ? "ok" : "unknown");
422
+ const echoScope = resolveOutboundEchoScope({
423
+ accountId: account.accountId,
424
+ target
425
+ });
426
+ if (echoScope) rememberPersistedIMessageEcho({
427
+ scope: echoScope,
428
+ text: echoText,
429
+ messageId: resolvedId ?? void 0
430
+ });
431
+ if (resolvedId) rememberIMessageReplyCache({
432
+ accountId: account.accountId,
433
+ messageId: resolvedId,
434
+ chatGuid: target.kind === "chat_guid" ? target.chatGuid : void 0,
435
+ chatIdentifier: target.kind === "chat_identifier" ? target.chatIdentifier : target.kind === "handle" ? `${target.service === "sms" ? "SMS" : "iMessage"};-;${target.to}` : void 0,
436
+ chatId: target.kind === "chat_id" ? target.chatId : void 0,
437
+ timestamp: Date.now(),
438
+ isFromMe: true
439
+ });
440
+ return {
441
+ messageId,
442
+ sentText: message,
443
+ ...echoText ? { echoText } : {},
444
+ receipt: createIMessageSendReceipt({
445
+ messageId,
446
+ target,
447
+ kind: filePath ? "media" : "text",
448
+ ...resolvedReplyToId ? { replyToId: resolvedReplyToId } : {}
449
+ })
450
+ };
451
+ } finally {
452
+ if (shouldClose) await client.stop();
453
+ }
454
+ }
455
+ //#endregion
456
+ //#region extensions/imessage/src/monitor/abort-handler.ts
457
+ function attachIMessageMonitorAbortHandler(params) {
458
+ const abort = params.abortSignal;
459
+ if (!abort) return () => {};
460
+ const onAbort = () => {
461
+ const subscriptionId = params.getSubscriptionId();
462
+ if (subscriptionId) params.client.request("watch.unsubscribe", { subscription: subscriptionId }).catch(() => {});
463
+ params.client.stop().catch(() => {});
464
+ };
465
+ abort.addEventListener("abort", onAbort, { once: true });
466
+ return () => abort.removeEventListener("abort", onAbort);
467
+ }
468
+ //#endregion
469
+ //#region extensions/imessage/src/monitor/catchup.ts
470
+ const DEFAULT_MAX_AGE_MINUTES = 120;
471
+ const MAX_MAX_AGE_MINUTES = 720;
472
+ const DEFAULT_PER_RUN_LIMIT = 50;
473
+ const MAX_PER_RUN_LIMIT = 500;
474
+ const DEFAULT_FIRST_RUN_LOOKBACK_MINUTES = 30;
475
+ const DEFAULT_MAX_FAILURE_RETRIES = 10;
476
+ const MAX_MAX_FAILURE_RETRIES = 1e3;
477
+ const MAX_FAILURE_RETRY_MAP_SIZE = 5e3;
478
+ function resolveStateDirFromEnv(env = process.env) {
479
+ if (env.DAOCORE_STATE_DIR?.trim()) return resolveStateDir(env);
480
+ if (env.VITEST || env.NODE_ENV === "test") {
481
+ const name = "daocore-vitest-" + process.pid;
482
+ return path.join(resolvePreferredDaoCoreTmpDir(), name);
483
+ }
484
+ return resolveStateDir(env);
485
+ }
486
+ function resolveCursorFilePath(accountId) {
487
+ const safePrefix = accountId.replace(/[^a-zA-Z0-9_-]/g, "_") || "account";
488
+ const hash = createHash("sha256").update(accountId, "utf8").digest("hex").slice(0, 12);
489
+ return path.join(resolveStateDirFromEnv(), "imessage", "catchup", `${safePrefix}__${hash}.json`);
490
+ }
491
+ function sanitizeFailureRetriesInput(raw) {
492
+ if (!raw || typeof raw !== "object") return {};
493
+ const out = {};
494
+ for (const [guid, count] of Object.entries(raw)) {
495
+ if (!guid || typeof guid !== "string") continue;
496
+ if (typeof count !== "number" || !Number.isFinite(count) || count <= 0) continue;
497
+ out[guid] = Math.floor(count);
498
+ }
499
+ return out;
500
+ }
501
+ /**
502
+ * Cursor file path: `<daocoreStateDir>/imessage/catchup/<safePrefix>__<sha256[:12]>.json`.
503
+ * `daocoreStateDir` resolves through `DAOCORE_STATE_DIR` (or the plugin-sdk default,
504
+ * `~/.daocore`). On a default install the cursor lands at
505
+ * `~/.daocore/imessage/catchup/<safePrefix>__<sha256[:12]>.json`.
506
+ */
507
+ async function loadIMessageCatchupCursor(accountId) {
508
+ const { value } = await readJsonFileWithFallback(resolveCursorFilePath(accountId), null);
509
+ if (!value || typeof value !== "object") return null;
510
+ if (typeof value.lastSeenMs !== "number" || !Number.isFinite(value.lastSeenMs)) return null;
511
+ if (typeof value.lastSeenRowid !== "number" || !Number.isFinite(value.lastSeenRowid)) return null;
512
+ const failureRetries = sanitizeFailureRetriesInput(value.failureRetries);
513
+ const hasRetries = Object.keys(failureRetries).length > 0;
514
+ return {
515
+ lastSeenMs: value.lastSeenMs,
516
+ lastSeenRowid: value.lastSeenRowid,
517
+ updatedAt: typeof value.updatedAt === "number" ? value.updatedAt : 0,
518
+ ...hasRetries ? { failureRetries } : {}
519
+ };
520
+ }
521
+ async function saveIMessageCatchupCursor(accountId, next) {
522
+ const filePath = resolveCursorFilePath(accountId);
523
+ const sanitized = sanitizeFailureRetriesInput(next.failureRetries);
524
+ const hasRetries = Object.keys(sanitized).length > 0;
525
+ await writeJsonFileAtomically(filePath, {
526
+ lastSeenMs: next.lastSeenMs,
527
+ lastSeenRowid: next.lastSeenRowid,
528
+ updatedAt: Date.now(),
529
+ ...hasRetries ? { failureRetries: sanitized } : {}
530
+ });
531
+ }
532
+ /**
533
+ * Bound the retry map so a pathological storm of unique failing GUIDs
534
+ * cannot grow the cursor file without limit. Keeps the `maxSize` entries
535
+ * with the highest counts (closest to give-up) when over the bound.
536
+ */
537
+ function capFailureRetriesMap(map, maxSize = MAX_FAILURE_RETRY_MAP_SIZE) {
538
+ const entries = Object.entries(map);
539
+ if (entries.length <= maxSize) return map;
540
+ entries.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
541
+ const capped = {};
542
+ for (let i = 0; i < maxSize; i++) {
543
+ const [guid, count] = entries[i];
544
+ capped[guid] = count;
545
+ }
546
+ return capped;
547
+ }
548
+ function clampInt(value, min, max, fallback) {
549
+ if (typeof value !== "number" || !Number.isFinite(value)) return fallback;
550
+ return Math.min(max, Math.max(min, Math.floor(value)));
551
+ }
552
+ function resolveCatchupConfig(raw) {
553
+ return {
554
+ enabled: Boolean(raw?.enabled),
555
+ maxAgeMinutes: clampInt(raw?.maxAgeMinutes, 1, MAX_MAX_AGE_MINUTES, DEFAULT_MAX_AGE_MINUTES),
556
+ perRunLimit: clampInt(raw?.perRunLimit, 1, MAX_PER_RUN_LIMIT, DEFAULT_PER_RUN_LIMIT),
557
+ firstRunLookbackMinutes: clampInt(raw?.firstRunLookbackMinutes, 1, MAX_MAX_AGE_MINUTES, DEFAULT_FIRST_RUN_LOOKBACK_MINUTES),
558
+ maxFailureRetries: clampInt(raw?.maxFailureRetries, 1, MAX_MAX_FAILURE_RETRIES, DEFAULT_MAX_FAILURE_RETRIES)
559
+ };
560
+ }
561
+ /**
562
+ * One catchup pass. Loads the cursor, fetches `messages.history`, replays
563
+ * each row through `dispatch`, advances the cursor on success / give-up,
564
+ * persists the cursor, returns a summary.
565
+ *
566
+ * The fetch and dispatch functions are injected so this loop is unit-testable
567
+ * without standing up an `imsg` daemon. The wiring in `monitor-provider.ts`
568
+ * passes the live `client.request("messages.history", ...)` adapter as
569
+ * `fetch` and the `evaluateIMessageInbound` + `dispatchInboundMessage`
570
+ * pipeline as `dispatch`.
571
+ */
572
+ async function performIMessageCatchup(params) {
573
+ const now = params.now ?? Date.now();
574
+ const cfg = params.config;
575
+ const cursor = await loadIMessageCatchupCursor(params.accountId);
576
+ const lookbackMs = cursor === null ? cfg.firstRunLookbackMinutes * 6e4 : cfg.maxAgeMinutes * 6e4;
577
+ const ageBoundMs = now - cfg.maxAgeMinutes * 6e4;
578
+ const windowStartMs = Math.max(cursor?.lastSeenMs ?? now - lookbackMs, ageBoundMs);
579
+ const windowEndMs = now;
580
+ const sinceRowid = cursor?.lastSeenRowid ?? 0;
581
+ const summary = {
582
+ querySucceeded: false,
583
+ fetchedCount: 0,
584
+ replayed: 0,
585
+ skippedFromMe: 0,
586
+ skippedPreCursor: 0,
587
+ skippedGivenUp: 0,
588
+ failed: 0,
589
+ givenUp: 0,
590
+ cursorBefore: cursor ? {
591
+ lastSeenMs: cursor.lastSeenMs,
592
+ lastSeenRowid: cursor.lastSeenRowid
593
+ } : null,
594
+ cursorAfter: {
595
+ lastSeenMs: cursor?.lastSeenMs ?? windowStartMs,
596
+ lastSeenRowid: cursor?.lastSeenRowid ?? 0
597
+ },
598
+ windowStartMs,
599
+ windowEndMs
600
+ };
601
+ let fetchResult;
602
+ try {
603
+ fetchResult = await params.fetch({
604
+ sinceMs: windowStartMs,
605
+ sinceRowid,
606
+ limit: cfg.perRunLimit
607
+ });
608
+ } catch (err) {
609
+ params.warn?.(`imessage catchup: fetch failed: ${String(err)}`);
610
+ return summary;
611
+ }
612
+ if (!fetchResult.resolved) {
613
+ params.warn?.(`imessage catchup: fetch returned unresolved result`);
614
+ return summary;
615
+ }
616
+ summary.querySucceeded = true;
617
+ summary.fetchedCount = fetchResult.rows.length;
618
+ const rows = fetchResult.rows.toSorted((a, b) => a.rowid - b.rowid);
619
+ const failureRetries = { ...cursor?.failureRetries };
620
+ const cursorBeforeMs = cursor?.lastSeenMs ?? windowStartMs;
621
+ const cursorBeforeRowid = cursor?.lastSeenRowid ?? 0;
622
+ let highWatermarkMs = cursorBeforeMs;
623
+ let highWatermarkRowid = cursorBeforeRowid;
624
+ let earliestHeldFailureRow = null;
625
+ for (const row of rows) {
626
+ if (row.rowid <= sinceRowid) {
627
+ summary.skippedPreCursor += 1;
628
+ continue;
629
+ }
630
+ if (row.date < ageBoundMs) {
631
+ summary.skippedPreCursor += 1;
632
+ highWatermarkMs = Math.max(highWatermarkMs, row.date);
633
+ highWatermarkRowid = Math.max(highWatermarkRowid, row.rowid);
634
+ continue;
635
+ }
636
+ if (row.isFromMe) {
637
+ summary.skippedFromMe += 1;
638
+ highWatermarkMs = Math.max(highWatermarkMs, row.date);
639
+ highWatermarkRowid = Math.max(highWatermarkRowid, row.rowid);
640
+ continue;
641
+ }
642
+ const priorCount = failureRetries[row.guid] ?? 0;
643
+ if (priorCount >= cfg.maxFailureRetries) {
644
+ summary.skippedGivenUp += 1;
645
+ highWatermarkMs = Math.max(highWatermarkMs, row.date);
646
+ highWatermarkRowid = Math.max(highWatermarkRowid, row.rowid);
647
+ continue;
648
+ }
649
+ let dispatched;
650
+ try {
651
+ dispatched = await params.dispatch(row);
652
+ } catch (err) {
653
+ params.warn?.(`imessage catchup: dispatch threw for guid=${row.guid}: ${String(err)}`);
654
+ dispatched = { ok: false };
655
+ }
656
+ if (dispatched.ok) {
657
+ summary.replayed += 1;
658
+ delete failureRetries[row.guid];
659
+ highWatermarkMs = Math.max(highWatermarkMs, row.date);
660
+ highWatermarkRowid = Math.max(highWatermarkRowid, row.rowid);
661
+ continue;
662
+ }
663
+ const nextCount = priorCount + 1;
664
+ failureRetries[row.guid] = nextCount;
665
+ summary.failed += 1;
666
+ if (nextCount >= cfg.maxFailureRetries) {
667
+ summary.givenUp += 1;
668
+ params.warn?.(`imessage catchup: giving up on guid=${row.guid} after ${nextCount} failures; advancing cursor past it`);
669
+ highWatermarkMs = Math.max(highWatermarkMs, row.date);
670
+ highWatermarkRowid = Math.max(highWatermarkRowid, row.rowid);
671
+ continue;
672
+ }
673
+ if (earliestHeldFailureRow === null || row.rowid < earliestHeldFailureRow.rowid) earliestHeldFailureRow = row;
674
+ }
675
+ if (earliestHeldFailureRow === null) {
676
+ if (typeof fetchResult.highWatermarkMs === "number") highWatermarkMs = Math.max(highWatermarkMs, fetchResult.highWatermarkMs);
677
+ if (typeof fetchResult.highWatermarkRowid === "number") highWatermarkRowid = Math.max(highWatermarkRowid, fetchResult.highWatermarkRowid);
678
+ }
679
+ let lastSeenMs;
680
+ let lastSeenRowid;
681
+ if (earliestHeldFailureRow !== null) {
682
+ lastSeenMs = Math.max(cursorBeforeMs, earliestHeldFailureRow.date - 1);
683
+ lastSeenRowid = Math.max(cursorBeforeRowid, earliestHeldFailureRow.rowid - 1);
684
+ } else {
685
+ lastSeenMs = highWatermarkMs;
686
+ lastSeenRowid = highWatermarkRowid;
687
+ }
688
+ const capped = capFailureRetriesMap(failureRetries);
689
+ summary.cursorAfter = {
690
+ lastSeenMs,
691
+ lastSeenRowid
692
+ };
693
+ await saveIMessageCatchupCursor(params.accountId, {
694
+ lastSeenMs,
695
+ lastSeenRowid,
696
+ failureRetries: capped
697
+ });
698
+ if (summary.replayed > 0 || summary.failed > 0 || summary.givenUp > 0) params.log?.(`imessage catchup: replayed=${summary.replayed} skippedFromMe=${summary.skippedFromMe} skippedGivenUp=${summary.skippedGivenUp} failed=${summary.failed} givenUp=${summary.givenUp} fetchedCount=${summary.fetchedCount}`);
699
+ return summary;
700
+ }
701
+ //#endregion
702
+ //#region extensions/imessage/src/monitor/strip-imsg-length-prefixed-text.ts
703
+ const utf8Decoder = new TextDecoder();
704
+ function readVarint(buf, start) {
705
+ let offset = start;
706
+ let value = 0;
707
+ let shift = 0;
708
+ while (offset < buf.length && shift <= 28) {
709
+ const byte = buf[offset];
710
+ offset += 1;
711
+ value |= (byte & 127) << shift;
712
+ if ((byte & 128) === 0) return {
713
+ nextOffset: offset,
714
+ value
715
+ };
716
+ shift += 7;
717
+ }
718
+ return null;
719
+ }
720
+ function tryStripImessageLengthPrefixedUtf8Buffer(buf) {
721
+ const key = readVarint(buf, 0);
722
+ if (!key || key.nextOffset >= buf.length) return null;
723
+ if (key.value !== 10) return null;
724
+ const length = readVarint(buf, key.nextOffset);
725
+ if (!length || length.value === 0) return null;
726
+ if (length.nextOffset + length.value !== buf.length) return null;
727
+ return buf.subarray(length.nextOffset, buf.length);
728
+ }
729
+ function stripImessageLengthPrefixedUtf8Text(text) {
730
+ if (!text) return text;
731
+ const stripped = tryStripImessageLengthPrefixedUtf8Buffer(Buffer.from(text, "utf8"));
732
+ if (!stripped) return text;
733
+ const inner = utf8Decoder.decode(stripped);
734
+ return inner.length > 0 ? inner : text;
735
+ }
736
+ //#endregion
737
+ //#region extensions/imessage/src/monitor/parse-notification.ts
738
+ function isOptionalString(value) {
739
+ return value === void 0 || value === null || typeof value === "string";
740
+ }
741
+ function isOptionalStringOrNumber(value) {
742
+ return value === void 0 || value === null || typeof value === "string" || typeof value === "number";
743
+ }
744
+ function isOptionalNumber(value) {
745
+ return value === void 0 || value === null || typeof value === "number";
746
+ }
747
+ function isOptionalBoolean(value) {
748
+ return value === void 0 || value === null || typeof value === "boolean";
749
+ }
750
+ function isOptionalStringArray(value) {
751
+ return value === void 0 || value === null || Array.isArray(value) && value.every((entry) => typeof entry === "string");
752
+ }
753
+ function isOptionalAttachments(value) {
754
+ if (value === void 0 || value === null) return true;
755
+ if (!Array.isArray(value)) return false;
756
+ return value.every((attachment) => {
757
+ if (!isRecord(attachment)) return false;
758
+ return isOptionalString(attachment.original_path) && isOptionalString(attachment.mime_type) && isOptionalBoolean(attachment.missing) && isOptionalString(attachment.transfer_name) && isOptionalString(attachment.uti);
759
+ });
760
+ }
761
+ function parseIMessageNotification(raw) {
762
+ if (!isRecord(raw)) return null;
763
+ const maybeMessage = raw.message;
764
+ if (!isRecord(maybeMessage)) return null;
765
+ const message = maybeMessage;
766
+ if (!isOptionalNumber(message.id) || !isOptionalString(message.guid) || !isOptionalNumber(message.chat_id) || !isOptionalString(message.sender) || !isOptionalString(message.destination_caller_id) || !isOptionalBoolean(message.is_from_me) || !isOptionalString(message.text) || !isOptionalStringOrNumber(message.reply_to_id) || !isOptionalString(message.reply_to_text) || !isOptionalString(message.reply_to_sender) || !isOptionalString(message.created_at) || !isOptionalBoolean(message.is_reaction) || !isOptionalBoolean(message.is_tapback) || !isOptionalString(message.associated_message_guid) || !isOptionalNumber(message.associated_message_type) || !isOptionalString(message.reaction_type) || !isOptionalString(message.reaction_emoji) || !isOptionalBoolean(message.is_reaction_add) || !isOptionalString(message.reacted_to_guid) || !isOptionalAttachments(message.attachments) || !isOptionalString(message.chat_identifier) || !isOptionalString(message.chat_guid) || !isOptionalString(message.chat_name) || !isOptionalStringArray(message.participants) || !isOptionalBoolean(message.is_group)) return null;
767
+ return {
768
+ ...message,
769
+ text: typeof message.text === "string" ? stripImessageLengthPrefixedUtf8Text(message.text) : message.text,
770
+ reply_to_text: typeof message.reply_to_text === "string" ? stripImessageLengthPrefixedUtf8Text(message.reply_to_text) : message.reply_to_text
771
+ };
772
+ }
773
+ //#endregion
774
+ //#region extensions/imessage/src/monitor/catchup-bridge.ts
775
+ const PER_CHAT_HISTORY_LIMIT_CAP = 500;
776
+ const CATCHUP_CHATS_LIST_LIMIT = 200;
777
+ const CATCHUP_RPC_TIMEOUT_MS = 3e4;
778
+ /**
779
+ * Wire `performIMessageCatchup` against the live `imsg` JSON-RPC client.
780
+ *
781
+ * Catchup recovers messages that landed in `chat.db` while the gateway was
782
+ * offline (crash, restart, mac sleep) by:
783
+ * 1. listing recently-active chats via `chats.list`,
784
+ * 2. fetching per-chat history since the cursor via `messages.history`,
785
+ * 3. sorting cross-chat by `rowid`, capping at `perRunLimit`,
786
+ * 4. replaying each row through the same `dispatchPayload` handler used
787
+ * by the live notification loop, so existing dedupe / coalesce / echo
788
+ * / read-receipt behavior covers replayed rows for free.
789
+ *
790
+ * Runs at most once per `monitorIMessageProvider` invocation, between
791
+ * `watch.subscribe` and the live dispatch loop. Anything that arrives during
792
+ * catchup itself flows through live dispatch; the existing inbound-dedupe
793
+ * cache absorbs any overlap.
794
+ */
795
+ async function runIMessageCatchup(params) {
796
+ const { client, accountId, config, includeAttachments, dispatchPayload, runtime } = params;
797
+ const log = (msg) => runtime?.log?.(msg);
798
+ const warnLog = (msg) => runtime?.log?.(warn(msg));
799
+ const payloadByGuid = /* @__PURE__ */ new Map();
800
+ const fetchFn = async ({ sinceMs, sinceRowid, limit }) => {
801
+ let chatsResult;
802
+ try {
803
+ chatsResult = await client.request("chats.list", { limit: CATCHUP_CHATS_LIST_LIMIT }, { timeoutMs: CATCHUP_RPC_TIMEOUT_MS });
804
+ } catch (err) {
805
+ warnLog(`imessage catchup: chats.list failed: ${String(err)}`);
806
+ return {
807
+ resolved: false,
808
+ rows: []
809
+ };
810
+ }
811
+ const chats = chatsResult?.chats ?? [];
812
+ const sinceISO = new Date(sinceMs).toISOString();
813
+ const collected = [];
814
+ const perChatLimit = Math.min(limit, PER_CHAT_HISTORY_LIMIT_CAP);
815
+ let rawWatermarkRowid = -Infinity;
816
+ let rawWatermarkMs = -Infinity;
817
+ for (const chat of chats) {
818
+ const chatId = typeof chat.id === "number" && Number.isFinite(chat.id) ? chat.id : null;
819
+ if (chatId === null) continue;
820
+ const lastMs = typeof chat.last_message_at === "string" ? Date.parse(chat.last_message_at) : NaN;
821
+ if (Number.isFinite(lastMs) && lastMs < sinceMs) continue;
822
+ let historyResult;
823
+ try {
824
+ historyResult = await client.request("messages.history", {
825
+ chat_id: chatId,
826
+ limit: perChatLimit,
827
+ start: sinceISO,
828
+ attachments: includeAttachments
829
+ }, { timeoutMs: CATCHUP_RPC_TIMEOUT_MS });
830
+ } catch (err) {
831
+ warnLog(`imessage catchup: messages.history failed for chat_id=${chatId}: ${String(err)}`);
832
+ continue;
833
+ }
834
+ const messages = Array.isArray(historyResult?.messages) ? historyResult.messages : [];
835
+ for (const raw of messages) {
836
+ const rawRecord = raw && typeof raw === "object" ? raw : null;
837
+ const rawRowid = rawRecord && typeof rawRecord.id === "number" && Number.isFinite(rawRecord.id) ? rawRecord.id : null;
838
+ const rawCreatedAt = rawRecord && typeof rawRecord.created_at === "string" ? rawRecord.created_at : null;
839
+ const rawDateMs = rawCreatedAt ? Date.parse(rawCreatedAt) : NaN;
840
+ if (rawRowid !== null) rawWatermarkRowid = Math.max(rawWatermarkRowid, rawRowid);
841
+ if (Number.isFinite(rawDateMs)) rawWatermarkMs = Math.max(rawWatermarkMs, rawDateMs);
842
+ const payload = parseIMessageNotification({ message: raw });
843
+ if (!payload) continue;
844
+ const guid = payload.guid?.trim();
845
+ const rowid = typeof payload.id === "number" ? payload.id : null;
846
+ const dateMs = typeof payload.created_at === "string" ? Date.parse(payload.created_at) : NaN;
847
+ if (!guid || rowid === null || !Number.isFinite(rowid) || !Number.isFinite(dateMs)) continue;
848
+ if (rowid <= sinceRowid) continue;
849
+ collected.push({
850
+ guid,
851
+ rowid,
852
+ date: dateMs,
853
+ isFromMe: payload.is_from_me === true
854
+ });
855
+ payloadByGuid.set(guid, payload);
856
+ }
857
+ }
858
+ const sorted = collected.toSorted((a, b) => a.rowid - b.rowid);
859
+ const capped = sorted.slice(0, limit);
860
+ const isCapTruncated = capped.length < sorted.length;
861
+ if (isCapTruncated) {
862
+ warnLog(`imessage catchup: fetched ${sorted.length} rows across chats, capped to perRunLimit=${limit} (oldest first); next startup picks up the rest`);
863
+ const keep = new Set(capped.map((row) => row.guid));
864
+ for (const guid of payloadByGuid.keys()) if (!keep.has(guid)) payloadByGuid.delete(guid);
865
+ }
866
+ let effectiveWatermarkRowid = rawWatermarkRowid;
867
+ let effectiveWatermarkMs = rawWatermarkMs;
868
+ if (isCapTruncated && capped.length > 0) {
869
+ const last = capped.at(-1);
870
+ if (last) {
871
+ effectiveWatermarkRowid = Math.min(effectiveWatermarkRowid, last.rowid);
872
+ effectiveWatermarkMs = Math.min(effectiveWatermarkMs, last.date);
873
+ }
874
+ } else if (isCapTruncated && capped.length === 0) {
875
+ effectiveWatermarkRowid = NaN;
876
+ effectiveWatermarkMs = NaN;
877
+ }
878
+ return {
879
+ resolved: true,
880
+ rows: capped,
881
+ ...Number.isFinite(effectiveWatermarkRowid) ? { highWatermarkRowid: effectiveWatermarkRowid } : {},
882
+ ...Number.isFinite(effectiveWatermarkMs) ? { highWatermarkMs: effectiveWatermarkMs } : {}
883
+ };
884
+ };
885
+ const dispatchFn = async (row) => {
886
+ const payload = payloadByGuid.get(row.guid);
887
+ if (!payload) {
888
+ warnLog(`imessage catchup: missing payload for guid=${row.guid}, skipping`);
889
+ return { ok: false };
890
+ }
891
+ try {
892
+ await dispatchPayload(payload);
893
+ return { ok: true };
894
+ } catch (err) {
895
+ warnLog(`imessage catchup: dispatch threw for guid=${row.guid}: ${String(err)}`);
896
+ return { ok: false };
897
+ }
898
+ };
899
+ return await performIMessageCatchup({
900
+ accountId,
901
+ config,
902
+ fetch: fetchFn,
903
+ dispatch: dispatchFn,
904
+ log,
905
+ warn: warnLog,
906
+ ...params.now ? { now: params.now() } : {}
907
+ });
908
+ }
909
+ //#endregion
910
+ //#region extensions/imessage/src/monitor/coalesce.ts
911
+ /**
912
+ * Bounds on the merged output when multiple inbound iMessage payloads are
913
+ * folded into one agent turn. Caps each merge so a sender who
914
+ * rapid-fires DMs inside the debounce window cannot amplify the downstream
915
+ * prompt past a safe ceiling. Every source GUID still surfaces via
916
+ * `coalescedMessageGuids` so a future replay path can recognize duplicates.
917
+ */
918
+ const MAX_COALESCED_TEXT_CHARS = 4e3;
919
+ /**
920
+ * Combine consecutive same-sender iMessage payloads into a single payload for
921
+ * downstream dispatch. Used when the debouncer flushes a bucket containing
922
+ * more than one event — e.g. Apple's split-send for `Dump https://example.com`
923
+ * arriving as two separate `chat.db` rows ~0.8-2.0 s apart.
924
+ *
925
+ * The first payload anchors the merged shape (preserving its GUID for reply
926
+ * threading). Text is concatenated with deduplication, attachments are merged
927
+ * (capped), and the latest `created_at` wins so downstream sees the most
928
+ * recent activity timestamp.
929
+ */
930
+ function combineIMessagePayloads(payloads) {
931
+ if (payloads.length === 0) throw new Error("combineIMessagePayloads: cannot combine empty payloads");
932
+ if (payloads.length === 1) return payloads[0];
933
+ const first = payloads[0];
934
+ const last = payloads[payloads.length - 1];
935
+ const boundedPayloads = payloads.length > 10 ? [...payloads.slice(0, 9), last] : payloads;
936
+ const seenTexts = /* @__PURE__ */ new Set();
937
+ const textParts = [];
938
+ for (const payload of boundedPayloads) {
939
+ const text = (payload.text ?? "").trim();
940
+ if (!text) continue;
941
+ const normalized = text.toLowerCase();
942
+ if (seenTexts.has(normalized)) continue;
943
+ seenTexts.add(normalized);
944
+ textParts.push(text);
945
+ }
946
+ let combinedText = textParts.join(" ");
947
+ if (combinedText.length > 4e3) combinedText = `${combinedText.slice(0, MAX_COALESCED_TEXT_CHARS)}…[truncated]`;
948
+ const allAttachments = boundedPayloads.flatMap((p) => p.attachments ?? []).slice(0, 20);
949
+ const createdAts = payloads.map((p) => p.created_at).filter((c) => typeof c === "string" && c.length > 0);
950
+ const latestCreatedAt = createdAts.length > 0 ? createdAts.reduce((a, b) => a > b ? a : b) : first.created_at;
951
+ const seenGuids = /* @__PURE__ */ new Set();
952
+ const coalescedMessageGuids = [];
953
+ for (const payload of payloads) {
954
+ const guid = payload.guid?.trim();
955
+ if (!guid || seenGuids.has(guid)) continue;
956
+ seenGuids.add(guid);
957
+ coalescedMessageGuids.push(guid);
958
+ }
959
+ const entryWithReply = payloads.find((p) => p.reply_to_id != null);
960
+ return {
961
+ ...first,
962
+ text: combinedText,
963
+ attachments: allAttachments.length > 0 ? allAttachments : null,
964
+ created_at: latestCreatedAt,
965
+ reply_to_id: entryWithReply?.reply_to_id ?? first.reply_to_id ?? null,
966
+ reply_to_text: entryWithReply?.reply_to_text ?? first.reply_to_text ?? null,
967
+ reply_to_sender: entryWithReply?.reply_to_sender ?? first.reply_to_sender ?? null,
968
+ coalescedMessageGuids: coalescedMessageGuids.length > 0 ? coalescedMessageGuids : void 0
969
+ };
970
+ }
971
+ //#endregion
972
+ //#region extensions/imessage/src/monitor/deliver.ts
973
+ async function deliverReplies(params) {
974
+ const { replies, target, client, runtime, maxBytes, textLimit, accountId, sentMessageCache } = params;
975
+ const scope = `${accountId ?? ""}:${target}`;
976
+ const { cfg } = params;
977
+ const tableMode = resolveMarkdownTableMode({
978
+ cfg,
979
+ channel: "imessage",
980
+ accountId
981
+ });
982
+ const chunkMode = resolveChunkMode(cfg, "imessage", accountId);
983
+ for (const payload of replies) if (await deliverTextOrMediaReply({
984
+ payload,
985
+ text: resolveSendableOutboundReplyParts(payload, { text: convertMarkdownTables(sanitizeOutboundText(payload.text ?? ""), tableMode) }).text,
986
+ chunkText: (value) => chunkTextWithMode(value, textLimit, chunkMode),
987
+ sendText: async (chunk) => {
988
+ const sent = await sendMessageIMessage(target, chunk, {
989
+ config: params.cfg,
990
+ maxBytes,
991
+ client,
992
+ accountId,
993
+ replyToId: payload.replyToId
994
+ });
995
+ sentMessageCache?.remember(scope, {
996
+ text: sent.echoText ?? sent.sentText,
997
+ messageId: sent.messageId
998
+ });
999
+ },
1000
+ sendMedia: async ({ mediaUrl, caption }) => {
1001
+ const sent = await sendMessageIMessage(target, caption ?? "", {
1002
+ config: params.cfg,
1003
+ mediaUrl,
1004
+ maxBytes,
1005
+ client,
1006
+ accountId,
1007
+ replyToId: payload.replyToId
1008
+ });
1009
+ sentMessageCache?.remember(scope, {
1010
+ text: sent.echoText ?? (sent.sentText || void 0),
1011
+ messageId: sent.messageId
1012
+ });
1013
+ }
1014
+ }) !== "empty") runtime.log?.(`imessage: delivered reply to ${target}`);
1015
+ }
1016
+ function createIMessageEchoCachingSend(params) {
1017
+ return async (target, text, opts) => {
1018
+ const sent = await sendMessageIMessage(target, sanitizeOutboundText(text), {
1019
+ ...opts,
1020
+ client: params.client
1021
+ });
1022
+ const scope = `${params.accountId ?? opts.accountId ?? ""}:${target}`;
1023
+ params.sentMessageCache?.remember(scope, {
1024
+ text: sent.echoText ?? (sent.sentText || void 0),
1025
+ messageId: sent.messageId
1026
+ });
1027
+ return sent;
1028
+ };
1029
+ }
1030
+ //#endregion
1031
+ //#region extensions/imessage/src/monitor/echo-cache.ts
1032
+ const SENT_MESSAGE_TEXT_TTL_MS = 4e3;
1033
+ const SENT_MESSAGE_ID_TTL_MS = 6e4;
1034
+ const LEADING_ATTRIBUTED_BODY_CORRUPTION_MARKERS = /^[\uFEFF\uFFFD\uFFFE\uFFFF]+/u;
1035
+ function normalizeEchoTextKey(text) {
1036
+ if (!text) return null;
1037
+ const normalized = text.replace(/\r\n?/g, "\n").trim().replace(LEADING_ATTRIBUTED_BODY_CORRUPTION_MARKERS, "").trim();
1038
+ return normalized ? normalized : null;
1039
+ }
1040
+ function normalizeEchoMessageIdKey(messageId) {
1041
+ if (!messageId) return null;
1042
+ const normalized = messageId.trim();
1043
+ if (!normalized || normalized === "ok" || normalized === "unknown") return null;
1044
+ return normalized;
1045
+ }
1046
+ var DefaultSentMessageCache = class {
1047
+ constructor() {
1048
+ this.textCache = /* @__PURE__ */ new Map();
1049
+ this.textBackedByIdCache = /* @__PURE__ */ new Map();
1050
+ this.messageIdCache = /* @__PURE__ */ new Map();
1051
+ }
1052
+ remember(scope, lookup) {
1053
+ const textKey = normalizeEchoTextKey(lookup.text);
1054
+ if (textKey) this.textCache.set(`${scope}:${textKey}`, Date.now());
1055
+ const messageIdKey = normalizeEchoMessageIdKey(lookup.messageId);
1056
+ if (messageIdKey) {
1057
+ this.messageIdCache.set(`${scope}:${messageIdKey}`, Date.now());
1058
+ if (textKey) this.textBackedByIdCache.set(`${scope}:${textKey}`, Date.now());
1059
+ }
1060
+ this.cleanup();
1061
+ }
1062
+ has(scope, lookup, skipIdShortCircuit = false) {
1063
+ this.cleanup();
1064
+ if (hasPersistedIMessageEcho({
1065
+ scope,
1066
+ ...lookup
1067
+ })) return true;
1068
+ const textKey = normalizeEchoTextKey(lookup.text);
1069
+ const messageIdKey = normalizeEchoMessageIdKey(lookup.messageId);
1070
+ if (messageIdKey) {
1071
+ const idTimestamp = this.messageIdCache.get(`${scope}:${messageIdKey}`);
1072
+ if (idTimestamp && Date.now() - idTimestamp <= SENT_MESSAGE_ID_TTL_MS) return true;
1073
+ const textTimestamp = textKey ? this.textCache.get(`${scope}:${textKey}`) : void 0;
1074
+ const textBackedByIdTimestamp = textKey ? this.textBackedByIdCache.get(`${scope}:${textKey}`) : void 0;
1075
+ if (!skipIdShortCircuit && !(typeof textTimestamp === "number" && (!textBackedByIdTimestamp || textTimestamp > textBackedByIdTimestamp))) return false;
1076
+ }
1077
+ if (textKey) {
1078
+ const textTimestamp = this.textCache.get(`${scope}:${textKey}`);
1079
+ if (textTimestamp && Date.now() - textTimestamp <= SENT_MESSAGE_TEXT_TTL_MS) return true;
1080
+ }
1081
+ return false;
1082
+ }
1083
+ cleanup() {
1084
+ const now = Date.now();
1085
+ for (const [key, timestamp] of this.textCache.entries()) if (now - timestamp > SENT_MESSAGE_TEXT_TTL_MS) this.textCache.delete(key);
1086
+ for (const [key, timestamp] of this.textBackedByIdCache.entries()) if (now - timestamp > SENT_MESSAGE_TEXT_TTL_MS) this.textBackedByIdCache.delete(key);
1087
+ for (const [key, timestamp] of this.messageIdCache.entries()) if (now - timestamp > SENT_MESSAGE_ID_TTL_MS) this.messageIdCache.delete(key);
1088
+ }
1089
+ };
1090
+ function createSentMessageCache() {
1091
+ return new DefaultSentMessageCache();
1092
+ }
1093
+ //#endregion
1094
+ //#region extensions/imessage/src/monitor/group-allowlist-warnings.ts
1095
+ const startupWarned = /* @__PURE__ */ new Set();
1096
+ const perChatWarned = /* @__PURE__ */ new Set();
1097
+ /**
1098
+ * Fires once per `accountId` at monitor startup when `groupPolicy === "allowlist"`
1099
+ * but `channels.imessage.groups` is empty (no `"*"` wildcard, no explicit
1100
+ * `chat_id` entries). Without one of those, every group message is dropped at
1101
+ * the second gate even when the sender passes `groupAllowFrom`.
1102
+ */
1103
+ function warnGroupAllowlistMisconfigOnce(params) {
1104
+ if (params.groupPolicy !== "allowlist") return false;
1105
+ if ((params.groups ? Object.keys(params.groups) : []).length > 0) return false;
1106
+ const key = `imessage:${params.accountId}`;
1107
+ if (startupWarned.has(key)) return false;
1108
+ startupWarned.add(key);
1109
+ params.log(`imessage: groupPolicy="allowlist" but channels.imessage.groups is empty for account "${params.accountId}". Every inbound group message will be dropped. Add channels.imessage.groups["*"] = { requireMention: true } to allow all groups, or explicit per-chat_id entries to allow specific groups.`);
1110
+ return true;
1111
+ }
1112
+ /**
1113
+ * Fires once per `accountId:chat_id` when the runtime allowlist gate drops a
1114
+ * group message because that chat_id is not in `channels.imessage.groups`.
1115
+ * Bounded by the number of distinct group chats the gateway sees.
1116
+ */
1117
+ function warnGroupAllowlistDropPerChatOnce(params) {
1118
+ const chat = params.chatId == null ? "" : String(params.chatId).trim();
1119
+ if (!chat) return false;
1120
+ const key = `imessage:${params.accountId}:${chat}`;
1121
+ if (perChatWarned.has(key)) return false;
1122
+ perChatWarned.add(key);
1123
+ params.log(`imessage: dropping group message from chat_id=${chat} (account "${params.accountId}") — not in channels.imessage.groups allowlist. Add channels.imessage.groups["${chat}"] or channels.imessage.groups["*"] to allow it.`);
1124
+ return true;
1125
+ }
1126
+ //#endregion
1127
+ //#region extensions/imessage/src/conversation-route.ts
1128
+ function resolveIMessageConversationRoute(params) {
1129
+ let route = resolveAgentRoute({
1130
+ cfg: params.cfg,
1131
+ channel: "imessage",
1132
+ accountId: params.accountId,
1133
+ peer: {
1134
+ kind: params.isGroup ? "group" : "direct",
1135
+ id: params.peerId
1136
+ }
1137
+ });
1138
+ const conversationId = resolveIMessageInboundConversationId({
1139
+ isGroup: params.isGroup,
1140
+ sender: params.sender,
1141
+ chatId: params.chatId
1142
+ });
1143
+ if (!conversationId) return route;
1144
+ route = resolveConfiguredBindingRoute({
1145
+ cfg: params.cfg,
1146
+ route,
1147
+ conversation: {
1148
+ channel: "imessage",
1149
+ accountId: params.accountId,
1150
+ conversationId
1151
+ }
1152
+ }).route;
1153
+ const runtimeRoute = resolveRuntimeConversationBindingRoute({
1154
+ route,
1155
+ conversation: {
1156
+ channel: "imessage",
1157
+ accountId: params.accountId,
1158
+ conversationId
1159
+ }
1160
+ });
1161
+ route = runtimeRoute.route;
1162
+ if (runtimeRoute.bindingRecord && !runtimeRoute.boundSessionKey) logVerbose(`imessage: plugin-bound conversation ${conversationId}`);
1163
+ else if (runtimeRoute.boundSessionKey) logVerbose(`imessage: routed via bound conversation ${conversationId} -> ${runtimeRoute.boundSessionKey}`);
1164
+ return route;
1165
+ }
1166
+ //#endregion
1167
+ //#region extensions/imessage/src/monitor/reflection-guard.ts
1168
+ const REFLECTION_PATTERNS = [
1169
+ {
1170
+ re: /(?:#\+){2,}#?/,
1171
+ label: "internal-separator"
1172
+ },
1173
+ {
1174
+ re: /\bassistant\s+to\s*=\s*\w+/i,
1175
+ label: "assistant-role-marker"
1176
+ },
1177
+ {
1178
+ re: /<\s*\/?\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>/i,
1179
+ label: "thinking-tag"
1180
+ },
1181
+ {
1182
+ re: /<\s*\/?\s*relevant[-_]memories\b[^<>]*>/i,
1183
+ label: "relevant-memories-tag"
1184
+ },
1185
+ {
1186
+ re: /<\s*\/?\s*final\b[^<>]*>/i,
1187
+ label: "final-tag"
1188
+ },
1189
+ {
1190
+ re: /\bACP error\s*\(\s*ACP_[A-Z0-9_]+\s*\):/i,
1191
+ label: "acp-error"
1192
+ },
1193
+ {
1194
+ re: /\bMissing API key for\b.+\bon the gateway\b/i,
1195
+ label: "gateway-missing-api-key"
1196
+ }
1197
+ ];
1198
+ function hasMatchOutsideCode(text, re) {
1199
+ const codeRegions = findCodeRegions(text);
1200
+ const globalRe = new RegExp(re.source, re.flags.includes("g") ? re.flags : `${re.flags}g`);
1201
+ for (const match of text.matchAll(globalRe)) {
1202
+ const start = match.index ?? -1;
1203
+ if (start >= 0 && !isInsideCode(start, codeRegions)) return true;
1204
+ }
1205
+ return false;
1206
+ }
1207
+ /**
1208
+ * Check whether an inbound message appears to be a reflection of
1209
+ * assistant-originated content. Returns matched pattern labels for telemetry.
1210
+ */
1211
+ function detectReflectedContent(text) {
1212
+ if (!text) return {
1213
+ isReflection: false,
1214
+ matchedLabels: []
1215
+ };
1216
+ const matchedLabels = [];
1217
+ for (const { re, label } of REFLECTION_PATTERNS) if (hasMatchOutsideCode(text, re)) matchedLabels.push(label);
1218
+ return {
1219
+ isReflection: matchedLabels.length > 0,
1220
+ matchedLabels
1221
+ };
1222
+ }
1223
+ //#endregion
1224
+ //#region extensions/imessage/src/monitor/inbound-processing.ts
1225
+ const TAPBACK_TEXT_PATTERNS = [
1226
+ {
1227
+ prefix: "loved",
1228
+ action: "added",
1229
+ emoji: "❤️"
1230
+ },
1231
+ {
1232
+ prefix: "liked",
1233
+ action: "added",
1234
+ emoji: "👍"
1235
+ },
1236
+ {
1237
+ prefix: "disliked",
1238
+ action: "added",
1239
+ emoji: "👎"
1240
+ },
1241
+ {
1242
+ prefix: "laughed at",
1243
+ action: "added",
1244
+ emoji: "😂"
1245
+ },
1246
+ {
1247
+ prefix: "emphasized",
1248
+ action: "added",
1249
+ emoji: "‼️"
1250
+ },
1251
+ {
1252
+ prefix: "questioned",
1253
+ action: "added",
1254
+ emoji: "❓"
1255
+ },
1256
+ {
1257
+ prefix: "removed a heart from",
1258
+ action: "removed",
1259
+ emoji: "❤️"
1260
+ },
1261
+ {
1262
+ prefix: "removed a like from",
1263
+ action: "removed",
1264
+ emoji: "👍"
1265
+ },
1266
+ {
1267
+ prefix: "removed a dislike from",
1268
+ action: "removed",
1269
+ emoji: "👎"
1270
+ },
1271
+ {
1272
+ prefix: "removed a laugh from",
1273
+ action: "removed",
1274
+ emoji: "😂"
1275
+ },
1276
+ {
1277
+ prefix: "removed an emphasis from",
1278
+ action: "removed",
1279
+ emoji: "‼️"
1280
+ },
1281
+ {
1282
+ prefix: "removed a question from",
1283
+ action: "removed",
1284
+ emoji: "❓"
1285
+ }
1286
+ ];
1287
+ function normalizeReactionValue(value) {
1288
+ return typeof value === "string" ? value.trim().replace(/^p:\d+\//iu, "") || void 0 : void 0;
1289
+ }
1290
+ function resolveReactionTargetGuidCandidates(...values) {
1291
+ const candidates = [];
1292
+ for (const value of values) {
1293
+ if (typeof value !== "string") continue;
1294
+ const raw = value.trim();
1295
+ if (!raw) continue;
1296
+ const normalized = raw.replace(/^p:\d+\//iu, "");
1297
+ for (const candidate of [normalized, raw]) if (candidate && !candidates.includes(candidate)) candidates.push(candidate);
1298
+ }
1299
+ return candidates;
1300
+ }
1301
+ function resolveTapbackTextContext(bodyText) {
1302
+ const lower = bodyText.toLowerCase();
1303
+ for (const pattern of TAPBACK_TEXT_PATTERNS) {
1304
+ if (!lower.startsWith(pattern.prefix)) continue;
1305
+ const afterPrefix = bodyText.slice(pattern.prefix.length).trim();
1306
+ if (!/^["\u201c]/u.test(afterPrefix)) continue;
1307
+ return {
1308
+ action: pattern.action,
1309
+ emoji: pattern.emoji,
1310
+ targetText: afterPrefix.replace(/^["\u201c]/u, "").replace(/["\u201d]$/u, "").trim()
1311
+ };
1312
+ }
1313
+ return null;
1314
+ }
1315
+ function resolveIMessageReactionContext(message, bodyText) {
1316
+ if (message.is_reaction === true || message.is_tapback === true || typeof message.associated_message_type === "number" && Number.isFinite(message.associated_message_type) && message.associated_message_type >= 2e3 && message.associated_message_type < 4e3) {
1317
+ const targetGuids = resolveReactionTargetGuidCandidates(message.reacted_to_guid, message.associated_message_guid);
1318
+ return {
1319
+ action: message.is_reaction_add === false ? "removed" : "added",
1320
+ emoji: normalizeReactionValue(message.reaction_emoji) ?? normalizeReactionValue(message.reaction_type) ?? "reaction",
1321
+ targetGuid: targetGuids[0],
1322
+ targetGuids
1323
+ };
1324
+ }
1325
+ return resolveTapbackTextContext(bodyText);
1326
+ }
1327
+ const normalizeNonEmpty = (value) => value.trim() || null;
1328
+ const imessageConversationIdentityKinds = new Set([
1329
+ "plugin:imessage-chat-id",
1330
+ "plugin:imessage-chat-guid",
1331
+ "plugin:imessage-chat-identifier"
1332
+ ]);
1333
+ const matchIMessageIngressEntry = ({ entry, context }) => {
1334
+ if (imessageConversationIdentityKinds.has(entry.kind) && context !== "group") return false;
1335
+ };
1336
+ function isIMessageConversationAllowTarget(entry) {
1337
+ const parsed = parseIMessageAllowTarget(entry);
1338
+ return parsed.kind === "chat_id" || parsed.kind === "chat_guid" || parsed.kind === "chat_identifier";
1339
+ }
1340
+ function mergeIMessageGroupAllowFromWithLegacyChatTargets(params) {
1341
+ if (params.groupAllowFrom.length > 0 || !params.allowLegacyConversationTargets) return params.groupAllowFrom;
1342
+ const legacyChatTargets = params.allowFrom.filter((entry) => isIMessageConversationAllowTarget(entry));
1343
+ if (legacyChatTargets.length === 0) return params.groupAllowFrom;
1344
+ return Array.from(new Set([...params.groupAllowFrom, ...legacyChatTargets]));
1345
+ }
1346
+ const imessageIngressIdentity = defineStableChannelIngressIdentity({
1347
+ key: "imessage-sender",
1348
+ normalizeEntry: normalizeIMessageHandleEntry,
1349
+ normalizeSubject: normalizeIMessageHandle,
1350
+ sensitivity: "pii",
1351
+ matchEntry: matchIMessageIngressEntry,
1352
+ aliases: [
1353
+ [
1354
+ "imessage-chat-id",
1355
+ "plugin:imessage-chat-id",
1356
+ normalizeIMessageChatIdEntry
1357
+ ],
1358
+ [
1359
+ "imessage-chat-guid",
1360
+ "plugin:imessage-chat-guid",
1361
+ normalizeIMessageChatGuidEntry
1362
+ ],
1363
+ [
1364
+ "imessage-chat-identifier",
1365
+ "plugin:imessage-chat-identifier",
1366
+ normalizeIMessageChatIdentifierEntry
1367
+ ]
1368
+ ].map(([key, kind, normalizeEntry]) => ({
1369
+ key,
1370
+ kind,
1371
+ normalizeEntry,
1372
+ normalizeSubject: normalizeNonEmpty,
1373
+ sensitivity: "pii"
1374
+ })),
1375
+ resolveEntryId: ({ entryIndex }) => `imessage-entry-${entryIndex + 1}`
1376
+ });
1377
+ function normalizeIMessageHandleEntry(entry) {
1378
+ const parsed = parseIMessageAllowTarget(entry.trim());
1379
+ return parsed.kind === "handle" ? normalizeIMessageHandle(parsed.handle) : null;
1380
+ }
1381
+ function normalizeIMessageChatIdEntry(entry) {
1382
+ const parsed = parseIMessageAllowTarget(entry.trim());
1383
+ return parsed.kind === "chat_id" ? String(parsed.chatId) : null;
1384
+ }
1385
+ function normalizeIMessageChatGuidEntry(entry) {
1386
+ const parsed = parseIMessageAllowTarget(entry.trim());
1387
+ return parsed.kind === "chat_guid" ? parsed.chatGuid.trim() || null : null;
1388
+ }
1389
+ function normalizeIMessageChatIdentifierEntry(entry) {
1390
+ const parsed = parseIMessageAllowTarget(entry.trim());
1391
+ return parsed.kind === "chat_identifier" ? parsed.chatIdentifier.trim() || null : null;
1392
+ }
1393
+ function normalizeDmPolicy(policy) {
1394
+ return policy === "open" || policy === "allowlist" || policy === "disabled" ? policy : "pairing";
1395
+ }
1396
+ function normalizeGroupPolicy(policy) {
1397
+ return policy === "open" || policy === "disabled" ? policy : "allowlist";
1398
+ }
1399
+ function normalizeReplyField(value) {
1400
+ if (typeof value === "string") {
1401
+ const trimmed = value.trim();
1402
+ return trimmed ? trimmed : void 0;
1403
+ }
1404
+ if (typeof value === "number") return String(value);
1405
+ }
1406
+ function describeReplyContext(message) {
1407
+ const body = normalizeReplyField(message.reply_to_text);
1408
+ if (!body) return null;
1409
+ return {
1410
+ body,
1411
+ id: normalizeReplyField(message.reply_to_id),
1412
+ sender: normalizeReplyField(message.reply_to_sender)
1413
+ };
1414
+ }
1415
+ function resolveInboundEchoMessageIds(message) {
1416
+ const values = [message.id != null ? String(message.id) : void 0, normalizeReplyField(message.guid)];
1417
+ const ids = [];
1418
+ for (const value of values) {
1419
+ if (!value || ids.includes(value)) continue;
1420
+ ids.push(value);
1421
+ }
1422
+ return ids;
1423
+ }
1424
+ function hasIMessageEchoMatch(params) {
1425
+ const scopes = typeof params.scope === "string" ? [params.scope] : params.scope;
1426
+ for (const scope of scopes) {
1427
+ if (!scope) continue;
1428
+ for (const messageId of params.messageIds) if (params.echoCache.has(scope, { messageId })) return true;
1429
+ const fallbackMessageId = params.messageIds[0];
1430
+ if (!params.text && !fallbackMessageId) continue;
1431
+ if (params.echoCache.has(scope, {
1432
+ text: params.text,
1433
+ messageId: fallbackMessageId
1434
+ }, params.skipIdShortCircuit)) return true;
1435
+ }
1436
+ return false;
1437
+ }
1438
+ function isKnownFromMeIMessageReactionTarget(params) {
1439
+ const { messageId, accountId, chatId, chatGuid, chatIdentifier } = params;
1440
+ const ctx = {
1441
+ accountId,
1442
+ chatId,
1443
+ chatGuid,
1444
+ chatIdentifier
1445
+ };
1446
+ if (params.isKnownFromMeMessageId) return params.isKnownFromMeMessageId(messageId, ctx);
1447
+ return isKnownFromMeIMessageMessageId(messageId, ctx);
1448
+ }
1449
+ /**
1450
+ * Per-group `systemPrompt` resolution. Mirrors `resolveWhatsAppGroupSystemPrompt`
1451
+ * in `extensions/whatsapp/src/system-prompt.ts`:
1452
+ *
1453
+ * 1. If the matched per-`chat_id` entry exists AND defines `systemPrompt` (key
1454
+ * is present, value is non-null), use it. Trim whitespace; if the trim
1455
+ * leaves an empty string, return `undefined` and DO NOT fall through to the
1456
+ * wildcard. This is how operators say "this specific group has no prompt"
1457
+ * without inheriting from `groups["*"]`.
1458
+ * 2. Otherwise, return the wildcard `groups["*"].systemPrompt` (trimmed; empty
1459
+ * after trim → `undefined`).
1460
+ */
1461
+ function resolveIMessageGroupSystemPrompt(params) {
1462
+ const specific = params.groupConfig;
1463
+ if (specific != null && specific.systemPrompt != null) return specific.systemPrompt.trim() || void 0;
1464
+ const wildcard = params.defaultConfig?.systemPrompt;
1465
+ return wildcard != null ? wildcard.trim() || void 0 : void 0;
1466
+ }
1467
+ async function resolveIMessageInboundDecision(params) {
1468
+ const sender = (params.message.sender ?? "").trim();
1469
+ if (!sender) return {
1470
+ kind: "drop",
1471
+ reason: "missing sender"
1472
+ };
1473
+ const senderNormalized = normalizeIMessageHandle(sender);
1474
+ const chatId = params.message.chat_id ?? void 0;
1475
+ const chatGuid = params.message.chat_guid ?? void 0;
1476
+ const chatIdentifier = params.message.chat_identifier ?? void 0;
1477
+ const destinationCallerId = params.message.destination_caller_id ?? void 0;
1478
+ const createdAt = params.message.created_at ? Date.parse(params.message.created_at) : void 0;
1479
+ const messageText = params.messageText.trim();
1480
+ const bodyText = params.bodyText.trim();
1481
+ const reactionContext = resolveIMessageReactionContext(params.message, bodyText || messageText);
1482
+ const groupIdCandidate = chatId !== void 0 ? String(chatId) : void 0;
1483
+ const groupAllowFromWithLegacyChatTargets = mergeIMessageGroupAllowFromWithLegacyChatTargets({
1484
+ groupAllowFrom: params.groupAllowFrom,
1485
+ allowFrom: params.allowFrom,
1486
+ allowLegacyConversationTargets: params.allowLegacyConversationAllowFromForGroup
1487
+ });
1488
+ const groupListPolicy = groupIdCandidate ? resolveChannelGroupPolicy({
1489
+ cfg: params.cfg,
1490
+ channel: "imessage",
1491
+ accountId: params.accountId,
1492
+ groupId: groupIdCandidate,
1493
+ hasGroupAllowFrom: groupAllowFromWithLegacyChatTargets.length > 0
1494
+ }) : {
1495
+ allowlistEnabled: false,
1496
+ allowed: true,
1497
+ groupConfig: void 0,
1498
+ defaultConfig: void 0
1499
+ };
1500
+ const treatAsGroupByConfig = Boolean(groupIdCandidate && groupListPolicy.allowlistEnabled && groupListPolicy.groupConfig);
1501
+ const isGroup = Boolean(params.message.is_group) || treatAsGroupByConfig;
1502
+ const selfChatLookup = {
1503
+ accountId: params.accountId,
1504
+ isGroup,
1505
+ chatId,
1506
+ sender,
1507
+ text: bodyText,
1508
+ createdAt
1509
+ };
1510
+ const chatIdentifierNormalized = normalizeIMessageHandle(chatIdentifier ?? "") || void 0;
1511
+ const destinationCallerIdNormalized = normalizeIMessageHandle(destinationCallerId ?? "") || void 0;
1512
+ const isSelfChat = !isGroup && chatIdentifierNormalized != null && senderNormalized === chatIdentifierNormalized && destinationCallerIdNormalized != null && destinationCallerIdNormalized === senderNormalized;
1513
+ const isAmbiguousSelfThread = !isGroup && chatIdentifierNormalized != null && senderNormalized === chatIdentifierNormalized && destinationCallerIdNormalized == null;
1514
+ let skipSelfChatHasCheck = false;
1515
+ const inboundMessageIds = resolveInboundEchoMessageIds(params.message);
1516
+ const inboundMessageId = inboundMessageIds[0];
1517
+ const hasInboundGuid = Boolean(normalizeReplyField(params.message.guid));
1518
+ if (params.message.is_from_me) {
1519
+ if (isAmbiguousSelfThread) params.selfChatCache?.remember(selfChatLookup);
1520
+ if (isSelfChat) {
1521
+ params.selfChatCache?.remember(selfChatLookup);
1522
+ const echoScope = buildIMessageEchoScope({
1523
+ accountId: params.accountId,
1524
+ isGroup,
1525
+ chatId,
1526
+ chatGuid,
1527
+ chatIdentifier,
1528
+ sender
1529
+ });
1530
+ if (params.echoCache && (bodyText || inboundMessageId) && hasIMessageEchoMatch({
1531
+ echoCache: params.echoCache,
1532
+ scope: echoScope,
1533
+ text: bodyText || void 0,
1534
+ messageIds: inboundMessageIds,
1535
+ skipIdShortCircuit: !hasInboundGuid
1536
+ })) return {
1537
+ kind: "drop",
1538
+ reason: "agent echo in self-chat"
1539
+ };
1540
+ skipSelfChatHasCheck = true;
1541
+ } else return {
1542
+ kind: "drop",
1543
+ reason: "from me"
1544
+ };
1545
+ }
1546
+ if (isGroup && !chatId) return {
1547
+ kind: "drop",
1548
+ reason: "group without chat_id"
1549
+ };
1550
+ const groupId = isGroup ? groupIdCandidate : void 0;
1551
+ const hasControlCommandInMessage = hasControlCommand(messageText, params.cfg);
1552
+ const groupAllowFromForAccess = isGroup ? groupAllowFromWithLegacyChatTargets : params.groupAllowFrom;
1553
+ const { commandAccess, senderAccess } = await createChannelIngressResolver({
1554
+ channelId: "imessage",
1555
+ accountId: params.accountId,
1556
+ identity: imessageIngressIdentity,
1557
+ cfg: params.cfg,
1558
+ readStoreAllowFrom: async () => params.storeAllowFrom
1559
+ }).message({
1560
+ subject: {
1561
+ stableId: sender,
1562
+ aliases: {
1563
+ ...chatId != null ? { "imessage-chat-id": String(chatId) } : {},
1564
+ ...chatGuid ? { "imessage-chat-guid": chatGuid } : {},
1565
+ ...chatIdentifier ? { "imessage-chat-identifier": chatIdentifier } : {}
1566
+ }
1567
+ },
1568
+ conversation: {
1569
+ kind: isGroup ? "group" : "direct",
1570
+ id: isGroup ? String(chatId ?? chatGuid ?? chatIdentifier ?? "unknown") : normalizeIMessageHandle(sender)
1571
+ },
1572
+ dmPolicy: normalizeDmPolicy(params.dmPolicy),
1573
+ groupPolicy: normalizeGroupPolicy(params.groupPolicy),
1574
+ policy: { groupAllowFromFallbackToAllowFrom: false },
1575
+ allowFrom: params.allowFrom,
1576
+ groupAllowFrom: groupAllowFromForAccess,
1577
+ command: {
1578
+ allowTextCommands: isGroup,
1579
+ hasControlCommand: hasControlCommandInMessage,
1580
+ directGroupAllowFrom: "effective"
1581
+ }
1582
+ });
1583
+ const effectiveGroupAllowFrom = senderAccess.effectiveGroupAllowFrom;
1584
+ if (senderAccess.decision !== "allow") {
1585
+ if (isGroup) {
1586
+ if (senderAccess.reasonCode === "group_policy_disabled") {
1587
+ params.logVerbose?.("Blocked iMessage group message (groupPolicy: disabled)");
1588
+ return {
1589
+ kind: "drop",
1590
+ reason: "groupPolicy disabled"
1591
+ };
1592
+ }
1593
+ if (senderAccess.reasonCode === "group_policy_empty_allowlist") {
1594
+ params.logVerbose?.("Blocked iMessage group message (groupPolicy: allowlist, no groupAllowFrom)");
1595
+ return {
1596
+ kind: "drop",
1597
+ reason: "groupPolicy allowlist (empty groupAllowFrom)"
1598
+ };
1599
+ }
1600
+ if (senderAccess.reasonCode === "group_policy_not_allowlisted") {
1601
+ params.logVerbose?.(`Blocked iMessage sender ${sender} (not in groupAllowFrom)`);
1602
+ return {
1603
+ kind: "drop",
1604
+ reason: "not in groupAllowFrom"
1605
+ };
1606
+ }
1607
+ params.logVerbose?.(`Blocked iMessage group message (${senderAccess.reasonCode})`);
1608
+ return {
1609
+ kind: "drop",
1610
+ reason: senderAccess.reasonCode
1611
+ };
1612
+ }
1613
+ if (senderAccess.reasonCode === "dm_policy_disabled") return {
1614
+ kind: "drop",
1615
+ reason: "dmPolicy disabled"
1616
+ };
1617
+ if (senderAccess.decision === "pairing") return {
1618
+ kind: "pairing",
1619
+ senderId: senderNormalized
1620
+ };
1621
+ params.logVerbose?.(`Blocked iMessage sender ${sender} (dmPolicy=${params.dmPolicy})`);
1622
+ return {
1623
+ kind: "drop",
1624
+ reason: "dmPolicy blocked"
1625
+ };
1626
+ }
1627
+ if (isGroup && groupListPolicy.allowlistEnabled && !groupListPolicy.allowed) {
1628
+ params.logVerbose?.(`imessage: skipping group message (${groupId ?? "unknown"}) not in allowlist`);
1629
+ return {
1630
+ kind: "drop",
1631
+ reason: "group id not in allowlist"
1632
+ };
1633
+ }
1634
+ const route = resolveIMessageConversationRoute({
1635
+ cfg: params.cfg,
1636
+ accountId: params.accountId,
1637
+ isGroup,
1638
+ peerId: isGroup ? String(chatId ?? "unknown") : senderNormalized,
1639
+ sender,
1640
+ chatId
1641
+ });
1642
+ if (reactionContext) {
1643
+ const notificationMode = params.reactionNotifications ?? "own";
1644
+ if (notificationMode === "off") return {
1645
+ kind: "drop",
1646
+ reason: "reaction notifications disabled"
1647
+ };
1648
+ const targetGuid = reactionContext.targetGuid;
1649
+ const targetGuids = reactionContext.targetGuids ?? (targetGuid ? [targetGuid] : []);
1650
+ const targetIsOwn = Boolean(targetGuid && (params.echoCache && hasIMessageEchoMatch({
1651
+ echoCache: params.echoCache,
1652
+ scope: buildIMessageEchoScope({
1653
+ accountId: params.accountId,
1654
+ isGroup,
1655
+ chatId,
1656
+ chatGuid,
1657
+ chatIdentifier,
1658
+ sender
1659
+ }),
1660
+ messageIds: targetGuids
1661
+ }) || targetGuids.some((messageId) => isKnownFromMeIMessageReactionTarget({
1662
+ messageId,
1663
+ accountId: params.accountId,
1664
+ chatId,
1665
+ chatGuid,
1666
+ chatIdentifier,
1667
+ isKnownFromMeMessageId: params.isKnownFromMeMessageId
1668
+ }))));
1669
+ if (notificationMode === "own" && !targetIsOwn) return {
1670
+ kind: "drop",
1671
+ reason: "reaction target not sent by agent"
1672
+ };
1673
+ const target = targetGuid ? `msg ${targetGuid}` : reactionContext.targetText ? `message "${truncateUtf16Safe(reactionContext.targetText, 80)}"` : "a message";
1674
+ return {
1675
+ kind: "reaction",
1676
+ isGroup,
1677
+ chatId,
1678
+ chatGuid,
1679
+ chatIdentifier,
1680
+ sender,
1681
+ senderNormalized,
1682
+ route,
1683
+ reaction: reactionContext,
1684
+ text: `iMessage reaction ${reactionContext.action}: ${reactionContext.emoji} by ${senderNormalized} on ${target}`,
1685
+ contextKey: [
1686
+ "imessage",
1687
+ "reaction",
1688
+ reactionContext.action,
1689
+ chatId ?? chatGuid ?? chatIdentifier ?? senderNormalized,
1690
+ targetGuid ?? reactionContext.targetText ?? "unknown",
1691
+ senderNormalized,
1692
+ reactionContext.emoji
1693
+ ].join(":")
1694
+ };
1695
+ }
1696
+ const mentionRegexes = buildMentionRegexes(params.cfg, route.agentId);
1697
+ if (!bodyText) return {
1698
+ kind: "drop",
1699
+ reason: "empty body"
1700
+ };
1701
+ if (skipSelfChatHasCheck ? false : params.selfChatCache?.has({
1702
+ ...selfChatLookup,
1703
+ text: bodyText
1704
+ })) {
1705
+ const preview = sanitizeTerminalText(truncateUtf16Safe(bodyText, 50));
1706
+ params.logVerbose?.(`imessage: dropping self-chat reflected duplicate: "${preview}"`);
1707
+ return {
1708
+ kind: "drop",
1709
+ reason: "self-chat echo"
1710
+ };
1711
+ }
1712
+ if (params.echoCache && (messageText || inboundMessageId)) {
1713
+ const echoScope = buildIMessageEchoScope({
1714
+ accountId: params.accountId,
1715
+ isGroup,
1716
+ chatId,
1717
+ chatGuid,
1718
+ chatIdentifier,
1719
+ sender
1720
+ });
1721
+ if (hasIMessageEchoMatch({
1722
+ echoCache: params.echoCache,
1723
+ scope: echoScope,
1724
+ text: bodyText || void 0,
1725
+ messageIds: inboundMessageIds
1726
+ })) {
1727
+ params.logVerbose?.(describeIMessageEchoDropLog({
1728
+ messageText: bodyText,
1729
+ messageId: inboundMessageId
1730
+ }));
1731
+ return {
1732
+ kind: "drop",
1733
+ reason: "echo"
1734
+ };
1735
+ }
1736
+ }
1737
+ const reflection = detectReflectedContent(messageText);
1738
+ if (reflection.isReflection) {
1739
+ params.logVerbose?.(`imessage: dropping reflected assistant content (markers: ${reflection.matchedLabels.join(", ")})`);
1740
+ return {
1741
+ kind: "drop",
1742
+ reason: "reflected assistant content"
1743
+ };
1744
+ }
1745
+ const replyContext = describeReplyContext(params.message);
1746
+ const contextVisibilityMode = resolveChannelContextVisibilityMode({
1747
+ cfg: params.cfg,
1748
+ channel: "imessage",
1749
+ accountId: params.accountId
1750
+ });
1751
+ const replyContextAllowFrom = Array.from(new Set([...groupAllowFromForAccess, ...effectiveGroupAllowFrom]));
1752
+ const replySenderAllowed = !isGroup || replyContextAllowFrom.length === 0 ? true : replyContext?.sender ? isAllowedIMessageReplyContextSender({
1753
+ allowFrom: replyContextAllowFrom,
1754
+ sender: replyContext.sender,
1755
+ chatId,
1756
+ chatGuid,
1757
+ chatIdentifier
1758
+ }) : false;
1759
+ const filteredReplyContext = !replyContext || evaluateSupplementalContextVisibility({
1760
+ mode: contextVisibilityMode,
1761
+ kind: "quote",
1762
+ senderAllowed: replySenderAllowed
1763
+ }).include ? replyContext : null;
1764
+ if (replyContext && !filteredReplyContext && isGroup) params.logVerbose?.(`imessage: drop reply context (mode=${contextVisibilityMode}, sender_allowed=${replySenderAllowed ? "yes" : "no"})`);
1765
+ const historyKey = isGroup ? String(chatId ?? chatGuid ?? chatIdentifier ?? "unknown") : void 0;
1766
+ const mentioned = isGroup ? matchesMentionPatterns(messageText, mentionRegexes) : true;
1767
+ const requireMention = resolveChannelGroupRequireMention({
1768
+ cfg: params.cfg,
1769
+ channel: "imessage",
1770
+ accountId: params.accountId,
1771
+ groupId,
1772
+ requireMentionOverride: params.opts?.requireMention,
1773
+ overrideOrder: "before-config"
1774
+ });
1775
+ const canDetectMention = mentionRegexes.length > 0;
1776
+ const commandAuthorized = commandAccess.authorized;
1777
+ if (commandAccess.shouldBlockControlCommand) {
1778
+ if (params.logVerbose) logInboundDrop({
1779
+ log: params.logVerbose,
1780
+ channel: "imessage",
1781
+ reason: "control command (unauthorized)",
1782
+ target: sender
1783
+ });
1784
+ return {
1785
+ kind: "drop",
1786
+ reason: "control command (unauthorized)"
1787
+ };
1788
+ }
1789
+ const mentionDecision = resolveInboundMentionDecision({
1790
+ facts: {
1791
+ canDetectMention,
1792
+ wasMentioned: mentioned,
1793
+ hasAnyMention: false,
1794
+ implicitMentionKinds: []
1795
+ },
1796
+ policy: {
1797
+ isGroup,
1798
+ requireMention,
1799
+ allowTextCommands: true,
1800
+ hasControlCommand: hasControlCommandInMessage,
1801
+ commandAuthorized
1802
+ }
1803
+ });
1804
+ const effectiveWasMentioned = mentionDecision.effectiveWasMentioned;
1805
+ if (isGroup && requireMention && canDetectMention && mentionDecision.shouldSkip) {
1806
+ params.logVerbose?.(`imessage: skipping group message (no mention)`);
1807
+ createChannelHistoryWindow({ historyMap: params.groupHistories }).record({
1808
+ historyKey: historyKey ?? "",
1809
+ limit: params.historyLimit,
1810
+ entry: historyKey ? {
1811
+ sender: senderNormalized,
1812
+ body: bodyText,
1813
+ timestamp: createdAt,
1814
+ messageId: params.message.id ? String(params.message.id) : void 0
1815
+ } : null
1816
+ });
1817
+ return {
1818
+ kind: "drop",
1819
+ reason: "no mention"
1820
+ };
1821
+ }
1822
+ return {
1823
+ kind: "dispatch",
1824
+ isGroup,
1825
+ chatId,
1826
+ chatGuid,
1827
+ chatIdentifier,
1828
+ groupId,
1829
+ historyKey,
1830
+ sender,
1831
+ senderNormalized,
1832
+ route,
1833
+ bodyText,
1834
+ createdAt,
1835
+ replyContext: filteredReplyContext,
1836
+ effectiveWasMentioned,
1837
+ commandAuthorized,
1838
+ groupSystemPrompt: isGroup ? resolveIMessageGroupSystemPrompt({
1839
+ groupConfig: groupListPolicy.groupConfig,
1840
+ defaultConfig: groupListPolicy.defaultConfig
1841
+ }) : void 0
1842
+ };
1843
+ }
1844
+ function buildIMessageInboundContext(params) {
1845
+ const envelopeOptions = params.envelopeOptions ?? resolveEnvelopeFormatOptions(params.cfg);
1846
+ const { decision } = params;
1847
+ const chatId = decision.chatId;
1848
+ const chatTarget = decision.isGroup && chatId != null ? formatIMessageChatTarget(chatId) : void 0;
1849
+ const messageGuid = normalizeReplyField(params.message.guid);
1850
+ const messageSid = (messageGuid ? rememberIMessageReplyCache({
1851
+ accountId: decision.route.accountId,
1852
+ messageId: messageGuid,
1853
+ chatGuid: decision.chatGuid,
1854
+ chatIdentifier: decision.chatIdentifier,
1855
+ chatId: decision.chatId,
1856
+ timestamp: Date.now(),
1857
+ isFromMe: false
1858
+ }) : null)?.shortId || void 0;
1859
+ const replySuffix = decision.replyContext ? `\n\n[Replying to ${decision.replyContext.sender ?? "unknown sender"}${decision.replyContext.id ? ` id:${decision.replyContext.id}` : ""}]\n${decision.replyContext.body}\n[/Replying]` : "";
1860
+ const fromLabel = formatInboundFromLabel({
1861
+ isGroup: decision.isGroup,
1862
+ groupLabel: params.message.chat_name ?? void 0,
1863
+ groupId: chatId !== void 0 ? String(chatId) : "unknown",
1864
+ groupFallback: "Group",
1865
+ directLabel: decision.senderNormalized,
1866
+ directId: decision.sender
1867
+ });
1868
+ let combinedBody = formatInboundEnvelope({
1869
+ channel: "iMessage",
1870
+ from: fromLabel,
1871
+ timestamp: decision.createdAt,
1872
+ body: `${decision.bodyText}${replySuffix}`,
1873
+ chatType: decision.isGroup ? "group" : "direct",
1874
+ sender: {
1875
+ name: decision.senderNormalized,
1876
+ id: decision.sender
1877
+ },
1878
+ previousTimestamp: params.previousTimestamp,
1879
+ envelope: envelopeOptions
1880
+ });
1881
+ if (decision.isGroup && decision.historyKey) combinedBody = createChannelHistoryWindow({ historyMap: params.groupHistories }).buildPendingContext({
1882
+ historyKey: decision.historyKey,
1883
+ limit: params.historyLimit,
1884
+ currentMessage: combinedBody,
1885
+ formatEntry: (entry) => formatInboundEnvelope({
1886
+ channel: "iMessage",
1887
+ from: fromLabel,
1888
+ timestamp: entry.timestamp,
1889
+ body: `${entry.body}${entry.messageId ? ` [id:${entry.messageId}]` : ""}`,
1890
+ chatType: "group",
1891
+ senderLabel: entry.sender,
1892
+ envelope: envelopeOptions
1893
+ })
1894
+ });
1895
+ const imessageTo = (decision.isGroup ? chatTarget : void 0) || `imessage:${decision.sender}`;
1896
+ const inboundHistory = decision.isGroup && decision.historyKey && params.historyLimit > 0 ? createChannelHistoryWindow({ historyMap: params.groupHistories }).buildInboundHistory({
1897
+ historyKey: decision.historyKey,
1898
+ limit: params.historyLimit
1899
+ }) : void 0;
1900
+ return {
1901
+ ctxPayload: finalizeInboundContext({
1902
+ Body: combinedBody,
1903
+ BodyForAgent: decision.bodyText,
1904
+ InboundHistory: inboundHistory,
1905
+ RawBody: decision.bodyText,
1906
+ CommandBody: decision.bodyText,
1907
+ From: decision.isGroup ? `imessage:group:${chatId ?? "unknown"}` : `imessage:${decision.sender}`,
1908
+ To: imessageTo,
1909
+ SessionKey: decision.route.sessionKey,
1910
+ AccountId: decision.route.accountId,
1911
+ ChatType: decision.isGroup ? "group" : "direct",
1912
+ ConversationLabel: fromLabel,
1913
+ GroupSubject: decision.isGroup ? params.message.chat_name ?? void 0 : void 0,
1914
+ GroupSystemPrompt: decision.isGroup ? decision.groupSystemPrompt : void 0,
1915
+ GroupMembers: decision.isGroup ? (params.message.participants ?? []).filter(Boolean).join(", ") : void 0,
1916
+ SenderName: decision.senderNormalized,
1917
+ SenderId: decision.sender,
1918
+ Provider: "imessage",
1919
+ Surface: "imessage",
1920
+ MessageSid: messageSid,
1921
+ MessageSidFull: messageGuid,
1922
+ ReplyToId: decision.replyContext?.id,
1923
+ ReplyToBody: decision.replyContext?.body,
1924
+ ReplyToSender: decision.replyContext?.sender,
1925
+ Timestamp: decision.createdAt,
1926
+ MediaPath: params.media?.path,
1927
+ MediaType: params.media?.type,
1928
+ MediaUrl: params.media?.path,
1929
+ MediaPaths: params.media?.paths && params.media.paths.length > 0 ? params.media.paths : void 0,
1930
+ MediaTypes: params.media?.types && params.media.types.length > 0 ? params.media.types : void 0,
1931
+ MediaUrls: params.media?.paths && params.media.paths.length > 0 ? params.media.paths : void 0,
1932
+ MediaRemoteHost: params.remoteHost,
1933
+ WasMentioned: decision.effectiveWasMentioned,
1934
+ CommandAuthorized: decision.commandAuthorized,
1935
+ OriginatingChannel: "imessage",
1936
+ OriginatingTo: imessageTo
1937
+ }),
1938
+ fromLabel,
1939
+ chatTarget,
1940
+ imessageTo,
1941
+ inboundHistory
1942
+ };
1943
+ }
1944
+ function buildIMessageEchoScope(params) {
1945
+ const scopes = [];
1946
+ if (params.isGroup) {
1947
+ const chatIdScope = formatIMessageChatTarget(params.chatId);
1948
+ if (chatIdScope) scopes.push(`${params.accountId}:${chatIdScope}`);
1949
+ } else scopes.push(`${params.accountId}:imessage:${params.sender}`);
1950
+ if (params.chatGuid) scopes.push(`${params.accountId}:chat_guid:${params.chatGuid}`);
1951
+ if (params.chatIdentifier) scopes.push(`${params.accountId}:chat_identifier:${params.chatIdentifier}`);
1952
+ return scopes;
1953
+ }
1954
+ function describeIMessageEchoDropLog(params) {
1955
+ const preview = truncateUtf16Safe(params.messageText, 50);
1956
+ return `imessage: skipping echo message${params.messageId ? ` id=${params.messageId}` : ""}: "${preview}"`;
1957
+ }
1958
+ //#endregion
1959
+ //#region extensions/imessage/src/monitor/loop-rate-limiter.ts
1960
+ /**
1961
+ * Per-conversation rate limiter that detects rapid-fire identical echo
1962
+ * patterns and suppresses them before they amplify into queue overflow.
1963
+ */
1964
+ const DEFAULT_WINDOW_MS = 6e4;
1965
+ const DEFAULT_MAX_HITS = 5;
1966
+ const CLEANUP_INTERVAL_MS = 12e4;
1967
+ function createLoopRateLimiter(opts) {
1968
+ const windowMs = opts?.windowMs ?? DEFAULT_WINDOW_MS;
1969
+ const maxHits = opts?.maxHits ?? DEFAULT_MAX_HITS;
1970
+ const conversations = /* @__PURE__ */ new Map();
1971
+ let lastCleanup = Date.now();
1972
+ function cleanup() {
1973
+ const now = Date.now();
1974
+ if (now - lastCleanup < CLEANUP_INTERVAL_MS) return;
1975
+ lastCleanup = now;
1976
+ for (const [key, win] of conversations.entries()) {
1977
+ const recent = win.timestamps.filter((ts) => now - ts <= windowMs);
1978
+ if (recent.length === 0) conversations.delete(key);
1979
+ else win.timestamps = recent;
1980
+ }
1981
+ }
1982
+ return {
1983
+ record(conversationKey) {
1984
+ cleanup();
1985
+ let win = conversations.get(conversationKey);
1986
+ if (!win) {
1987
+ win = { timestamps: [] };
1988
+ conversations.set(conversationKey, win);
1989
+ }
1990
+ win.timestamps.push(Date.now());
1991
+ },
1992
+ isRateLimited(conversationKey) {
1993
+ cleanup();
1994
+ const win = conversations.get(conversationKey);
1995
+ if (!win) return false;
1996
+ const now = Date.now();
1997
+ const recent = win.timestamps.filter((ts) => now - ts <= windowMs);
1998
+ win.timestamps = recent;
1999
+ return recent.length >= maxHits;
2000
+ }
2001
+ };
2002
+ }
2003
+ //#endregion
2004
+ //#region extensions/imessage/src/monitor/media-staging.ts
2005
+ function isHeicAttachment(attachmentPath, mimeType) {
2006
+ const normalizedMime = mimeType?.toLowerCase();
2007
+ if (normalizedMime === "image/heic" || normalizedMime === "image/heif") return true;
2008
+ const ext = path.extname(attachmentPath).toLowerCase();
2009
+ return ext === ".heic" || ext === ".heif";
2010
+ }
2011
+ function jpegFilenameForAttachment(attachmentPath) {
2012
+ return `${path.parse(attachmentPath).name || "imessage-attachment"}.jpg`;
2013
+ }
2014
+ function hasWildcardSegment(root) {
2015
+ return root.replaceAll("\\", "/").split("/").includes("*");
2016
+ }
2017
+ async function canonicalizeAllowedRoots(roots) {
2018
+ const canonicalRoots = [];
2019
+ for (const root of roots) {
2020
+ canonicalRoots.push(root);
2021
+ if (hasWildcardSegment(root)) continue;
2022
+ const canonicalRoot = await fs$1.realpath(root).catch(() => void 0);
2023
+ if (canonicalRoot && canonicalRoot !== root) canonicalRoots.push(canonicalRoot);
2024
+ }
2025
+ return canonicalRoots;
2026
+ }
2027
+ async function resolveAllowedCanonicalAttachmentPath(params) {
2028
+ if (!params.allowedRoots) return params.attachmentPath;
2029
+ const canonicalPath = await fs$1.realpath(params.attachmentPath);
2030
+ if (!isInboundPathAllowed({
2031
+ filePath: canonicalPath,
2032
+ roots: await canonicalizeAllowedRoots(params.allowedRoots)
2033
+ })) throw new Error("attachment path resolves outside allowed roots");
2034
+ return canonicalPath;
2035
+ }
2036
+ async function readAttachmentBuffer(params) {
2037
+ const stat = await fs$1.lstat(params.attachmentPath);
2038
+ if (stat.isSymbolicLink()) throw new Error("attachment path is a symlink");
2039
+ if (!stat.isFile()) throw new Error("attachment path is not a file");
2040
+ if (stat.size > params.maxBytes) throw new Error(`attachment exceeds ${Math.round(params.maxBytes / (1024 * 1024))}MB limit`);
2041
+ const canonicalPath = await resolveAllowedCanonicalAttachmentPath({
2042
+ attachmentPath: params.attachmentPath,
2043
+ allowedRoots: params.allowedRoots
2044
+ });
2045
+ const canonicalStat = await fs$1.stat(canonicalPath);
2046
+ if (!canonicalStat.isFile()) throw new Error("attachment path is not a file");
2047
+ if (canonicalStat.size > params.maxBytes) throw new Error(`attachment exceeds ${Math.round(params.maxBytes / (1024 * 1024))}MB limit`);
2048
+ if (isHeicAttachment(params.attachmentPath, params.mimeType)) try {
2049
+ const convert = params.deps.convertHeicToJpeg;
2050
+ const converted = convert ? {
2051
+ buffer: await convert(canonicalPath, params.maxBytes),
2052
+ fileName: jpegFilenameForAttachment(params.attachmentPath)
2053
+ } : await loadWebMedia(canonicalPath, {
2054
+ maxBytes: params.maxBytes,
2055
+ localRoots: [path.dirname(canonicalPath)]
2056
+ });
2057
+ return {
2058
+ buffer: converted.buffer,
2059
+ contentType: "image/jpeg",
2060
+ originalFilename: converted.fileName ?? jpegFilenameForAttachment(params.attachmentPath)
2061
+ };
2062
+ } catch (err) {
2063
+ params.deps.logVerbose?.(`imessage: HEIC attachment conversion failed; staging original instead: ${String(err)}`);
2064
+ }
2065
+ return {
2066
+ buffer: await fs$1.readFile(canonicalPath),
2067
+ contentType: params.mimeType ?? void 0,
2068
+ originalFilename: path.basename(params.attachmentPath)
2069
+ };
2070
+ }
2071
+ async function stageIMessageAttachments(attachments, params) {
2072
+ const deps = params.deps ?? {};
2073
+ const save = deps.saveMediaBuffer ?? saveMediaBuffer;
2074
+ const staged = [];
2075
+ for (const attachment of attachments) {
2076
+ const attachmentPath = attachment.original_path?.trim();
2077
+ if (!attachmentPath || attachment.missing) continue;
2078
+ try {
2079
+ const media = await readAttachmentBuffer({
2080
+ attachmentPath,
2081
+ mimeType: attachment.mime_type,
2082
+ maxBytes: params.maxBytes,
2083
+ allowedRoots: params.allowedRoots,
2084
+ deps
2085
+ });
2086
+ const saved = await save(media.buffer, media.contentType, "inbound", params.maxBytes, media.originalFilename);
2087
+ staged.push({
2088
+ path: saved.path,
2089
+ contentType: saved.contentType
2090
+ });
2091
+ } catch (err) {
2092
+ deps.logVerbose?.(`imessage: failed to stage inbound attachment: ${String(err)}`);
2093
+ }
2094
+ }
2095
+ return staged;
2096
+ }
2097
+ //#endregion
2098
+ //#region extensions/imessage/src/monitor/reaction-system-event.ts
2099
+ function enqueueIMessageReactionSystemEvent(params) {
2100
+ const { decision, runtime } = params;
2101
+ const queued = enqueueSystemEvent(decision.text, {
2102
+ sessionKey: decision.route.sessionKey,
2103
+ contextKey: decision.contextKey
2104
+ });
2105
+ runtime.log?.(`imessage: reaction system event ${queued ? "queued" : "deduped"} session=${decision.route.sessionKey} target=${decision.reaction.targetGuid ?? "unknown"} action=${decision.reaction.action} emoji=${decision.reaction.emoji}`);
2106
+ params.logVerbose?.(`imessage: reaction event enqueued: ${decision.text}`);
2107
+ return queued;
2108
+ }
2109
+ //#endregion
2110
+ //#region extensions/imessage/src/monitor/runtime.ts
2111
+ function resolveRuntime(opts) {
2112
+ return opts.runtime ?? createNonExitingRuntime();
2113
+ }
2114
+ function normalizeAllowList(list) {
2115
+ return normalizeStringEntries(list);
2116
+ }
2117
+ //#endregion
2118
+ //#region extensions/imessage/src/monitor/self-chat-cache.ts
2119
+ const SELF_CHAT_TTL_MS = 1e4;
2120
+ const MAX_SELF_CHAT_CACHE_ENTRIES = 512;
2121
+ const CLEANUP_MIN_INTERVAL_MS = 1e3;
2122
+ function normalizeText(text) {
2123
+ if (!text) return null;
2124
+ const normalized = text.replace(/\r\n?/g, "\n").trim();
2125
+ return normalized ? normalized : null;
2126
+ }
2127
+ function isUsableTimestamp(createdAt) {
2128
+ return typeof createdAt === "number" && Number.isFinite(createdAt);
2129
+ }
2130
+ function digestText(text) {
2131
+ return createHash("sha256").update(text).digest("hex");
2132
+ }
2133
+ function buildScope(parts) {
2134
+ if (!parts.isGroup) return `${parts.accountId}:imessage:${parts.sender}`;
2135
+ const chatTarget = formatIMessageChatTarget(parts.chatId) || "chat_id:unknown";
2136
+ return `${parts.accountId}:${chatTarget}:imessage:${parts.sender}`;
2137
+ }
2138
+ var DefaultSelfChatCache = class {
2139
+ constructor() {
2140
+ this.cache = /* @__PURE__ */ new Map();
2141
+ this.lastCleanupAt = 0;
2142
+ }
2143
+ buildKey(lookup) {
2144
+ const text = normalizeText(lookup.text);
2145
+ if (!text || !isUsableTimestamp(lookup.createdAt)) return null;
2146
+ return `${buildScope(lookup)}:${lookup.createdAt}:${digestText(text)}`;
2147
+ }
2148
+ remember(lookup) {
2149
+ const key = this.buildKey(lookup);
2150
+ if (!key) return;
2151
+ this.cache.set(key, Date.now());
2152
+ this.maybeCleanup();
2153
+ }
2154
+ has(lookup) {
2155
+ this.maybeCleanup();
2156
+ const key = this.buildKey(lookup);
2157
+ if (!key) return false;
2158
+ const timestamp = this.cache.get(key);
2159
+ return typeof timestamp === "number" && Date.now() - timestamp <= SELF_CHAT_TTL_MS;
2160
+ }
2161
+ maybeCleanup() {
2162
+ const now = Date.now();
2163
+ if (now - this.lastCleanupAt < CLEANUP_MIN_INTERVAL_MS) return;
2164
+ this.lastCleanupAt = now;
2165
+ for (const [key, timestamp] of this.cache.entries()) if (now - timestamp > SELF_CHAT_TTL_MS) this.cache.delete(key);
2166
+ while (this.cache.size > MAX_SELF_CHAT_CACHE_ENTRIES) {
2167
+ const oldestKey = this.cache.keys().next().value;
2168
+ if (typeof oldestKey !== "string") break;
2169
+ this.cache.delete(oldestKey);
2170
+ }
2171
+ }
2172
+ };
2173
+ function createSelfChatCache() {
2174
+ return new DefaultSelfChatCache();
2175
+ }
2176
+ //#endregion
2177
+ //#region extensions/imessage/src/monitor/watch-error-log.ts
2178
+ const MAX_WATCH_ERROR_MESSAGE_CHARS = 200;
2179
+ function sanitizeIMessageWatchErrorPayload(payload) {
2180
+ if (!isRecord(payload)) return {};
2181
+ const safe = {};
2182
+ if (typeof payload.code === "number" && Number.isFinite(payload.code)) safe.code = payload.code;
2183
+ if (typeof payload.message === "string") {
2184
+ const sanitizedMessage = sanitizeTerminalText(payload.message);
2185
+ if (sanitizedMessage) safe.message = sanitizedMessage.length > MAX_WATCH_ERROR_MESSAGE_CHARS ? `${truncateUtf16Safe(sanitizedMessage, MAX_WATCH_ERROR_MESSAGE_CHARS - 1)}…` : sanitizedMessage;
2186
+ }
2187
+ return safe;
2188
+ }
2189
+ //#endregion
2190
+ //#region extensions/imessage/src/monitor/monitor-provider.ts
2191
+ const WATCH_SUBSCRIBE_MAX_ATTEMPTS = 3;
2192
+ const WATCH_SUBSCRIBE_RETRY_DELAY_MS = 1e3;
2193
+ function isIMessagePluginPayloadAttachment(attachment) {
2194
+ const attachmentPath = attachment.original_path?.trim().toLowerCase() ?? "";
2195
+ const transferName = attachment.transfer_name?.trim().toLowerCase() ?? "";
2196
+ const uti = attachment.uti?.trim().toLowerCase() ?? "";
2197
+ return attachmentPath.endsWith(".pluginpayloadattachment") || transferName.endsWith(".pluginpayloadattachment") || uti === "com.apple.messages.pluginpayloadattachment";
2198
+ }
2199
+ async function detectRemoteHostFromCliPath(cliPath) {
2200
+ try {
2201
+ const expanded = cliPath.startsWith("~") ? cliPath.replace(/^~/, process.env.HOME ?? "") : cliPath;
2202
+ const content = await fs$1.readFile(expanded, "utf8");
2203
+ const userHostMatch = content.match(/\bssh\b[^\n]*?\s+([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/);
2204
+ if (userHostMatch) return userHostMatch[1];
2205
+ return content.match(/\bssh\b[^\n]*?\s+([a-zA-Z][a-zA-Z0-9._-]*)\s+\S*\bimsg\b/)?.[1];
2206
+ } catch (err) {
2207
+ const code = err?.code;
2208
+ if (code !== "ENOENT" && code !== "ENOTDIR") logVerbose(`imessage: failed to inspect cliPath ${cliPath} for remoteHost detection: ${String(err)}`);
2209
+ return;
2210
+ }
2211
+ }
2212
+ const warnIfImsgUpgradeNeeded = (() => {
2213
+ let fired = false;
2214
+ return { fireOnce: (rpcMethods, runtime) => {
2215
+ if (fired) return;
2216
+ fired = true;
2217
+ const detail = rpcMethods.length === 0 ? "imsg build pre-dates the rpc_methods capability list" : `imsg rpc_methods=[${rpcMethods.join(", ")}] does not include typing/read`;
2218
+ runtime.log?.(warn(`imessage: typing indicators / read receipts gated off (${detail}). Upgrade imsg (current bridge needs typing+read in rpc_methods).`));
2219
+ } };
2220
+ })();
2221
+ function isRetriableWatchSubscribeStartupError(error) {
2222
+ return /imsg rpc timeout \(watch\.subscribe\)|imsg rpc (closed|exited|not running)/i.test(String(error));
2223
+ }
2224
+ async function waitForWatchSubscribeRetryDelay(params) {
2225
+ if (params.ms <= 0) return;
2226
+ await new Promise((resolve) => {
2227
+ const timer = setTimeout(() => {
2228
+ params.abortSignal?.removeEventListener("abort", onAbort);
2229
+ resolve();
2230
+ }, params.ms);
2231
+ const onAbort = () => {
2232
+ clearTimeout(timer);
2233
+ params.abortSignal?.removeEventListener("abort", onAbort);
2234
+ resolve();
2235
+ };
2236
+ params.abortSignal?.addEventListener("abort", onAbort, { once: true });
2237
+ });
2238
+ }
2239
+ async function monitorIMessageProvider(opts = {}) {
2240
+ const runtime = resolveRuntime(opts);
2241
+ const cfg = opts.config ?? getRuntimeConfig();
2242
+ const accountInfo = resolveIMessageAccount({
2243
+ cfg,
2244
+ accountId: opts.accountId
2245
+ });
2246
+ const imessageCfg = accountInfo.config;
2247
+ const historyLimit = Math.max(0, imessageCfg.historyLimit ?? cfg.messages?.groupChat?.historyLimit ?? 50);
2248
+ const groupHistories = /* @__PURE__ */ new Map();
2249
+ const sentMessageCache = createSentMessageCache();
2250
+ const selfChatCache = createSelfChatCache();
2251
+ const loopRateLimiter = createLoopRateLimiter();
2252
+ const textLimit = resolveTextChunkLimit(cfg, "imessage", accountInfo.accountId);
2253
+ const allowFrom = normalizeAllowList(opts.allowFrom ?? imessageCfg.allowFrom);
2254
+ const configuredGroupAllowFrom = opts.groupAllowFrom ?? imessageCfg.groupAllowFrom;
2255
+ const groupAllowFrom = normalizeAllowList(configuredGroupAllowFrom ?? (imessageCfg.allowFrom && imessageCfg.allowFrom.length > 0 ? imessageCfg.allowFrom : []));
2256
+ const allowLegacyConversationAllowFromForGroup = configuredGroupAllowFrom == null;
2257
+ const defaultGroupPolicy = resolveDefaultGroupPolicy(cfg);
2258
+ const { groupPolicy, providerMissingFallbackApplied } = resolveOpenProviderRuntimeGroupPolicy({
2259
+ providerConfigPresent: cfg.channels?.imessage !== void 0,
2260
+ groupPolicy: imessageCfg.groupPolicy,
2261
+ defaultGroupPolicy
2262
+ });
2263
+ warnMissingProviderGroupPolicyFallbackOnce({
2264
+ providerMissingFallbackApplied,
2265
+ providerKey: "imessage",
2266
+ accountId: accountInfo.accountId,
2267
+ log: (message) => runtime.log?.(warn(message))
2268
+ });
2269
+ warnGroupAllowlistMisconfigOnce({
2270
+ groupPolicy,
2271
+ groups: imessageCfg.groups,
2272
+ accountId: accountInfo.accountId,
2273
+ log: (message) => runtime.log?.(warn(message))
2274
+ });
2275
+ const dmPolicy = imessageCfg.dmPolicy ?? "pairing";
2276
+ const includeAttachments = opts.includeAttachments ?? imessageCfg.includeAttachments ?? false;
2277
+ const mediaMaxBytes = (opts.mediaMaxMb ?? imessageCfg.mediaMaxMb ?? 16) * 1024 * 1024;
2278
+ const cliPath = opts.cliPath ?? imessageCfg.cliPath ?? "imsg";
2279
+ const dbPath = opts.dbPath ?? imessageCfg.dbPath;
2280
+ const probeTimeoutMs = imessageCfg.probeTimeoutMs ?? 1e4;
2281
+ const attachmentRoots = resolveIMessageAttachmentRoots({
2282
+ cfg,
2283
+ accountId: accountInfo.accountId
2284
+ });
2285
+ const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
2286
+ cfg,
2287
+ accountId: accountInfo.accountId
2288
+ });
2289
+ const configuredRemoteHost = normalizeScpRemoteHost(imessageCfg.remoteHost);
2290
+ if (imessageCfg.remoteHost && !configuredRemoteHost) logVerbose("imessage: ignoring unsafe channels.imessage.remoteHost value");
2291
+ let remoteHost = configuredRemoteHost;
2292
+ if (!remoteHost && cliPath && cliPath !== "imsg") {
2293
+ const detected = await detectRemoteHostFromCliPath(cliPath);
2294
+ const normalizedDetected = normalizeScpRemoteHost(detected);
2295
+ if (detected && !normalizedDetected) logVerbose("imessage: ignoring unsafe auto-detected remoteHost from cliPath");
2296
+ remoteHost = normalizedDetected;
2297
+ if (remoteHost) logVerbose(`imessage: detected remoteHost=${remoteHost} from cliPath`);
2298
+ }
2299
+ const coalesceSameSenderDms = imessageCfg.coalesceSameSenderDms === true;
2300
+ const inboundCfg = cfg.messages?.inbound;
2301
+ const hasExplicitInboundDebounce = typeof inboundCfg?.debounceMs === "number" || typeof inboundCfg?.byChannel?.imessage === "number";
2302
+ const { debouncer: inboundDebouncer } = createChannelInboundDebouncer({
2303
+ cfg,
2304
+ channel: "imessage",
2305
+ debounceMsOverride: coalesceSameSenderDms && !hasExplicitInboundDebounce ? 2500 : void 0,
2306
+ buildKey: (entry) => {
2307
+ const msg = entry.message;
2308
+ const sender = msg.sender?.trim();
2309
+ if (!sender) return null;
2310
+ const conversationId = msg.chat_id != null ? `chat:${msg.chat_id}` : msg.chat_guid ?? msg.chat_identifier ?? "unknown";
2311
+ if (coalesceSameSenderDms && msg.is_group !== true) return `imessage:${accountInfo.accountId}:dm:${conversationId}:${sender}`;
2312
+ return `imessage:${accountInfo.accountId}:${conversationId}:${sender}`;
2313
+ },
2314
+ shouldDebounce: (entry) => {
2315
+ const msg = entry.message;
2316
+ if (resolveIMessageReactionContext(msg, (msg.text ?? "").trim())) return false;
2317
+ if (msg.is_from_me === true) return false;
2318
+ if (coalesceSameSenderDms) return msg.is_group !== true;
2319
+ return shouldDebounceTextInbound({
2320
+ text: msg.text,
2321
+ cfg,
2322
+ hasMedia: Boolean(msg.attachments?.some((attachment) => !isIMessagePluginPayloadAttachment(attachment)))
2323
+ });
2324
+ },
2325
+ onFlush: async (entries) => {
2326
+ if (entries.length === 0) return;
2327
+ if (entries.length === 1) {
2328
+ await handleMessageNow(entries[0].message);
2329
+ return;
2330
+ }
2331
+ const combined = combineIMessagePayloads(entries.map((e) => e.message));
2332
+ if (shouldLogVerbose()) {
2333
+ const text = combined.text ?? "";
2334
+ const preview = text.slice(0, 50);
2335
+ const ellipsis = text.length > 50 ? "..." : "";
2336
+ logVerbose(`[imessage] coalesced ${entries.length} messages: "${preview}${ellipsis}"`);
2337
+ }
2338
+ await handleMessageNow(combined);
2339
+ },
2340
+ onError: (err) => {
2341
+ runtime.error?.(`imessage debounce flush failed: ${String(err)}`);
2342
+ }
2343
+ });
2344
+ let client;
2345
+ let detachAbortHandler = () => {};
2346
+ const getActiveClient = () => {
2347
+ if (!client) throw new Error("imessage monitor client not initialized");
2348
+ return client;
2349
+ };
2350
+ async function handleMessageNow(message) {
2351
+ const messageText = (message.text ?? "").trim();
2352
+ const attachments = includeAttachments ? message.attachments ?? [] : [];
2353
+ const effectiveAttachmentRoots = remoteHost ? remoteAttachmentRoots : attachmentRoots;
2354
+ const validAttachments = attachments.filter((entry) => {
2355
+ if (isIMessagePluginPayloadAttachment(entry)) return false;
2356
+ const attachmentPath = entry?.original_path?.trim();
2357
+ if (!attachmentPath || entry?.missing) return false;
2358
+ if (isInboundPathAllowed({
2359
+ filePath: attachmentPath,
2360
+ roots: effectiveAttachmentRoots
2361
+ })) return true;
2362
+ logVerbose(`imessage: dropping inbound attachment outside allowed roots: ${attachmentPath}`);
2363
+ return false;
2364
+ });
2365
+ const rawMediaAttachments = validAttachments.flatMap((a) => {
2366
+ const attachmentPath = a.original_path?.trim();
2367
+ return attachmentPath ? [{
2368
+ path: attachmentPath,
2369
+ contentType: a.mime_type ?? void 0
2370
+ }] : [];
2371
+ });
2372
+ const placeholderMediaType = rawMediaAttachments[0]?.contentType;
2373
+ const kind = kindFromMime(placeholderMediaType ?? void 0);
2374
+ const placeholder = kind ? `<media:${kind}>` : validAttachments.length ? "<media:attachment>" : "";
2375
+ const bodyText = messageText || placeholder;
2376
+ const storeAllowFrom = await readChannelAllowFromStore("imessage", process.env, accountInfo.accountId).catch(() => []);
2377
+ const decision = await resolveIMessageInboundDecision({
2378
+ cfg,
2379
+ accountId: accountInfo.accountId,
2380
+ message,
2381
+ opts,
2382
+ messageText,
2383
+ bodyText,
2384
+ allowFrom,
2385
+ groupAllowFrom,
2386
+ allowLegacyConversationAllowFromForGroup,
2387
+ groupPolicy,
2388
+ dmPolicy,
2389
+ storeAllowFrom,
2390
+ historyLimit,
2391
+ groupHistories,
2392
+ echoCache: sentMessageCache,
2393
+ selfChatCache,
2394
+ reactionNotifications: imessageCfg.reactionNotifications,
2395
+ logVerbose
2396
+ });
2397
+ const chatId = message.chat_id ?? void 0;
2398
+ const senderForKey = (message.sender ?? "").trim();
2399
+ const conversationKey = chatId != null ? `group:${chatId}` : `dm:${senderForKey}`;
2400
+ const rateLimitKey = `${accountInfo.accountId}:${conversationKey}`;
2401
+ if (decision.kind === "drop") {
2402
+ if (decision.reason === "echo" || decision.reason === "self-chat echo" || decision.reason === "reflected assistant content" || decision.reason === "from me") loopRateLimiter.record(rateLimitKey);
2403
+ if (decision.reason === "group id not in allowlist") warnGroupAllowlistDropPerChatOnce({
2404
+ accountId: accountInfo.accountId,
2405
+ chatId: message.chat_id ?? void 0,
2406
+ log: (msg) => runtime.log?.(warn(msg))
2407
+ });
2408
+ return;
2409
+ }
2410
+ if (decision.kind === "dispatch" && loopRateLimiter.isRateLimited(rateLimitKey)) {
2411
+ logVerbose(`imessage: rate-limited conversation ${conversationKey} (echo loop detected)`);
2412
+ return;
2413
+ }
2414
+ if (decision.kind === "pairing") {
2415
+ const sender = (message.sender ?? "").trim();
2416
+ if (!sender) return;
2417
+ await createChannelPairingChallengeIssuer({
2418
+ channel: "imessage",
2419
+ upsertPairingRequest: async ({ id, meta }) => await upsertChannelPairingRequest({
2420
+ channel: "imessage",
2421
+ id,
2422
+ accountId: accountInfo.accountId,
2423
+ meta
2424
+ })
2425
+ })({
2426
+ senderId: decision.senderId,
2427
+ senderIdLine: `Your iMessage sender id: ${decision.senderId}`,
2428
+ meta: {
2429
+ sender: decision.senderId,
2430
+ chatId: chatId ? String(chatId) : void 0
2431
+ },
2432
+ onCreated: () => {
2433
+ logVerbose(`imessage pairing request sender=${decision.senderId}`);
2434
+ },
2435
+ sendPairingReply: async (text) => {
2436
+ await sendMessageIMessage(sender, text, {
2437
+ config: cfg,
2438
+ client: getActiveClient(),
2439
+ maxBytes: mediaMaxBytes,
2440
+ accountId: accountInfo.accountId,
2441
+ ...chatId ? { chatId } : {}
2442
+ });
2443
+ },
2444
+ onReplyError: (err) => {
2445
+ runtime.error?.(`imessage pairing reply failed for ${decision.senderId}: ${String(err)}`);
2446
+ }
2447
+ });
2448
+ return;
2449
+ }
2450
+ if (decision.kind === "reaction") {
2451
+ enqueueIMessageReactionSystemEvent({
2452
+ decision,
2453
+ runtime,
2454
+ logVerbose
2455
+ });
2456
+ return;
2457
+ }
2458
+ const storePath = resolveStorePath(cfg.session?.store, { agentId: decision.route.agentId });
2459
+ const stagedAttachments = remoteHost ? [] : await stageIMessageAttachments(validAttachments, {
2460
+ maxBytes: mediaMaxBytes,
2461
+ allowedRoots: effectiveAttachmentRoots,
2462
+ deps: { logVerbose }
2463
+ });
2464
+ const mediaAttachments = remoteHost ? rawMediaAttachments : stagedAttachments;
2465
+ const firstAttachment = mediaAttachments[0];
2466
+ const mediaPath = firstAttachment?.path ?? void 0;
2467
+ const mediaType = firstAttachment?.contentType ?? void 0;
2468
+ const mediaPaths = mediaAttachments.map((a) => a.path).filter(Boolean);
2469
+ const mediaTypes = mediaAttachments.map((a) => a.contentType ?? void 0);
2470
+ const { ctxPayload, chatTarget } = buildIMessageInboundContext({
2471
+ cfg,
2472
+ decision,
2473
+ message,
2474
+ previousTimestamp: readSessionUpdatedAt({
2475
+ storePath,
2476
+ sessionKey: decision.route.sessionKey
2477
+ }),
2478
+ remoteHost,
2479
+ historyLimit,
2480
+ groupHistories,
2481
+ media: {
2482
+ path: mediaPath,
2483
+ type: mediaType,
2484
+ paths: mediaPaths,
2485
+ types: mediaTypes
2486
+ }
2487
+ });
2488
+ const updateTarget = chatTarget || decision.sender;
2489
+ const pinnedMainDmOwner = resolvePinnedMainDmOwnerFromAllowlist({
2490
+ dmScope: cfg.session?.dmScope,
2491
+ allowFrom,
2492
+ normalizeEntry: normalizeIMessageHandle
2493
+ });
2494
+ if (shouldLogVerbose()) {
2495
+ const preview = truncateUtf16Safe(ctxPayload.Body ?? "", 200).replace(/\n/g, "\\n");
2496
+ logVerbose(`imessage inbound: chatId=${chatId ?? "unknown"} from=${ctxPayload.From} len=${(ctxPayload.Body ?? "").length} preview="${preview}"`);
2497
+ }
2498
+ const privateApiStatus = getCachedIMessagePrivateApiStatus(cliPath);
2499
+ const supportsTyping = imessageRpcSupportsMethod(privateApiStatus, "typing");
2500
+ const supportsRead = imessageRpcSupportsMethod(privateApiStatus, "read");
2501
+ if (privateApiStatus?.available === true) {
2502
+ if (!supportsTyping || !supportsRead) warnIfImsgUpgradeNeeded.fireOnce(privateApiStatus.rpcMethods, runtime);
2503
+ }
2504
+ const sendReadReceipts = imessageCfg.sendReadReceipts !== false;
2505
+ const typingTarget = ctxPayload.To;
2506
+ if (supportsRead && sendReadReceipts && typingTarget) try {
2507
+ await markIMessageChatRead(typingTarget, {
2508
+ cfg,
2509
+ accountId: accountInfo.accountId,
2510
+ client: getActiveClient()
2511
+ });
2512
+ } catch (err) {
2513
+ runtime.error?.(`imessage: mark read failed: ${String(err)}`);
2514
+ }
2515
+ const { onModelSelected, ...replyPipeline } = createChannelReplyPipeline({
2516
+ cfg,
2517
+ agentId: decision.route.agentId,
2518
+ channel: "imessage",
2519
+ accountId: decision.route.accountId,
2520
+ typing: supportsTyping && typingTarget ? {
2521
+ start: async () => {
2522
+ await sendIMessageTyping(typingTarget, true, {
2523
+ cfg,
2524
+ accountId: accountInfo.accountId,
2525
+ client: getActiveClient()
2526
+ });
2527
+ },
2528
+ stop: async () => {
2529
+ await sendIMessageTyping(typingTarget, false, {
2530
+ cfg,
2531
+ accountId: accountInfo.accountId,
2532
+ client: getActiveClient()
2533
+ });
2534
+ },
2535
+ onStartError: (err) => {
2536
+ logTypingFailure({
2537
+ log: (msg) => logVerbose(msg),
2538
+ channel: "imessage",
2539
+ action: "start",
2540
+ target: typingTarget,
2541
+ error: err
2542
+ });
2543
+ },
2544
+ onStopError: (err) => {
2545
+ logTypingFailure({
2546
+ log: (msg) => logVerbose(msg),
2547
+ channel: "imessage",
2548
+ action: "stop",
2549
+ target: typingTarget,
2550
+ error: err
2551
+ });
2552
+ }
2553
+ } : void 0
2554
+ });
2555
+ const { dispatcher, replyOptions: typingReplyOptions, markDispatchIdle } = createReplyDispatcherWithTyping({
2556
+ ...replyPipeline,
2557
+ humanDelay: resolveHumanDelayConfig(cfg, decision.route.agentId),
2558
+ deliver: async (payload, info) => {
2559
+ const target = ctxPayload.To;
2560
+ if (!target) {
2561
+ runtime.error?.(danger("imessage: missing delivery target"));
2562
+ return;
2563
+ }
2564
+ const durable = await deliverInboundReplyWithMessageSendContext({
2565
+ cfg,
2566
+ channel: "imessage",
2567
+ accountId: accountInfo.accountId,
2568
+ agentId: decision.route.agentId,
2569
+ ctxPayload,
2570
+ payload,
2571
+ info,
2572
+ to: target,
2573
+ deps: { imessage: createIMessageEchoCachingSend({
2574
+ client: getActiveClient(),
2575
+ accountId: accountInfo.accountId,
2576
+ sentMessageCache
2577
+ }) }
2578
+ });
2579
+ if (durable.status === "failed") throw durable.error;
2580
+ if (durable.status === "handled_visible" || durable.status === "handled_no_send") return;
2581
+ await deliverReplies({
2582
+ cfg,
2583
+ replies: [payload],
2584
+ target,
2585
+ client: getActiveClient(),
2586
+ accountId: accountInfo.accountId,
2587
+ runtime,
2588
+ maxBytes: mediaMaxBytes,
2589
+ textLimit,
2590
+ sentMessageCache
2591
+ });
2592
+ },
2593
+ onError: (err, info) => {
2594
+ runtime.error?.(danger(`imessage ${info.kind} reply failed: ${String(err)}`));
2595
+ }
2596
+ });
2597
+ const inboundLastRouteSessionKey = resolveInboundLastRouteSessionKey({
2598
+ route: decision.route,
2599
+ sessionKey: decision.route.sessionKey
2600
+ });
2601
+ await runInboundReplyTurn({
2602
+ channel: "imessage",
2603
+ accountId: decision.route.accountId,
2604
+ raw: decision,
2605
+ adapter: {
2606
+ ingest: () => ({
2607
+ id: ctxPayload.MessageSid ?? `${ctxPayload.From}:${Date.now()}`,
2608
+ timestamp: typeof ctxPayload.Timestamp === "number" ? ctxPayload.Timestamp : void 0,
2609
+ rawText: ctxPayload.RawBody ?? "",
2610
+ textForAgent: ctxPayload.BodyForAgent,
2611
+ textForCommands: ctxPayload.CommandBody,
2612
+ raw: decision
2613
+ }),
2614
+ resolveTurn: () => ({
2615
+ channel: "imessage",
2616
+ accountId: decision.route.accountId,
2617
+ routeSessionKey: decision.route.sessionKey,
2618
+ storePath,
2619
+ ctxPayload,
2620
+ recordInboundSession,
2621
+ record: {
2622
+ updateLastRoute: !decision.isGroup && updateTarget ? {
2623
+ sessionKey: inboundLastRouteSessionKey,
2624
+ channel: "imessage",
2625
+ to: updateTarget,
2626
+ accountId: decision.route.accountId,
2627
+ mainDmOwnerPin: inboundLastRouteSessionKey === decision.route.mainSessionKey && pinnedMainDmOwner && decision.senderNormalized ? {
2628
+ ownerRecipient: pinnedMainDmOwner,
2629
+ senderRecipient: decision.senderNormalized,
2630
+ onSkip: ({ ownerRecipient, senderRecipient }) => {
2631
+ logVerbose(`imessage: skip main-session last route for ${senderRecipient} (pinned owner ${ownerRecipient})`);
2632
+ }
2633
+ } : void 0
2634
+ } : void 0,
2635
+ onRecordError: (err) => {
2636
+ logVerbose(`imessage: failed updating session meta: ${String(err)}`);
2637
+ }
2638
+ },
2639
+ history: {
2640
+ isGroup: decision.isGroup,
2641
+ historyKey: decision.historyKey,
2642
+ historyMap: groupHistories,
2643
+ limit: historyLimit
2644
+ },
2645
+ onPreDispatchFailure: () => settleReplyDispatcher({
2646
+ dispatcher,
2647
+ onSettled: () => markDispatchIdle()
2648
+ }),
2649
+ runDispatch: async () => {
2650
+ try {
2651
+ return await dispatchInboundMessage({
2652
+ ctx: ctxPayload,
2653
+ cfg,
2654
+ dispatcher,
2655
+ replyOptions: {
2656
+ ...typingReplyOptions,
2657
+ disableBlockStreaming: typeof accountInfo.config.blockStreaming === "boolean" ? !accountInfo.config.blockStreaming : void 0,
2658
+ onModelSelected
2659
+ }
2660
+ });
2661
+ } finally {
2662
+ markDispatchIdle();
2663
+ }
2664
+ }
2665
+ })
2666
+ }
2667
+ });
2668
+ }
2669
+ const handleMessage = async (raw) => {
2670
+ const message = parseIMessageNotification(raw);
2671
+ if (!message) {
2672
+ const shape = raw && typeof raw === "object" && !Array.isArray(raw) ? Object.keys(raw).toSorted().join(",") : typeof raw;
2673
+ runtime.error?.(`imessage: dropping malformed RPC message payload (keys=${shape})`);
2674
+ return;
2675
+ }
2676
+ await inboundDebouncer.enqueue({ message });
2677
+ };
2678
+ await waitForTransportReady({
2679
+ label: "imsg rpc",
2680
+ timeoutMs: 3e4,
2681
+ logAfterMs: 1e4,
2682
+ logIntervalMs: 1e4,
2683
+ pollIntervalMs: 500,
2684
+ abortSignal: opts.abortSignal,
2685
+ runtime,
2686
+ check: async () => {
2687
+ const probe = await probeIMessage(probeTimeoutMs, {
2688
+ cliPath,
2689
+ dbPath,
2690
+ runtime
2691
+ });
2692
+ if (probe.ok) return { ok: true };
2693
+ if (probe.fatal) throw new Error(probe.error ?? "imsg rpc unavailable");
2694
+ return {
2695
+ ok: false,
2696
+ error: probe.error ?? "unreachable"
2697
+ };
2698
+ }
2699
+ });
2700
+ if (opts.abortSignal?.aborted) return;
2701
+ const abort = opts.abortSignal;
2702
+ const createWatchClient = async () => await createIMessageRpcClient({
2703
+ cliPath,
2704
+ dbPath,
2705
+ runtime,
2706
+ onNotification: (msg) => {
2707
+ if (msg.method === "message") handleMessage(msg.params).catch((err) => {
2708
+ runtime.error?.(`imessage: handler failed: ${String(err)}`);
2709
+ });
2710
+ else if (msg.method === "error") runtime.error?.(`imessage: watch error ${JSON.stringify(sanitizeIMessageWatchErrorPayload(msg.params))}`);
2711
+ }
2712
+ });
2713
+ const requireWatchClient = (watchClient) => {
2714
+ if (!watchClient) throw new Error("imessage monitor client not initialized");
2715
+ return watchClient;
2716
+ };
2717
+ for (let attempt = 1; attempt <= WATCH_SUBSCRIBE_MAX_ATTEMPTS; attempt++) {
2718
+ if (abort?.aborted) return;
2719
+ let attemptClient;
2720
+ let attemptDetachAbortHandler = () => {};
2721
+ let keepAttemptClient = false;
2722
+ try {
2723
+ attemptClient = requireWatchClient(await createWatchClient());
2724
+ let attemptSubscriptionId = null;
2725
+ attemptDetachAbortHandler = attachIMessageMonitorAbortHandler({
2726
+ abortSignal: abort,
2727
+ client: attemptClient,
2728
+ getSubscriptionId: () => attemptSubscriptionId
2729
+ });
2730
+ attemptSubscriptionId = (await attemptClient.request("watch.subscribe", {
2731
+ attachments: includeAttachments,
2732
+ include_reactions: true
2733
+ }, { timeoutMs: probeTimeoutMs }))?.subscription ?? null;
2734
+ client = attemptClient;
2735
+ detachAbortHandler = attemptDetachAbortHandler;
2736
+ keepAttemptClient = true;
2737
+ break;
2738
+ } catch (err) {
2739
+ if (abort?.aborted) return;
2740
+ if (!(attempt < WATCH_SUBSCRIBE_MAX_ATTEMPTS && isRetriableWatchSubscribeStartupError(err))) {
2741
+ runtime.error?.(danger(`imessage: monitor failed: ${String(err)}`));
2742
+ throw err;
2743
+ }
2744
+ runtime.log?.(warn(`imessage: watch.subscribe startup failed (attempt ${attempt}/${WATCH_SUBSCRIBE_MAX_ATTEMPTS}): ${String(err)}; retrying`));
2745
+ attemptDetachAbortHandler();
2746
+ attemptDetachAbortHandler = () => {};
2747
+ await attemptClient?.stop();
2748
+ attemptClient = void 0;
2749
+ await waitForWatchSubscribeRetryDelay({
2750
+ ms: WATCH_SUBSCRIBE_RETRY_DELAY_MS,
2751
+ abortSignal: abort
2752
+ });
2753
+ if (abort?.aborted) return;
2754
+ } finally {
2755
+ if (!keepAttemptClient) {
2756
+ attemptDetachAbortHandler();
2757
+ await attemptClient?.stop();
2758
+ }
2759
+ }
2760
+ }
2761
+ const activeClient = client;
2762
+ if (!activeClient) return;
2763
+ const catchupCfg = resolveCatchupConfig(imessageCfg.catchup);
2764
+ if (catchupCfg.enabled && !abort?.aborted) try {
2765
+ await runIMessageCatchup({
2766
+ client: activeClient,
2767
+ accountId: accountInfo.accountId,
2768
+ config: catchupCfg,
2769
+ includeAttachments,
2770
+ dispatchPayload: (message) => handleMessageNow(message),
2771
+ runtime
2772
+ });
2773
+ } catch (err) {
2774
+ runtime.error?.(`imessage catchup: pass failed: ${String(err)}`);
2775
+ }
2776
+ try {
2777
+ await activeClient.waitForClose();
2778
+ } catch (err) {
2779
+ if (abort?.aborted) return;
2780
+ runtime.error?.(danger(`imessage: monitor failed: ${String(err)}`));
2781
+ throw err;
2782
+ } finally {
2783
+ detachAbortHandler();
2784
+ await activeClient.stop();
2785
+ }
2786
+ }
2787
+ //#endregion
2788
+ export { sendMessageIMessage as n, monitorIMessageProvider as t };