@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.
- package/dist/{_registry.generated-DSGpsf-3.js → _registry.generated-B5zHyziR.js} +55 -19
- package/dist/{_registry.generated-CxoyMMzW.js → _registry.generated-C3zYJ6On.js} +55 -19
- package/dist/{_registry.generated-CVwb-DEK.js → _registry.generated-DKC2RDUo.js} +55 -19
- package/dist/{accounts-B38-HaFa.js → accounts-BwLt-V29.js} +1 -1
- package/dist/{accounts-DAwY_jw0.js → accounts-CJf7velm.js} +1 -1
- package/dist/{accounts-BeP1XvsQ.js → accounts-DZ-7pWtI.js} +1 -1
- package/dist/{accounts-m_AHpH3M.js → accounts-vA22MiLu.js} +1 -1
- package/dist/{acp-cli-B9vzabMN.js → acp-cli-DCCSn5NL.js} +4 -4
- package/dist/{acp-cli-BtvuNlvK.js → acp-cli-wKQfGJIA.js} +4 -4
- package/dist/{agent-Bmy03Olv.js → agent-BvFdXWhL.js} +12 -12
- package/dist/{agent-C63gAsUc.js → agent-DaBGbCfi.js} +11 -11
- package/dist/{agent-step-D1lEb2ij.js → agent-step-BCSCZOB-.js} +3 -3
- package/dist/{agent-step-C1DQllT9.js → agent-step-CgJNQPZ8.js} +3 -3
- package/dist/{agents-CEv4jAwQ.js → agents-CGJzMj2S.js} +8 -8
- package/dist/{agents-list-tool-CSkk9x2X.js → agents-list-tool-C93hCbLj.js} +3 -3
- package/dist/{agents-list-tool-XwBzypb1.js → agents-list-tool-Cd_Q7HuV.js} +3 -3
- package/dist/{agents-list-tool-DCUuG4eP.js → agents-list-tool-SNOunDVC.js} +3 -3
- package/dist/{audit-BZt5UM89.js → audit-CftXdiYP.js} +12 -12
- package/dist/{audit-CVY0TU24.js → audit-D9GAKieT.js} +12 -12
- package/dist/{auth-choice-iL2qGnTv.js → auth-choice-DKtOuFks.js} +4 -4
- package/dist/{auth-choice-DBUnkhkE.js → auth-choice-dbpaxkks.js} +4 -4
- package/dist/{banner-WiXEHrLb.js → banner-B-uaqlJ9.js} +1 -1
- package/dist/{browser-cli-DYoqKTbg.js → browser-cli-BhqYEW3P.js} +3 -3
- package/dist/{browser-cli-CHh8sv-b.js → browser-cli-DZrCLNaa.js} +3 -3
- package/dist/{browser-tool-BVMjabV0.js → browser-tool-BWAVW295.js} +7 -7
- package/dist/{browser-tool-DgFnz20P.js → browser-tool-DErZM1k2.js} +7 -7
- package/dist/{browser-tool-thBH48Eu.js → browser-tool-DjCmhgOb.js} +7 -7
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +153 -10
- package/dist/bundled/kg-message-sync/handler.js +2 -1
- package/dist/bundled/session-memory/handler.js +33 -0
- package/dist/{call-DrV6uU2c.js → call-BWSchIcf.js} +3 -3
- package/dist/{call-czcZr-uY.js → call-DHo0XdK6.js} +2 -11
- package/dist/{call-2tXHVKWh.js → call-DQ1ciEPz.js} +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{canvas-tool-BfzYJpwI.js → canvas-tool-BneFVxD8.js} +2 -2
- package/dist/{canvas-tool-CNBgnWbK.js → canvas-tool-DeJaejKM.js} +2 -2
- package/dist/{canvas-tool-S4W4mlij.js → canvas-tool-Ogd2OChc.js} +2 -2
- package/dist/{channel-options-zR7MDE5g.js → channel-options-D8AdMco0.js} +2 -2
- package/dist/{channel-options-Iwd9Pnr4.js → channel-options-DjEmC0qR.js} +2 -2
- package/dist/{channel-selection-Bpbhqgjb.js → channel-selection-1nQ35zxv.js} +1 -1
- package/dist/{channel-selection-D-JiWYSP.js → channel-selection-wHLAe5Et.js} +1 -1
- package/dist/{channel-web-Bp2feV7o.js → channel-web-DRfE9BO9.js} +12 -12
- package/dist/{channels-cli-wMxCVwap.js → channels-cli-B2WLqWbi.js} +13 -13
- package/dist/{channels-cli-BVzvH4T8.js → channels-cli-DWxvR4dU.js} +13 -13
- package/dist/{channels-status-issues-DAXpJEob.js → channels-status-issues-8gZwCTjP.js} +1 -1
- package/dist/{channels-status-issues-DXz-lrLc.js → channels-status-issues-CE1BlXu3.js} +1 -1
- package/dist/{chrome-COxoiWAN.js → chrome-BA0Rm2cQ.js} +2 -2
- package/dist/{chrome-C0h74dXQ.js → chrome-CQYa8Qpn.js} +2 -2
- package/dist/{chrome-BrrQFDI3.js → chrome-Cm9IFEur.js} +2 -2
- package/dist/{clawbot-cli-B5B0Z6hG.js → clawbot-cli-00xvHy61.js} +1 -1
- package/dist/{clawbot-cli-Dw1hTwmP.js → clawbot-cli-BBjE2ol-.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-CPdR63BC.js → cli-CgVsnrl6.js} +3 -3
- package/dist/{cli-CcGaXhRW.js → cli-CtGu18f6.js} +3 -3
- package/dist/{client-C_-YvLLI.js → client-2fZQKc2l.js} +5 -5
- package/dist/{client-UbK7ubLT.js → client-4u1JH1Zk.js} +0 -9
- package/dist/{client-Jabmwobu.js → client-B8GOknl-.js} +5 -5
- package/dist/{client-cSd7bG5q.js → client-D-ZPTrtK.js} +5 -5
- package/dist/{client-BYzTMaoO.js → client-W3BYtITQ.js} +0 -9
- package/dist/{command-registry-BuDTBRe1.js → command-registry-B5mckc9m.js} +14 -14
- package/dist/{commands-registry-k-JBgSft.js → commands-registry-DJs-edcv.js} +2 -2
- package/dist/{commands-registry-R0_nDAub.js → commands-registry-qRRu3RMk.js} +2 -2
- package/dist/{completion-cli-BGEEtxjt.js → completion-cli-BXTewelZ.js} +2 -2
- package/dist/{completion-cli-DDyDbJf7.js → completion-cli-BcPY11gL.js} +1 -1
- package/dist/{config-Bdlgx0wn.js → config-BerwgOPM.js} +2 -2
- package/dist/{config-DBs_rRu7.js → config-BrDW75c2.js} +2 -2
- package/dist/{config-Y_m-kxh9.js → config-DPP0lwsZ.js} +1 -1
- package/dist/{config-cli-DvnaEuHX.js → config-cli-CDhIjQc_.js} +4 -4
- package/dist/{config-cli-CEFoclyO.js → config-cli-CS88lrpx.js} +4 -4
- package/dist/{config-guard-23Of7Z6T.js → config-guard-CdCd4lGu.js} +3 -3
- package/dist/{config-guard-DnN-rRov.js → config-guard-DeZ33UWP.js} +3 -3
- package/dist/{config-validation-C7FvneNE.js → config-validation-CL0L0Dyf.js} +2 -2
- package/dist/{config-validation-BFtYfcpf.js → config-validation-txBaIaqO.js} +2 -2
- package/dist/{configure-BA6T3Tkr.js → configure-Bg10bnTk.js} +16 -16
- package/dist/{configure-BQ1Lu7Bd.js → configure-D5oM27Go.js} +16 -16
- package/dist/{control-service-DF4h-8kw.js → control-service-C369Rxs0.js} +6 -6
- package/dist/{control-service-DzDPUacK.js → control-service-DIbEfWbr.js} +6 -6
- package/dist/crm-conversation-themes-tool-47-Pcl5J.js +37 -0
- package/dist/crm-conversation-themes-tool-COuQB3TU.js +37 -0
- package/dist/crm-conversation-themes-tool-DB8zQpU1.js +37 -0
- package/dist/{cron-cli-BSfEMY9R.js → cron-cli-CsVKtwB8.js} +2 -2
- package/dist/{cron-cli-DRJUdOM5.js → cron-cli-Dddt4cu1.js} +2 -2
- package/dist/{cron-tool-Bgr6XBq9.js → cron-tool-BWM-ykso.js} +5 -5
- package/dist/{cron-tool-DNLIuiZ3.js → cron-tool-CD3kXNpT.js} +5 -5
- package/dist/{cron-tool-B4-O1mOU.js → cron-tool-CaMrrFJF.js} +5 -5
- package/dist/{daemon-cli-B8kOSqee.js → daemon-cli-CAgHOWp8.js} +9 -9
- package/dist/{daemon-cli-CDWmL7nl.js → daemon-cli-yrlA9L0h.js} +9 -9
- package/dist/daemon-cli.js +2 -10
- package/dist/daemon-install-helpers-Dwlr417c.js +2 -0
- package/dist/daemon-install-helpers-Khda5myS.js +2 -0
- package/dist/{daemon-runtime-BmaW56O-.js → daemon-runtime-C0_5HhUZ.js} +1 -1
- package/dist/{daemon-runtime-DUAfG2aA.js → daemon-runtime-CZXX_eXt.js} +1 -1
- package/dist/{deliver-BBHWk2Fl.js → deliver-BUifEj0F.js} +4 -4
- package/dist/{deliver-DxzGSQ1s.js → deliver-DJHcrP_i.js} +5 -5
- package/dist/{deliver-B5mqRWvh.js → deliver-O2dLDnLg.js} +4 -4
- package/dist/{deps-dO6xHyfp.js → deps-i_B9izvk.js} +7 -7
- package/dist/{devices-cli-D-lvOKoA.js → devices-cli-B9OXRt0t.js} +1 -1
- package/dist/{devices-cli-BmwXfmaE.js → devices-cli-DAcSoXi5.js} +1 -1
- package/dist/{directory-cli-BYHaa8t2.js → directory-cli-kxPXkKog.js} +4 -4
- package/dist/{directory-cli-hnxS-rJY.js → directory-cli-t11V_DDe.js} +4 -4
- package/dist/{dispatcher-Cce5sJHy.js → dispatcher-CvddQmnF.js} +1 -1
- package/dist/{dispatcher-C5AKq3qz.js → dispatcher-Dt_9aSBz.js} +1 -1
- package/dist/{dm-policy-shared-BvIhvTAm.js → dm-policy-shared-Df7eGBuI.js} +2 -2
- package/dist/{dm-policy-shared-BSWTvM40.js → dm-policy-shared-DyFNKOIs.js} +2 -2
- package/dist/{dns-cli-YkSHkRgx.js → dns-cli-CuxJhzIr.js} +2 -2
- package/dist/{dns-cli-BrpQUGng.js → dns-cli-D-xNNWBy.js} +2 -2
- package/dist/doctor-completion-B-tgL_ut.js +2 -0
- package/dist/{doctor-completion-Bah1xxDZ.js → doctor-completion-D1cLVgnw.js} +1 -1
- package/dist/doctor-completion-DvEGPvIT.js +2 -0
- package/dist/{doctor-completion-DR3PMDm1.js → doctor-completion-rfyVqz7I.js} +1 -1
- package/dist/{doctor-config-flow-BvTU7P3a.js → doctor-config-flow-C2p3v-cC.js} +6 -6
- package/dist/{doctor-config-flow-CVXvnZ_P.js → doctor-config-flow-D6uaIY8F.js} +6 -6
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-2nMWHQ23.js → exec-approvals-cli-CYxKrRPS.js} +2 -2
- package/dist/{exec-approvals-cli-CPLWc9wh.js → exec-approvals-cli-CaGKwCkP.js} +2 -2
- package/dist/extensionAPI.d.ts +11 -0
- package/dist/extensionAPI.js +2 -2
- package/dist/{gateway-DkZbWoSP.js → gateway-DpUea-L8.js} +3 -3
- package/dist/{gateway-DuPlq3Lo.js → gateway-DyaIYiPf.js} +3 -3
- package/dist/{gateway-CKw1B3G3.js → gateway-RMd15lxN.js} +3 -3
- package/dist/{gateway-cli-CCIa9dAH.js → gateway-cli-1dY-uNhm.js} +132 -77
- package/dist/{gateway-cli-DO7T73U7.js → gateway-cli-n18LFNeU.js} +131 -76
- package/dist/{gateway-rpc-Dor0Ne5G.js → gateway-rpc-BaD9gDWy.js} +1 -1
- package/dist/{gateway-rpc-bFDfI0jC.js → gateway-rpc-C3LLjyGe.js} +1 -1
- package/dist/{gateway-tool-CYNiLl9-.js → gateway-tool-BAdp6SH1.js} +3 -3
- package/dist/{gateway-tool-FiBzkiaT.js → gateway-tool-kRxmsmMz.js} +3 -3
- package/dist/{gateway-tool-DimDGfH7.js → gateway-tool-sHQ43WtK.js} +3 -3
- package/dist/{github-copilot-auth-bj7yKXqQ.js → github-copilot-auth-C6LhCOk3.js} +2 -2
- package/dist/{github-copilot-auth--CKRNoaw.js → github-copilot-auth-VK12SD5f.js} +2 -2
- package/dist/{gmail-OOodZN5v.js → gmail-89acEtXH.js} +1 -1
- package/dist/{gmail-De7lwq9k.js → gmail-tGz-kYHa.js} +1 -1
- package/dist/{health-CJLBn09L.js → health-8oE9qNSE.js} +10 -10
- package/dist/{health-BSVlkT5d.js → health-CYE5q8Un.js} +10 -10
- package/dist/{heartbeat-events-DLgkBgdw.js → heartbeat-events-C2_9-jxQ.js} +2 -1
- package/dist/{heartbeat-events-CNb7CXLY.js → heartbeat-events-D-wmX2Vg.js} +2 -1
- package/dist/{helpers-DaByRrQ3.js → helpers-CNcaAdSH.js} +1 -1
- package/dist/{helpers-If3mZUB3.js → helpers-bG_wfee1.js} +1 -1
- package/dist/{hooks-cli-CWm7BMDX.js → hooks-cli-CB_KzY16.js} +2 -2
- package/dist/{hooks-cli-S730exNl.js → hooks-cli-CEnzt4Dn.js} +2 -2
- package/dist/{host-D_jlsIB_.js → host-Ck1Iu5db.js} +33 -0
- package/dist/{host-w2pX4Cmj.js → host-FOFn61kz.js} +33 -0
- package/dist/{image-tool-Clda5wSc.js → image-tool-CEjIXfAz.js} +2 -2
- package/dist/{image-tool-CTzv5Fwx.js → image-tool-DA0ckrPq.js} +1 -1
- package/dist/{image-tool-CXUbSOFf.js → image-tool-OiDWYqmY.js} +2 -2
- package/dist/index.d.ts +11 -0
- package/dist/index.js +10 -10
- package/dist/{io-BJQ6wGt0.js → io-6cqme3no.js} +2 -2
- package/dist/{io-PqZ9xsqS.js → io-7MYBxUkU.js} +2 -2
- package/dist/{io-36IWgxWF.js → io-D8w0m4e7.js} +2 -1
- package/dist/{ir-Z79l6YFz.js → ir-BPZJ-sfR.js} +1 -1
- package/dist/{ir-CZirIzWM.js → ir-BhnJmnK_.js} +5 -5
- package/dist/{ir-BTHWocyU.js → ir-CdlSkzAy.js} +1 -1
- package/dist/{lifecycle-core-Cefw3jp5.js → lifecycle-core-Dmy-67JO.js} +3 -3
- package/dist/{lifecycle-core-CSfXVCf2.js → lifecycle-core-DwiJf6GO.js} +3 -3
- package/dist/llm-slug-generator.js +33 -0
- package/dist/{load-tools-tool-NnK5iEGW.js → load-tools-tool-CK9n4dpv.js} +3 -3
- package/dist/{load-tools-tool-1Ku7ZYQk.js → load-tools-tool-DVMiLHnV.js} +3 -3
- package/dist/{load-tools-tool-B822jbu8.js → load-tools-tool-jvr9ELiC.js} +3 -3
- package/dist/{logs-cli-CyXHS82U.js → logs-cli-DYkz_Y2b.js} +2 -2
- package/dist/{logs-cli-B2HN6T9s.js → logs-cli-y33n6Plb.js} +2 -2
- package/dist/{memory-cli-DN4HDjZF.js → memory-cli-CchSD5_M.js} +3 -3
- package/dist/{memory-cli-D2UybctY.js → memory-cli-DWeZSF4O.js} +3 -3
- package/dist/{message-action-runner-BC0NPAEt.js → message-action-runner-BJzBMfAN.js} +11 -11
- package/dist/{message-action-runner-CzYdWhZ6.js → message-action-runner-aRJaOp3h.js} +11 -11
- package/dist/{message-ledger-5_Cl_pN0.js → message-ledger-DmX8k7Eb.js} +6 -6
- package/dist/{message-tool-PZuRkGRx.js → message-tool-BT_lShXP.js} +6 -6
- package/dist/{message-tool-BBsJ718D.js → message-tool-CJ2k9G2X.js} +6 -6
- package/dist/{message-tool-FnCqoXl8.js → message-tool-DkxTGNJ_.js} +9 -9
- package/dist/{minion-tools-DogsL-y0.js → minion-tools-CEQNyDLo.js} +22 -20
- package/dist/{model-catalog-D9SMyqKP.js → model-catalog-Dun9rUwm.js} +3 -3
- package/dist/{model-catalog-DYHf-usN.js → model-catalog-RhTD2XJY.js} +3 -3
- package/dist/{model-fallback-FMG5anI7.js → model-fallback-Cm3Tv0In.js} +2 -2
- package/dist/{model-fallback-CT9cFbVP.js → model-fallback-CrSemKRh.js} +2 -2
- package/dist/{model-fallback-CDZmGk9D.js → model-fallback-uwtaor8f.js} +4 -4
- package/dist/{model-picker-3nhZqWgC.js → model-picker-C_UhEF-R.js} +2 -2
- package/dist/{model-picker-C20xG3X3.js → model-picker-D7OvwR5Y.js} +2 -2
- package/dist/{models-BT4YKBSD.js → models-DEvrTY5o.js} +12 -12
- package/dist/{models-cli-DF_0JCx_.js → models-cli-BBuPQES6.js} +2 -2
- package/dist/{models-cli-DY7Bm2ed.js → models-cli-DsDVKG2f.js} +12 -12
- package/dist/{models-config-B5fBKGD3.js → models-config-DTMIOONu.js} +2 -2
- package/dist/{models-config-DoGGIvM6.js → models-config-pB1nNFSi.js} +2 -2
- package/dist/{node-cli-BRInA-Sb.js → node-cli-Cdp1_fUq.js} +9 -9
- package/dist/{node-cli-D9Z-dPUZ.js → node-cli-DsU_QUTE.js} +9 -9
- package/dist/{nodes-cli-CxK2FUkv.js → nodes-cli-B4oX5uNL.js} +5 -5
- package/dist/{nodes-cli-BG9J4Imp.js → nodes-cli-CKkuvp7a.js} +5 -5
- package/dist/{nodes-tool-CMcjIuR_.js → nodes-tool-C9NV_GnB.js} +3 -3
- package/dist/{nodes-tool-DhF3ck1I.js → nodes-tool-CTpJ5fug.js} +3 -3
- package/dist/{nodes-tool-Qj3ygrgS.js → nodes-tool-sKJc-Yjj.js} +3 -3
- package/dist/{nodes-utils-BaYNmopA.js → nodes-utils-CFmLuU06.js} +1 -1
- package/dist/{nodes-utils-DOy5cjCc.js → nodes-utils-CkQsT0N0.js} +1 -1
- package/dist/{nodes-utils-DF3X9oyh.js → nodes-utils-DNMhzvVb.js} +1 -1
- package/dist/{onboard-BWYSXcHt.js → onboard-V7JyPJex.js} +9 -9
- package/dist/{onboard-channels-Bq-evr85.js → onboard-channels-BDfxpK7n.js} +1 -1
- package/dist/{onboard-channels-DWr0yHWj.js → onboard-channels-CmC3qBbq.js} +3 -3
- package/dist/{onboard-channels-DyWYFAg2.js → onboard-channels-CzKarfzC.js} +1 -1
- package/dist/{onboard-channels-BOSMG4S-.js → onboard-channels-yUQOZPgP.js} +3 -3
- package/dist/{onboard-custom-DU4LJYpt.js → onboard-custom-BDM5_y2p.js} +2 -2
- package/dist/{onboard-custom-B136z_xx.js → onboard-custom-BvfApkVd.js} +1 -1
- package/dist/{onboard-custom-BMJRDvs6.js → onboard-custom-CfZMfUJ3.js} +1 -1
- package/dist/{onboard-custom-iL7ssiup.js → onboard-custom-CmwY-IfM.js} +2 -2
- package/dist/{onboard-helpers-C32t-FLY.js → onboard-helpers-BE_18443.js} +1 -1
- package/dist/{onboard-helpers-r8VwltFD.js → onboard-helpers-CekhN2Dt.js} +5 -5
- package/dist/{onboard-helpers-CshtI1Zv.js → onboard-helpers-DfEvL7Eo.js} +1 -1
- package/dist/{onboard-helpers-COFCTrXY.js → onboard-helpers-gS7HQOeH.js} +5 -5
- package/dist/{onboard-remote-OGiBmmSH.js → onboard-remote-CEWlSso0.js} +1 -1
- package/dist/{onboard-remote-DaSf_iYp.js → onboard-remote-aQfExF92.js} +1 -1
- package/dist/{onboard-D47mKKfB.js → onboard-rqIA9EXQ.js} +9 -9
- package/dist/{onboard-skills-roS4qTou.js → onboard-skills-75JQVISV.js} +1 -1
- package/dist/{onboard-skills-CjBxLUyk.js → onboard-skills-BSGpQX_t.js} +1 -1
- package/dist/{onboarding-DEi30r7I.js → onboarding-BNfuRC7v.js} +12 -12
- package/dist/{onboarding-CsR--6vK.js → onboarding-IiILUaqA.js} +12 -12
- package/dist/{onboarding.finalize-D6pKr-ZJ.js → onboarding.finalize-D2iRalHn.js} +9 -9
- package/dist/{onboarding.finalize-truf0W9s.js → onboarding.finalize-T1iu9hW_.js} +9 -9
- package/dist/{onboarding.gateway-config-2oj2EqOS.js → onboarding.gateway-config-DPJvhCxG.js} +2 -2
- package/dist/{onboarding.gateway-config-Bh1viokL.js → onboarding.gateway-config-W1qUrMi_.js} +2 -2
- package/dist/{outbound-send-deps-kbmuQhN5.js → outbound-send-deps-_gwXpS3X.js} +7 -7
- package/dist/{pairing-cli-BaxW5NvY.js → pairing-cli-DOVP6x__.js} +4 -4
- package/dist/{pairing-cli-Dm2RjHsZ.js → pairing-cli-DZQ0VISz.js} +4 -4
- package/dist/{pairing-store-DHcO9a4v.js → pairing-store-BP5Qp69V.js} +2 -2
- package/dist/{pairing-store-D0QXnN8e.js → pairing-store-CNDIY_e9.js} +2 -2
- package/dist/{pi-embedded-helpers-B-iZquPe.js → pi-embedded-helpers-CAos7nyg.js} +6 -6
- package/dist/{pi-embedded-helpers-D7jObbmL.js → pi-embedded-helpers-CJQRe8VG.js} +1 -1
- package/dist/{pi-embedded-helpers-DU-bh5ri.js → pi-embedded-helpers-Dt84Vt0L.js} +1 -1
- package/dist/{pi-embedded-utils-M7dzzD38.js → pi-embedded-utils-BlYe4un1.js} +1 -1
- package/dist/{pi-embedded-utils-BDVxHN9w.js → pi-embedded-utils-C3czix2Z.js} +1 -1
- package/dist/{pi-embedded-utils-ClQmhsYi.js → pi-embedded-utils-CnKLZQZs.js} +1 -1
- package/dist/{pi-tools.policy-DftNw1JI.js → pi-tools.policy-DClWWLv0.js} +4 -4
- package/dist/{plugin-auto-enable-Cnu8IYow.js → plugin-auto-enable-2zVKrpSR.js} +1 -1
- package/dist/{plugin-auto-enable-CoUmbc3E.js → plugin-auto-enable-BFqsBeiO.js} +1 -1
- package/dist/{plugin-registry-CCtEK0P_.js → plugin-registry-B8Ol763b.js} +3 -3
- package/dist/{plugin-registry-CYiBIvvj.js → plugin-registry-DqZ7qJuj.js} +3 -3
- package/dist/plugin-sdk/agents/tools/hub/crm-conversation-themes-tool.d.ts +11 -0
- package/dist/plugin-sdk/agents/tools/hub/search-crm-conversations-tool.d.ts +11 -0
- package/dist/plugin-sdk/channels/discord.js +153 -10
- package/dist/plugin-sdk/channels/imessage.js +153 -10
- package/dist/plugin-sdk/channels/line.js +153 -10
- package/dist/plugin-sdk/channels/signal.js +153 -10
- package/dist/plugin-sdk/channels/slack.js +153 -10
- package/dist/plugin-sdk/channels/telegram.js +153 -10
- package/dist/plugin-sdk/channels/whatsapp.js +153 -10
- package/dist/plugin-sdk/config/types.channels.d.ts +11 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +1 -0
- package/dist/plugin-sdk/core.js +2 -1
- package/dist/plugin-sdk/gateway/client.d.ts +0 -5
- package/dist/plugin-sdk/index.js +153 -10
- package/dist/plugin-sdk/personal-agent/credential-client.d.ts +6 -3
- package/dist/{plugins-3ke-1_IL.js → plugins-BSX3IzSW.js} +1 -1
- package/dist/{plugins-Csm04VZy.js → plugins-BbE87x_i.js} +1 -1
- package/dist/{plugins-B4Zf_SkO.js → plugins-Db3l--Iv.js} +1 -1
- package/dist/{plugins-cli-SNQimFTq.js → plugins-cli-Do_2x-P9.js} +3 -3
- package/dist/{plugins-cli-CnKL7zRT.js → plugins-cli-sYIckkU6.js} +3 -3
- package/dist/{program-DMwCdKqC.js → program-DuPIc0CA.js} +7 -7
- package/dist/{program-context-CUgf-nFE.js → program-context-Butv-q95.js} +42 -42
- package/dist/{prompt-select-styled-XfmHgUSJ.js → prompt-select-styled-BExVeXb2.js} +18 -18
- package/dist/{prompt-select-styled-kv2v-J0x.js → prompt-select-styled-Cp4tJmDm.js} +18 -18
- package/dist/{push-apns-C7QqFlQ5.js → push-apns-Bxplfna8.js} +1 -31
- package/dist/{push-apns-B34to-or.js → push-apns-a42ldGL8.js} +1 -31
- package/dist/{pw-ai-DApwaGOU.js → pw-ai-CYHslBvW.js} +2 -2
- package/dist/{pw-ai-CsAABWsJ.js → pw-ai-CuhAAfak.js} +2 -2
- package/dist/{pw-ai-ZHl2zMES.js → pw-ai-DQg5o_dq.js} +2 -2
- package/dist/{pw-session-Cj5TD_Y4.js → pw-session-CE6GP8K2.js} +1 -1
- package/dist/{pw-session-BCUrAqCY.js → pw-session-DllHustd.js} +1 -1
- package/dist/{pw-session-CaO0Bkw4.js → pw-session-UBu8_Nno.js} +1 -1
- package/dist/{qr-cli-DYUIAbvh.js → qr-cli-BCZv2_hI.js} +2 -2
- package/dist/{qr-cli-az8v1Idc.js → qr-cli-DX6_VGoE.js} +2 -2
- package/dist/{register.agent-DZRauJcn.js → register.agent-BxjtbKDH.js} +7 -7
- package/dist/{register.agent-DbdSW2Ug.js → register.agent-DWJIWMVU.js} +12 -12
- package/dist/{register.channel-CPM1086Y.js → register.channel-BDuMmK1a.js} +2 -2
- package/dist/{register.channel-ZizsJ__5.js → register.channel-C_DXxr7c.js} +2 -2
- package/dist/{register.configure-BjDYUL20.js → register.configure-B_XY4Rl7.js} +1 -1
- package/dist/{register.configure-C-Q7AhcU.js → register.configure-kQKEsyRt.js} +1 -1
- package/dist/{register.drone-0mU5DIA_.js → register.drone-B2YlfnxU.js} +2 -2
- package/dist/{register.drone-BxcnHSWL.js → register.drone-BEaZQLpQ.js} +2 -2
- package/dist/{register.maintenance-DGoWogZZ.js → register.maintenance-BzbQEwcr.js} +5 -5
- package/dist/{register.maintenance-DHtTDNZm.js → register.maintenance-x4QqUEAs.js} +5 -5
- package/dist/{register.message-BON_gkri.js → register.message-C-HGH6ro.js} +7 -7
- package/dist/{register.message-gGAMAdiu.js → register.message-erSrrSy8.js} +7 -7
- package/dist/{register.onboard-Dlr48GBC.js → register.onboard-DtSasogy.js} +1 -1
- package/dist/{register.onboard-oW7iHTrT.js → register.onboard-RztK81fK.js} +1 -1
- package/dist/{register.setup-C-tBiZg9.js → register.setup-CNKwjRf3.js} +4 -4
- package/dist/{register.setup-CvwF93GX.js → register.setup-CU4oyWQN.js} +4 -4
- package/dist/{register.status-health-sessions-ChNAFUVq.js → register.status-health-sessions-C4MLusee.js} +6 -6
- package/dist/{register.status-health-sessions-UV0LR9im.js → register.status-health-sessions-CaPTa3NI.js} +3 -3
- package/dist/{register.subclis-BVSo499N.js → register.subclis-Q6q9ktLa.js} +29 -29
- package/dist/{reply-D1Xsn6eO.js → reply-pajA-Yl6.js} +33 -31
- package/dist/{reply-payloads-CHYk2cao.js → reply-payloads-BlZu5x6x.js} +6 -6
- package/dist/{reply-prefix-2P-kpLyA.js → reply-prefix-C2RVZSgb.js} +1 -1
- package/dist/{reply-prefix-CxJuc0hI.js → reply-prefix-g25aWRqJ.js} +1 -1
- package/dist/{resolve-route-BEVw9SKN.js → resolve-route-DQ7BIAU_.js} +2 -2
- package/dist/{resolve-route-AQSn8qfH.js → resolve-route-yooa1z42.js} +4 -4
- package/dist/{routes-yg37klM3.js → routes-C5NVLNYd.js} +4 -4
- package/dist/{routes-gNKwdTeZ.js → routes-C9bf1VtT.js} +4 -4
- package/dist/{rpc-qg2Z1rQN.js → rpc-BXk0xG0H.js} +1 -1
- package/dist/{rpc-DFTT-PZM.js → rpc-CRCwztMb.js} +1 -1
- package/dist/{run-main-CrNTVOYZ.js → run-main-BdLBIyiP.js} +19 -19
- package/dist/{sandbox-BoqQp8gb.js → sandbox-DLtSFsnF.js} +7 -7
- package/dist/{sandbox-vTPiRHpZ.js → sandbox-DQ8PqB1U.js} +7 -7
- package/dist/{sandbox-cli-CrKds6ek.js → sandbox-cli-BoxfOIvp.js} +4 -4
- package/dist/{sandbox-cli-CIGgwzST.js → sandbox-cli-CFJ9cLf1.js} +4 -4
- package/dist/{sdk-inspect-tool-DruE0gS7.js → sdk-inspect-tool--0YwiPqb.js} +2 -2
- package/dist/{sdk-inspect-tool-DKF5-MKP.js → sdk-inspect-tool-gngBv_e2.js} +2 -2
- package/dist/{sdk-inspect-tool-D8dw7W1x.js → sdk-inspect-tool-lWmixb2O.js} +2 -2
- package/dist/search-crm-conversations-tool-CXlTimAj.js +37 -0
- package/dist/search-crm-conversations-tool-CsAUIlEu.js +37 -0
- package/dist/search-crm-conversations-tool-CxEqcbxC.js +37 -0
- package/dist/{search-tools-tool-ChBggqrC.js → search-tools-tool-BCV0uHLY.js} +2 -2
- package/dist/{search-tools-tool-BT533cw8.js → search-tools-tool-DIr1vVNX.js} +2 -2
- package/dist/{search-tools-tool-DP49FT4E.js → search-tools-tool-XuYT8kpL.js} +2 -2
- package/dist/{security-cli-kbxMiBXq.js → security-cli-Cx2puO6Q.js} +4 -4
- package/dist/{security-cli-B44T1rTx.js → security-cli-sqaoNzjc.js} +4 -4
- package/dist/{send-DmO9gGRo.js → send-BABrPQhp.js} +4 -4
- package/dist/{send-C8bGQBU0.js → send-BOAXOqlj.js} +5 -5
- package/dist/{send-CMQUySy2.js → send-BhHYA7fz.js} +4 -4
- package/dist/{send-DF1aASt7.js → send-C1R6SHFd.js} +4 -4
- package/dist/{send-jIPdhFyH.js → send-CQTnHf7j.js} +6 -6
- package/dist/{send-BVwKSS0K.js → send-CzX8rfQQ.js} +6 -6
- package/dist/{send-DDsNa_Ji.js → send-DIjmAwBt.js} +5 -5
- package/dist/{send-C8Qvbhfl.js → send-DfwkS1Cy.js} +5 -5
- package/dist/{send-aP9vUdZA.js → send-DmLvgXqi.js} +5 -5
- package/dist/{send-GitfZeLF.js → send-F3N3Vgcy.js} +4 -4
- package/dist/{server-context-vL7RpqKW.js → server-context-BYcLDvQc.js} +6 -6
- package/dist/{server-context-DwRkP6wl.js → server-context-CDmBokpm.js} +6 -6
- package/dist/{server-context-CpjjYoiy.js → server-context-DFdTmsBq.js} +6 -6
- package/dist/{server-methods-list-BkeL_f1I.js → server-methods-list-CUUd_Znm.js} +1 -1
- package/dist/{server-methods-list-L1PUHfXd.js → server-methods-list-ZEquDpTD.js} +1 -1
- package/dist/{server-node-events-BPsy0Lio.js → server-node-events-Dml6MIAW.js} +11 -11
- package/dist/{server-node-events-BpU_jSoz.js → server-node-events-DpkjSBLL.js} +9 -9
- package/dist/{session-status-tool-CGqrPDT_.js → session-status-tool-BHEQX4IM.js} +6 -6
- package/dist/{session-status-tool-CpvDhFZV.js → session-status-tool-CIAw4c-9.js} +5 -5
- package/dist/{session-status-tool-Ci9ZTcWd.js → session-status-tool-CJeMrNTI.js} +7 -7
- package/dist/{session-utils-BwdwB80N.js → session-utils-Ffl6ASbR.js} +4 -4
- package/dist/{sessions-6bGzFKwC.js → sessions-CiNGPwTK.js} +4 -4
- package/dist/{sessions-DaA0crcT.js → sessions-ClJAVE0p.js} +6 -6
- package/dist/{sessions-Dv0AsGXk.js → sessions-DcOCMszs.js} +3 -3
- package/dist/{sessions-Bmu1qNSi.js → sessions-bztP6lN1.js} +6 -6
- package/dist/{sessions-helpers-9A3GpP1C.js → sessions-helpers-Ctko7_ZU.js} +3 -3
- package/dist/{sessions-helpers-BHv8itwp.js → sessions-helpers-D6BayuvJ.js} +3 -3
- package/dist/{sessions-helpers-DKduybhL.js → sessions-helpers-DpKh-EgX.js} +3 -3
- package/dist/{sessions-history-tool-B4QAi02g.js → sessions-history-tool-BtLEW8Jq.js} +5 -5
- package/dist/{sessions-history-tool-Dp7-TyAD.js → sessions-history-tool-DlKTVhCD.js} +5 -5
- package/dist/{sessions-history-tool-CbDHBInr.js → sessions-history-tool-DnxZRMF3.js} +5 -5
- package/dist/{sessions-list-tool-Doz90bAO.js → sessions-list-tool-BGmjNjoA.js} +5 -5
- package/dist/{sessions-list-tool-DM7nEN-u.js → sessions-list-tool-DSB6_hFi.js} +5 -5
- package/dist/{sessions-list-tool-C2P-REih.js → sessions-list-tool-OP5IQOE0.js} +5 -5
- package/dist/{sessions-send-tool-D_SpTEzR.js → sessions-send-tool-BF8lKSLy.js} +6 -6
- package/dist/{sessions-send-tool-CsvXXZ6X.js → sessions-send-tool-C1WMGH6W.js} +6 -6
- package/dist/{sessions-send-tool-Sl05Rc1o.js → sessions-send-tool-CG8A-kW5.js} +5 -5
- package/dist/{sessions-spawn-tool-CtVdtdxy.js → sessions-spawn-tool-BD6XdQ4G.js} +1 -1
- package/dist/{sessions-spawn-tool-Cvd7gZzb.js → sessions-spawn-tool-BE94fv2r.js} +1 -1
- package/dist/{sessions-spawn-tool-rhrbdrHi.js → sessions-spawn-tool-DRxk6sWZ.js} +1 -1
- package/dist/{shared-DDwwQhyO.js → shared-3xuhqrQ5.js} +2 -2
- package/dist/{shared-7xAh_DUw.js → shared-CCaYvPXV.js} +2 -2
- package/dist/{skills-cli-Csm1MWLY.js → skills-cli-CQ8fYddY.js} +2 -2
- package/dist/{skills-cli-BYDuIUBN.js → skills-cli-D-V0vRgX.js} +2 -2
- package/dist/{status-DJ3pP2oq.js → status-BeasmhMH.js} +13 -13
- package/dist/{status-CUiB4K9g.js → status-D8c6C5Z0.js} +3 -3
- package/dist/{status-CsflFo5K.js → status-DHuWnwac.js} +3 -3
- package/dist/{status-C42P0GTx.js → status-DbOwDhDe.js} +14 -14
- package/dist/{status.update-Dzkf5M1l.js → status.update-otfuSKpG.js} +1 -1
- package/dist/{status.update-Oa1Q7aKY.js → status.update-ww09PQZI.js} +1 -1
- package/dist/{subagent-registry-DPNFbdCM.js → subagent-registry-BHdRG10Z.js} +34 -32
- package/dist/{subagents-tool-BHleIh5_.js → subagents-tool-CpBMVS4i.js} +6 -6
- package/dist/{subagents-tool-Bhv8IWCj.js → subagents-tool-DIxAhxWP.js} +6 -6
- package/dist/{subagents-tool-DTt0oCJj.js → subagents-tool-h2WCtDtU.js} +6 -6
- package/dist/{system-cli-qKT31zzS.js → system-cli-C7sjnpqK.js} +1 -1
- package/dist/{system-cli-CWLXAiEM.js → system-cli-DP_wysY-.js} +1 -1
- package/dist/{systemd-hints-DPqwVMdw.js → systemd-hints-BnL2sVfy.js} +1 -1
- package/dist/{systemd-hints-OqapG2rD.js → systemd-hints-DEXpKBnF.js} +1 -1
- package/dist/{tables-CFTMokfs.js → tables-Cu2OX2r-.js} +1 -1
- package/dist/{tables-KrPYa57V.js → tables-DMdQO81Y.js} +1 -1
- package/dist/{targets-D6ZbcM7a.js → targets-By4KtyZv.js} +1 -1
- package/dist/{targets-BZDxvcL1.js → targets-DypSB4K6.js} +2 -2
- package/dist/{targets-DZBGTWw3.js → targets-UmV1VAkB.js} +1 -1
- package/dist/{tool-index-jbcu4uIg.js → tool-index-BtpJk78_.js} +1 -1
- package/dist/{tool-index-CSvXEUhV.js → tool-index-BwKMLu1r.js} +1 -1
- package/dist/{tool-index-DT6m2Vqq.js → tool-index-CEYMGFrO.js} +1 -1
- package/dist/{tool-policy-Cn0_ZqFk.js → tool-policy-CGuZzs9F.js} +2 -0
- package/dist/{tools-cli-DLtFAFDn.js → tools-cli-B13gsec8.js} +3 -3
- package/dist/{tools-cli-B9MDDYcf.js → tools-cli-BJ_zWgqf.js} +3 -3
- package/dist/{tts-CVpT5DDx.js → tts-CdyriGYN.js} +2 -2
- package/dist/{tts-DeWH-9iT.js → tts-DH1gVM5t.js} +34 -1
- package/dist/{tts-CYgPcpBG.js → tts-EAcO1Hwe.js} +2 -2
- package/dist/{tts-tool-Dk4NGcJh.js → tts-tool-BBIMu7X2.js} +3 -3
- package/dist/{tts-tool-CCnLadXB.js → tts-tool-DO_F3ZME.js} +3 -3
- package/dist/{tts-tool-BI70cNjf.js → tts-tool-oG4FOqod.js} +3 -3
- package/dist/{tui-AbgutQhU.js → tui-CvQjFLn2.js} +6 -13
- package/dist/{tui-C0meZtnL.js → tui-CyKvw7SL.js} +6 -13
- package/dist/{tui-cli-nGiXl6QC.js → tui-cli-DROBYt8G.js} +1 -1
- package/dist/{tui-cli-WzVsHu23.js → tui-cli-PQR9JVFA.js} +1 -1
- package/dist/{update-cli-zBj3N2GH.js → update-cli-DsNQjCBa.js} +8 -8
- package/dist/{update-cli-BFHuprZY.js → update-cli-GDRvdoj2.js} +8 -8
- package/dist/{validation-Tg8YP6Zn.js → validation-DAS7vvMM.js} +1 -0
- package/dist/{validation-Crc6Dwkp.js → validation-DoqW0cF4.js} +1 -0
- package/dist/{web-CBStYp_x.js → web-Bqx30F6C.js} +12 -12
- package/dist/web-DKofD48i.js +2 -0
- package/dist/{web-search-Ba6vR31X.js → web-search-BGzVmln0.js} +4 -4
- package/dist/{web-search-buicdjg7.js → web-search-BXe6QGYe.js} +4 -4
- package/dist/{web-search-ZWILjbUF.js → web-search-CGnEgHNH.js} +4 -4
- package/dist/{webhooks-cli-CbewtsqL.js → webhooks-cli-DMfQ_Sq0.js} +4 -4
- package/dist/{webhooks-cli-Dacy8QAQ.js → webhooks-cli-wUMz0eSs.js} +4 -4
- package/dist/{workspace-dirs-Bxd48BAf.js → workspace-dirs-Duw92DA5.js} +4 -4
- package/extensions/alert-watcher/index.js +33 -0
- package/extensions/bluebubbles/index.js +1 -0
- package/extensions/feishu/index.js +1 -0
- package/extensions/flows/index.js +34 -0
- package/extensions/gmail-calendar/index.js +201 -100
- package/extensions/gmail-calendar/index.ts +4 -0
- package/extensions/gmail-calendar/src/pulse-tools.test.ts +14 -0
- package/extensions/gmail-calendar/src/pulse-tools.ts +63 -0
- package/extensions/googlechat/index.js +1 -0
- package/extensions/irc/index.js +1 -0
- package/extensions/llm-task/index.js +33 -0
- package/extensions/matrix/{credentials-BiYGX26F.mjs → credentials-B_Avjvsy.mjs} +1 -0
- package/extensions/matrix/index.js +3 -3
- package/extensions/matrix/{matrix-Dqf7qlT1.mjs → matrix-Dy31zmus.mjs} +2 -2
- package/extensions/matrix/{resolve-targets-BPyBSXgs.mjs → resolve-targets-Bv0B2AJv.mjs} +2 -2
- package/extensions/mattermost/index.js +1 -0
- package/extensions/meta-graph/index.js +43 -3
- package/extensions/meta-graph/minion.manifest.ts +3 -0
- package/extensions/meta-graph/minion.plugin.json +7 -1
- package/extensions/meta-graph/src/channels/messaging-platform.ts +66 -1
- package/extensions/meta-graph/src/channels/shared.ts +21 -0
- package/extensions/nextcloud-talk/index.js +1 -0
- package/extensions/tlon/index.js +33 -0
- package/extensions/wati/index.js +1 -0
- package/extensions/weixin/index.js +1 -0
- package/extensions/zalo/index.js +1 -0
- package/extensions/zalouser/index.js +1 -0
- package/package.json +1 -1
- package/dist/daemon-install-helpers-C_vUbY3B.js +0 -2
- package/dist/daemon-install-helpers-DsVKYy7S.js +0 -2
- package/dist/doctor-completion-CrVVU5pA.js +0 -2
- package/dist/doctor-completion-DF48nvUw.js +0 -2
- 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(),
|
package/extensions/irc/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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": "
|
|
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
|
-
|
|
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(),
|
package/extensions/tlon/index.js
CHANGED
|
@@ -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
|
}
|
package/extensions/wati/index.js
CHANGED
|
@@ -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(),
|
package/extensions/zalo/index.js
CHANGED
|
@@ -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.
|
|
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",
|
package/dist/web-DftwF1B1.js
DELETED