@nikolasp98/minion 2026.7.12-dev.20260715050311 → 2026.7.16-dev

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 (436) hide show
  1. package/dist/{_registry.generated-DSGpsf-3.js → _registry.generated-B5zHyziR.js} +55 -19
  2. package/dist/{_registry.generated-CxoyMMzW.js → _registry.generated-C3zYJ6On.js} +55 -19
  3. package/dist/{_registry.generated-CVwb-DEK.js → _registry.generated-DKC2RDUo.js} +55 -19
  4. package/dist/{accounts-B38-HaFa.js → accounts-BwLt-V29.js} +1 -1
  5. package/dist/{accounts-DAwY_jw0.js → accounts-CJf7velm.js} +1 -1
  6. package/dist/{accounts-BeP1XvsQ.js → accounts-DZ-7pWtI.js} +1 -1
  7. package/dist/{accounts-m_AHpH3M.js → accounts-vA22MiLu.js} +1 -1
  8. package/dist/{acp-cli-B9vzabMN.js → acp-cli-DCCSn5NL.js} +4 -4
  9. package/dist/{acp-cli-BtvuNlvK.js → acp-cli-wKQfGJIA.js} +4 -4
  10. package/dist/{agent-Bmy03Olv.js → agent-BvFdXWhL.js} +12 -12
  11. package/dist/{agent-C63gAsUc.js → agent-DaBGbCfi.js} +11 -11
  12. package/dist/{agent-step-D1lEb2ij.js → agent-step-BCSCZOB-.js} +3 -3
  13. package/dist/{agent-step-C1DQllT9.js → agent-step-CgJNQPZ8.js} +3 -3
  14. package/dist/{agents-CEv4jAwQ.js → agents-CGJzMj2S.js} +8 -8
  15. package/dist/{agents-list-tool-CSkk9x2X.js → agents-list-tool-C93hCbLj.js} +3 -3
  16. package/dist/{agents-list-tool-XwBzypb1.js → agents-list-tool-Cd_Q7HuV.js} +3 -3
  17. package/dist/{agents-list-tool-DCUuG4eP.js → agents-list-tool-SNOunDVC.js} +3 -3
  18. package/dist/{audit-BZt5UM89.js → audit-CftXdiYP.js} +12 -12
  19. package/dist/{audit-CVY0TU24.js → audit-D9GAKieT.js} +12 -12
  20. package/dist/{auth-choice-iL2qGnTv.js → auth-choice-DKtOuFks.js} +4 -4
  21. package/dist/{auth-choice-DBUnkhkE.js → auth-choice-dbpaxkks.js} +4 -4
  22. package/dist/{banner-WiXEHrLb.js → banner-B-uaqlJ9.js} +1 -1
  23. package/dist/{browser-cli-DYoqKTbg.js → browser-cli-BhqYEW3P.js} +3 -3
  24. package/dist/{browser-cli-CHh8sv-b.js → browser-cli-DZrCLNaa.js} +3 -3
  25. package/dist/{browser-tool-BVMjabV0.js → browser-tool-BWAVW295.js} +7 -7
  26. package/dist/{browser-tool-DgFnz20P.js → browser-tool-DErZM1k2.js} +7 -7
  27. package/dist/{browser-tool-thBH48Eu.js → browser-tool-DjCmhgOb.js} +7 -7
  28. package/dist/build-info.json +3 -3
  29. package/dist/bundled/boot-md/handler.js +153 -10
  30. package/dist/bundled/kg-message-sync/handler.js +2 -1
  31. package/dist/bundled/session-memory/handler.js +33 -0
  32. package/dist/{call-DrV6uU2c.js → call-BWSchIcf.js} +3 -3
  33. package/dist/{call-czcZr-uY.js → call-DHo0XdK6.js} +2 -11
  34. package/dist/{call-2tXHVKWh.js → call-DQ1ciEPz.js} +3 -3
  35. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  36. package/dist/{canvas-tool-BfzYJpwI.js → canvas-tool-BneFVxD8.js} +2 -2
  37. package/dist/{canvas-tool-CNBgnWbK.js → canvas-tool-DeJaejKM.js} +2 -2
  38. package/dist/{canvas-tool-S4W4mlij.js → canvas-tool-Ogd2OChc.js} +2 -2
  39. package/dist/{channel-options-zR7MDE5g.js → channel-options-D8AdMco0.js} +2 -2
  40. package/dist/{channel-options-Iwd9Pnr4.js → channel-options-DjEmC0qR.js} +2 -2
  41. package/dist/{channel-selection-Bpbhqgjb.js → channel-selection-1nQ35zxv.js} +1 -1
  42. package/dist/{channel-selection-D-JiWYSP.js → channel-selection-wHLAe5Et.js} +1 -1
  43. package/dist/{channel-web-Bp2feV7o.js → channel-web-DRfE9BO9.js} +12 -12
  44. package/dist/{channels-cli-wMxCVwap.js → channels-cli-B2WLqWbi.js} +13 -13
  45. package/dist/{channels-cli-BVzvH4T8.js → channels-cli-DWxvR4dU.js} +13 -13
  46. package/dist/{channels-status-issues-DAXpJEob.js → channels-status-issues-8gZwCTjP.js} +1 -1
  47. package/dist/{channels-status-issues-DXz-lrLc.js → channels-status-issues-CE1BlXu3.js} +1 -1
  48. package/dist/{chrome-COxoiWAN.js → chrome-BA0Rm2cQ.js} +2 -2
  49. package/dist/{chrome-C0h74dXQ.js → chrome-CQYa8Qpn.js} +2 -2
  50. package/dist/{chrome-BrrQFDI3.js → chrome-Cm9IFEur.js} +2 -2
  51. package/dist/{clawbot-cli-B5B0Z6hG.js → clawbot-cli-00xvHy61.js} +1 -1
  52. package/dist/{clawbot-cli-Dw1hTwmP.js → clawbot-cli-BBjE2ol-.js} +1 -1
  53. package/dist/cli/daemon-cli.js +1 -1
  54. package/dist/{cli-CPdR63BC.js → cli-CgVsnrl6.js} +3 -3
  55. package/dist/{cli-CcGaXhRW.js → cli-CtGu18f6.js} +3 -3
  56. package/dist/{client-C_-YvLLI.js → client-2fZQKc2l.js} +5 -5
  57. package/dist/{client-UbK7ubLT.js → client-4u1JH1Zk.js} +0 -9
  58. package/dist/{client-Jabmwobu.js → client-B8GOknl-.js} +5 -5
  59. package/dist/{client-cSd7bG5q.js → client-D-ZPTrtK.js} +5 -5
  60. package/dist/{client-BYzTMaoO.js → client-W3BYtITQ.js} +0 -9
  61. package/dist/{command-registry-BuDTBRe1.js → command-registry-B5mckc9m.js} +14 -14
  62. package/dist/{commands-registry-k-JBgSft.js → commands-registry-DJs-edcv.js} +2 -2
  63. package/dist/{commands-registry-R0_nDAub.js → commands-registry-qRRu3RMk.js} +2 -2
  64. package/dist/{completion-cli-BGEEtxjt.js → completion-cli-BXTewelZ.js} +2 -2
  65. package/dist/{completion-cli-DDyDbJf7.js → completion-cli-BcPY11gL.js} +1 -1
  66. package/dist/{config-Bdlgx0wn.js → config-BerwgOPM.js} +2 -2
  67. package/dist/{config-DBs_rRu7.js → config-BrDW75c2.js} +2 -2
  68. package/dist/{config-Y_m-kxh9.js → config-DPP0lwsZ.js} +1 -1
  69. package/dist/{config-cli-DvnaEuHX.js → config-cli-CDhIjQc_.js} +4 -4
  70. package/dist/{config-cli-CEFoclyO.js → config-cli-CS88lrpx.js} +4 -4
  71. package/dist/{config-guard-23Of7Z6T.js → config-guard-CdCd4lGu.js} +3 -3
  72. package/dist/{config-guard-DnN-rRov.js → config-guard-DeZ33UWP.js} +3 -3
  73. package/dist/{config-validation-C7FvneNE.js → config-validation-CL0L0Dyf.js} +2 -2
  74. package/dist/{config-validation-BFtYfcpf.js → config-validation-txBaIaqO.js} +2 -2
  75. package/dist/{configure-BA6T3Tkr.js → configure-Bg10bnTk.js} +16 -16
  76. package/dist/{configure-BQ1Lu7Bd.js → configure-D5oM27Go.js} +16 -16
  77. package/dist/{control-service-DF4h-8kw.js → control-service-C369Rxs0.js} +6 -6
  78. package/dist/{control-service-DzDPUacK.js → control-service-DIbEfWbr.js} +6 -6
  79. package/dist/crm-conversation-themes-tool-47-Pcl5J.js +37 -0
  80. package/dist/crm-conversation-themes-tool-COuQB3TU.js +37 -0
  81. package/dist/crm-conversation-themes-tool-DB8zQpU1.js +37 -0
  82. package/dist/{cron-cli-BSfEMY9R.js → cron-cli-CsVKtwB8.js} +2 -2
  83. package/dist/{cron-cli-DRJUdOM5.js → cron-cli-Dddt4cu1.js} +2 -2
  84. package/dist/{cron-tool-Bgr6XBq9.js → cron-tool-BWM-ykso.js} +5 -5
  85. package/dist/{cron-tool-DNLIuiZ3.js → cron-tool-CD3kXNpT.js} +5 -5
  86. package/dist/{cron-tool-B4-O1mOU.js → cron-tool-CaMrrFJF.js} +5 -5
  87. package/dist/{daemon-cli-B8kOSqee.js → daemon-cli-CAgHOWp8.js} +9 -9
  88. package/dist/{daemon-cli-CDWmL7nl.js → daemon-cli-yrlA9L0h.js} +9 -9
  89. package/dist/daemon-cli.js +2 -10
  90. package/dist/daemon-install-helpers-Dwlr417c.js +2 -0
  91. package/dist/daemon-install-helpers-Khda5myS.js +2 -0
  92. package/dist/{daemon-runtime-BmaW56O-.js → daemon-runtime-C0_5HhUZ.js} +1 -1
  93. package/dist/{daemon-runtime-DUAfG2aA.js → daemon-runtime-CZXX_eXt.js} +1 -1
  94. package/dist/{deliver-BBHWk2Fl.js → deliver-BUifEj0F.js} +4 -4
  95. package/dist/{deliver-DxzGSQ1s.js → deliver-DJHcrP_i.js} +5 -5
  96. package/dist/{deliver-B5mqRWvh.js → deliver-O2dLDnLg.js} +4 -4
  97. package/dist/{deps-dO6xHyfp.js → deps-i_B9izvk.js} +7 -7
  98. package/dist/{devices-cli-D-lvOKoA.js → devices-cli-B9OXRt0t.js} +1 -1
  99. package/dist/{devices-cli-BmwXfmaE.js → devices-cli-DAcSoXi5.js} +1 -1
  100. package/dist/{directory-cli-BYHaa8t2.js → directory-cli-kxPXkKog.js} +4 -4
  101. package/dist/{directory-cli-hnxS-rJY.js → directory-cli-t11V_DDe.js} +4 -4
  102. package/dist/{dispatcher-Cce5sJHy.js → dispatcher-CvddQmnF.js} +1 -1
  103. package/dist/{dispatcher-C5AKq3qz.js → dispatcher-Dt_9aSBz.js} +1 -1
  104. package/dist/{dm-policy-shared-BvIhvTAm.js → dm-policy-shared-Df7eGBuI.js} +2 -2
  105. package/dist/{dm-policy-shared-BSWTvM40.js → dm-policy-shared-DyFNKOIs.js} +2 -2
  106. package/dist/{dns-cli-YkSHkRgx.js → dns-cli-CuxJhzIr.js} +2 -2
  107. package/dist/{dns-cli-BrpQUGng.js → dns-cli-D-xNNWBy.js} +2 -2
  108. package/dist/doctor-completion-B-tgL_ut.js +2 -0
  109. package/dist/{doctor-completion-Bah1xxDZ.js → doctor-completion-D1cLVgnw.js} +1 -1
  110. package/dist/doctor-completion-DvEGPvIT.js +2 -0
  111. package/dist/{doctor-completion-DR3PMDm1.js → doctor-completion-rfyVqz7I.js} +1 -1
  112. package/dist/{doctor-config-flow-BvTU7P3a.js → doctor-config-flow-C2p3v-cC.js} +6 -6
  113. package/dist/{doctor-config-flow-CVXvnZ_P.js → doctor-config-flow-D6uaIY8F.js} +6 -6
  114. package/dist/entry.js +1 -1
  115. package/dist/{exec-approvals-cli-2nMWHQ23.js → exec-approvals-cli-CYxKrRPS.js} +2 -2
  116. package/dist/{exec-approvals-cli-CPLWc9wh.js → exec-approvals-cli-CaGKwCkP.js} +2 -2
  117. package/dist/extensionAPI.d.ts +11 -0
  118. package/dist/extensionAPI.js +2 -2
  119. package/dist/{gateway-DkZbWoSP.js → gateway-DpUea-L8.js} +3 -3
  120. package/dist/{gateway-DuPlq3Lo.js → gateway-DyaIYiPf.js} +3 -3
  121. package/dist/{gateway-CKw1B3G3.js → gateway-RMd15lxN.js} +3 -3
  122. package/dist/{gateway-cli-CCIa9dAH.js → gateway-cli-1dY-uNhm.js} +132 -77
  123. package/dist/{gateway-cli-DO7T73U7.js → gateway-cli-n18LFNeU.js} +131 -76
  124. package/dist/{gateway-rpc-Dor0Ne5G.js → gateway-rpc-BaD9gDWy.js} +1 -1
  125. package/dist/{gateway-rpc-bFDfI0jC.js → gateway-rpc-C3LLjyGe.js} +1 -1
  126. package/dist/{gateway-tool-CYNiLl9-.js → gateway-tool-BAdp6SH1.js} +3 -3
  127. package/dist/{gateway-tool-FiBzkiaT.js → gateway-tool-kRxmsmMz.js} +3 -3
  128. package/dist/{gateway-tool-DimDGfH7.js → gateway-tool-sHQ43WtK.js} +3 -3
  129. package/dist/{github-copilot-auth-bj7yKXqQ.js → github-copilot-auth-C6LhCOk3.js} +2 -2
  130. package/dist/{github-copilot-auth--CKRNoaw.js → github-copilot-auth-VK12SD5f.js} +2 -2
  131. package/dist/{gmail-OOodZN5v.js → gmail-89acEtXH.js} +1 -1
  132. package/dist/{gmail-De7lwq9k.js → gmail-tGz-kYHa.js} +1 -1
  133. package/dist/{health-CJLBn09L.js → health-8oE9qNSE.js} +10 -10
  134. package/dist/{health-BSVlkT5d.js → health-CYE5q8Un.js} +10 -10
  135. package/dist/{heartbeat-events-DLgkBgdw.js → heartbeat-events-C2_9-jxQ.js} +2 -1
  136. package/dist/{heartbeat-events-CNb7CXLY.js → heartbeat-events-D-wmX2Vg.js} +2 -1
  137. package/dist/{helpers-DaByRrQ3.js → helpers-CNcaAdSH.js} +1 -1
  138. package/dist/{helpers-If3mZUB3.js → helpers-bG_wfee1.js} +1 -1
  139. package/dist/{hooks-cli-CWm7BMDX.js → hooks-cli-CB_KzY16.js} +2 -2
  140. package/dist/{hooks-cli-S730exNl.js → hooks-cli-CEnzt4Dn.js} +2 -2
  141. package/dist/{host-D_jlsIB_.js → host-Ck1Iu5db.js} +33 -0
  142. package/dist/{host-w2pX4Cmj.js → host-FOFn61kz.js} +33 -0
  143. package/dist/{image-tool-Clda5wSc.js → image-tool-CEjIXfAz.js} +2 -2
  144. package/dist/{image-tool-CTzv5Fwx.js → image-tool-DA0ckrPq.js} +1 -1
  145. package/dist/{image-tool-CXUbSOFf.js → image-tool-OiDWYqmY.js} +2 -2
  146. package/dist/index.d.ts +11 -0
  147. package/dist/index.js +10 -10
  148. package/dist/{io-BJQ6wGt0.js → io-6cqme3no.js} +2 -2
  149. package/dist/{io-PqZ9xsqS.js → io-7MYBxUkU.js} +2 -2
  150. package/dist/{io-36IWgxWF.js → io-D8w0m4e7.js} +2 -1
  151. package/dist/{ir-Z79l6YFz.js → ir-BPZJ-sfR.js} +1 -1
  152. package/dist/{ir-CZirIzWM.js → ir-BhnJmnK_.js} +5 -5
  153. package/dist/{ir-BTHWocyU.js → ir-CdlSkzAy.js} +1 -1
  154. package/dist/{lifecycle-core-Cefw3jp5.js → lifecycle-core-Dmy-67JO.js} +3 -3
  155. package/dist/{lifecycle-core-CSfXVCf2.js → lifecycle-core-DwiJf6GO.js} +3 -3
  156. package/dist/llm-slug-generator.js +33 -0
  157. package/dist/{load-tools-tool-NnK5iEGW.js → load-tools-tool-CK9n4dpv.js} +3 -3
  158. package/dist/{load-tools-tool-1Ku7ZYQk.js → load-tools-tool-DVMiLHnV.js} +3 -3
  159. package/dist/{load-tools-tool-B822jbu8.js → load-tools-tool-jvr9ELiC.js} +3 -3
  160. package/dist/{logs-cli-CyXHS82U.js → logs-cli-DYkz_Y2b.js} +2 -2
  161. package/dist/{logs-cli-B2HN6T9s.js → logs-cli-y33n6Plb.js} +2 -2
  162. package/dist/{memory-cli-DN4HDjZF.js → memory-cli-CchSD5_M.js} +3 -3
  163. package/dist/{memory-cli-D2UybctY.js → memory-cli-DWeZSF4O.js} +3 -3
  164. package/dist/{message-action-runner-BC0NPAEt.js → message-action-runner-BJzBMfAN.js} +11 -11
  165. package/dist/{message-action-runner-CzYdWhZ6.js → message-action-runner-aRJaOp3h.js} +11 -11
  166. package/dist/{message-ledger-5_Cl_pN0.js → message-ledger-DmX8k7Eb.js} +6 -6
  167. package/dist/{message-tool-PZuRkGRx.js → message-tool-BT_lShXP.js} +6 -6
  168. package/dist/{message-tool-BBsJ718D.js → message-tool-CJ2k9G2X.js} +6 -6
  169. package/dist/{message-tool-FnCqoXl8.js → message-tool-DkxTGNJ_.js} +9 -9
  170. package/dist/{minion-tools-DogsL-y0.js → minion-tools-CEQNyDLo.js} +22 -20
  171. package/dist/{model-catalog-D9SMyqKP.js → model-catalog-Dun9rUwm.js} +3 -3
  172. package/dist/{model-catalog-DYHf-usN.js → model-catalog-RhTD2XJY.js} +3 -3
  173. package/dist/{model-fallback-FMG5anI7.js → model-fallback-Cm3Tv0In.js} +2 -2
  174. package/dist/{model-fallback-CT9cFbVP.js → model-fallback-CrSemKRh.js} +2 -2
  175. package/dist/{model-fallback-CDZmGk9D.js → model-fallback-uwtaor8f.js} +4 -4
  176. package/dist/{model-picker-3nhZqWgC.js → model-picker-C_UhEF-R.js} +2 -2
  177. package/dist/{model-picker-C20xG3X3.js → model-picker-D7OvwR5Y.js} +2 -2
  178. package/dist/{models-BT4YKBSD.js → models-DEvrTY5o.js} +12 -12
  179. package/dist/{models-cli-DF_0JCx_.js → models-cli-BBuPQES6.js} +2 -2
  180. package/dist/{models-cli-DY7Bm2ed.js → models-cli-DsDVKG2f.js} +12 -12
  181. package/dist/{models-config-B5fBKGD3.js → models-config-DTMIOONu.js} +2 -2
  182. package/dist/{models-config-DoGGIvM6.js → models-config-pB1nNFSi.js} +2 -2
  183. package/dist/{node-cli-BRInA-Sb.js → node-cli-Cdp1_fUq.js} +9 -9
  184. package/dist/{node-cli-D9Z-dPUZ.js → node-cli-DsU_QUTE.js} +9 -9
  185. package/dist/{nodes-cli-CxK2FUkv.js → nodes-cli-B4oX5uNL.js} +5 -5
  186. package/dist/{nodes-cli-BG9J4Imp.js → nodes-cli-CKkuvp7a.js} +5 -5
  187. package/dist/{nodes-tool-CMcjIuR_.js → nodes-tool-C9NV_GnB.js} +3 -3
  188. package/dist/{nodes-tool-DhF3ck1I.js → nodes-tool-CTpJ5fug.js} +3 -3
  189. package/dist/{nodes-tool-Qj3ygrgS.js → nodes-tool-sKJc-Yjj.js} +3 -3
  190. package/dist/{nodes-utils-BaYNmopA.js → nodes-utils-CFmLuU06.js} +1 -1
  191. package/dist/{nodes-utils-DOy5cjCc.js → nodes-utils-CkQsT0N0.js} +1 -1
  192. package/dist/{nodes-utils-DF3X9oyh.js → nodes-utils-DNMhzvVb.js} +1 -1
  193. package/dist/{onboard-BWYSXcHt.js → onboard-V7JyPJex.js} +9 -9
  194. package/dist/{onboard-channels-Bq-evr85.js → onboard-channels-BDfxpK7n.js} +1 -1
  195. package/dist/{onboard-channels-DWr0yHWj.js → onboard-channels-CmC3qBbq.js} +3 -3
  196. package/dist/{onboard-channels-DyWYFAg2.js → onboard-channels-CzKarfzC.js} +1 -1
  197. package/dist/{onboard-channels-BOSMG4S-.js → onboard-channels-yUQOZPgP.js} +3 -3
  198. package/dist/{onboard-custom-DU4LJYpt.js → onboard-custom-BDM5_y2p.js} +2 -2
  199. package/dist/{onboard-custom-B136z_xx.js → onboard-custom-BvfApkVd.js} +1 -1
  200. package/dist/{onboard-custom-BMJRDvs6.js → onboard-custom-CfZMfUJ3.js} +1 -1
  201. package/dist/{onboard-custom-iL7ssiup.js → onboard-custom-CmwY-IfM.js} +2 -2
  202. package/dist/{onboard-helpers-C32t-FLY.js → onboard-helpers-BE_18443.js} +1 -1
  203. package/dist/{onboard-helpers-r8VwltFD.js → onboard-helpers-CekhN2Dt.js} +5 -5
  204. package/dist/{onboard-helpers-CshtI1Zv.js → onboard-helpers-DfEvL7Eo.js} +1 -1
  205. package/dist/{onboard-helpers-COFCTrXY.js → onboard-helpers-gS7HQOeH.js} +5 -5
  206. package/dist/{onboard-remote-OGiBmmSH.js → onboard-remote-CEWlSso0.js} +1 -1
  207. package/dist/{onboard-remote-DaSf_iYp.js → onboard-remote-aQfExF92.js} +1 -1
  208. package/dist/{onboard-D47mKKfB.js → onboard-rqIA9EXQ.js} +9 -9
  209. package/dist/{onboard-skills-roS4qTou.js → onboard-skills-75JQVISV.js} +1 -1
  210. package/dist/{onboard-skills-CjBxLUyk.js → onboard-skills-BSGpQX_t.js} +1 -1
  211. package/dist/{onboarding-DEi30r7I.js → onboarding-BNfuRC7v.js} +12 -12
  212. package/dist/{onboarding-CsR--6vK.js → onboarding-IiILUaqA.js} +12 -12
  213. package/dist/{onboarding.finalize-D6pKr-ZJ.js → onboarding.finalize-D2iRalHn.js} +9 -9
  214. package/dist/{onboarding.finalize-truf0W9s.js → onboarding.finalize-T1iu9hW_.js} +9 -9
  215. package/dist/{onboarding.gateway-config-2oj2EqOS.js → onboarding.gateway-config-DPJvhCxG.js} +2 -2
  216. package/dist/{onboarding.gateway-config-Bh1viokL.js → onboarding.gateway-config-W1qUrMi_.js} +2 -2
  217. package/dist/{outbound-send-deps-kbmuQhN5.js → outbound-send-deps-_gwXpS3X.js} +7 -7
  218. package/dist/{pairing-cli-BaxW5NvY.js → pairing-cli-DOVP6x__.js} +4 -4
  219. package/dist/{pairing-cli-Dm2RjHsZ.js → pairing-cli-DZQ0VISz.js} +4 -4
  220. package/dist/{pairing-store-DHcO9a4v.js → pairing-store-BP5Qp69V.js} +2 -2
  221. package/dist/{pairing-store-D0QXnN8e.js → pairing-store-CNDIY_e9.js} +2 -2
  222. package/dist/{pi-embedded-helpers-B-iZquPe.js → pi-embedded-helpers-CAos7nyg.js} +6 -6
  223. package/dist/{pi-embedded-helpers-D7jObbmL.js → pi-embedded-helpers-CJQRe8VG.js} +1 -1
  224. package/dist/{pi-embedded-helpers-DU-bh5ri.js → pi-embedded-helpers-Dt84Vt0L.js} +1 -1
  225. package/dist/{pi-embedded-utils-M7dzzD38.js → pi-embedded-utils-BlYe4un1.js} +1 -1
  226. package/dist/{pi-embedded-utils-BDVxHN9w.js → pi-embedded-utils-C3czix2Z.js} +1 -1
  227. package/dist/{pi-embedded-utils-ClQmhsYi.js → pi-embedded-utils-CnKLZQZs.js} +1 -1
  228. package/dist/{pi-tools.policy-DftNw1JI.js → pi-tools.policy-DClWWLv0.js} +4 -4
  229. package/dist/{plugin-auto-enable-Cnu8IYow.js → plugin-auto-enable-2zVKrpSR.js} +1 -1
  230. package/dist/{plugin-auto-enable-CoUmbc3E.js → plugin-auto-enable-BFqsBeiO.js} +1 -1
  231. package/dist/{plugin-registry-CCtEK0P_.js → plugin-registry-B8Ol763b.js} +3 -3
  232. package/dist/{plugin-registry-CYiBIvvj.js → plugin-registry-DqZ7qJuj.js} +3 -3
  233. package/dist/plugin-sdk/agents/tools/hub/crm-conversation-themes-tool.d.ts +11 -0
  234. package/dist/plugin-sdk/agents/tools/hub/search-crm-conversations-tool.d.ts +11 -0
  235. package/dist/plugin-sdk/channels/discord.js +153 -10
  236. package/dist/plugin-sdk/channels/imessage.js +153 -10
  237. package/dist/plugin-sdk/channels/line.js +153 -10
  238. package/dist/plugin-sdk/channels/signal.js +153 -10
  239. package/dist/plugin-sdk/channels/slack.js +153 -10
  240. package/dist/plugin-sdk/channels/telegram.js +153 -10
  241. package/dist/plugin-sdk/channels/whatsapp.js +153 -10
  242. package/dist/plugin-sdk/config/types.channels.d.ts +11 -0
  243. package/dist/plugin-sdk/config/zod-schema.d.ts +2 -0
  244. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +1 -0
  245. package/dist/plugin-sdk/core.js +2 -1
  246. package/dist/plugin-sdk/gateway/client.d.ts +0 -5
  247. package/dist/plugin-sdk/index.js +153 -10
  248. package/dist/plugin-sdk/personal-agent/credential-client.d.ts +6 -3
  249. package/dist/{plugins-3ke-1_IL.js → plugins-BSX3IzSW.js} +1 -1
  250. package/dist/{plugins-Csm04VZy.js → plugins-BbE87x_i.js} +1 -1
  251. package/dist/{plugins-B4Zf_SkO.js → plugins-Db3l--Iv.js} +1 -1
  252. package/dist/{plugins-cli-SNQimFTq.js → plugins-cli-Do_2x-P9.js} +3 -3
  253. package/dist/{plugins-cli-CnKL7zRT.js → plugins-cli-sYIckkU6.js} +3 -3
  254. package/dist/{program-DMwCdKqC.js → program-DuPIc0CA.js} +7 -7
  255. package/dist/{program-context-CUgf-nFE.js → program-context-Butv-q95.js} +42 -42
  256. package/dist/{prompt-select-styled-XfmHgUSJ.js → prompt-select-styled-BExVeXb2.js} +18 -18
  257. package/dist/{prompt-select-styled-kv2v-J0x.js → prompt-select-styled-Cp4tJmDm.js} +18 -18
  258. package/dist/{push-apns-C7QqFlQ5.js → push-apns-Bxplfna8.js} +1 -31
  259. package/dist/{push-apns-B34to-or.js → push-apns-a42ldGL8.js} +1 -31
  260. package/dist/{pw-ai-DApwaGOU.js → pw-ai-CYHslBvW.js} +2 -2
  261. package/dist/{pw-ai-CsAABWsJ.js → pw-ai-CuhAAfak.js} +2 -2
  262. package/dist/{pw-ai-ZHl2zMES.js → pw-ai-DQg5o_dq.js} +2 -2
  263. package/dist/{pw-session-Cj5TD_Y4.js → pw-session-CE6GP8K2.js} +1 -1
  264. package/dist/{pw-session-BCUrAqCY.js → pw-session-DllHustd.js} +1 -1
  265. package/dist/{pw-session-CaO0Bkw4.js → pw-session-UBu8_Nno.js} +1 -1
  266. package/dist/{qr-cli-DYUIAbvh.js → qr-cli-BCZv2_hI.js} +2 -2
  267. package/dist/{qr-cli-az8v1Idc.js → qr-cli-DX6_VGoE.js} +2 -2
  268. package/dist/{register.agent-DZRauJcn.js → register.agent-BxjtbKDH.js} +7 -7
  269. package/dist/{register.agent-DbdSW2Ug.js → register.agent-DWJIWMVU.js} +12 -12
  270. package/dist/{register.channel-CPM1086Y.js → register.channel-BDuMmK1a.js} +2 -2
  271. package/dist/{register.channel-ZizsJ__5.js → register.channel-C_DXxr7c.js} +2 -2
  272. package/dist/{register.configure-BjDYUL20.js → register.configure-B_XY4Rl7.js} +1 -1
  273. package/dist/{register.configure-C-Q7AhcU.js → register.configure-kQKEsyRt.js} +1 -1
  274. package/dist/{register.drone-0mU5DIA_.js → register.drone-B2YlfnxU.js} +2 -2
  275. package/dist/{register.drone-BxcnHSWL.js → register.drone-BEaZQLpQ.js} +2 -2
  276. package/dist/{register.maintenance-DGoWogZZ.js → register.maintenance-BzbQEwcr.js} +5 -5
  277. package/dist/{register.maintenance-DHtTDNZm.js → register.maintenance-x4QqUEAs.js} +5 -5
  278. package/dist/{register.message-BON_gkri.js → register.message-C-HGH6ro.js} +7 -7
  279. package/dist/{register.message-gGAMAdiu.js → register.message-erSrrSy8.js} +7 -7
  280. package/dist/{register.onboard-Dlr48GBC.js → register.onboard-DtSasogy.js} +1 -1
  281. package/dist/{register.onboard-oW7iHTrT.js → register.onboard-RztK81fK.js} +1 -1
  282. package/dist/{register.setup-C-tBiZg9.js → register.setup-CNKwjRf3.js} +4 -4
  283. package/dist/{register.setup-CvwF93GX.js → register.setup-CU4oyWQN.js} +4 -4
  284. package/dist/{register.status-health-sessions-ChNAFUVq.js → register.status-health-sessions-C4MLusee.js} +6 -6
  285. package/dist/{register.status-health-sessions-UV0LR9im.js → register.status-health-sessions-CaPTa3NI.js} +3 -3
  286. package/dist/{register.subclis-BVSo499N.js → register.subclis-Q6q9ktLa.js} +29 -29
  287. package/dist/{reply-D1Xsn6eO.js → reply-pajA-Yl6.js} +33 -31
  288. package/dist/{reply-payloads-CHYk2cao.js → reply-payloads-BlZu5x6x.js} +6 -6
  289. package/dist/{reply-prefix-2P-kpLyA.js → reply-prefix-C2RVZSgb.js} +1 -1
  290. package/dist/{reply-prefix-CxJuc0hI.js → reply-prefix-g25aWRqJ.js} +1 -1
  291. package/dist/{resolve-route-BEVw9SKN.js → resolve-route-DQ7BIAU_.js} +2 -2
  292. package/dist/{resolve-route-AQSn8qfH.js → resolve-route-yooa1z42.js} +4 -4
  293. package/dist/{routes-yg37klM3.js → routes-C5NVLNYd.js} +4 -4
  294. package/dist/{routes-gNKwdTeZ.js → routes-C9bf1VtT.js} +4 -4
  295. package/dist/{rpc-qg2Z1rQN.js → rpc-BXk0xG0H.js} +1 -1
  296. package/dist/{rpc-DFTT-PZM.js → rpc-CRCwztMb.js} +1 -1
  297. package/dist/{run-main-CrNTVOYZ.js → run-main-BdLBIyiP.js} +19 -19
  298. package/dist/{sandbox-BoqQp8gb.js → sandbox-DLtSFsnF.js} +7 -7
  299. package/dist/{sandbox-vTPiRHpZ.js → sandbox-DQ8PqB1U.js} +7 -7
  300. package/dist/{sandbox-cli-CrKds6ek.js → sandbox-cli-BoxfOIvp.js} +4 -4
  301. package/dist/{sandbox-cli-CIGgwzST.js → sandbox-cli-CFJ9cLf1.js} +4 -4
  302. package/dist/{sdk-inspect-tool-DruE0gS7.js → sdk-inspect-tool--0YwiPqb.js} +2 -2
  303. package/dist/{sdk-inspect-tool-DKF5-MKP.js → sdk-inspect-tool-gngBv_e2.js} +2 -2
  304. package/dist/{sdk-inspect-tool-D8dw7W1x.js → sdk-inspect-tool-lWmixb2O.js} +2 -2
  305. package/dist/search-crm-conversations-tool-CXlTimAj.js +37 -0
  306. package/dist/search-crm-conversations-tool-CsAUIlEu.js +37 -0
  307. package/dist/search-crm-conversations-tool-CxEqcbxC.js +37 -0
  308. package/dist/{search-tools-tool-ChBggqrC.js → search-tools-tool-BCV0uHLY.js} +2 -2
  309. package/dist/{search-tools-tool-BT533cw8.js → search-tools-tool-DIr1vVNX.js} +2 -2
  310. package/dist/{search-tools-tool-DP49FT4E.js → search-tools-tool-XuYT8kpL.js} +2 -2
  311. package/dist/{security-cli-kbxMiBXq.js → security-cli-Cx2puO6Q.js} +4 -4
  312. package/dist/{security-cli-B44T1rTx.js → security-cli-sqaoNzjc.js} +4 -4
  313. package/dist/{send-DmO9gGRo.js → send-BABrPQhp.js} +4 -4
  314. package/dist/{send-C8bGQBU0.js → send-BOAXOqlj.js} +5 -5
  315. package/dist/{send-CMQUySy2.js → send-BhHYA7fz.js} +4 -4
  316. package/dist/{send-DF1aASt7.js → send-C1R6SHFd.js} +4 -4
  317. package/dist/{send-jIPdhFyH.js → send-CQTnHf7j.js} +6 -6
  318. package/dist/{send-BVwKSS0K.js → send-CzX8rfQQ.js} +6 -6
  319. package/dist/{send-DDsNa_Ji.js → send-DIjmAwBt.js} +5 -5
  320. package/dist/{send-C8Qvbhfl.js → send-DfwkS1Cy.js} +5 -5
  321. package/dist/{send-aP9vUdZA.js → send-DmLvgXqi.js} +5 -5
  322. package/dist/{send-GitfZeLF.js → send-F3N3Vgcy.js} +4 -4
  323. package/dist/{server-context-vL7RpqKW.js → server-context-BYcLDvQc.js} +6 -6
  324. package/dist/{server-context-DwRkP6wl.js → server-context-CDmBokpm.js} +6 -6
  325. package/dist/{server-context-CpjjYoiy.js → server-context-DFdTmsBq.js} +6 -6
  326. package/dist/{server-methods-list-BkeL_f1I.js → server-methods-list-CUUd_Znm.js} +1 -1
  327. package/dist/{server-methods-list-L1PUHfXd.js → server-methods-list-ZEquDpTD.js} +1 -1
  328. package/dist/{server-node-events-BPsy0Lio.js → server-node-events-Dml6MIAW.js} +11 -11
  329. package/dist/{server-node-events-BpU_jSoz.js → server-node-events-DpkjSBLL.js} +9 -9
  330. package/dist/{session-status-tool-CGqrPDT_.js → session-status-tool-BHEQX4IM.js} +6 -6
  331. package/dist/{session-status-tool-CpvDhFZV.js → session-status-tool-CIAw4c-9.js} +5 -5
  332. package/dist/{session-status-tool-Ci9ZTcWd.js → session-status-tool-CJeMrNTI.js} +7 -7
  333. package/dist/{session-utils-BwdwB80N.js → session-utils-Ffl6ASbR.js} +4 -4
  334. package/dist/{sessions-6bGzFKwC.js → sessions-CiNGPwTK.js} +4 -4
  335. package/dist/{sessions-DaA0crcT.js → sessions-ClJAVE0p.js} +6 -6
  336. package/dist/{sessions-Dv0AsGXk.js → sessions-DcOCMszs.js} +3 -3
  337. package/dist/{sessions-Bmu1qNSi.js → sessions-bztP6lN1.js} +6 -6
  338. package/dist/{sessions-helpers-9A3GpP1C.js → sessions-helpers-Ctko7_ZU.js} +3 -3
  339. package/dist/{sessions-helpers-BHv8itwp.js → sessions-helpers-D6BayuvJ.js} +3 -3
  340. package/dist/{sessions-helpers-DKduybhL.js → sessions-helpers-DpKh-EgX.js} +3 -3
  341. package/dist/{sessions-history-tool-B4QAi02g.js → sessions-history-tool-BtLEW8Jq.js} +5 -5
  342. package/dist/{sessions-history-tool-Dp7-TyAD.js → sessions-history-tool-DlKTVhCD.js} +5 -5
  343. package/dist/{sessions-history-tool-CbDHBInr.js → sessions-history-tool-DnxZRMF3.js} +5 -5
  344. package/dist/{sessions-list-tool-Doz90bAO.js → sessions-list-tool-BGmjNjoA.js} +5 -5
  345. package/dist/{sessions-list-tool-DM7nEN-u.js → sessions-list-tool-DSB6_hFi.js} +5 -5
  346. package/dist/{sessions-list-tool-C2P-REih.js → sessions-list-tool-OP5IQOE0.js} +5 -5
  347. package/dist/{sessions-send-tool-D_SpTEzR.js → sessions-send-tool-BF8lKSLy.js} +6 -6
  348. package/dist/{sessions-send-tool-CsvXXZ6X.js → sessions-send-tool-C1WMGH6W.js} +6 -6
  349. package/dist/{sessions-send-tool-Sl05Rc1o.js → sessions-send-tool-CG8A-kW5.js} +5 -5
  350. package/dist/{sessions-spawn-tool-CtVdtdxy.js → sessions-spawn-tool-BD6XdQ4G.js} +1 -1
  351. package/dist/{sessions-spawn-tool-Cvd7gZzb.js → sessions-spawn-tool-BE94fv2r.js} +1 -1
  352. package/dist/{sessions-spawn-tool-rhrbdrHi.js → sessions-spawn-tool-DRxk6sWZ.js} +1 -1
  353. package/dist/{shared-DDwwQhyO.js → shared-3xuhqrQ5.js} +2 -2
  354. package/dist/{shared-7xAh_DUw.js → shared-CCaYvPXV.js} +2 -2
  355. package/dist/{skills-cli-Csm1MWLY.js → skills-cli-CQ8fYddY.js} +2 -2
  356. package/dist/{skills-cli-BYDuIUBN.js → skills-cli-D-V0vRgX.js} +2 -2
  357. package/dist/{status-DJ3pP2oq.js → status-BeasmhMH.js} +13 -13
  358. package/dist/{status-CUiB4K9g.js → status-D8c6C5Z0.js} +3 -3
  359. package/dist/{status-CsflFo5K.js → status-DHuWnwac.js} +3 -3
  360. package/dist/{status-C42P0GTx.js → status-DbOwDhDe.js} +14 -14
  361. package/dist/{status.update-Dzkf5M1l.js → status.update-otfuSKpG.js} +1 -1
  362. package/dist/{status.update-Oa1Q7aKY.js → status.update-ww09PQZI.js} +1 -1
  363. package/dist/{subagent-registry-DPNFbdCM.js → subagent-registry-BHdRG10Z.js} +34 -32
  364. package/dist/{subagents-tool-BHleIh5_.js → subagents-tool-CpBMVS4i.js} +6 -6
  365. package/dist/{subagents-tool-Bhv8IWCj.js → subagents-tool-DIxAhxWP.js} +6 -6
  366. package/dist/{subagents-tool-DTt0oCJj.js → subagents-tool-h2WCtDtU.js} +6 -6
  367. package/dist/{system-cli-qKT31zzS.js → system-cli-C7sjnpqK.js} +1 -1
  368. package/dist/{system-cli-CWLXAiEM.js → system-cli-DP_wysY-.js} +1 -1
  369. package/dist/{systemd-hints-DPqwVMdw.js → systemd-hints-BnL2sVfy.js} +1 -1
  370. package/dist/{systemd-hints-OqapG2rD.js → systemd-hints-DEXpKBnF.js} +1 -1
  371. package/dist/{tables-CFTMokfs.js → tables-Cu2OX2r-.js} +1 -1
  372. package/dist/{tables-KrPYa57V.js → tables-DMdQO81Y.js} +1 -1
  373. package/dist/{targets-D6ZbcM7a.js → targets-By4KtyZv.js} +1 -1
  374. package/dist/{targets-BZDxvcL1.js → targets-DypSB4K6.js} +2 -2
  375. package/dist/{targets-DZBGTWw3.js → targets-UmV1VAkB.js} +1 -1
  376. package/dist/{tool-index-jbcu4uIg.js → tool-index-BtpJk78_.js} +1 -1
  377. package/dist/{tool-index-CSvXEUhV.js → tool-index-BwKMLu1r.js} +1 -1
  378. package/dist/{tool-index-DT6m2Vqq.js → tool-index-CEYMGFrO.js} +1 -1
  379. package/dist/{tool-policy-Cn0_ZqFk.js → tool-policy-CGuZzs9F.js} +2 -0
  380. package/dist/{tools-cli-DLtFAFDn.js → tools-cli-B13gsec8.js} +3 -3
  381. package/dist/{tools-cli-B9MDDYcf.js → tools-cli-BJ_zWgqf.js} +3 -3
  382. package/dist/{tts-CVpT5DDx.js → tts-CdyriGYN.js} +2 -2
  383. package/dist/{tts-DeWH-9iT.js → tts-DH1gVM5t.js} +34 -1
  384. package/dist/{tts-CYgPcpBG.js → tts-EAcO1Hwe.js} +2 -2
  385. package/dist/{tts-tool-Dk4NGcJh.js → tts-tool-BBIMu7X2.js} +3 -3
  386. package/dist/{tts-tool-CCnLadXB.js → tts-tool-DO_F3ZME.js} +3 -3
  387. package/dist/{tts-tool-BI70cNjf.js → tts-tool-oG4FOqod.js} +3 -3
  388. package/dist/{tui-AbgutQhU.js → tui-CvQjFLn2.js} +6 -13
  389. package/dist/{tui-C0meZtnL.js → tui-CyKvw7SL.js} +6 -13
  390. package/dist/{tui-cli-nGiXl6QC.js → tui-cli-DROBYt8G.js} +1 -1
  391. package/dist/{tui-cli-WzVsHu23.js → tui-cli-PQR9JVFA.js} +1 -1
  392. package/dist/{update-cli-zBj3N2GH.js → update-cli-DsNQjCBa.js} +8 -8
  393. package/dist/{update-cli-BFHuprZY.js → update-cli-GDRvdoj2.js} +8 -8
  394. package/dist/{validation-Tg8YP6Zn.js → validation-DAS7vvMM.js} +1 -0
  395. package/dist/{validation-Crc6Dwkp.js → validation-DoqW0cF4.js} +1 -0
  396. package/dist/{web-CBStYp_x.js → web-Bqx30F6C.js} +12 -12
  397. package/dist/web-DKofD48i.js +2 -0
  398. package/dist/{web-search-Ba6vR31X.js → web-search-BGzVmln0.js} +4 -4
  399. package/dist/{web-search-buicdjg7.js → web-search-BXe6QGYe.js} +4 -4
  400. package/dist/{web-search-ZWILjbUF.js → web-search-CGnEgHNH.js} +4 -4
  401. package/dist/{webhooks-cli-CbewtsqL.js → webhooks-cli-DMfQ_Sq0.js} +4 -4
  402. package/dist/{webhooks-cli-Dacy8QAQ.js → webhooks-cli-wUMz0eSs.js} +4 -4
  403. package/dist/{workspace-dirs-Bxd48BAf.js → workspace-dirs-Duw92DA5.js} +4 -4
  404. package/extensions/alert-watcher/index.js +33 -0
  405. package/extensions/bluebubbles/index.js +1 -0
  406. package/extensions/feishu/index.js +1 -0
  407. package/extensions/flows/index.js +34 -0
  408. package/extensions/gmail-calendar/index.js +201 -100
  409. package/extensions/gmail-calendar/index.ts +4 -0
  410. package/extensions/gmail-calendar/src/pulse-tools.test.ts +14 -0
  411. package/extensions/gmail-calendar/src/pulse-tools.ts +63 -0
  412. package/extensions/googlechat/index.js +1 -0
  413. package/extensions/irc/index.js +1 -0
  414. package/extensions/llm-task/index.js +33 -0
  415. package/extensions/matrix/{credentials-BiYGX26F.mjs → credentials-B_Avjvsy.mjs} +1 -0
  416. package/extensions/matrix/index.js +3 -3
  417. package/extensions/matrix/{matrix-Dqf7qlT1.mjs → matrix-Dy31zmus.mjs} +2 -2
  418. package/extensions/matrix/{resolve-targets-BPyBSXgs.mjs → resolve-targets-Bv0B2AJv.mjs} +2 -2
  419. package/extensions/mattermost/index.js +1 -0
  420. package/extensions/meta-graph/index.js +43 -3
  421. package/extensions/meta-graph/minion.manifest.ts +3 -0
  422. package/extensions/meta-graph/minion.plugin.json +7 -1
  423. package/extensions/meta-graph/src/channels/messaging-platform.ts +66 -1
  424. package/extensions/meta-graph/src/channels/shared.ts +21 -0
  425. package/extensions/nextcloud-talk/index.js +1 -0
  426. package/extensions/tlon/index.js +33 -0
  427. package/extensions/wati/index.js +1 -0
  428. package/extensions/weixin/index.js +1 -0
  429. package/extensions/zalo/index.js +1 -0
  430. package/extensions/zalouser/index.js +1 -0
  431. package/package.json +1 -1
  432. package/dist/daemon-install-helpers-C_vUbY3B.js +0 -2
  433. package/dist/daemon-install-helpers-DsVKYy7S.js +0 -2
  434. package/dist/doctor-completion-CrVVU5pA.js +0 -2
  435. package/dist/doctor-completion-DF48nvUw.js +0 -2
  436. package/dist/web-DftwF1B1.js +0 -2
@@ -5,6 +5,7 @@ import { registerOutlookAuthTools } from "./src/outlook-auth-tool.js";
5
5
  import { registerOutlookCalendarTools } from "./src/outlook-calendar-tools.js";
6
6
  import { registerOutlookMailTools } from "./src/outlook-mail-tools.js";
7
7
  import type { OutlookOAuthConfig } from "./src/outlook-oauth.js";
8
+ import { registerPulseTools } from "./src/pulse-tools.js";
8
9
 
9
10
  type PluginConfig = {
10
11
  requireApproval?: boolean;
@@ -48,6 +49,9 @@ const plugin = {
48
49
  registerOutlookMailTools(api, outlookConfig, requireApproval);
49
50
  registerOutlookCalendarTools(api, outlookConfig, requireApproval);
50
51
 
52
+ // Pulse — proactive proposal cards posted to the Hub for user approval
53
+ registerPulseTools(api);
54
+
51
55
  api.logger.info(
52
56
  `gmail-calendar loaded — requireApproval=${requireApproval}, outlook=${!!outlookConfig.clientId}`,
53
57
  );
@@ -0,0 +1,14 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildPulseBody } from "./pulse-tools.js";
3
+
4
+ describe("pulse_propose body", () => {
5
+ it("shapes orgId + proposals", () => {
6
+ const body = buildPulseBody("org-A", [
7
+ { source: "daily_briefing", kind: "digest", title: "Day", dedupKey: "k1" },
8
+ ]);
9
+ expect(body).toEqual({
10
+ orgId: "org-A",
11
+ proposals: [{ source: "daily_briefing", kind: "digest", title: "Day", dedupKey: "k1" }],
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,63 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import type { AnyAgentTool, MinionPluginApi, MinionPluginToolFactory } from "minion/plugin-sdk";
3
+ import { getHubRest } from "../../../src/gateway/hub-rest-registry.js";
4
+
5
+ function txt(text: string) {
6
+ return { content: [{ type: "text" as const, text }], details: { text } };
7
+ }
8
+
9
+ const CardSchema = Type.Object({
10
+ source: Type.String(),
11
+ kind: Type.String(),
12
+ title: Type.String(),
13
+ summary: Type.Optional(Type.String()),
14
+ payload: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
15
+ dedupKey: Type.String(),
16
+ });
17
+
18
+ const PulseProposeSchema = Type.Object({
19
+ orgId: Type.String({ description: "Target org id (PINONITE)" }),
20
+ proposals: Type.Array(CardSchema),
21
+ });
22
+
23
+ /** Pure body shaper — kept separate from `execute` so it's unit-testable without network. */
24
+ export function buildPulseBody(orgId: string, proposals: unknown[]) {
25
+ return { orgId, proposals };
26
+ }
27
+
28
+ export function registerPulseTools(api: MinionPluginApi): void {
29
+ const factory: MinionPluginToolFactory = (): AnyAgentTool[] => [
30
+ {
31
+ name: "pulse_propose",
32
+ label: "Propose Pulse cards",
33
+ description:
34
+ "Write proactive proposal cards (digest / create_event / reminder / draft_reply / fyi) " +
35
+ "to the Hub Pulse feed for the user to approve.",
36
+ parameters: PulseProposeSchema,
37
+ async execute(_id, params) {
38
+ const rest = getHubRest();
39
+ if (!rest) return txt("Pulse: hub not linked; skipped.");
40
+ const p = params as Record<string, unknown>;
41
+ const orgId = String(p.orgId ?? "");
42
+ const proposalsRaw = p.proposals;
43
+ const proposals = Array.isArray(proposalsRaw) ? proposalsRaw : [];
44
+ if (!orgId || !proposals.length) return txt("Pulse: nothing to propose.");
45
+ try {
46
+ const res = await fetch(`${rest.hubUrl.replace(/\/$/, "")}/api/gateway/pulse/proposals`, {
47
+ method: "POST",
48
+ headers: {
49
+ Authorization: `Bearer ${rest.serverToken}`,
50
+ "content-type": "application/json",
51
+ },
52
+ body: JSON.stringify(buildPulseBody(orgId, proposals)),
53
+ });
54
+ const j = (await res.json().catch(() => ({}))) as { inserted?: number; skipped?: number };
55
+ return txt(`Pulse: proposed ${j.inserted ?? 0}, skipped ${j.skipped ?? 0}.`);
56
+ } catch (e) {
57
+ return txt(`Pulse: post failed — ${e instanceof Error ? e.message : "error"}`);
58
+ }
59
+ },
60
+ },
61
+ ];
62
+ api.registerTool(factory, { names: ["pulse_propose"] });
63
+ }
@@ -4288,6 +4288,7 @@ const ChannelsSchema = z.object({
4288
4288
  heartbeat: ChannelHeartbeatVisibilitySchema
4289
4289
  }).strict().optional(),
4290
4290
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4291
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4291
4292
  whatsapp: WhatsAppConfigSchema.optional(),
4292
4293
  telegram: TelegramConfigSchema.optional(),
4293
4294
  discord: DiscordConfigSchema.optional(),
@@ -4289,6 +4289,7 @@ const ChannelsSchema = z.object({
4289
4289
  heartbeat: ChannelHeartbeatVisibilitySchema
4290
4290
  }).strict().optional(),
4291
4291
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4292
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4292
4293
  whatsapp: WhatsAppConfigSchema.optional(),
4293
4294
  telegram: TelegramConfigSchema.optional(),
4294
4295
  discord: DiscordConfigSchema.optional(),
@@ -4321,9 +4321,14 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4321
4321
  */
4322
4322
  function createGatewayDroneHost(opts = {}) {
4323
4323
  const { config, agentDir, workspaceDir } = opts;
4324
+ let resolvedModel;
4324
4325
  return {
4325
4326
  async resolveApiKey(spec) {
4326
4327
  const auth = await resolveProvider(spec, config, agentDir);
4328
+ resolvedModel = {
4329
+ provider: spec.provider,
4330
+ model: spec.model
4331
+ };
4327
4332
  return {
4328
4333
  apiKey: requireApiKey(auth, spec.provider),
4329
4334
  source: auth.source
@@ -4356,6 +4361,34 @@ function createGatewayDroneHost(opts = {}) {
4356
4361
  },
4357
4362
  timestamp: Date.now()
4358
4363
  });
4364
+ if (input.event === "agent.run.end" && input.usage && resolvedModel) {
4365
+ const u = input.usage;
4366
+ const inTok = u.inputTokens ?? 0;
4367
+ const outTok = u.outputTokens ?? 0;
4368
+ const cacheTok = u.cacheReadTokens ?? 0;
4369
+ emitEvent({
4370
+ category: "agent",
4371
+ severity: "info",
4372
+ event: "agent.llm.usage",
4373
+ message: `Drone LLM usage: ${input.droneId}`,
4374
+ correlationId: input.correlationId,
4375
+ metadata: {
4376
+ kind: "drone",
4377
+ droneId: input.droneId,
4378
+ provider: resolvedModel.provider,
4379
+ model: resolvedModel.model,
4380
+ source: "system",
4381
+ channel: "drone",
4382
+ tokens: {
4383
+ input: inTok,
4384
+ output: outTok,
4385
+ cacheRead: cacheTok,
4386
+ total: inTok + outTok + cacheTok
4387
+ }
4388
+ },
4389
+ timestamp: Date.now()
4390
+ });
4391
+ }
4359
4392
  }
4360
4393
  };
4361
4394
  }
@@ -4286,6 +4286,7 @@ const ChannelsSchema = z.object({
4286
4286
  heartbeat: ChannelHeartbeatVisibilitySchema
4287
4287
  }).strict().optional(),
4288
4288
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4289
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4289
4290
  whatsapp: WhatsAppConfigSchema.optional(),
4290
4291
  telegram: TelegramConfigSchema.optional(),
4291
4292
  discord: DiscordConfigSchema.optional(),
@@ -1,5 +1,5 @@
1
- import { a as setMatrixRuntime, i as getMatrixRuntime } from "./credentials-BiYGX26F.mjs";
2
- import { A as listMatrixAccountIds, I as resolveMatrixAuth, M as resolveMatrixAccount, N as resolveMatrixAccountConfig, S as sendPollMatrix, T as resolveMatrixRoomId, _ as RelationType, b as reactMatrixMessage, c as listMatrixDirectoryGroupsLive, d as removeMatrixReactions, f as fetchEventSummary, g as MsgType, h as EventType, i as normalizeMatrixUserId, j as resolveDefaultMatrixAccountId, l as listMatrixDirectoryPeersLive, m as summarizeMatrixRawEvent, n as probeMatrix, p as readPinnedEvents, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, u as listMatrixReactions, v as resolveMatrixActionLimit, x as sendMessageMatrix, y as resolveActionClient } from "./resolve-targets-BPyBSXgs.mjs";
1
+ import { a as setMatrixRuntime, i as getMatrixRuntime } from "./credentials-B_Avjvsy.mjs";
2
+ import { A as listMatrixAccountIds, I as resolveMatrixAuth, M as resolveMatrixAccount, N as resolveMatrixAccountConfig, S as sendPollMatrix, T as resolveMatrixRoomId, _ as RelationType, b as reactMatrixMessage, c as listMatrixDirectoryGroupsLive, d as removeMatrixReactions, f as fetchEventSummary, g as MsgType, h as EventType, i as normalizeMatrixUserId, j as resolveDefaultMatrixAccountId, l as listMatrixDirectoryPeersLive, m as summarizeMatrixRawEvent, n as probeMatrix, p as readPinnedEvents, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, u as listMatrixReactions, v as resolveMatrixActionLimit, x as sendMessageMatrix, y as resolveActionClient } from "./resolve-targets-Bv0B2AJv.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { MarkdownConfigSchema, ToolPolicySchema, emptyPluginConfigSchema, maybeInjectDisclosure, resolveDisclosureConfig } from "minion/plugin-sdk";
5
5
  import { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, addWildcardAllowFrom, applyAccountNameToChannelSection, buildChannelConfigSchema, createActionGate, deleteAccountFromConfigSection, formatDocsLink, formatPairingApproveHint, jsonResult, mergeAllowFromEntries, normalizeAccountId, promptChannelAccessConfig, readNumberParam, readReactionParams, readStringParam, setAccountEnabledInConfigSection } from "openclaw/plugin-sdk";
@@ -1298,7 +1298,7 @@ const matrixPlugin = {
1298
1298
  await previousLock;
1299
1299
  let monitorMatrixProvider;
1300
1300
  try {
1301
- monitorMatrixProvider = (await import("./matrix-Dqf7qlT1.mjs")).monitorMatrixProvider;
1301
+ monitorMatrixProvider = (await import("./matrix-Dy31zmus.mjs")).monitorMatrixProvider;
1302
1302
  } finally {
1303
1303
  releaseLock();
1304
1304
  }
@@ -1,5 +1,5 @@
1
- import { i as getMatrixRuntime } from "./credentials-BiYGX26F.mjs";
2
- import { C as sendReadReceiptMatrix, D as formatPollAsText, E as setActiveMatrixClient, F as stopSharedClientForAccount, I as resolveMatrixAuth, L as require_lib, M as resolveMatrixAccount, O as isPollStartType, P as resolveSharedMatrixClient, R as isBunRuntime, a as resolveMatrixAllowListMatch, b as reactMatrixMessage, d as removeMatrixReactions, f as fetchEventSummary, i as normalizeMatrixUserId, k as parsePollStartContent, o as resolveMatrixAllowListMatches, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, w as sendTypingMatrix, x as sendMessageMatrix } from "./resolve-targets-BPyBSXgs.mjs";
1
+ import { i as getMatrixRuntime } from "./credentials-B_Avjvsy.mjs";
2
+ import { C as sendReadReceiptMatrix, D as formatPollAsText, E as setActiveMatrixClient, F as stopSharedClientForAccount, I as resolveMatrixAuth, L as require_lib, M as resolveMatrixAccount, O as isPollStartType, P as resolveSharedMatrixClient, R as isBunRuntime, a as resolveMatrixAllowListMatch, b as reactMatrixMessage, d as removeMatrixReactions, f as fetchEventSummary, i as normalizeMatrixUserId, k as parsePollStartContent, o as resolveMatrixAllowListMatches, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, w as sendTypingMatrix, x as sendMessageMatrix } from "./resolve-targets-Bv0B2AJv.mjs";
3
3
  import { createReplyPrefixOptions, createTypingCallbacks, formatAllowlistMatchMeta, formatLocationText, logInboundDrop, logTypingFailure, resolveControlCommandGate, toLocationContext } from "minion/plugin-sdk";
4
4
  import { mergeAllowlist, summarizeMapping } from "openclaw/plugin-sdk";
5
5
  import { format } from "node:util";
@@ -1,5 +1,5 @@
1
1
  import { i as __toESM, r as __require, t as __commonJSMin } from "./rolldown-runtime-JspESFgx.mjs";
2
- import { i as getMatrixRuntime, o as DEFAULT_ACCOUNT_ID, r as loadMatrixCredentials, s as normalizeAccountId, t as credentialsMatchConfig } from "./credentials-BiYGX26F.mjs";
2
+ import { i as getMatrixRuntime, o as DEFAULT_ACCOUNT_ID, r as loadMatrixCredentials, s as normalizeAccountId, t as credentialsMatchConfig } from "./credentials-B_Avjvsy.mjs";
3
3
  import { t as require_matrix_sdk_crypto_nodejs } from "./matrix-sdk-crypto-nodejs-CRHvexDX.mjs";
4
4
  import { buildChannelKeyCandidates, resolveChannelEntryMatch } from "minion/plugin-sdk";
5
5
  import path from "node:path";
@@ -87382,7 +87382,7 @@ async function resolveMatrixAuth(params) {
87382
87382
  const env = params?.env ?? process.env;
87383
87383
  const resolved = resolveMatrixConfigForAccount(cfg, params?.accountId, env);
87384
87384
  if (!resolved.homeserver) throw new Error("Matrix homeserver is required (matrix.homeserver)");
87385
- const { loadMatrixCredentials, saveMatrixCredentials, credentialsMatchConfig, touchMatrixCredentials } = await import("./credentials-BiYGX26F.mjs").then((n) => n.n);
87385
+ const { loadMatrixCredentials, saveMatrixCredentials, credentialsMatchConfig, touchMatrixCredentials } = await import("./credentials-B_Avjvsy.mjs").then((n) => n.n);
87386
87386
  const accountId = params?.accountId;
87387
87387
  const cached = loadMatrixCredentials(env, accountId);
87388
87388
  const cachedCredentials = cached && credentialsMatchConfig(cached, {
@@ -4333,6 +4333,7 @@ const ChannelsSchema = z.object({
4333
4333
  heartbeat: ChannelHeartbeatVisibilitySchema
4334
4334
  }).strict().optional(),
4335
4335
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4336
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4336
4337
  whatsapp: WhatsAppConfigSchema.optional(),
4337
4338
  telegram: TelegramConfigSchema.optional(),
4338
4339
  discord: DiscordConfigSchema.optional(),
@@ -235,6 +235,7 @@ function createMetaProcessor(params) {
235
235
  const core = getMetaRuntime();
236
236
  const messages = adapter.extractMessages(entry, account);
237
237
  for (const message of messages) {
238
+ if (message.referral) params.onReferral?.(message);
238
239
  env.statusSink?.({ lastInboundAt: Date.now() });
239
240
  try {
240
241
  await handleInbound({
@@ -467,13 +468,16 @@ function extractMessagingEvents(entry) {
467
468
  url: attachment.payload.url,
468
469
  mimeType: attachmentMime(attachment.type)
469
470
  } : void 0;
470
- if (!text && !media) continue;
471
+ const referral = raw.message?.referral;
472
+ if (!text && !media && !referral) continue;
471
473
  out.push({
472
474
  senderId,
473
475
  text,
474
476
  messageId: raw.message?.mid,
475
477
  timestampMs: typeof raw.timestamp === "number" ? raw.timestamp : void 0,
476
- media
478
+ media,
479
+ referral,
480
+ recipientId: raw.recipient?.id?.trim() || void 0
477
481
  });
478
482
  }
479
483
  return out;
@@ -487,6 +491,40 @@ function attachmentMime(type) {
487
491
  ].includes(type)) return `${type}/*`;
488
492
  return "application/octet-stream";
489
493
  }
494
+ function resolveRelayConfig(cfg) {
495
+ const pc = cfg.plugins?.entries?.["meta-graph"]?.config ?? {};
496
+ const hubUrl = (pc.hubUrl?.trim() || process.env.HUB_URL?.trim() || "").replace(/\/+$/, "");
497
+ const cronSecret = pc.cronSecret?.trim() || process.env.CRON_SECRET?.trim() || "";
498
+ if (!hubUrl || !cronSecret) return null;
499
+ return {
500
+ hubUrl,
501
+ cronSecret
502
+ };
503
+ }
504
+ /** Fire-and-forget POST of an ad referral to the hub. Never throws. */
505
+ function relayAdReferral(relay, channel, message, log) {
506
+ const referral = message.referral;
507
+ if (!referral) return;
508
+ if (!((referral.source ?? "").toUpperCase() === "ADS" || Boolean(referral.ad_id)) || !message.recipientId) return;
509
+ const body = {
510
+ channel,
511
+ senderId: message.senderId,
512
+ recipientId: message.recipientId,
513
+ messageId: message.messageId ?? null,
514
+ timestampMs: message.timestampMs ?? null,
515
+ referral
516
+ };
517
+ fetch(`${relay.hubUrl}/api/meta/attribution`, {
518
+ method: "POST",
519
+ headers: {
520
+ "content-type": "application/json",
521
+ authorization: `Bearer ${relay.cronSecret}`
522
+ },
523
+ body: JSON.stringify(body)
524
+ }).then((res) => {
525
+ if (!res.ok) log?.(`[${channel}] attribution relay non-ok: ${res.status}`);
526
+ }).catch((err) => log?.(`[${channel}] attribution relay failed: ${String(err)}`));
527
+ }
490
528
  async function sendMessagingText(params) {
491
529
  const res = await graphSend({
492
530
  nodeId: params.nodeId,
@@ -770,6 +808,7 @@ function createMessagingPlatformChannel(spec) {
770
808
  appSecret: account.appSecret ?? "",
771
809
  verifyToken: account.verifyToken ?? ""
772
810
  });
811
+ const relay = resolveRelayConfig(ctx.cfg);
773
812
  const offProc = registerMetaProcessor(registry, spec.objectType, createMetaProcessor({
774
813
  adapter: adapterFor(spec),
775
814
  account,
@@ -781,7 +820,8 @@ function createMessagingPlatformChannel(spec) {
781
820
  accountId: account.accountId,
782
821
  ...patch
783
822
  })
784
- }
823
+ },
824
+ onReferral: relay ? (message) => relayAdReferral(relay, spec.channelId, message, (m) => ctx.log?.info?.(m)) : void 0
785
825
  }));
786
826
  try {
787
827
  await waitForAbort(ctx.abortSignal);
@@ -17,6 +17,9 @@ const MetaGraphConfigSchema = z
17
17
  verifyToken: z.string().optional(),
18
18
  graphVersion: z.string().optional(),
19
19
  webhookPath: z.string().optional(),
20
+ // Tier 3 ad-attribution relay target (env fallbacks: HUB_URL / CRON_SECRET).
21
+ hubUrl: z.string().optional(),
22
+ cronSecret: z.string().optional(),
20
23
  })
21
24
  .loose();
22
25
 
@@ -17,11 +17,17 @@
17
17
  },
18
18
  "webhookPath": {
19
19
  "type": "string"
20
+ },
21
+ "hubUrl": {
22
+ "type": "string"
23
+ },
24
+ "cronSecret": {
25
+ "type": "string"
20
26
  }
21
27
  },
22
28
  "additionalProperties": {}
23
29
  },
24
- "_schemaChecksum": "c1ff2234836d7b21",
30
+ "_schemaChecksum": "97e5f6131c1544af",
25
31
  "icon": "whatsapp",
26
32
  "channels": [
27
33
  "whatsapp-cloud",
@@ -23,6 +23,7 @@ import { readMetaApp, resolveAccessToken, resolveAppCredentials } from "./meta-a
23
23
  import {
24
24
  createMetaProcessor,
25
25
  waitForAbort,
26
+ type MetaAdReferral,
26
27
  type MetaChannelAdapter,
27
28
  type MetaInboundMessage,
28
29
  type MetaResolvedAccountBase,
@@ -38,6 +39,8 @@ type MessagingEvent = {
38
39
  text?: string;
39
40
  is_echo?: boolean;
40
41
  attachments?: Array<{ type?: string; payload?: { url?: string } }>;
42
+ /** Click-to-Direct ad referral, present only on the first message of an ad thread. */
43
+ referral?: MetaAdReferral;
41
44
  };
42
45
  postback?: { title?: string; payload?: string };
43
46
  delivery?: unknown;
@@ -55,13 +58,18 @@ export function extractMessagingEvents(entry: MetaWebhookEntry): MetaInboundMess
55
58
  const media = attachment?.payload?.url
56
59
  ? { url: attachment.payload.url, mimeType: attachmentMime(attachment.type) }
57
60
  : undefined;
58
- if (!text && !media) continue;
61
+ const referral = raw.message?.referral;
62
+ // Keep ad-referral events even when they carry no text/media: the referral
63
+ // is the attribution signal (handleInbound still skips the empty body).
64
+ if (!text && !media && !referral) continue;
59
65
  out.push({
60
66
  senderId,
61
67
  text,
62
68
  messageId: raw.message?.mid,
63
69
  timestampMs: typeof raw.timestamp === "number" ? raw.timestamp : undefined,
64
70
  media,
71
+ referral,
72
+ recipientId: raw.recipient?.id?.trim() || undefined,
65
73
  });
66
74
  }
67
75
  return out;
@@ -73,6 +81,58 @@ function attachmentMime(type?: string): string | undefined {
73
81
  return "application/octet-stream";
74
82
  }
75
83
 
84
+ // --- Ad-attribution relay (Tier 3) --------------------------------------------
85
+ // On the first message of a Click-to-Direct ad thread, forward the referral to
86
+ // the hub so it can resolve the campaign and store the lead's origin. Config
87
+ // mirrors the Meta app creds: plugin config → env fallback.
88
+
89
+ type RelayConfig = { hubUrl: string; cronSecret: string };
90
+
91
+ function resolveRelayConfig(cfg: MinionConfig): RelayConfig | null {
92
+ const pc =
93
+ (cfg as { plugins?: { entries?: Record<string, { config?: Record<string, unknown> }> } })
94
+ .plugins?.entries?.["meta-graph"]?.config ?? {};
95
+ const hubUrl = (
96
+ (pc.hubUrl as string | undefined)?.trim() ||
97
+ process.env.HUB_URL?.trim() ||
98
+ ""
99
+ ).replace(/\/+$/, "");
100
+ const cronSecret =
101
+ (pc.cronSecret as string | undefined)?.trim() || process.env.CRON_SECRET?.trim() || "";
102
+ if (!hubUrl || !cronSecret) return null;
103
+ return { hubUrl, cronSecret };
104
+ }
105
+
106
+ /** Fire-and-forget POST of an ad referral to the hub. Never throws. */
107
+ function relayAdReferral(
108
+ relay: RelayConfig,
109
+ channel: string,
110
+ message: MetaInboundMessage,
111
+ log?: (m: string) => void,
112
+ ): void {
113
+ const referral = message.referral;
114
+ if (!referral) return;
115
+ const isAd = (referral.source ?? "").toUpperCase() === "ADS" || Boolean(referral.ad_id);
116
+ if (!isAd || !message.recipientId) return; // recipient id is required to map an org
117
+ const body = {
118
+ channel,
119
+ senderId: message.senderId,
120
+ recipientId: message.recipientId,
121
+ messageId: message.messageId ?? null,
122
+ timestampMs: message.timestampMs ?? null,
123
+ referral,
124
+ };
125
+ void fetch(`${relay.hubUrl}/api/meta/attribution`, {
126
+ method: "POST",
127
+ headers: { "content-type": "application/json", authorization: `Bearer ${relay.cronSecret}` },
128
+ body: JSON.stringify(body),
129
+ })
130
+ .then((res) => {
131
+ if (!res.ok) log?.(`[${channel}] attribution relay non-ok: ${res.status}`);
132
+ })
133
+ .catch((err) => log?.(`[${channel}] attribution relay failed: ${String(err)}`));
134
+ }
135
+
76
136
  async function sendMessagingText(params: {
77
137
  nodeId: string;
78
138
  accessToken: string;
@@ -360,6 +420,7 @@ export function createMessagingPlatformChannel(
360
420
  appSecret: account.appSecret ?? "",
361
421
  verifyToken: account.verifyToken ?? "",
362
422
  });
423
+ const relay = resolveRelayConfig(ctx.cfg);
363
424
  const offProc = registerMetaProcessor(
364
425
  registry,
365
426
  spec.objectType,
@@ -372,6 +433,10 @@ export function createMessagingPlatformChannel(
372
433
  error: (m) => ctx.log?.error?.(m),
373
434
  statusSink: (patch) => ctx.setStatus({ accountId: account.accountId, ...patch }),
374
435
  },
436
+ onReferral: relay
437
+ ? (message) =>
438
+ relayAdReferral(relay, spec.channelId, message, (m) => ctx.log?.info?.(m))
439
+ : undefined,
375
440
  }),
376
441
  );
377
442
  // Webhook channel: stay running until aborted (see waitForAbort docs).
@@ -12,6 +12,19 @@ import { getMetaRuntime } from "../runtime.js";
12
12
  import type { MetaObjectType, MetaWebhookEntry } from "../types.js";
13
13
  import type { MetaDmPolicy } from "./config.js";
14
14
 
15
+ /** IG/Messenger Click-to-Direct `message.referral` (verbatim webhook shape). */
16
+ export type MetaAdReferral = {
17
+ ref?: string | null;
18
+ ad_id?: string | null;
19
+ source?: string | null; // 'ADS'
20
+ type?: string | null; // 'OPEN_THREAD'
21
+ ads_context_data?: {
22
+ ad_title?: string | null;
23
+ photo_url?: string | null;
24
+ video_url?: string | null;
25
+ } | null;
26
+ };
27
+
15
28
  export type MetaInboundMessage = {
16
29
  senderId: string;
17
30
  senderName?: string;
@@ -19,6 +32,10 @@ export type MetaInboundMessage = {
19
32
  messageId?: string;
20
33
  timestampMs?: number;
21
34
  media?: { id?: string; url?: string; mimeType?: string; fileName?: string };
35
+ /** Click-to-Direct ad referral, present only on the FIRST message of an ad-driven thread. */
36
+ referral?: MetaAdReferral;
37
+ /** Webhook `recipient.id` (the IG business / Page id) — maps to an org on the hub side. */
38
+ recipientId?: string;
22
39
  };
23
40
 
24
41
  export type MetaResolvedAccountBase = {
@@ -68,6 +85,9 @@ export function createMetaProcessor<A extends MetaResolvedAccountBase>(params: {
68
85
  account: A;
69
86
  cfg: MinionConfig;
70
87
  env: MetaProcessorEnv;
88
+ /** Fired (fire-and-forget) for every inbound message carrying an ad referral,
89
+ * independent of whether the message itself is dispatched to an agent. */
90
+ onReferral?: (message: MetaInboundMessage) => void;
71
91
  }): MetaProcessor {
72
92
  const { adapter, account, cfg, env } = params;
73
93
  const wantId = adapter.entryId(account);
@@ -78,6 +98,7 @@ export function createMetaProcessor<A extends MetaResolvedAccountBase>(params: {
78
98
  const core = getMetaRuntime();
79
99
  const messages = adapter.extractMessages(entry, account);
80
100
  for (const message of messages) {
101
+ if (message.referral) params.onReferral?.(message);
81
102
  env.statusSink?.({ lastInboundAt: Date.now() });
82
103
  try {
83
104
  await handleInbound({ adapter, account, cfg, env, core, message });
@@ -4288,6 +4288,7 @@ const ChannelsSchema = z.object({
4288
4288
  heartbeat: ChannelHeartbeatVisibilitySchema
4289
4289
  }).strict().optional(),
4290
4290
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4291
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4291
4292
  whatsapp: WhatsAppConfigSchema.optional(),
4292
4293
  telegram: TelegramConfigSchema.optional(),
4293
4294
  discord: DiscordConfigSchema.optional(),
@@ -4376,9 +4376,14 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4376
4376
  */
4377
4377
  function createGatewayDroneHost(opts = {}) {
4378
4378
  const { config, agentDir, workspaceDir } = opts;
4379
+ let resolvedModel;
4379
4380
  return {
4380
4381
  async resolveApiKey(spec) {
4381
4382
  const auth = await resolveProvider(spec, config, agentDir);
4383
+ resolvedModel = {
4384
+ provider: spec.provider,
4385
+ model: spec.model
4386
+ };
4382
4387
  return {
4383
4388
  apiKey: requireApiKey(auth, spec.provider),
4384
4389
  source: auth.source
@@ -4411,6 +4416,34 @@ function createGatewayDroneHost(opts = {}) {
4411
4416
  },
4412
4417
  timestamp: Date.now()
4413
4418
  });
4419
+ if (input.event === "agent.run.end" && input.usage && resolvedModel) {
4420
+ const u = input.usage;
4421
+ const inTok = u.inputTokens ?? 0;
4422
+ const outTok = u.outputTokens ?? 0;
4423
+ const cacheTok = u.cacheReadTokens ?? 0;
4424
+ emitEvent({
4425
+ category: "agent",
4426
+ severity: "info",
4427
+ event: "agent.llm.usage",
4428
+ message: `Drone LLM usage: ${input.droneId}`,
4429
+ correlationId: input.correlationId,
4430
+ metadata: {
4431
+ kind: "drone",
4432
+ droneId: input.droneId,
4433
+ provider: resolvedModel.provider,
4434
+ model: resolvedModel.model,
4435
+ source: "system",
4436
+ channel: "drone",
4437
+ tokens: {
4438
+ input: inTok,
4439
+ output: outTok,
4440
+ cacheRead: cacheTok,
4441
+ total: inTok + outTok + cacheTok
4442
+ }
4443
+ },
4444
+ timestamp: Date.now()
4445
+ });
4446
+ }
4414
4447
  }
4415
4448
  };
4416
4449
  }
@@ -4298,6 +4298,7 @@ const ChannelsSchema = z.object({
4298
4298
  heartbeat: ChannelHeartbeatVisibilitySchema
4299
4299
  }).strict().optional(),
4300
4300
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4301
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4301
4302
  whatsapp: WhatsAppConfigSchema.optional(),
4302
4303
  telegram: TelegramConfigSchema.optional(),
4303
4304
  discord: DiscordConfigSchema.optional(),
@@ -4287,6 +4287,7 @@ const ChannelsSchema = z.object({
4287
4287
  heartbeat: ChannelHeartbeatVisibilitySchema
4288
4288
  }).strict().optional(),
4289
4289
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4290
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4290
4291
  whatsapp: WhatsAppConfigSchema.optional(),
4291
4292
  telegram: TelegramConfigSchema.optional(),
4292
4293
  discord: DiscordConfigSchema.optional(),
@@ -4298,6 +4298,7 @@ const ChannelsSchema = z.object({
4298
4298
  heartbeat: ChannelHeartbeatVisibilitySchema
4299
4299
  }).strict().optional(),
4300
4300
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4301
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4301
4302
  whatsapp: WhatsAppConfigSchema.optional(),
4302
4303
  telegram: TelegramConfigSchema.optional(),
4303
4304
  discord: DiscordConfigSchema.optional(),
@@ -4288,6 +4288,7 @@ const ChannelsSchema = z.object({
4288
4288
  heartbeat: ChannelHeartbeatVisibilitySchema
4289
4289
  }).strict().optional(),
4290
4290
  accountOrgs: z.record(z.string(), z.record(z.string(), z.array(z.string()).optional()).optional()).optional(),
4291
+ accountOwners: z.record(z.string(), z.record(z.string(), z.string().optional()).optional()).optional(),
4291
4292
  whatsapp: WhatsAppConfigSchema.optional(),
4292
4293
  telegram: TelegramConfigSchema.optional(),
4293
4294
  discord: DiscordConfigSchema.optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nikolasp98/minion",
3
- "version": "2026.7.12-dev.20260715050311",
3
+ "version": "2026.7.16-dev",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/NikolasP98/minion-ai#readme",
@@ -1,2 +0,0 @@
1
- import "./daemon-runtime-BmaW56O-.js";
2
- export {};
@@ -1,2 +0,0 @@
1
- import "./daemon-runtime-DUAfG2aA.js";
2
- export {};
@@ -1,2 +0,0 @@
1
- import "./doctor-completion-DR3PMDm1.js";
2
- export {};
@@ -1,2 +0,0 @@
1
- import "./doctor-completion-Bah1xxDZ.js";
2
- export {};
@@ -1,2 +0,0 @@
1
- import { o as sendMessageWhatsApp } from "./channel-web-Bp2feV7o.js";
2
- export { sendMessageWhatsApp };