abtars 0.3.4-alpha.8 → 0.3.4

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 (335) hide show
  1. package/bundle/{_registry.generated-YP5GLSG7.js → _registry.generated-AVR7DK2A.js} +15 -15
  2. package/bundle/{abmind-lazy-7Z44NODV.js → abmind-lazy-E3YCFKQ5.js} +15 -5
  3. package/bundle/abtars-browser.js +4 -4
  4. package/bundle/abtars-cli.js +23 -13
  5. package/bundle/abtars-cli.js.map +2 -2
  6. package/bundle/abtars-restart.js +3 -3
  7. package/bundle/abtars-task.js +3 -3
  8. package/bundle/abtars.js +385 -466
  9. package/bundle/abtars.js.map +4 -4
  10. package/bundle/{acp-raw-client-E6FM45NC.js → acp-raw-client-UCNK3OTU.js} +2 -2
  11. package/bundle/{action-gate-G2V47NHW.js → action-gate-V4FCBHFB.js} +2 -2
  12. package/bundle/{agent-api-adapter-WRGEQ6DV.js → agent-api-adapter-7HEPYSIN.js} +3 -3
  13. package/bundle/{agent-api-rate-limit-WCFXJMGY.js → agent-api-rate-limit-RZSAM3SW.js} +4 -4
  14. package/bundle/{agent-registry-GHNG2PH3.js → agent-registry-46A2R5KP.js} +7 -7
  15. package/bundle/{bootstrap-PZIDBPEJ.js → bootstrap-MIHJJSWU.js} +2 -2
  16. package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
  17. package/bundle/{browser-D3LZV7ZK.js → browser-F6BCWJWW.js} +6 -6
  18. package/bundle/{budget-45QOBDWA.js → budget-WUM3SPKW.js} +3 -3
  19. package/bundle/{capability-JFWX3IQF.js → capability-QVRKGRFC.js} +5 -5
  20. package/bundle/{chunk-YSKCQH6E.js → chunk-2IYJ4I66.js} +2 -2
  21. package/bundle/{chunk-W2R2HFOQ.js → chunk-2NLUT5S2.js} +6 -6
  22. package/bundle/chunk-3BG3AIDP.js +191 -0
  23. package/bundle/chunk-3BG3AIDP.js.map +7 -0
  24. package/bundle/{chunk-OKAQICWY.js → chunk-3GQX34S2.js} +3 -3
  25. package/bundle/{chunk-QROWBWLL.js → chunk-3XZ773BS.js} +2 -2
  26. package/bundle/{chunk-DYBW4XXL.js → chunk-467SRLLR.js} +2 -2
  27. package/bundle/{chunk-374NCXFZ.js → chunk-4AILRHUI.js} +10 -8
  28. package/bundle/chunk-4AILRHUI.js.map +7 -0
  29. package/bundle/{chunk-GPZNXY2U.js → chunk-4S3H4OK7.js} +4 -4
  30. package/bundle/{chunk-NDCRWEEJ.js → chunk-4Y5MJQRE.js} +6 -6
  31. package/bundle/{chunk-FRKW6LWB.js → chunk-55UWKI5C.js} +3 -3
  32. package/bundle/{chunk-7JN2MMU7.js → chunk-5PNJFDSW.js} +8 -8
  33. package/bundle/{chunk-LUNA6PM5.js → chunk-5RVOEFGT.js} +4 -2
  34. package/bundle/{chunk-LUNA6PM5.js.map → chunk-5RVOEFGT.js.map} +2 -2
  35. package/bundle/{chunk-OXTSWQCX.js → chunk-5Y3FJ2Y7.js} +2 -2
  36. package/bundle/{chunk-TMUYFERL.js → chunk-6B5ZFUPD.js} +2 -2
  37. package/bundle/{chunk-65VCEC32.js → chunk-6PA5JBUU.js} +2 -2
  38. package/bundle/{chunk-C7K6VZNY.js → chunk-BNXV7SZI.js} +21 -12
  39. package/bundle/chunk-BNXV7SZI.js.map +7 -0
  40. package/bundle/{chunk-AFREM7FX.js → chunk-CK7YTA2F.js} +2 -2
  41. package/bundle/{chunk-NRUSRJXR.js → chunk-DZJ5QZFD.js} +2 -2
  42. package/bundle/{chunk-YRSMGJFP.js → chunk-E67KESEG.js} +2 -2
  43. package/bundle/{chunk-ZV4IWKDJ.js → chunk-E7XD5UGB.js} +3 -3
  44. package/bundle/{chunk-CXXU3HAU.js → chunk-EAX5ZZUL.js} +63 -39
  45. package/bundle/chunk-EAX5ZZUL.js.map +7 -0
  46. package/bundle/{chunk-PEDX56EL.js → chunk-EFGBM555.js} +2 -2
  47. package/bundle/{chunk-EQSG2CRM.js → chunk-FGYDIX54.js} +22 -15
  48. package/bundle/chunk-FGYDIX54.js.map +7 -0
  49. package/bundle/{chunk-YPAQEQSC.js → chunk-GF6NVNA7.js} +15 -5
  50. package/bundle/chunk-GF6NVNA7.js.map +7 -0
  51. package/bundle/{chunk-UNM3OXHB.js → chunk-HGSHCQ5F.js} +110 -72
  52. package/bundle/{chunk-UNM3OXHB.js.map → chunk-HGSHCQ5F.js.map} +2 -2
  53. package/bundle/{chunk-VXCETPZU.js → chunk-IMIGG5EO.js} +39 -39
  54. package/bundle/chunk-IMIGG5EO.js.map +7 -0
  55. package/bundle/{chunk-P2K2K6XL.js → chunk-ITOFPJAV.js} +44 -32
  56. package/bundle/chunk-ITOFPJAV.js.map +7 -0
  57. package/bundle/{chunk-75ATTOW4.js → chunk-IY6UKLPS.js} +3 -3
  58. package/bundle/{chunk-EUZDKV3C.js → chunk-J4RUFAPK.js} +3 -3
  59. package/bundle/{chunk-HZDLFLRP.js → chunk-J7DRPVMU.js} +35 -5
  60. package/bundle/chunk-J7DRPVMU.js.map +7 -0
  61. package/bundle/{chunk-EGL6UMAO.js → chunk-JG4BKXBN.js} +7 -1
  62. package/bundle/chunk-JG4BKXBN.js.map +7 -0
  63. package/bundle/{chunk-N4EB6LA7.js → chunk-JLWYPGWI.js} +5 -5
  64. package/bundle/{chunk-5QUTMUIK.js → chunk-JXYWDAHD.js} +12 -12
  65. package/bundle/{chunk-GRVWZO4C.js → chunk-KOSFXW2S.js} +24 -3
  66. package/bundle/{chunk-GRVWZO4C.js.map → chunk-KOSFXW2S.js.map} +1 -1
  67. package/bundle/{chunk-M3JEX6L4.js → chunk-L72RIPEC.js} +9 -9
  68. package/bundle/{chunk-TEFZ4JA4.js → chunk-NHPLD3C7.js} +2 -2
  69. package/bundle/{chunk-2KC5G3EA.js → chunk-OWUO5RS3.js} +5 -5
  70. package/bundle/{chunk-4MULJ5SS.js → chunk-OY4Q6AMY.js} +71 -49
  71. package/bundle/chunk-OY4Q6AMY.js.map +7 -0
  72. package/bundle/{chunk-WBTJ2E62.js → chunk-P3NODAHF.js} +2 -5
  73. package/bundle/{chunk-WBTJ2E62.js.map → chunk-P3NODAHF.js.map} +2 -2
  74. package/bundle/{chunk-SMPHE3ZM.js → chunk-PB5GF4FG.js} +215 -163
  75. package/bundle/chunk-PB5GF4FG.js.map +7 -0
  76. package/bundle/{chunk-WYHGNI56.js → chunk-PMD5BLFS.js} +6 -6
  77. package/bundle/{chunk-URQPDCK5.js → chunk-Q66LQMMZ.js} +3 -3
  78. package/bundle/{chunk-IHYKTDIP.js → chunk-SC2Y5NR2.js} +36 -119
  79. package/bundle/chunk-SC2Y5NR2.js.map +7 -0
  80. package/bundle/chunk-SFL4EPCZ.js +555 -0
  81. package/bundle/chunk-SFL4EPCZ.js.map +7 -0
  82. package/bundle/{chunk-LDUOOKQY.js → chunk-SJPUNDZ3.js} +5 -5
  83. package/bundle/{chunk-LDUOOKQY.js.map → chunk-SJPUNDZ3.js.map} +1 -1
  84. package/bundle/{chunk-JQDJPUHM.js → chunk-TWB2ZGVH.js} +2 -2
  85. package/bundle/{chunk-IJT4KWXT.js → chunk-U4U47YE7.js} +2 -2
  86. package/bundle/{chunk-2FAZIA37.js → chunk-W546CU3A.js} +3 -3
  87. package/bundle/chunk-WC5O5KOE.js +211 -0
  88. package/bundle/chunk-WC5O5KOE.js.map +7 -0
  89. package/bundle/{chunk-JNIHEDKF.js → chunk-XPWYDNWL.js} +2 -2
  90. package/bundle/{chunk-GWILHZPT.js → chunk-XRTXYN66.js} +10 -7
  91. package/bundle/{chunk-GWILHZPT.js.map → chunk-XRTXYN66.js.map} +2 -2
  92. package/bundle/{chunk-EFJVUJBE.js → chunk-Y5FEFKGM.js} +6 -6
  93. package/bundle/chunk-YJZE4OK3.js +169 -0
  94. package/bundle/chunk-YJZE4OK3.js.map +7 -0
  95. package/bundle/{chunk-GVM5YU5I.js → chunk-Z4FZPB42.js} +2 -2
  96. package/bundle/{chunk-7BSQ5UQO.js → chunk-ZSIDQ66D.js} +3 -3
  97. package/bundle/{chunk-XX6BGTPO.js → chunk-ZZZCJJEO.js} +4 -4
  98. package/bundle/{commands-OIISYHTD.js → commands-2ZW6CMLC.js} +17 -16
  99. package/bundle/{config-M3P5IOAI.js → config-YMY5YHKN.js} +6 -6
  100. package/bundle/{context-2RJHC2LE.js → context-CL2RSLII.js} +7 -5
  101. package/bundle/context-CL2RSLII.js.map +7 -0
  102. package/bundle/{daemon-TB23FFWY.js → daemon-D7SU63OY.js} +3 -3
  103. package/bundle/{delegation-tools-YATZFKYO.js → delegation-tools-WS7Z56KZ.js} +12 -12
  104. package/bundle/{deploy-T6R45OZJ.js → deploy-AMTVKIMU.js} +2 -2
  105. package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
  106. package/bundle/{direct-api-transport-S2RDH2I7.js → direct-api-transport-QNNY2WWP.js} +51 -32
  107. package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
  108. package/bundle/{discord-adapter-UTXUWX3A.js → discord-adapter-ABAD56Y2.js} +21 -20
  109. package/bundle/{discord-adapter-UTXUWX3A.js.map → discord-adapter-ABAD56Y2.js.map} +1 -1
  110. package/bundle/{dns-wakeup-IDOJIXBX.js → dns-wakeup-V3LEFXPE.js} +9 -33
  111. package/bundle/dns-wakeup-V3LEFXPE.js.map +7 -0
  112. package/bundle/{doctor-probes-B54JFIW3.js → doctor-probes-O6YI6XSZ.js} +6 -2
  113. package/bundle/{env-schema-4JXQUOH4.js → env-schema-B5RB32DC.js} +3 -3
  114. package/bundle/{gossip-3C3BSNPN.js → gossip-SKRCPOBS.js} +9 -5
  115. package/bundle/{guardrails-DL7ZSWVN.js → guardrails-64GQ5Y5K.js} +4 -4
  116. package/bundle/{heartbeat-system-MVTRS4GP.js → heartbeat-system-X4MUTKJD.js} +6 -6
  117. package/bundle/{heartbeat-tier3-6KH45CL6.js → heartbeat-tier3-2PTPWEQQ.js} +53 -76
  118. package/bundle/heartbeat-tier3-2PTPWEQQ.js.map +7 -0
  119. package/bundle/{hook-system-M3POLUIB.js → hook-system-YB635OC4.js} +3 -3
  120. package/bundle/{hotskills-FWX4QI7V.js → hotskills-Q75D2DK3.js} +5 -5
  121. package/bundle/{install-OS3CU7NF.js → install-RFKKFSGS.js} +17 -30
  122. package/bundle/install-RFKKFSGS.js.map +7 -0
  123. package/bundle/{install-manifest-5PPWMD2W.js → install-manifest-J7ICPCJN.js} +2 -2
  124. package/bundle/{irc-adapter-PTTZD32W.js → irc-adapter-TVEV4R6H.js} +3 -3
  125. package/bundle/{irc-config-CP7ZMUOX.js → irc-config-M676FOFI.js} +4 -4
  126. package/bundle/{kanban-board-M326B2XJ.js → kanban-board-DLEJUCNN.js} +9 -7
  127. package/bundle/{kanban-channel-IJ52OMNA.js → kanban-channel-XOLUHJZJ.js} +6 -6
  128. package/bundle/kanban-delivery-C4QPBNPX.js +45 -0
  129. package/bundle/kanban-delivery-C4QPBNPX.js.map +7 -0
  130. package/bundle/{lazy-require-KCRVT4SI.js → lazy-require-JKQSALXN.js} +3 -3
  131. package/bundle/{logger-OWCSNYCA.js → logger-3EGHBD4R.js} +2 -2
  132. package/bundle/{main-chat-ZNUZCTNS.js → main-chat-3H63REKK.js} +4 -4
  133. package/bundle/{master-user-HSKM4ZFN.js → master-user-MUBUP3KD.js} +5 -5
  134. package/bundle/{media-utils-3ZYOD7SK.js → media-utils-HUUIALAJ.js} +3 -3
  135. package/bundle/{message-pipeline-AUIUNM5R.js → message-pipeline-GRDRWONR.js} +17 -16
  136. package/bundle/meta.json +2773 -2241
  137. package/bundle/{metrics-collector-L3VPEHII.js → metrics-collector-YMUGY3PI.js} +31 -2
  138. package/bundle/metrics-collector-YMUGY3PI.js.map +7 -0
  139. package/bundle/{model-health-registry-MLEIZSTV.js → model-health-registry-QADMFQFQ.js} +2 -2
  140. package/bundle/{nerve-IGSXBKZZ.js → nerve-QPAEBRKX.js} +3 -3
  141. package/bundle/{notification-BFSIEECG.js → notification-3JICGXWU.js} +6 -6
  142. package/bundle/{openrouter-credits-NTVZDRYM.js → openrouter-credits-7NEIPYJN.js} +3 -3
  143. package/bundle/{orc-tools-TOD4WHTM.js → orc-tools-UZVPONKY.js} +5 -3
  144. package/bundle/{peer-auth-QC4EF2PM.js → peer-auth-RI43DKJE.js} +24 -15
  145. package/bundle/{peer-client-RGEU5HOK.js → peer-client-UITTMWJ2.js} +34 -29
  146. package/bundle/peer-client-UITTMWJ2.js.map +7 -0
  147. package/bundle/{peer-config-TN55LFDC.js → peer-config-URM7DCW6.js} +9 -4
  148. package/bundle/{peer-transport-5VKK2I7P.js → peer-transport-SI7I72DB.js} +12 -10
  149. package/bundle/{phase-transport-FS6NL4A5.js → phase-transport-ESWWACZI.js} +17 -17
  150. package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
  151. package/bundle/{reconciler-NZ4O4BCP.js → reconciler-IEUJXJN2.js} +12 -12
  152. package/bundle/{restore-IFHPI7I7.js → restore-FARTGLQQ.js} +3 -3
  153. package/bundle/{rollback-ANRI3T5Z.js → rollback-GEWPZABG.js} +2 -2
  154. package/bundle/{sandbox-runtime-QROWHDCS.js → sandbox-runtime-DV6E25J6.js} +2 -2
  155. package/bundle/{self-healer-utils-IFAYOQO2.js → self-healer-utils-P4SKNNEM.js} +3 -3
  156. package/bundle/{sha-tracker-ZWBP6CIJ.js → sha-tracker-77SHLYNY.js} +3 -3
  157. package/bundle/{skill-session-VJXTKOKL.js → skill-session-5HSMXY54.js} +3 -3
  158. package/bundle/{skill-stats-JORH5DGM.js → skill-stats-MI3RSWWL.js} +4 -4
  159. package/bundle/{skill-watcher-E4MGLKLS.js → skill-watcher-5L7JE6TN.js} +4 -4
  160. package/bundle/{sleep-BEWAUFCL.js → sleep-I4JFASCY.js} +11 -11
  161. package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
  162. package/bundle/{spin-E3ZDEDKT.js → spin-VHNGNWTD.js} +11 -11
  163. package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
  164. package/bundle/{spin-types-OIE67MJK.js → spin-types-C5KOQOPD.js} +7 -3
  165. package/bundle/{sse-parser-anthropic-A6R4Z2TB.js → sse-parser-anthropic-MMTVWHLI.js} +3 -3
  166. package/bundle/{sse-parser-responses-HSZY3QGJ.js → sse-parser-responses-3AOFN64C.js} +3 -3
  167. package/bundle/{ssrf-guard-O6SHIK6Q.js → ssrf-guard-U2JA72TC.js} +3 -3
  168. package/bundle/{start-7QZIWO3S.js → start-H5IUFAWF.js} +4 -2
  169. package/bundle/{start-7QZIWO3S.js.map → start-H5IUFAWF.js.map} +2 -2
  170. package/bundle/{stt-LGVPXMVR.js → stt-PSOPPBV4.js} +4 -4
  171. package/bundle/{system-status-FAVNIUFJ.js → system-status-4LYGOFNO.js} +38 -24
  172. package/bundle/system-status-4LYGOFNO.js.map +7 -0
  173. package/bundle/{task-store-W5BFIAIH.js → task-store-MNCW42BW.js} +4 -4
  174. package/bundle/{telegram-adapter-4TX7QWKC.js → telegram-adapter-O6KIZDY6.js} +62 -45
  175. package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
  176. package/bundle/{tool-registry-7FK3OQGL.js → tool-registry-JJMWCQKZ.js} +26 -24
  177. package/bundle/{tool-sandbox-4UC6GAKA.js → tool-sandbox-CNL6V6IH.js} +4 -4
  178. package/bundle/{transport-config-KBF5W2DP.js → transport-config-6MB2K2XC.js} +7 -7
  179. package/bundle/tribe-GDTFYJTK.js +111 -0
  180. package/bundle/tribe-GDTFYJTK.js.map +7 -0
  181. package/bundle/{update-CKFP6LBE.js → update-HGQAOC5L.js} +3 -3
  182. package/bundle/{usage-tracker-NXD364VX.js → usage-tracker-SR4BI6ZT.js} +2 -2
  183. package/bundle/{user-registry-35BW4XKM.js → user-registry-4PACZJIJ.js} +4 -4
  184. package/bundle/wire-platform-KKPWNNNQ.js +88 -0
  185. package/bundle/wire-platform-KKPWNNNQ.js.map +7 -0
  186. package/bundle/ws-peer-client-U3NNPOK7.js +370 -0
  187. package/bundle/ws-peer-client-U3NNPOK7.js.map +7 -0
  188. package/package.json +1 -1
  189. package/scripts/abtars-watchdog.sh +1 -5
  190. package/scripts/emergency-deploy.sh +2 -2
  191. package/scripts/emergency-update.sh +36 -37
  192. package/bundle/chunk-374NCXFZ.js.map +0 -7
  193. package/bundle/chunk-4MULJ5SS.js.map +0 -7
  194. package/bundle/chunk-4S554KLW.js +0 -105
  195. package/bundle/chunk-4S554KLW.js.map +0 -7
  196. package/bundle/chunk-C7K6VZNY.js.map +0 -7
  197. package/bundle/chunk-CXXU3HAU.js.map +0 -7
  198. package/bundle/chunk-EGL6UMAO.js.map +0 -7
  199. package/bundle/chunk-EQSG2CRM.js.map +0 -7
  200. package/bundle/chunk-HT2BPTZY.js +0 -241
  201. package/bundle/chunk-HT2BPTZY.js.map +0 -7
  202. package/bundle/chunk-HZDLFLRP.js.map +0 -7
  203. package/bundle/chunk-IHYKTDIP.js.map +0 -7
  204. package/bundle/chunk-IKUZPMVA.js +0 -82
  205. package/bundle/chunk-IKUZPMVA.js.map +0 -7
  206. package/bundle/chunk-P2K2K6XL.js.map +0 -7
  207. package/bundle/chunk-PU5HSKWH.js +0 -257
  208. package/bundle/chunk-PU5HSKWH.js.map +0 -7
  209. package/bundle/chunk-RWRRGE4U.js +0 -72
  210. package/bundle/chunk-RWRRGE4U.js.map +0 -7
  211. package/bundle/chunk-SMPHE3ZM.js.map +0 -7
  212. package/bundle/chunk-VUIX5AGB.js +0 -65
  213. package/bundle/chunk-VUIX5AGB.js.map +0 -7
  214. package/bundle/chunk-VXCETPZU.js.map +0 -7
  215. package/bundle/chunk-YPAQEQSC.js.map +0 -7
  216. package/bundle/context-2RJHC2LE.js.map +0 -7
  217. package/bundle/direct-api-transport-S2RDH2I7.js.map +0 -7
  218. package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
  219. package/bundle/heartbeat-tier3-6KH45CL6.js.map +0 -7
  220. package/bundle/install-OS3CU7NF.js.map +0 -7
  221. package/bundle/metrics-collector-L3VPEHII.js.map +0 -7
  222. package/bundle/peer-client-RGEU5HOK.js.map +0 -7
  223. package/bundle/peer-jwt-NCCPXJRX.js +0 -18
  224. package/bundle/stream-single-RFJNUTL6.js +0 -34
  225. package/bundle/stream-single-RFJNUTL6.js.map +0 -7
  226. package/bundle/system-status-FAVNIUFJ.js.map +0 -7
  227. package/bundle/telegram-adapter-4TX7QWKC.js.map +0 -7
  228. package/bundle/user-registry-35BW4XKM.js.map +0 -7
  229. package/bundle/ws-peer-client-AIXCXF7V.js +0 -173
  230. package/bundle/ws-peer-client-AIXCXF7V.js.map +0 -7
  231. /package/bundle/{_registry.generated-YP5GLSG7.js.map → _registry.generated-AVR7DK2A.js.map} +0 -0
  232. /package/bundle/{abmind-lazy-7Z44NODV.js.map → abmind-lazy-E3YCFKQ5.js.map} +0 -0
  233. /package/bundle/{acp-raw-client-E6FM45NC.js.map → acp-raw-client-UCNK3OTU.js.map} +0 -0
  234. /package/bundle/{action-gate-G2V47NHW.js.map → action-gate-V4FCBHFB.js.map} +0 -0
  235. /package/bundle/{agent-api-adapter-WRGEQ6DV.js.map → agent-api-adapter-7HEPYSIN.js.map} +0 -0
  236. /package/bundle/{agent-api-rate-limit-WCFXJMGY.js.map → agent-api-rate-limit-RZSAM3SW.js.map} +0 -0
  237. /package/bundle/{agent-registry-GHNG2PH3.js.map → agent-registry-46A2R5KP.js.map} +0 -0
  238. /package/bundle/{bootstrap-PZIDBPEJ.js.map → bootstrap-MIHJJSWU.js.map} +0 -0
  239. /package/bundle/{bridge-lock-transport-4ZH7QTJP.js.map → bridge-lock-transport-7RSN7OLJ.js.map} +0 -0
  240. /package/bundle/{browser-D3LZV7ZK.js.map → browser-F6BCWJWW.js.map} +0 -0
  241. /package/bundle/{budget-45QOBDWA.js.map → budget-WUM3SPKW.js.map} +0 -0
  242. /package/bundle/{capability-JFWX3IQF.js.map → capability-QVRKGRFC.js.map} +0 -0
  243. /package/bundle/{chunk-YSKCQH6E.js.map → chunk-2IYJ4I66.js.map} +0 -0
  244. /package/bundle/{chunk-W2R2HFOQ.js.map → chunk-2NLUT5S2.js.map} +0 -0
  245. /package/bundle/{chunk-OKAQICWY.js.map → chunk-3GQX34S2.js.map} +0 -0
  246. /package/bundle/{chunk-QROWBWLL.js.map → chunk-3XZ773BS.js.map} +0 -0
  247. /package/bundle/{chunk-DYBW4XXL.js.map → chunk-467SRLLR.js.map} +0 -0
  248. /package/bundle/{chunk-GPZNXY2U.js.map → chunk-4S3H4OK7.js.map} +0 -0
  249. /package/bundle/{chunk-NDCRWEEJ.js.map → chunk-4Y5MJQRE.js.map} +0 -0
  250. /package/bundle/{chunk-FRKW6LWB.js.map → chunk-55UWKI5C.js.map} +0 -0
  251. /package/bundle/{chunk-7JN2MMU7.js.map → chunk-5PNJFDSW.js.map} +0 -0
  252. /package/bundle/{chunk-OXTSWQCX.js.map → chunk-5Y3FJ2Y7.js.map} +0 -0
  253. /package/bundle/{chunk-TMUYFERL.js.map → chunk-6B5ZFUPD.js.map} +0 -0
  254. /package/bundle/{chunk-65VCEC32.js.map → chunk-6PA5JBUU.js.map} +0 -0
  255. /package/bundle/{chunk-AFREM7FX.js.map → chunk-CK7YTA2F.js.map} +0 -0
  256. /package/bundle/{chunk-NRUSRJXR.js.map → chunk-DZJ5QZFD.js.map} +0 -0
  257. /package/bundle/{chunk-YRSMGJFP.js.map → chunk-E67KESEG.js.map} +0 -0
  258. /package/bundle/{chunk-ZV4IWKDJ.js.map → chunk-E7XD5UGB.js.map} +0 -0
  259. /package/bundle/{chunk-PEDX56EL.js.map → chunk-EFGBM555.js.map} +0 -0
  260. /package/bundle/{chunk-75ATTOW4.js.map → chunk-IY6UKLPS.js.map} +0 -0
  261. /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
  262. /package/bundle/{chunk-N4EB6LA7.js.map → chunk-JLWYPGWI.js.map} +0 -0
  263. /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
  264. /package/bundle/{chunk-M3JEX6L4.js.map → chunk-L72RIPEC.js.map} +0 -0
  265. /package/bundle/{chunk-TEFZ4JA4.js.map → chunk-NHPLD3C7.js.map} +0 -0
  266. /package/bundle/{chunk-2KC5G3EA.js.map → chunk-OWUO5RS3.js.map} +0 -0
  267. /package/bundle/{chunk-WYHGNI56.js.map → chunk-PMD5BLFS.js.map} +0 -0
  268. /package/bundle/{chunk-URQPDCK5.js.map → chunk-Q66LQMMZ.js.map} +0 -0
  269. /package/bundle/{chunk-JQDJPUHM.js.map → chunk-TWB2ZGVH.js.map} +0 -0
  270. /package/bundle/{chunk-IJT4KWXT.js.map → chunk-U4U47YE7.js.map} +0 -0
  271. /package/bundle/{chunk-2FAZIA37.js.map → chunk-W546CU3A.js.map} +0 -0
  272. /package/bundle/{chunk-JNIHEDKF.js.map → chunk-XPWYDNWL.js.map} +0 -0
  273. /package/bundle/{chunk-EFJVUJBE.js.map → chunk-Y5FEFKGM.js.map} +0 -0
  274. /package/bundle/{chunk-GVM5YU5I.js.map → chunk-Z4FZPB42.js.map} +0 -0
  275. /package/bundle/{chunk-7BSQ5UQO.js.map → chunk-ZSIDQ66D.js.map} +0 -0
  276. /package/bundle/{chunk-XX6BGTPO.js.map → chunk-ZZZCJJEO.js.map} +0 -0
  277. /package/bundle/{commands-OIISYHTD.js.map → commands-2ZW6CMLC.js.map} +0 -0
  278. /package/bundle/{config-M3P5IOAI.js.map → config-YMY5YHKN.js.map} +0 -0
  279. /package/bundle/{daemon-TB23FFWY.js.map → daemon-D7SU63OY.js.map} +0 -0
  280. /package/bundle/{delegation-tools-YATZFKYO.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
  281. /package/bundle/{deploy-T6R45OZJ.js.map → deploy-AMTVKIMU.js.map} +0 -0
  282. /package/bundle/{deps-WVK553KF.js.map → deps-T63AVJKJ.js.map} +0 -0
  283. /package/bundle/{doctor-probes-B54JFIW3.js.map → doctor-probes-O6YI6XSZ.js.map} +0 -0
  284. /package/bundle/{env-schema-4JXQUOH4.js.map → env-schema-B5RB32DC.js.map} +0 -0
  285. /package/bundle/{gossip-3C3BSNPN.js.map → gossip-SKRCPOBS.js.map} +0 -0
  286. /package/bundle/{guardrails-DL7ZSWVN.js.map → guardrails-64GQ5Y5K.js.map} +0 -0
  287. /package/bundle/{heartbeat-system-MVTRS4GP.js.map → heartbeat-system-X4MUTKJD.js.map} +0 -0
  288. /package/bundle/{hook-system-M3POLUIB.js.map → hook-system-YB635OC4.js.map} +0 -0
  289. /package/bundle/{hotskills-FWX4QI7V.js.map → hotskills-Q75D2DK3.js.map} +0 -0
  290. /package/bundle/{install-manifest-5PPWMD2W.js.map → install-manifest-J7ICPCJN.js.map} +0 -0
  291. /package/bundle/{irc-adapter-PTTZD32W.js.map → irc-adapter-TVEV4R6H.js.map} +0 -0
  292. /package/bundle/{irc-config-CP7ZMUOX.js.map → irc-config-M676FOFI.js.map} +0 -0
  293. /package/bundle/{kanban-board-M326B2XJ.js.map → kanban-board-DLEJUCNN.js.map} +0 -0
  294. /package/bundle/{kanban-channel-IJ52OMNA.js.map → kanban-channel-XOLUHJZJ.js.map} +0 -0
  295. /package/bundle/{lazy-require-KCRVT4SI.js.map → lazy-require-JKQSALXN.js.map} +0 -0
  296. /package/bundle/{logger-OWCSNYCA.js.map → logger-3EGHBD4R.js.map} +0 -0
  297. /package/bundle/{main-chat-ZNUZCTNS.js.map → main-chat-3H63REKK.js.map} +0 -0
  298. /package/bundle/{master-user-HSKM4ZFN.js.map → master-user-MUBUP3KD.js.map} +0 -0
  299. /package/bundle/{media-utils-3ZYOD7SK.js.map → media-utils-HUUIALAJ.js.map} +0 -0
  300. /package/bundle/{message-pipeline-AUIUNM5R.js.map → message-pipeline-GRDRWONR.js.map} +0 -0
  301. /package/bundle/{model-health-registry-MLEIZSTV.js.map → model-health-registry-QADMFQFQ.js.map} +0 -0
  302. /package/bundle/{nerve-IGSXBKZZ.js.map → nerve-QPAEBRKX.js.map} +0 -0
  303. /package/bundle/{notification-BFSIEECG.js.map → notification-3JICGXWU.js.map} +0 -0
  304. /package/bundle/{openrouter-credits-NTVZDRYM.js.map → openrouter-credits-7NEIPYJN.js.map} +0 -0
  305. /package/bundle/{orc-tools-TOD4WHTM.js.map → orc-tools-UZVPONKY.js.map} +0 -0
  306. /package/bundle/{peer-auth-QC4EF2PM.js.map → peer-auth-RI43DKJE.js.map} +0 -0
  307. /package/bundle/{peer-config-TN55LFDC.js.map → peer-config-URM7DCW6.js.map} +0 -0
  308. /package/bundle/{peer-jwt-NCCPXJRX.js.map → peer-transport-SI7I72DB.js.map} +0 -0
  309. /package/bundle/{peer-transport-5VKK2I7P.js.map → phase-transport-ESWWACZI.js.map} +0 -0
  310. /package/bundle/{phase-transport-FS6NL4A5.js.map → reconcile-GFDQYNBD.js.map} +0 -0
  311. /package/bundle/{reconciler-NZ4O4BCP.js.map → reconciler-IEUJXJN2.js.map} +0 -0
  312. /package/bundle/{restore-IFHPI7I7.js.map → restore-FARTGLQQ.js.map} +0 -0
  313. /package/bundle/{reconcile-CTFCLQRN.js.map → rollback-GEWPZABG.js.map} +0 -0
  314. /package/bundle/{sandbox-runtime-QROWHDCS.js.map → sandbox-runtime-DV6E25J6.js.map} +0 -0
  315. /package/bundle/{self-healer-utils-IFAYOQO2.js.map → self-healer-utils-P4SKNNEM.js.map} +0 -0
  316. /package/bundle/{rollback-ANRI3T5Z.js.map → sha-tracker-77SHLYNY.js.map} +0 -0
  317. /package/bundle/{skill-session-VJXTKOKL.js.map → skill-session-5HSMXY54.js.map} +0 -0
  318. /package/bundle/{sha-tracker-ZWBP6CIJ.js.map → skill-stats-MI3RSWWL.js.map} +0 -0
  319. /package/bundle/{skill-stats-JORH5DGM.js.map → skill-watcher-5L7JE6TN.js.map} +0 -0
  320. /package/bundle/{skill-watcher-E4MGLKLS.js.map → sleep-I4JFASCY.js.map} +0 -0
  321. /package/bundle/{sleep-BEWAUFCL.js.map → soul-bundle-522C3IRH.js.map} +0 -0
  322. /package/bundle/{soul-bundle-VWAVHCZ6.js.map → spin-VHNGNWTD.js.map} +0 -0
  323. /package/bundle/{spin-notifications-SE2HVZI7.js.map → spin-notifications-7NC5XZEM.js.map} +0 -0
  324. /package/bundle/{spin-E3ZDEDKT.js.map → spin-types-C5KOQOPD.js.map} +0 -0
  325. /package/bundle/{sse-parser-anthropic-A6R4Z2TB.js.map → sse-parser-anthropic-MMTVWHLI.js.map} +0 -0
  326. /package/bundle/{sse-parser-responses-HSZY3QGJ.js.map → sse-parser-responses-3AOFN64C.js.map} +0 -0
  327. /package/bundle/{ssrf-guard-O6SHIK6Q.js.map → ssrf-guard-U2JA72TC.js.map} +0 -0
  328. /package/bundle/{spin-types-OIE67MJK.js.map → stt-PSOPPBV4.js.map} +0 -0
  329. /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
  330. /package/bundle/{task-store-W5BFIAIH.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
  331. /package/bundle/{tool-registry-7FK3OQGL.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
  332. /package/bundle/{tool-sandbox-4UC6GAKA.js.map → transport-config-6MB2K2XC.js.map} +0 -0
  333. /package/bundle/{transport-config-KBF5W2DP.js.map → update-HGQAOC5L.js.map} +0 -0
  334. /package/bundle/{update-CKFP6LBE.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
  335. /package/bundle/{usage-tracker-NXD364VX.js.map → user-registry-4PACZJIJ.js.map} +0 -0
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/platforms/discord/discord-api.ts", "../src/platforms/discord/discord-poller.ts", "../src/platforms/discord/discord-adapter.ts"],
4
4
  "sourcesContent": ["import { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport {\n Client,\n GatewayIntentBits,\n Partials,\n type Message,\n type MessageReaction,\n type User,\n type TextChannel,\n} from \"discord.js\";\nimport { logInfo, logError, logDebug, logWarn } from \"../../components/logger.js\";\n\nconst TAG = \"DiscordApi\";\n\n/**\n * Thin wrapper around discord.js Client.\n * Provides typed methods for Gateway connection, message listening, and sending.\n */\nexport class DiscordApi {\n private readonly client: Client;\n private readonly token: string;\n private ready = false;\n\n constructor(botToken: string) {\n this.token = botToken;\n this.client = new Client({\n intents: [\n GatewayIntentBits.Guilds,\n GatewayIntentBits.GuildMessages,\n GatewayIntentBits.GuildMessageReactions,\n GatewayIntentBits.DirectMessages,\n GatewayIntentBits.MessageContent,\n ],\n partials: [Partials.Channel, Partials.Message, Partials.Reaction],\n });\n\n this.client.on(\"clientReady\", () => {\n this.ready = true;\n logInfo(TAG, `Connected as ${this.client.user?.tag ?? \"unknown\"}`);\n });\n\n this.client.on(\"error\", (err) => {\n logError(TAG, \"Client error\", err);\n });\n }\n\n /** Connect to the Discord Gateway. Resolves when the client is ready. */\n async connect(): Promise<void> {\n logInfo(TAG, \"Connecting to Discord Gateway\u2026\");\n return new Promise<void>((resolve, reject) => {\n const onReady = () => {\n cleanup();\n resolve();\n };\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n const cleanup = () => {\n this.client.removeListener(\"clientReady\", onReady);\n this.client.removeListener(\"error\", onError);\n };\n\n this.client.once(\"clientReady\", onReady);\n this.client.once(\"error\", onError);\n\n this.client.login(this.token).catch((err: unknown) => {\n cleanup();\n reject(err instanceof Error ? err : new Error(String(err)));\n });\n });\n }\n\n /** Register a handler for MESSAGE_CREATE events. */\n onMessage(handler: (message: Message) => void | Promise<void>): void {\n this.client.on(\"messageCreate\", (message) => {\n logDebug(TAG, `Message from ${message.author.tag} in #${message.channel.id}`);\n try {\n const result = handler(message);\n if (result instanceof Promise) {\n result.catch((err: unknown) => {\n logError(TAG, \"Message handler error\", err);\n });\n }\n } catch (err) {\n logError(TAG, \"Message handler error\", err);\n }\n });\n }\n\n /** Register a handler for MESSAGE_REACTION_ADD events. */\n onReaction(handler: (reaction: MessageReaction, user: User) => void | Promise<void>): void {\n this.client.on(\"messageReactionAdd\", async (reaction, user) => {\n if (user.bot) return;\n try {\n if (reaction.partial) await reaction.fetch();\n if (user.partial) await user.fetch();\n } catch (err) { logAndSwallow(TAG, \"fetch reaction/user partial\", err); return; }\n try {\n const result = handler(reaction as MessageReaction, user as User);\n if (result instanceof Promise) result.catch((err: unknown) => logError(TAG, \"Reaction handler error\", err));\n } catch (err) { logError(TAG, \"Reaction handler error\", err); }\n });\n }\n\n /** Register a handler for slash command interactions. */\n onInteraction(handler: (interaction: import(\"discord.js\").ChatInputCommandInteraction) => void | Promise<void>): void {\n this.client.on(\"interactionCreate\", async (interaction) => {\n if (interaction.isChatInputCommand()) {\n try {\n const result = handler(interaction);\n if (result instanceof Promise) result.catch((err: unknown) => logError(TAG, \"Interaction handler error\", err));\n } catch (err) { logError(TAG, \"Interaction handler error\", err); }\n }\n if (interaction.isStringSelectMenu()) {\n this.selectMenuHandlers.get(interaction.customId)?.(interaction);\n }\n });\n }\n\n private selectMenuHandlers = new Map<string, (i: import(\"discord.js\").StringSelectMenuInteraction) => void | Promise<void>>();\n\n onSelectMenu(customId: string, handler: (interaction: import(\"discord.js\").StringSelectMenuInteraction) => void | Promise<void>): void {\n this.selectMenuHandlers.set(customId, handler);\n }\n\n /** Register global application commands. Idempotent \u2014 Discord diffs and updates. */\n async registerCommands(commands: Array<{ name: string; description: string }>): Promise<void> {\n if (!this.client.application) {\n logWarn(TAG, \"Cannot register commands \u2014 application not available\");\n return;\n }\n await this.client.application.commands.set(commands.map(c => ({ name: c.name, description: c.description, type: 1 as const })));\n logInfo(TAG, `Registered ${commands.length} slash commands`);\n }\n\n /** Send a text message to a channel. Returns the sent message ID. */\n async sendMessage(channelId: string, text: string): Promise<string> {\n const channel = await this.client.channels.fetch(channelId);\n if (!channel?.isTextBased()) {\n throw new Error(`Channel ${channelId} is not a text channel`);\n }\n const sent = await (channel as TextChannel).send(text);\n logDebug(TAG, `Sent message ${sent.id} to channel ${channelId}`);\n return sent.id;\n }\n\n /** Send typing indicator to a channel. */\n async sendTyping(channelId: string): Promise<void> {\n try {\n const channel = await this.client.channels.fetch(channelId);\n if (channel?.isTextBased()) await (channel as TextChannel).sendTyping();\n } catch (err) { logAndSwallow(\"discord_api\", \"op\", err); }\n }\n\n /** Add or remove a reaction on a message. Empty emoji = remove bot's reactions. */\n async setReaction(channelId: string, messageId: string, emoji: string): Promise<void> {\n try {\n const channel = await this.client.channels.fetch(channelId);\n if (!channel?.isTextBased()) return;\n const message = await (channel as TextChannel).messages.fetch(messageId);\n if (!emoji) {\n // Remove bot's reactions\n const botId = this.client.user?.id;\n if (botId) {\n for (const reaction of message.reactions.cache.values()) {\n await reaction.users.remove(botId).catch(err => logAndSwallow(TAG, \"remove bot reaction\", err));\n }\n }\n } else {\n await message.react(emoji);\n }\n } catch (err) { logAndSwallow(\"discord_api\", \"op\", err); }\n }\n\n /** Edit a previously sent message. */\n async editMessage(channelId: string, messageId: string, text: string): Promise<void> {\n try {\n const channel = await this.client.channels.fetch(channelId);\n if (!channel?.isTextBased()) return;\n const message = await (channel as TextChannel).messages.fetch(messageId);\n await message.edit(text);\n } catch (err) { logAndSwallow(\"discord_api\", \"op\", err); }\n }\n\n /** Gracefully close the Gateway connection. */\n async disconnect(): Promise<void> {\n logInfo(TAG, \"Disconnecting from Discord Gateway\u2026\");\n this.ready = false;\n this.client.destroy();\n }\n\n /** Whether the client is connected and ready. */\n get isReady(): boolean {\n return this.ready;\n }\n\n /** Get the bot's own user ID (for filtering self-messages). */\n get botUserId(): string | null {\n return this.client.user?.id ?? null;\n }\n\n /** Fetch a specific message by channel + message ID. Returns null on failure. (#388) */\n async fetchMessage(channelId: string, messageId: string): Promise<{ authorId: string } | null> {\n try {\n const channel = await this.client.channels.fetch(channelId);\n if (!channel?.isTextBased()) return null;\n const msg = await (channel as TextChannel).messages.fetch(messageId);\n return msg ? { authorId: msg.author.id } : null;\n } catch (err) { logAndSwallow(TAG, \"fetchMessage\", err); return null; }\n }\n}\n", "import type { Message } from \"discord.js\";\nimport type { DiscordInboundMessage } from \"../../types/discord.js\";\nimport type { DiscordApi } from \"./discord-api.js\";\nimport { logInfo, logDebug, logWarn } from \"../../components/logger.js\";\n\nconst TAG = \"DiscordPoller\";\n\n/**\n * Event-driven listener for Discord messages via the Gateway WebSocket.\n * Mirrors TelegramPoller in lifecycle (start/stop) but uses discord.js\n * event handlers instead of long-polling. Reconnection and heartbeat\n * are handled by discord.js internally.\n */\nexport class DiscordPoller {\n private readonly api: DiscordApi;\n private readonly appId: string;\n private readonly onMessage: (message: DiscordInboundMessage) => void | Promise<void>;\n private started = false;\n\n constructor(\n api: DiscordApi,\n appId: string,\n onMessage: (message: DiscordInboundMessage) => void | Promise<void>,\n ) {\n this.api = api;\n this.appId = appId;\n this.onMessage = onMessage;\n }\n\n /** Connect to Gateway and start listening. */\n async start(): Promise<void> {\n if (this.started) return;\n this.started = true;\n\n await this.api.connect();\n\n this.api.onMessage((raw: Message) => {\n // Filter out self-messages (use appId from config, fallback to client user id)\n const selfId = this.api.botUserId ?? this.appId;\n if (raw.author.id === selfId) {\n logDebug(TAG, `Ignoring self-message ${raw.id}`);\n return;\n }\n\n const inbound = toDiscordInboundMessage(raw, this.appId);\n logDebug(TAG, `Dispatching message ${inbound.id} from ${inbound.authorUsername}`);\n\n try {\n const result = this.onMessage(inbound);\n if (result instanceof Promise) {\n result.catch((err: unknown) => {\n logWarn(TAG, `Error in message callback: ${err instanceof Error ? err.message : String(err)}`);\n });\n }\n } catch (err) {\n logWarn(TAG, `Error in message callback: ${err instanceof Error ? err.message : String(err)}`);\n }\n });\n\n logInfo(TAG, \"Started \u2014 listening for Discord messages\");\n }\n\n /** Disconnect from Gateway cleanly. */\n stop(): void {\n if (!this.started) return;\n this.started = false;\n this.api.disconnect();\n logInfo(TAG, \"Stopped\");\n }\n}\n\n/** Convert a raw discord.js Message to a DiscordInboundMessage. */\nfunction toDiscordInboundMessage(raw: Message, botId: string | null): DiscordInboundMessage {\n const parentId = \"parentId\" in raw.channel ? (raw.channel.parentId ?? null) : null;\n const channelName = \"name\" in raw.channel ? (raw.channel.name ?? null) : null;\n // Check both discord.js parsed mentions AND raw content for the bot's mention tag\n const mentionsBotId = botId\n ? (raw.mentions.users.has(botId) || new RegExp(`<@!?${botId}>`).test(raw.content))\n : false;\n\n // #388 \u2014 role-mention detection. Look up the bot's own guild member and check\n // if any of its role IDs appear in raw.mentions.roles. If the bot's member isn't\n // cached yet (cold start, first message in a guild), stay safe by returning false \u2014\n // a missed role-mention is better than an accidental always-respond.\n const botMember = raw.guild?.members.me ?? null;\n const botRoleIds = botMember ? new Set([...botMember.roles.cache.keys()]) : new Set<string>();\n const mentionsBotRole = botMember\n ? [...raw.mentions.roles.keys()].some(rid => botRoleIds.has(rid))\n : false;\n\n logDebug(TAG, `mentionsBotId=${mentionsBotId} mentionsBotRole=${mentionsBotRole} (appId=${botId}, mentions=${[...raw.mentions.users.keys()].join(\",\")}, content=${raw.content.slice(0, 60)})`);\n return {\n id: raw.id,\n channelId: raw.channelId,\n parentChannelId: parentId,\n channelName,\n isDM: !raw.guildId,\n authorId: raw.author.id,\n authorUsername: raw.author.username,\n authorIsBot: raw.author.bot ?? false,\n content: raw.content,\n timestamp: raw.createdTimestamp,\n mentionsBotId,\n mentionsBotRole,\n mentionsEveryone: raw.mentions.everyone,\n hasUserMentions: raw.mentions.users.size > 0,\n replyReferenceMessageId: raw.reference?.messageId ?? null,\n attachments: raw.attachments.size > 0\n ? [...raw.attachments.values()].map(a => ({ url: a.url, filename: a.name ?? \"file\", contentType: a.contentType ?? undefined, size: a.size }))\n : undefined,\n };\n}\n", "/**\n * Discord platform adapter \u2014 wraps DiscordApi, DiscordPoller, DiscordSecurityGate.\n * Handles Discord-specific pre-processing (mention stripping, A2A routing, sender prefix)\n * then delegates to the shared message pipeline.\n */\n\nimport { DiscordApi } from \"./discord-api.js\";\nimport { DiscordPoller } from \"./discord-poller.js\";\nimport { SecurityGate } from \"../../components/security-gate.js\";\nimport { loadUsers } from \"../../components/user-registry.js\";\nimport { BOT_COMMANDS } from \"../../components/command-registry.js\";\nimport { ResponseFormatter } from \"../../components/response-formatter.js\";\nimport { formatReactionSignal } from \"../../components/reactions.js\";\n\nexport const DISCORD_CAPABILITIES: PlatformCapabilities = { voice: false, reactions: true, typing: true, threads: true };\nimport { emojiToScore, emojiToTag } from \"../../utils/emoji-score.js\";\nimport { logInfo, logWarn, logDebug } from \"../../components/logger.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { getEnv } from \"../../components/env-schema.js\";\nimport { handleInboundMessage, type PipelineDeps } from \"../../components/message-pipeline.js\";\nimport type { PlatformAdapter, PlatformCapabilities, InboundMessage, SendOpts } from \"../../types/platform.js\";\nimport type { DiscordInboundMessage } from \"../../types/index.js\";\nimport type { IKiroTransport } from \"../../components/transport/kiro-transport.js\";\nimport type { IMemorySystem } from \"abmind\";\nimport type { ConversationBuffer } from \"../../components/conversation-buffer.js\";\n\nconst TAG = \"discord\";\n\nexport interface DiscordAdapterConfig {\n botToken: string;\n appId: string;\n allowedUserIds: Set<string>;\n}\n\nexport interface DiscordAdapterDeps {\n pipeline: PipelineDeps;\n transport: IKiroTransport;\n memory: IMemorySystem | null;\n conversationBuffer: ConversationBuffer;\n}\n\nexport class DiscordAdapter implements PlatformAdapter {\n readonly name = \"discord\" as const;\n readonly capabilities: PlatformCapabilities = DISCORD_CAPABILITIES;\n\n private readonly api: DiscordApi;\n private readonly securityGate: SecurityGate;\n private readonly formatter = new ResponseFormatter();\n private readonly config: DiscordAdapterConfig;\n private deps: DiscordAdapterDeps;\n private poller: DiscordPoller | null = null;\n private _typingIntervals = new Map<string, ReturnType<typeof setInterval>>();\n\n constructor(config: DiscordAdapterConfig, deps: DiscordAdapterDeps) {\n this.api = new DiscordApi(config.botToken);\n this.securityGate = new SecurityGate(loadUsers());\n this.config = config;\n this.deps = deps;\n }\n\n /** Late-bind: replace pipeline deps after construction (used by graph boot). */\n setMessageHandler(deps: DiscordAdapterDeps): void { this.deps = deps; }\n\n async start(): Promise<void> {\n this.poller = new DiscordPoller(this.api, this.config.appId, (m) => this.handleMessage(m));\n this.api.onReaction((reaction, user) => this.handleReaction(reaction, user));\n this.api.onInteraction((interaction) => this.handleInteraction(interaction));\n await this.poller.start();\n\n // Register slash commands (idempotent)\n await this.api.registerCommands([...BOT_COMMANDS]).catch(err =>\n logWarn(TAG, `Slash command registration failed: ${err instanceof Error ? err.message : String(err)}`),\n );\n }\n\n /** Handle Discord slash command interactions. */\n private async handleInteraction(interaction: import(\"discord.js\").ChatInputCommandInteraction): Promise<void> {\n // Interactive model picker for /model and /models\n if (interaction.commandName === \"model\" || interaction.commandName === \"models\") {\n await this.handleModelPicker(interaction);\n return;\n }\n\n await interaction.deferReply();\n\n const registry = loadUsers();\n const userEntry = registry.byPlatformId.get(`discord:${interaction.user.id}`);\n if (!this.securityGate.authorizeById(interaction.user.id, interaction.channelId)) {\n await interaction.editReply(\"\u26D4 Unauthorized.\");\n return;\n }\n\n const commandText = `/${interaction.commandName}`;\n const userId = userEntry?.userId ?? \"unknown\";\n const channelId = interaction.channelId;\n\n // Wrap adapter so pipeline responses route through the interaction reply\n let initialReplied = false;\n const interactionAdapter: PlatformAdapter = {\n ...this,\n sendMessage: async (_ch: string, text: string): Promise<string | undefined> => {\n if (!text?.trim()) return undefined;\n const chunks = text.length <= 2000 ? [text] : text.match(/.{1,2000}/gs) ?? [text];\n let lastId: string | undefined;\n for (const chunk of chunks) {\n if (!initialReplied) {\n initialReplied = true;\n const sent = await interaction.editReply(chunk);\n lastId = sent.id;\n } else {\n const sent = await interaction.followUp(chunk);\n lastId = sent.id;\n }\n }\n return lastId;\n },\n editMessage: async (_ch: string, _messageId: number | string, text: string): Promise<void> => {\n // For interaction replies, editReply edits the initial deferred response\n await interaction.editReply(text);\n },\n };\n\n const msg: InboundMessage = {\n text: commandText,\n channelId,\n userId,\n senderId: interaction.user.id,\n senderName: interaction.user.username ?? \"unknown\",\n platform: \"discord\",\n timestamp: Date.now(),\n isGroup: !!interaction.guildId,\n isVoice: false,\n };\n\n await handleInboundMessage(msg, interactionAdapter, this.deps.pipeline);\n }\n\n /** Interactive model picker \u2014 ephemeral select menus. */\n private async handleModelPicker(interaction: import(\"discord.js\").ChatInputCommandInteraction): Promise<void> {\n const { ActionRowBuilder, StringSelectMenuBuilder } = await import(\"discord.js\");\n const { loadTransport } = await import(\"../../components/transport-config.js\");\n const tc = loadTransport();\n if (!tc) { await interaction.reply({ content: \"No transport config.\", ephemeral: true }); return; }\n\n const providers = Object.entries(tc.providers).map(([id, p]) => ({ id, name: (p as any).name ?? id }));\n if (providers.length === 0) {\n await interaction.reply({ content: \"No providers configured.\", ephemeral: true });\n return;\n }\n\n const menu = new StringSelectMenuBuilder()\n .setCustomId(\"model_picker_provider\")\n .setPlaceholder(\"Select provider\")\n .addOptions(providers.slice(0, 25).map(p => ({ label: p.name, value: p.id })));\n\n const row = new ActionRowBuilder<import(\"discord.js\").StringSelectMenuBuilder>().addComponents(menu);\n await interaction.reply({ content: \"\uD83D\uDD27 Select provider:\", components: [row], ephemeral: true });\n\n // Handle provider selection \u2192 show models\n this.api.onSelectMenu(\"model_picker_provider\", async (selectInteraction) => {\n const providerId = selectInteraction.values[0]!;\n const provider = tc.providers[providerId];\n if (!provider) { await selectInteraction.update({ content: \"Provider not found.\", components: [] }); return; }\n\n const { getModelsForProvider } = await import(\"../../components/transport-config.js\");\n const models = getModelsForProvider(providerId).filter((m) => m.entry.status === \"alive\" || !m.entry.status).slice(0, 25);\n if (models.length === 0) { await selectInteraction.update({ content: `No models for ${providerId}.`, components: [] }); return; }\n\n const modelMenu = new StringSelectMenuBuilder()\n .setCustomId(\"model_picker_model\")\n .setPlaceholder(\"Select model\")\n .addOptions(models.map((m) => ({ label: m.id, value: m.id })));\n\n const modelRow = new ActionRowBuilder<import(\"discord.js\").StringSelectMenuBuilder>().addComponents(modelMenu);\n await selectInteraction.update({ content: `Provider: **${providerId}**\\nSelect model:`, components: [modelRow] });\n\n // Handle model selection \u2192 apply\n this.api.onSelectMenu(\"model_picker_model\", async (modelInteraction) => {\n const modelId = modelInteraction.values[0]!;\n // Route through command handler as /model <provider> <model>\n await modelInteraction.update({ content: `\u2713 Switching to **${providerId}/${modelId}**...`, components: [] });\n\n // Trigger the actual switch via the command pipeline\n const msg: InboundMessage = {\n text: `/model ${providerId} ${modelId}`,\n channelId: modelInteraction.channelId,\n userId: interaction.user.id,\n senderId: interaction.user.id,\n senderName: interaction.user.username ?? \"unknown\",\n platform: \"discord\",\n timestamp: Date.now(),\n isGroup: !!interaction.guildId,\n isVoice: false,\n };\n await handleInboundMessage(msg, this, this.deps.pipeline);\n });\n });\n }\n\n stop(): void {\n this.poller?.stop();\n this.poller = null;\n }\n\n authorize(msg: InboundMessage): boolean {\n // Discord security uses string IDs + channel check\n return this.securityGate.authorizeById(msg.senderId, msg.channelId);\n }\n\n async sendMessage(channelId: string, text: string, _opts?: SendOpts): Promise<string | undefined> {\n this._stopTypingLoop(channelId);\n const id = await this.api.sendMessage(channelId, text);\n return id || undefined;\n }\n\n async sendTyping(channelId: string): Promise<void> {\n await this.api.sendTyping(channelId);\n }\n\n private _startTypingLoop(channelId: string): void {\n if (this._typingIntervals.has(channelId)) return;\n this.api.sendTyping(channelId).catch(() => {});\n const iv = setInterval(() => { this.api.sendTyping(channelId).catch(() => {}); }, 8000);\n this._typingIntervals.set(channelId, iv);\n }\n\n private _stopTypingLoop(channelId: string): void {\n const iv = this._typingIntervals.get(channelId);\n if (iv) { clearInterval(iv); this._typingIntervals.delete(channelId); }\n }\n\n async setReaction(channelId: string, messageId: number | string, emoji: string): Promise<void> {\n await this.api.setReaction(channelId, String(messageId), emoji);\n }\n\n async editMessage(channelId: string, messageId: number | string, text: string): Promise<void> {\n await this.api.editMessage(channelId, String(messageId), text);\n }\n\n chunkResponse(text: string): string[] {\n return this.formatter.chunkForPlatform(text, \"discord\");\n }\n\n injectMessage(msg: InboundMessage): void {\n // Discord doesn't support synthetic injection the same way.\n // For sleep replay, we call handleInboundMessage directly.\n handleInboundMessage(msg, this, this.deps.pipeline).catch((err) => {\n logWarn(TAG, `Failed to replay queued message: ${err instanceof Error ? err.message : String(err)}`);\n });\n }\n\n // --- Internal: Discord message handler ---\n\n private async handleMessage(message: DiscordInboundMessage): Promise<void> {\n logDebug(TAG, `Message from ${message.authorUsername} in ${message.channelId}`);\n\n // Bot-to-bot filtering (#1064)\n if (message.authorIsBot) {\n const policy = getEnv().discordAllowBots;\n if (policy === \"none\") return;\n if (policy === \"mentions\" && !message.mentionsBotId) return;\n }\n\n const effectiveChannelId = message.parentChannelId ?? message.channelId;\n\n if (!this.securityGate.authorizeById(message.authorId, effectiveChannelId)) {\n logDebug(TAG, `Unauthorized user=${message.authorId} channel=${effectiveChannelId}`);\n return;\n }\n\n const rawText = message.content.trim();\n if (!rawText && !message.attachments?.length) return;\n\n // Strip bot's own mention\n let text = rawText.replace(new RegExp(`<@!?${this.config.appId}>`, \"g\"), \"\").replace(/\\s{2,}/g, \" \").trim();\n\n // Download attachments\n let mediaPath: string | undefined;\n if (message.attachments?.length) {\n try {\n const { saveInboundMedia } = await import(\"../../components/media-utils.js\");\n const att = message.attachments[0]!; // handle first attachment\n const res = await fetch(att.url);\n if (res.ok) {\n const buf = Buffer.from(await res.arrayBuffer());\n const extHint = att.filename ? \".\" + (att.filename.split(\".\").pop() ?? \"\") : undefined;\n const saved = await saveInboundMedia(buf, message.channelId, { extHint, claimedMime: att.contentType });\n if (saved) {\n mediaPath = saved.path;\n if (!text) text = `User sent a ${saved.isImage ? \"photo\" : \"file\"}.`;\n }\n }\n } catch (err) {\n logWarn(TAG, `Attachment download failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n if (!text) return;\n\n // Mention filter: in non-DM channels, check DISCORD_GROUP_MENTIONS mode.\n const isDM = message.isDM;\n if (!isDM && !getEnv().discordFreeChannels.has(effectiveChannelId)) {\n const mentionMode = getEnv().discordGroupMentions; // \"required\" | \"optional\"\n\n if (mentionMode === \"optional\") {\n // Skip messages that mention someone else (not us, not @everyone)\n if (message.hasUserMentions && !message.mentionsBotId && !message.mentionsBotRole && !message.mentionsEveryone) {\n logDebug(TAG, `Skipped \u2014 mentions another user (optional mode, channel=${effectiveChannelId})`);\n return;\n }\n } else {\n // Required mode: must be explicitly addressed\n let isReplyToBot = false;\n if (message.replyReferenceMessageId && this.config.appId) {\n try {\n const referenced = await this.api.fetchMessage(message.channelId, message.replyReferenceMessageId);\n isReplyToBot = referenced?.authorId === this.config.appId;\n } catch (err) { logAndSwallow(TAG, \"fetchMessage reply ref\", err); }\n }\n\n const addressed = message.mentionsBotId || message.mentionsBotRole || isReplyToBot;\n if (!addressed) {\n logDebug(TAG, `Skipped \u2014 not addressed (channel=${effectiveChannelId})`);\n return;\n }\n }\n }\n\n const channelLabel = message.parentChannelId ? message.channelName ?? \"thread\" : message.channelName ?? \"DM\";\n const senderPrefix = isDM ? \"\" : `[${message.authorUsername}${message.authorIsBot ? \" (bot)\" : \"\"}] in #${channelLabel}: `;\n\n const inbound: InboundMessage = {\n platform: \"discord\",\n channelId: message.channelId,\n userId: loadUsers().byPlatformId.get(\"discord:\" + message.authorId)?.userId ?? \"unknown\",\n senderId: message.authorId,\n senderName: message.authorUsername,\n text: senderPrefix + text,\n timestamp: message.timestamp,\n isGroup: !isDM,\n isVoice: false,\n mediaPath,\n rawPlatformData: message,\n };\n\n // #512: commands bypass sequential await\n if (text.startsWith(\"/\") && !text.startsWith(\"//\")) {\n handleInboundMessage(inbound, this, this.deps.pipeline).catch(err => logAndSwallow(TAG, \"handleInboundMessage command\", err));\n return;\n }\n\n this._startTypingLoop(message.channelId);\n await handleInboundMessage(inbound, this, this.deps.pipeline);\n this._stopTypingLoop(message.channelId);\n }\n\n private async handleReaction(\n reaction: import(\"discord.js\").MessageReaction,\n user: import(\"discord.js\").User,\n ): Promise<void> {\n const channelId = reaction.message.channelId;\n const messageId = Number(reaction.message.id);\n const emoji = reaction.emoji.name ?? \"\";\n if (!emoji) return;\n\n const isAuthorized = this.securityGate.authorizeById(user.id, channelId);\n const senderName = user.username || `id:${user.id}`;\n logInfo(TAG, `Reaction ${emoji} from ${senderName} on msg ${reaction.message.id}`);\n\n // Emotion scoring on authorized reactions\n if (isAuthorized && this.deps.memory) {\n const score = emojiToScore(emoji);\n const tag = emojiToTag(emoji);\n const resolvedUserId = loadUsers().byPlatformId.get(\"discord:\" + user.id)?.userId ?? \"unknown\";\n const updated = this.deps.memory.updateEmotionByPlatformId(resolvedUserId, messageId, score, tag);\n if (updated) logDebug(TAG, `Emotion score ${score} set on msg ${reaction.message.id}`);\n }\n\n if (!isAuthorized) {\n logDebug(TAG, `Unauthorized reaction from ${user.id}, discarding`);\n return;\n }\n\n // Buffer reaction signal for next message context\n const signal = formatReactionSignal(senderName, [emoji]);\n const bufKey = `discord:${channelId}`;\n this.deps.conversationBuffer.push(bufKey, senderName, signal);\n logDebug(TAG, `Buffered reaction signal for channel ${channelId}`);\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA,qBAQO;AACP;AAEA,IAAM,MAAM;AAML,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACT,QAAQ;AAAA,EAEhB,YAAY,UAAkB;AAC5B,SAAK,QAAQ;AACb,SAAK,SAAS,IAAI,sBAAO;AAAA,MACvB,SAAS;AAAA,QACP,iCAAkB;AAAA,QAClB,iCAAkB;AAAA,QAClB,iCAAkB;AAAA,QAClB,iCAAkB;AAAA,QAClB,iCAAkB;AAAA,MACpB;AAAA,MACA,UAAU,CAAC,wBAAS,SAAS,wBAAS,SAAS,wBAAS,QAAQ;AAAA,IAClE,CAAC;AAED,SAAK,OAAO,GAAG,eAAe,MAAM;AAClC,WAAK,QAAQ;AACb,cAAQ,KAAK,gBAAgB,KAAK,OAAO,MAAM,OAAO,SAAS,EAAE;AAAA,IACnE,CAAC;AAED,SAAK,OAAO,GAAG,SAAS,CAAC,QAAQ;AAC/B,eAAS,KAAK,gBAAgB,GAAG;AAAA,IACnC,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAyB;AAC7B,YAAQ,KAAK,qCAAgC;AAC7C,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,YAAM,UAAU,MAAM;AACpB,gBAAQ;AACR,gBAAQ;AAAA,MACV;AACA,YAAM,UAAU,CAAC,QAAe;AAC9B,gBAAQ;AACR,eAAO,GAAG;AAAA,MACZ;AACA,YAAM,UAAU,MAAM;AACpB,aAAK,OAAO,eAAe,eAAe,OAAO;AACjD,aAAK,OAAO,eAAe,SAAS,OAAO;AAAA,MAC7C;AAEA,WAAK,OAAO,KAAK,eAAe,OAAO;AACvC,WAAK,OAAO,KAAK,SAAS,OAAO;AAEjC,WAAK,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,CAAC,QAAiB;AACpD,gBAAQ;AACR,eAAO,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,MAC5D,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,UAAU,SAA2D;AACnE,SAAK,OAAO,GAAG,iBAAiB,CAAC,YAAY;AAC3C,eAAS,KAAK,gBAAgB,QAAQ,OAAO,GAAG,QAAQ,QAAQ,QAAQ,EAAE,EAAE;AAC5E,UAAI;AACF,cAAM,SAAS,QAAQ,OAAO;AAC9B,YAAI,kBAAkB,SAAS;AAC7B,iBAAO,MAAM,CAAC,QAAiB;AAC7B,qBAAS,KAAK,yBAAyB,GAAG;AAAA,UAC5C,CAAC;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,iBAAS,KAAK,yBAAyB,GAAG;AAAA,MAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,WAAW,SAAgF;AACzF,SAAK,OAAO,GAAG,sBAAsB,OAAO,UAAU,SAAS;AAC7D,UAAI,KAAK,IAAK;AACd,UAAI;AACF,YAAI,SAAS,QAAS,OAAM,SAAS,MAAM;AAC3C,YAAI,KAAK,QAAS,OAAM,KAAK,MAAM;AAAA,MACrC,SAAS,KAAK;AAAE,sBAAc,KAAK,+BAA+B,GAAG;AAAG;AAAA,MAAQ;AAChF,UAAI;AACF,cAAM,SAAS,QAAQ,UAA6B,IAAY;AAChE,YAAI,kBAAkB,QAAS,QAAO,MAAM,CAAC,QAAiB,SAAS,KAAK,0BAA0B,GAAG,CAAC;AAAA,MAC5G,SAAS,KAAK;AAAE,iBAAS,KAAK,0BAA0B,GAAG;AAAA,MAAG;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,SAAwG;AACpH,SAAK,OAAO,GAAG,qBAAqB,OAAO,gBAAgB;AACzD,UAAI,YAAY,mBAAmB,GAAG;AACpC,YAAI;AACF,gBAAM,SAAS,QAAQ,WAAW;AAClC,cAAI,kBAAkB,QAAS,QAAO,MAAM,CAAC,QAAiB,SAAS,KAAK,6BAA6B,GAAG,CAAC;AAAA,QAC/G,SAAS,KAAK;AAAE,mBAAS,KAAK,6BAA6B,GAAG;AAAA,QAAG;AAAA,MACnE;AACA,UAAI,YAAY,mBAAmB,GAAG;AACpC,aAAK,mBAAmB,IAAI,YAAY,QAAQ,IAAI,WAAW;AAAA,MACjE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,qBAAqB,oBAAI,IAA2F;AAAA,EAE5H,aAAa,UAAkB,SAAwG;AACrI,SAAK,mBAAmB,IAAI,UAAU,OAAO;AAAA,EAC/C;AAAA;AAAA,EAGA,MAAM,iBAAiB,UAAuE;AAC5F,QAAI,CAAC,KAAK,OAAO,aAAa;AAC5B,cAAQ,KAAK,2DAAsD;AACnE;AAAA,IACF;AACA,UAAM,KAAK,OAAO,YAAY,SAAS,IAAI,SAAS,IAAI,QAAM,EAAE,MAAM,EAAE,MAAM,aAAa,EAAE,aAAa,MAAM,EAAW,EAAE,CAAC;AAC9H,YAAQ,KAAK,cAAc,SAAS,MAAM,iBAAiB;AAAA,EAC7D;AAAA;AAAA,EAGA,MAAM,YAAY,WAAmB,MAA+B;AAClE,UAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,SAAS;AAC1D,QAAI,CAAC,SAAS,YAAY,GAAG;AAC3B,YAAM,IAAI,MAAM,WAAW,SAAS,wBAAwB;AAAA,IAC9D;AACA,UAAM,OAAO,MAAO,QAAwB,KAAK,IAAI;AACrD,aAAS,KAAK,gBAAgB,KAAK,EAAE,eAAe,SAAS,EAAE;AAC/D,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,MAAM,WAAW,WAAkC;AACjD,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,SAAS;AAC1D,UAAI,SAAS,YAAY,EAAG,OAAO,QAAwB,WAAW;AAAA,IACxE,SAAS,KAAK;AAAE,oBAAc,eAAe,MAAM,GAAG;AAAA,IAAG;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,YAAY,WAAmB,WAAmB,OAA8B;AACpF,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,SAAS;AAC1D,UAAI,CAAC,SAAS,YAAY,EAAG;AAC7B,YAAM,UAAU,MAAO,QAAwB,SAAS,MAAM,SAAS;AACvE,UAAI,CAAC,OAAO;AAEV,cAAM,QAAQ,KAAK,OAAO,MAAM;AAChC,YAAI,OAAO;AACT,qBAAW,YAAY,QAAQ,UAAU,MAAM,OAAO,GAAG;AACvD,kBAAM,SAAS,MAAM,OAAO,KAAK,EAAE,MAAM,SAAO,cAAc,KAAK,uBAAuB,GAAG,CAAC;AAAA,UAChG;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,QAAQ,MAAM,KAAK;AAAA,MAC3B;AAAA,IACF,SAAS,KAAK;AAAE,oBAAc,eAAe,MAAM,GAAG;AAAA,IAAG;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,YAAY,WAAmB,WAAmB,MAA6B;AACnF,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,SAAS;AAC1D,UAAI,CAAC,SAAS,YAAY,EAAG;AAC7B,YAAM,UAAU,MAAO,QAAwB,SAAS,MAAM,SAAS;AACvE,YAAM,QAAQ,KAAK,IAAI;AAAA,IACzB,SAAS,KAAK;AAAE,oBAAc,eAAe,MAAM,GAAG;AAAA,IAAG;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,aAA4B;AAChC,YAAQ,KAAK,0CAAqC;AAClD,SAAK,QAAQ;AACb,SAAK,OAAO,QAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,IAAI,UAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,YAA2B;AAC7B,WAAO,KAAK,OAAO,MAAM,MAAM;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,aAAa,WAAmB,WAAyD;AAC7F,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,SAAS;AAC1D,UAAI,CAAC,SAAS,YAAY,EAAG,QAAO;AACpC,YAAM,MAAM,MAAO,QAAwB,SAAS,MAAM,SAAS;AACnE,aAAO,MAAM,EAAE,UAAU,IAAI,OAAO,GAAG,IAAI;AAAA,IAC7C,SAAS,KAAK;AAAE,oBAAc,KAAK,gBAAgB,GAAG;AAAG,aAAO;AAAA,IAAM;AAAA,EACxE;AACF;;;AChNA;AAEA,IAAMA,OAAM;AAQL,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACT,UAAU;AAAA,EAElB,YACE,KACA,OACA,WACA;AACA,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,MAAM,QAAuB;AAC3B,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AAEf,UAAM,KAAK,IAAI,QAAQ;AAEvB,SAAK,IAAI,UAAU,CAAC,QAAiB;AAEnC,YAAM,SAAS,KAAK,IAAI,aAAa,KAAK;AAC1C,UAAI,IAAI,OAAO,OAAO,QAAQ;AAC5B,iBAASA,MAAK,yBAAyB,IAAI,EAAE,EAAE;AAC/C;AAAA,MACF;AAEA,YAAM,UAAU,wBAAwB,KAAK,KAAK,KAAK;AACvD,eAASA,MAAK,uBAAuB,QAAQ,EAAE,SAAS,QAAQ,cAAc,EAAE;AAEhF,UAAI;AACF,cAAM,SAAS,KAAK,UAAU,OAAO;AACrC,YAAI,kBAAkB,SAAS;AAC7B,iBAAO,MAAM,CAAC,QAAiB;AAC7B,oBAAQA,MAAK,8BAA8B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,UAC/F,CAAC;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQA,MAAK,8BAA8B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,MAC/F;AAAA,IACF,CAAC;AAED,YAAQA,MAAK,+CAA0C;AAAA,EACzD;AAAA;AAAA,EAGA,OAAa;AACX,QAAI,CAAC,KAAK,QAAS;AACnB,SAAK,UAAU;AACf,SAAK,IAAI,WAAW;AACpB,YAAQA,MAAK,SAAS;AAAA,EACxB;AACF;AAGA,SAAS,wBAAwB,KAAc,OAA6C;AAC1F,QAAM,WAAW,cAAc,IAAI,UAAW,IAAI,QAAQ,YAAY,OAAQ;AAC9E,QAAM,cAAc,UAAU,IAAI,UAAW,IAAI,QAAQ,QAAQ,OAAQ;AAEzE,QAAM,gBAAgB,QACjB,IAAI,SAAS,MAAM,IAAI,KAAK,KAAK,IAAI,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK,IAAI,OAAO,IAC9E;AAMJ,QAAM,YAAY,IAAI,OAAO,QAAQ,MAAM;AAC3C,QAAM,aAAa,YAAY,oBAAI,IAAI,CAAC,GAAG,UAAU,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,oBAAI,IAAY;AAC5F,QAAM,kBAAkB,YACpB,CAAC,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,EAAE,KAAK,SAAO,WAAW,IAAI,GAAG,CAAC,IAC9D;AAEJ,WAASA,MAAK,iBAAiB,aAAa,oBAAoB,eAAe,WAAW,KAAK,cAAc,CAAC,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,aAAa,IAAI,QAAQ,MAAM,GAAG,EAAE,CAAC,GAAG;AAC7L,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,iBAAiB;AAAA,IACjB;AAAA,IACA,MAAM,CAAC,IAAI;AAAA,IACX,UAAU,IAAI,OAAO;AAAA,IACrB,gBAAgB,IAAI,OAAO;AAAA,IAC3B,aAAa,IAAI,OAAO,OAAO;AAAA,IAC/B,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf;AAAA,IACA;AAAA,IACA,kBAAkB,IAAI,SAAS;AAAA,IAC/B,iBAAiB,IAAI,SAAS,MAAM,OAAO;AAAA,IAC3C,yBAAyB,IAAI,WAAW,aAAa;AAAA,IACrD,aAAa,IAAI,YAAY,OAAO,IAChC,CAAC,GAAG,IAAI,YAAY,OAAO,CAAC,EAAE,IAAI,QAAM,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,QAAQ,QAAQ,aAAa,EAAE,eAAe,QAAW,MAAM,EAAE,KAAK,EAAE,IAC1I;AAAA,EACN;AACF;;;ACtGA;AAOA;AACA;AACA;AAJO,IAAM,uBAA6C,EAAE,OAAO,OAAO,WAAW,MAAM,QAAQ,MAAM,SAAS,KAAK;AAYvH,IAAMC,OAAM;AAeL,IAAM,iBAAN,MAAgD;AAAA,EAC5C,OAAO;AAAA,EACP,eAAqC;AAAA,EAE7B;AAAA,EACA;AAAA,EACA,YAAY,IAAI,kBAAkB;AAAA,EAClC;AAAA,EACT;AAAA,EACA,SAA+B;AAAA,EAC/B,mBAAmB,oBAAI,IAA4C;AAAA,EAE3E,YAAY,QAA8B,MAA0B;AAClE,SAAK,MAAM,IAAI,WAAW,OAAO,QAAQ;AACzC,SAAK,eAAe,IAAI,aAAa,UAAU,CAAC;AAChD,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGA,kBAAkB,MAAgC;AAAE,SAAK,OAAO;AAAA,EAAM;AAAA,EAEtE,MAAM,QAAuB;AAC3B,SAAK,SAAS,IAAI,cAAc,KAAK,KAAK,KAAK,OAAO,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AACzF,SAAK,IAAI,WAAW,CAAC,UAAU,SAAS,KAAK,eAAe,UAAU,IAAI,CAAC;AAC3E,SAAK,IAAI,cAAc,CAAC,gBAAgB,KAAK,kBAAkB,WAAW,CAAC;AAC3E,UAAM,KAAK,OAAO,MAAM;AAGxB,UAAM,KAAK,IAAI,iBAAiB,CAAC,GAAG,YAAY,CAAC,EAAE;AAAA,MAAM,SACvD,QAAQA,MAAK,sCAAsC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACvG;AAAA,EACF;AAAA;AAAA,EAGA,MAAc,kBAAkB,aAA8E;AAE5G,QAAI,YAAY,gBAAgB,WAAW,YAAY,gBAAgB,UAAU;AAC/E,YAAM,KAAK,kBAAkB,WAAW;AACxC;AAAA,IACF;AAEA,UAAM,YAAY,WAAW;AAE7B,UAAM,WAAW,UAAU;AAC3B,UAAM,YAAY,SAAS,aAAa,IAAI,WAAW,YAAY,KAAK,EAAE,EAAE;AAC5E,QAAI,CAAC,KAAK,aAAa,cAAc,YAAY,KAAK,IAAI,YAAY,SAAS,GAAG;AAChF,YAAM,YAAY,UAAU,sBAAiB;AAC7C;AAAA,IACF;AAEA,UAAM,cAAc,IAAI,YAAY,WAAW;AAC/C,UAAM,SAAS,WAAW,UAAU;AACpC,UAAM,YAAY,YAAY;AAG9B,QAAI,iBAAiB;AACrB,UAAM,qBAAsC;AAAA,MAC1C,GAAG;AAAA,MACH,aAAa,OAAO,KAAa,SAA8C;AAC7E,YAAI,CAAC,MAAM,KAAK,EAAG,QAAO;AAC1B,cAAM,SAAS,KAAK,UAAU,MAAO,CAAC,IAAI,IAAI,KAAK,MAAM,aAAa,KAAK,CAAC,IAAI;AAChF,YAAI;AACJ,mBAAW,SAAS,QAAQ;AAC1B,cAAI,CAAC,gBAAgB;AACnB,6BAAiB;AACjB,kBAAM,OAAO,MAAM,YAAY,UAAU,KAAK;AAC9C,qBAAS,KAAK;AAAA,UAChB,OAAO;AACL,kBAAM,OAAO,MAAM,YAAY,SAAS,KAAK;AAC7C,qBAAS,KAAK;AAAA,UAChB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,aAAa,OAAO,KAAa,YAA6B,SAAgC;AAE5F,cAAM,YAAY,UAAU,IAAI;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,MAAsB;AAAA,MAC1B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU,YAAY,KAAK;AAAA,MAC3B,YAAY,YAAY,KAAK,YAAY;AAAA,MACzC,UAAU;AAAA,MACV,WAAW,KAAK,IAAI;AAAA,MACpB,SAAS,CAAC,CAAC,YAAY;AAAA,MACvB,SAAS;AAAA,IACX;AAEA,UAAM,qBAAqB,KAAK,oBAAoB,KAAK,KAAK,QAAQ;AAAA,EACxE;AAAA;AAAA,EAGA,MAAc,kBAAkB,aAA8E;AAC5G,UAAM,EAAE,kBAAkB,wBAAwB,IAAI,MAAM,OAAO,mBAAY;AAC/E,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,gCAAsC;AAC7E,UAAM,KAAK,cAAc;AACzB,QAAI,CAAC,IAAI;AAAE,YAAM,YAAY,MAAM,EAAE,SAAS,wBAAwB,WAAW,KAAK,CAAC;AAAG;AAAA,IAAQ;AAElG,UAAM,YAAY,OAAO,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,MAAO,EAAU,QAAQ,GAAG,EAAE;AACrG,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,YAAY,MAAM,EAAE,SAAS,4BAA4B,WAAW,KAAK,CAAC;AAChF;AAAA,IACF;AAEA,UAAM,OAAO,IAAI,wBAAwB,EACtC,YAAY,uBAAuB,EACnC,eAAe,iBAAiB,EAChC,WAAW,UAAU,MAAM,GAAG,EAAE,EAAE,IAAI,QAAM,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC;AAE/E,UAAM,MAAM,IAAI,iBAA+D,EAAE,cAAc,IAAI;AACnG,UAAM,YAAY,MAAM,EAAE,SAAS,8BAAuB,YAAY,CAAC,GAAG,GAAG,WAAW,KAAK,CAAC;AAG9F,SAAK,IAAI,aAAa,yBAAyB,OAAO,sBAAsB;AAC1E,YAAM,aAAa,kBAAkB,OAAO,CAAC;AAC7C,YAAM,WAAW,GAAG,UAAU,UAAU;AACxC,UAAI,CAAC,UAAU;AAAE,cAAM,kBAAkB,OAAO,EAAE,SAAS,uBAAuB,YAAY,CAAC,EAAE,CAAC;AAAG;AAAA,MAAQ;AAE7G,YAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,gCAAsC;AACpF,YAAM,SAAS,qBAAqB,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,WAAW,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE;AACxH,UAAI,OAAO,WAAW,GAAG;AAAE,cAAM,kBAAkB,OAAO,EAAE,SAAS,iBAAiB,UAAU,KAAK,YAAY,CAAC,EAAE,CAAC;AAAG;AAAA,MAAQ;AAEhI,YAAM,YAAY,IAAI,wBAAwB,EAC3C,YAAY,oBAAoB,EAChC,eAAe,cAAc,EAC7B,WAAW,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;AAE/D,YAAM,WAAW,IAAI,iBAA+D,EAAE,cAAc,SAAS;AAC7G,YAAM,kBAAkB,OAAO,EAAE,SAAS,eAAe,UAAU;AAAA,gBAAqB,YAAY,CAAC,QAAQ,EAAE,CAAC;AAGhH,WAAK,IAAI,aAAa,sBAAsB,OAAO,qBAAqB;AACtE,cAAM,UAAU,iBAAiB,OAAO,CAAC;AAEzC,cAAM,iBAAiB,OAAO,EAAE,SAAS,yBAAoB,UAAU,IAAI,OAAO,SAAS,YAAY,CAAC,EAAE,CAAC;AAG3G,cAAM,MAAsB;AAAA,UAC1B,MAAM,UAAU,UAAU,IAAI,OAAO;AAAA,UACrC,WAAW,iBAAiB;AAAA,UAC5B,QAAQ,YAAY,KAAK;AAAA,UACzB,UAAU,YAAY,KAAK;AAAA,UAC3B,YAAY,YAAY,KAAK,YAAY;AAAA,UACzC,UAAU;AAAA,UACV,WAAW,KAAK,IAAI;AAAA,UACpB,SAAS,CAAC,CAAC,YAAY;AAAA,UACvB,SAAS;AAAA,QACX;AACA,cAAM,qBAAqB,KAAK,MAAM,KAAK,KAAK,QAAQ;AAAA,MAC1D,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,OAAa;AACX,SAAK,QAAQ,KAAK;AAClB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,UAAU,KAA8B;AAEtC,WAAO,KAAK,aAAa,cAAc,IAAI,UAAU,IAAI,SAAS;AAAA,EACpE;AAAA,EAEA,MAAM,YAAY,WAAmB,MAAc,OAA+C;AAChG,SAAK,gBAAgB,SAAS;AAC9B,UAAM,KAAK,MAAM,KAAK,IAAI,YAAY,WAAW,IAAI;AACrD,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,WAAW,WAAkC;AACjD,UAAM,KAAK,IAAI,WAAW,SAAS;AAAA,EACrC;AAAA,EAEQ,iBAAiB,WAAyB;AAChD,QAAI,KAAK,iBAAiB,IAAI,SAAS,EAAG;AAC1C,SAAK,IAAI,WAAW,SAAS,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAC7C,UAAM,KAAK,YAAY,MAAM;AAAE,WAAK,IAAI,WAAW,SAAS,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAAG,GAAG,GAAI;AACtF,SAAK,iBAAiB,IAAI,WAAW,EAAE;AAAA,EACzC;AAAA,EAEQ,gBAAgB,WAAyB;AAC/C,UAAM,KAAK,KAAK,iBAAiB,IAAI,SAAS;AAC9C,QAAI,IAAI;AAAE,oBAAc,EAAE;AAAG,WAAK,iBAAiB,OAAO,SAAS;AAAA,IAAG;AAAA,EACxE;AAAA,EAEA,MAAM,YAAY,WAAmB,WAA4B,OAA8B;AAC7F,UAAM,KAAK,IAAI,YAAY,WAAW,OAAO,SAAS,GAAG,KAAK;AAAA,EAChE;AAAA,EAEA,MAAM,YAAY,WAAmB,WAA4B,MAA6B;AAC5F,UAAM,KAAK,IAAI,YAAY,WAAW,OAAO,SAAS,GAAG,IAAI;AAAA,EAC/D;AAAA,EAEA,cAAc,MAAwB;AACpC,WAAO,KAAK,UAAU,iBAAiB,MAAM,SAAS;AAAA,EACxD;AAAA,EAEA,cAAc,KAA2B;AAGvC,yBAAqB,KAAK,MAAM,KAAK,KAAK,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACjE,cAAQA,MAAK,oCAAoC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACrG,CAAC;AAAA,EACH;AAAA;AAAA,EAIA,MAAc,cAAc,SAA+C;AACzE,aAASA,MAAK,gBAAgB,QAAQ,cAAc,OAAO,QAAQ,SAAS,EAAE;AAG9E,QAAI,QAAQ,aAAa;AACvB,YAAM,SAAS,OAAO,EAAE;AACxB,UAAI,WAAW,OAAQ;AACvB,UAAI,WAAW,cAAc,CAAC,QAAQ,cAAe;AAAA,IACvD;AAEA,UAAM,qBAAqB,QAAQ,mBAAmB,QAAQ;AAE9D,QAAI,CAAC,KAAK,aAAa,cAAc,QAAQ,UAAU,kBAAkB,GAAG;AAC1E,eAASA,MAAK,qBAAqB,QAAQ,QAAQ,YAAY,kBAAkB,EAAE;AACnF;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,QAAQ,KAAK;AACrC,QAAI,CAAC,WAAW,CAAC,QAAQ,aAAa,OAAQ;AAG9C,QAAI,OAAO,QAAQ,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO,KAAK,KAAK,GAAG,GAAG,EAAE,EAAE,QAAQ,WAAW,GAAG,EAAE,KAAK;AAG1G,QAAI;AACJ,QAAI,QAAQ,aAAa,QAAQ;AAC/B,UAAI;AACF,cAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAAiC;AAC3E,cAAM,MAAM,QAAQ,YAAY,CAAC;AACjC,cAAM,MAAM,MAAM,MAAM,IAAI,GAAG;AAC/B,YAAI,IAAI,IAAI;AACV,gBAAM,MAAM,OAAO,KAAK,MAAM,IAAI,YAAY,CAAC;AAC/C,gBAAM,UAAU,IAAI,WAAW,OAAO,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK,MAAM;AAC7E,gBAAM,QAAQ,MAAM,iBAAiB,KAAK,QAAQ,WAAW,EAAE,SAAS,aAAa,IAAI,YAAY,CAAC;AACtG,cAAI,OAAO;AACT,wBAAY,MAAM;AAClB,gBAAI,CAAC,KAAM,QAAO,eAAe,MAAM,UAAU,UAAU,MAAM;AAAA,UACnE;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQA,MAAK,+BAA+B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,MAChG;AAAA,IACF;AAEA,QAAI,CAAC,KAAM;AAGX,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,IAAI,kBAAkB,GAAG;AAClE,YAAM,cAAc,OAAO,EAAE;AAE7B,UAAI,gBAAgB,YAAY;AAE9B,YAAI,QAAQ,mBAAmB,CAAC,QAAQ,iBAAiB,CAAC,QAAQ,mBAAmB,CAAC,QAAQ,kBAAkB;AAC9G,mBAASA,MAAK,gEAA2D,kBAAkB,GAAG;AAC9F;AAAA,QACF;AAAA,MACF,OAAO;AAEL,YAAI,eAAe;AACnB,YAAI,QAAQ,2BAA2B,KAAK,OAAO,OAAO;AACxD,cAAI;AACF,kBAAM,aAAa,MAAM,KAAK,IAAI,aAAa,QAAQ,WAAW,QAAQ,uBAAuB;AACjG,2BAAe,YAAY,aAAa,KAAK,OAAO;AAAA,UACtD,SAAS,KAAK;AAAE,0BAAcA,MAAK,0BAA0B,GAAG;AAAA,UAAG;AAAA,QACrE;AAEA,cAAM,YAAY,QAAQ,iBAAiB,QAAQ,mBAAmB;AACtE,YAAI,CAAC,WAAW;AACd,mBAASA,MAAK,yCAAoC,kBAAkB,GAAG;AACvE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,eAAe,QAAQ,kBAAkB,QAAQ,eAAe,WAAW,QAAQ,eAAe;AACxG,UAAM,eAAe,OAAO,KAAK,IAAI,QAAQ,cAAc,GAAG,QAAQ,cAAc,WAAW,EAAE,SAAS,YAAY;AAEtH,UAAM,UAA0B;AAAA,MAC9B,UAAU;AAAA,MACV,WAAW,QAAQ;AAAA,MACnB,QAAQ,UAAU,EAAE,aAAa,IAAI,aAAa,QAAQ,QAAQ,GAAG,UAAU;AAAA,MAC/E,UAAU,QAAQ;AAAA,MAClB,YAAY,QAAQ;AAAA,MACpB,MAAM,eAAe;AAAA,MACrB,WAAW,QAAQ;AAAA,MACnB,SAAS,CAAC;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,IACnB;AAGA,QAAI,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,IAAI,GAAG;AAClD,2BAAqB,SAAS,MAAM,KAAK,KAAK,QAAQ,EAAE,MAAM,SAAO,cAAcA,MAAK,gCAAgC,GAAG,CAAC;AAC5H;AAAA,IACF;AAEA,SAAK,iBAAiB,QAAQ,SAAS;AACvC,UAAM,qBAAqB,SAAS,MAAM,KAAK,KAAK,QAAQ;AAC5D,SAAK,gBAAgB,QAAQ,SAAS;AAAA,EACxC;AAAA,EAEA,MAAc,eACZ,UACA,MACe;AACf,UAAM,YAAY,SAAS,QAAQ;AACnC,UAAM,YAAY,OAAO,SAAS,QAAQ,EAAE;AAC5C,UAAM,QAAQ,SAAS,MAAM,QAAQ;AACrC,QAAI,CAAC,MAAO;AAEZ,UAAM,eAAe,KAAK,aAAa,cAAc,KAAK,IAAI,SAAS;AACvE,UAAM,aAAa,KAAK,YAAY,MAAM,KAAK,EAAE;AACjD,YAAQA,MAAK,YAAY,KAAK,SAAS,UAAU,WAAW,SAAS,QAAQ,EAAE,EAAE;AAGjF,QAAI,gBAAgB,KAAK,KAAK,QAAQ;AACpC,YAAM,QAAQ,aAAa,KAAK;AAChC,YAAM,MAAM,WAAW,KAAK;AAC5B,YAAM,iBAAiB,UAAU,EAAE,aAAa,IAAI,aAAa,KAAK,EAAE,GAAG,UAAU;AACrF,YAAM,UAAU,KAAK,KAAK,OAAO,0BAA0B,gBAAgB,WAAW,OAAO,GAAG;AAChG,UAAI,QAAS,UAASA,MAAK,iBAAiB,KAAK,eAAe,SAAS,QAAQ,EAAE,EAAE;AAAA,IACvF;AAEA,QAAI,CAAC,cAAc;AACjB,eAASA,MAAK,8BAA8B,KAAK,EAAE,cAAc;AACjE;AAAA,IACF;AAGA,UAAM,SAAS,qBAAqB,YAAY,CAAC,KAAK,CAAC;AACvD,UAAM,SAAS,WAAW,SAAS;AACnC,SAAK,KAAK,mBAAmB,KAAK,QAAQ,YAAY,MAAM;AAC5D,aAASA,MAAK,wCAAwC,SAAS,EAAE;AAAA,EACnE;AACF;",
5
+ "mappings": "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",
6
6
  "names": ["TAG", "TAG"]
7
7
  }
@@ -5,7 +5,7 @@ import {
5
5
  logDebug,
6
6
  logInfo,
7
7
  logWarn
8
- } from "./chunk-GWILHZPT.js";
8
+ } from "./chunk-XRTXYN66.js";
9
9
  import "./chunk-GALQBVKO.js";
10
10
  import "./chunk-O7KQG6ME.js";
11
11
  import {
@@ -14,7 +14,7 @@ import {
14
14
 
15
15
  // src/components/dns-wakeup.ts
16
16
  import { createSocket } from "node:dgram";
17
- import { createHmac, randomBytes } from "node:crypto";
17
+ import { createHmac } from "node:crypto";
18
18
  function parseMdnsQueryName(buf) {
19
19
  if (buf.length < 12) return null;
20
20
  let offset = 12;
@@ -30,18 +30,6 @@ function parseMdnsQueryName(buf) {
30
30
  }
31
31
  return labels.join(".").toLowerCase();
32
32
  }
33
- function buildMdnsQuery(name) {
34
- const labels = name.split(".");
35
- const header = Buffer.from([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]);
36
- const parts = [header];
37
- for (const label of labels) {
38
- parts.push(Buffer.from([label.length]));
39
- parts.push(Buffer.from(label, "ascii"));
40
- }
41
- parts.push(Buffer.from([0]));
42
- parts.push(Buffer.from([0, 12, 0, 1]));
43
- return Buffer.concat(parts);
44
- }
45
33
  function buildEmptyResponse(queryBuf) {
46
34
  const resp = Buffer.from(queryBuf);
47
35
  if (resp.length >= 4) {
@@ -58,7 +46,9 @@ function startDnsWakeup(port, config, onWakeup) {
58
46
  const token10 = name.match(PATTERN)[1];
59
47
  const tokenBuf = Buffer.from(token10, "hex");
60
48
  for (const [peerName, peer] of Object.entries(config.peers)) {
61
- const hmac = createHmac("sha256", peer.token).update(peerName).digest();
49
+ const peerToken = peer["token"];
50
+ if (!peerToken) continue;
51
+ const hmac = createHmac("sha256", peerToken).update(peerName).digest();
62
52
  const decoded = Buffer.alloc(5);
63
53
  for (let i = 0; i < 5; i++) decoded[i] = tokenBuf[i] ^ hmac[i];
64
54
  const ts = decoded.readUInt32BE(0);
@@ -81,28 +71,14 @@ function startDnsWakeup(port, config, onWakeup) {
81
71
  sock.bind(port, () => logInfo(TAG, `Listening on UDP port ${port}`));
82
72
  return sock;
83
73
  }
84
- function sendWakeup(peerName, peerHost, udpPort, token) {
85
- const ts = Math.floor(Date.now() / 1e3);
86
- const nonce = randomBytes(1);
87
- const hmac = createHmac("sha256", token).update(peerName).digest();
88
- const plain = Buffer.alloc(5);
89
- plain.writeUInt32BE(ts, 0);
90
- plain[4] = nonce[0];
91
- const xored = Buffer.alloc(5);
92
- for (let i = 0; i < 5; i++) xored[i] = plain[i] ^ hmac[i];
93
- const queryName = `${PREFIX}${xored.toString("hex")}${SUFFIX}`;
94
- const query = buildMdnsQuery(queryName);
95
- const sock = createSocket("udp4");
96
- sock.send(query, udpPort, peerHost, () => sock.close());
97
- logDebug(TAG, `Sent wake-up to ${peerName} at ${peerHost}:${udpPort}`);
74
+ function sendWakeup(peerName, peerHost, udpPort, _token) {
75
+ logWarn(TAG, `sendWakeup: token-based wakeup not supported in Ed25519 auth model (#1293) \u2014 skipping ${peerName}`);
98
76
  }
99
- var TAG, PREFIX, SUFFIX, PATTERN, MAX_AGE_S, RATE_LIMIT_MS, lastWakeup;
77
+ var TAG, PATTERN, MAX_AGE_S, RATE_LIMIT_MS, lastWakeup;
100
78
  var init_dns_wakeup = __esm({
101
79
  "src/components/dns-wakeup.ts"() {
102
80
  init_logger();
103
81
  TAG = "dns-wakeup";
104
- PREFIX = "ab-";
105
- SUFFIX = "._workstation._tcp.local";
106
82
  PATTERN = /^ab-([a-f0-9]{10})\._workstation\._tcp\.local$/;
107
83
  MAX_AGE_S = 60;
108
84
  RATE_LIMIT_MS = 5e3;
@@ -114,4 +90,4 @@ export {
114
90
  sendWakeup,
115
91
  startDnsWakeup
116
92
  };
117
- //# sourceMappingURL=dns-wakeup-IDOJIXBX.js.map
93
+ //# sourceMappingURL=dns-wakeup-V3LEFXPE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/dns-wakeup.ts"],
4
+ "sourcesContent": ["/**\n * dns-wakeup.ts \u2014 mDNS-disguised UDP wake-up for A2A callback (#425).\n *\n * Sender crafts a valid mDNS PTR query: AB-<token>._workstation._tcp.local\n * Token = (ts(4) + nonce(1)) XOR HMAC-SHA256(peer.token, peername)[:5]\n *\n * Receiver tries each known peer, XORs to recover ts, validates within 60s.\n * On valid wake-up \u2192 triggers A2A callback (outbound TCP).\n *\n * Looks like normal mDNS service discovery to endpoint protection.\n */\n\nimport { createSocket, type Socket } from \"node:dgram\";\nimport { createHmac, randomBytes } from \"node:crypto\";\nimport { logInfo, logWarn, logDebug } from \"./logger.js\";\nimport type { PeerConfig } from \"./peer-config.js\";\n\nconst TAG = \"dns-wakeup\";\nconst PREFIX = \"ab-\";\nconst SUFFIX = \"._workstation._tcp.local\";\nconst PATTERN = /^ab-([a-f0-9]{10})\\._workstation\\._tcp\\.local$/;\nconst MAX_AGE_S = 60;\nconst RATE_LIMIT_MS = 5000;\n\nconst lastWakeup = new Map<string, number>();\n\n/** Parse the query name from a raw DNS/mDNS packet (minimal parser). */\nfunction parseMdnsQueryName(buf: Buffer): string | null {\n if (buf.length < 12) return null;\n let offset = 12; // skip DNS header\n const labels: string[] = [];\n while (offset < buf.length) {\n const len = buf[offset]!;\n if (len === 0) break;\n if (len > 63) return null; // compressed \u2014 not expected in queries\n offset++;\n if (offset + len > buf.length) return null;\n labels.push(buf.subarray(offset, offset + len).toString(\"ascii\"));\n offset += len;\n }\n return labels.join(\".\").toLowerCase();\n}\n\n/** Build a minimal mDNS query packet for a PTR record. */\nfunction buildMdnsQuery(name: string): Buffer {\n const labels = name.split(\".\");\n // Header: ID=0, flags=0 (standard query), QDCOUNT=1\n const header = Buffer.from([0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]);\n // Question section: labels + null + type PTR (12) + class IN (1)\n const parts: Buffer[] = [header];\n for (const label of labels) {\n parts.push(Buffer.from([label.length]));\n parts.push(Buffer.from(label, \"ascii\"));\n }\n parts.push(Buffer.from([0])); // root label\n parts.push(Buffer.from([0, 12, 0, 1])); // type PTR, class IN\n return Buffer.concat(parts);\n}\n\n/** Build an empty mDNS response (no answers \u2014 looks like \"not found\"). */\nfunction buildEmptyResponse(queryBuf: Buffer): Buffer {\n const resp = Buffer.from(queryBuf);\n // Set QR=1 (response), RCODE=0 in flags\n if (resp.length >= 4) {\n resp[2] = 0x84; // QR=1, AA=1\n resp[3] = 0x00; // RCODE=0\n }\n return resp;\n}\n\nexport function startDnsWakeup(\n port: number,\n config: PeerConfig,\n onWakeup: (peerName: string) => void,\n): Socket {\n const sock = createSocket(\"udp4\");\n\n sock.on(\"message\", (msg, rinfo) => {\n const name = parseMdnsQueryName(msg);\n if (!name || !PATTERN.test(name)) return; // early bail \u2014 not ours\n\n const token10 = name.match(PATTERN)![1]!;\n const tokenBuf = Buffer.from(token10, \"hex\"); // 5 bytes\n\n for (const [peerName, peer] of Object.entries(config.peers)) {\n // #1293: PeerEntry no longer has .token \u2014 DNS wakeup is unsupported in Ed25519 model\n // The receiver path is kept for future use but will never match without a token\n const peerToken = (peer as Record<string, unknown>)[\"token\"] as string | undefined;\n if (!peerToken) continue;\n const hmac = createHmac(\"sha256\", peerToken).update(peerName).digest();\n const decoded = Buffer.alloc(5);\n for (let i = 0; i < 5; i++) decoded[i] = tokenBuf[i]! ^ hmac[i]!;\n const ts = decoded.readUInt32BE(0);\n // decoded[4] = nonce \u2014 discarded\n\n if (Math.abs(Date.now() / 1000 - ts) <= MAX_AGE_S) {\n // Rate limit\n const now = Date.now();\n const last = lastWakeup.get(peerName) ?? 0;\n if (now - last < RATE_LIMIT_MS) {\n logDebug(TAG, `Rate-limited wake-up from ${peerName}`);\n return;\n }\n lastWakeup.set(peerName, now);\n\n // Send empty mDNS response\n sock.send(buildEmptyResponse(msg), rinfo.port, rinfo.address);\n\n logInfo(TAG, `Valid wake-up from ${peerName} \u2014 initiating callback`);\n onWakeup(peerName);\n return;\n }\n }\n });\n\n sock.on(\"error\", (err) => logWarn(TAG, `Socket error: ${err.message}`));\n sock.bind(port, () => logInfo(TAG, `Listening on UDP port ${port}`));\n return sock;\n}\n\n/** Send a wake-up signal to a peer (mDNS-disguised). Skips if no token available. */\nexport function sendWakeup(peerName: string, peerHost: string, udpPort: number, _token?: string): void {\n // #1293: PeerEntry no longer has a token field. Wake-up via peer.token is removed.\n // DNS wakeup is a best-effort legacy feature; with Ed25519 auth there is no per-peer token.\n logWarn(TAG, `sendWakeup: token-based wakeup not supported in Ed25519 auth model (#1293) \u2014 skipping ${peerName}`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAYA,SAAS,oBAAiC;AAC1C,SAAS,kBAA+B;AAcxC,SAAS,mBAAmB,KAA4B;AACtD,MAAI,IAAI,SAAS,GAAI,QAAO;AAC5B,MAAI,SAAS;AACb,QAAM,SAAmB,CAAC;AAC1B,SAAO,SAAS,IAAI,QAAQ;AAC1B,UAAM,MAAM,IAAI,MAAM;AACtB,QAAI,QAAQ,EAAG;AACf,QAAI,MAAM,GAAI,QAAO;AACrB;AACA,QAAI,SAAS,MAAM,IAAI,OAAQ,QAAO;AACtC,WAAO,KAAK,IAAI,SAAS,QAAQ,SAAS,GAAG,EAAE,SAAS,OAAO,CAAC;AAChE,cAAU;AAAA,EACZ;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,YAAY;AACtC;AAmBA,SAAS,mBAAmB,UAA0B;AACpD,QAAM,OAAO,OAAO,KAAK,QAAQ;AAEjC,MAAI,KAAK,UAAU,GAAG;AACpB,SAAK,CAAC,IAAI;AACV,SAAK,CAAC,IAAI;AAAA,EACZ;AACA,SAAO;AACT;AAEO,SAAS,eACd,MACA,QACA,UACQ;AACR,QAAM,OAAO,aAAa,MAAM;AAEhC,OAAK,GAAG,WAAW,CAAC,KAAK,UAAU;AACjC,UAAM,OAAO,mBAAmB,GAAG;AACnC,QAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAG;AAElC,UAAM,UAAU,KAAK,MAAM,OAAO,EAAG,CAAC;AACtC,UAAM,WAAW,OAAO,KAAK,SAAS,KAAK;AAE3C,eAAW,CAAC,UAAU,IAAI,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AAG3D,YAAM,YAAa,KAAiC,OAAO;AAC3D,UAAI,CAAC,UAAW;AAChB,YAAM,OAAO,WAAW,UAAU,SAAS,EAAE,OAAO,QAAQ,EAAE,OAAO;AACrE,YAAM,UAAU,OAAO,MAAM,CAAC;AAC9B,eAAS,IAAI,GAAG,IAAI,GAAG,IAAK,SAAQ,CAAC,IAAI,SAAS,CAAC,IAAK,KAAK,CAAC;AAC9D,YAAM,KAAK,QAAQ,aAAa,CAAC;AAGjC,UAAI,KAAK,IAAI,KAAK,IAAI,IAAI,MAAO,EAAE,KAAK,WAAW;AAEjD,cAAM,MAAM,KAAK,IAAI;AACrB,cAAM,OAAO,WAAW,IAAI,QAAQ,KAAK;AACzC,YAAI,MAAM,OAAO,eAAe;AAC9B,mBAAS,KAAK,6BAA6B,QAAQ,EAAE;AACrD;AAAA,QACF;AACA,mBAAW,IAAI,UAAU,GAAG;AAG5B,aAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM,MAAM,MAAM,OAAO;AAE5D,gBAAQ,KAAK,sBAAsB,QAAQ,6BAAwB;AACnE,iBAAS,QAAQ;AACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,OAAK,GAAG,SAAS,CAAC,QAAQ,QAAQ,KAAK,iBAAiB,IAAI,OAAO,EAAE,CAAC;AACtE,OAAK,KAAK,MAAM,MAAM,QAAQ,KAAK,yBAAyB,IAAI,EAAE,CAAC;AACnE,SAAO;AACT;AAGO,SAAS,WAAW,UAAkB,UAAkB,SAAiB,QAAuB;AAGrG,UAAQ,KAAK,8FAAyF,QAAQ,EAAE;AAClH;AA7HA,IAiBM,KAGA,SACA,WACA,eAEA;AAxBN;AAAA;AAcA;AAGA,IAAM,MAAM;AAGZ,IAAM,UAAU;AAChB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AAEtB,IAAM,aAAa,oBAAI,IAAoB;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -5,7 +5,11 @@ import {
5
5
  renderJson,
6
6
  runAllProbes,
7
7
  runFixes
8
- } from "./chunk-4MULJ5SS.js";
8
+ } from "./chunk-OY4Q6AMY.js";
9
+ import "./chunk-3BG3AIDP.js";
10
+ import "./chunk-5RVOEFGT.js";
11
+ import "./chunk-WC5O5KOE.js";
12
+ import "./chunk-XRTXYN66.js";
9
13
  import "./chunk-GALQBVKO.js";
10
14
  import "./chunk-O7KQG6ME.js";
11
15
  import "./chunk-7K2YZTLD.js";
@@ -15,4 +19,4 @@ export {
15
19
  runAllProbes,
16
20
  runFixes
17
21
  };
18
- //# sourceMappingURL=doctor-probes-B54JFIW3.js.map
22
+ //# sourceMappingURL=doctor-probes-O6YI6XSZ.js.map
@@ -6,8 +6,8 @@ import {
6
6
  getEnv,
7
7
  initEnv,
8
8
  init_env_schema
9
- } from "./chunk-65VCEC32.js";
10
- import "./chunk-GWILHZPT.js";
9
+ } from "./chunk-6PA5JBUU.js";
10
+ import "./chunk-XRTXYN66.js";
11
11
  import "./chunk-GALQBVKO.js";
12
12
  import "./chunk-O7KQG6ME.js";
13
13
  import "./chunk-7K2YZTLD.js";
@@ -18,4 +18,4 @@ export {
18
18
  getEnv,
19
19
  initEnv
20
20
  };
21
- //# sourceMappingURL=env-schema-4JXQUOH4.js.map
21
+ //# sourceMappingURL=env-schema-B5RB32DC.js.map
@@ -12,10 +12,14 @@ import {
12
12
  startGossipListener,
13
13
  stopGossip,
14
14
  stopGossipListener
15
- } from "./chunk-HT2BPTZY.js";
16
- import "./chunk-4S554KLW.js";
17
- import "./chunk-LUNA6PM5.js";
18
- import "./chunk-GWILHZPT.js";
15
+ } from "./chunk-SFL4EPCZ.js";
16
+ import "./chunk-KOSFXW2S.js";
17
+ import "./chunk-3BG3AIDP.js";
18
+ import "./chunk-5RVOEFGT.js";
19
+ import "./chunk-WC5O5KOE.js";
20
+ import "./chunk-N5KN3LGD.js";
21
+ import "./chunk-2IYJ4I66.js";
22
+ import "./chunk-XRTXYN66.js";
19
23
  import "./chunk-GALQBVKO.js";
20
24
  import "./chunk-O7KQG6ME.js";
21
25
  import "./chunk-7K2YZTLD.js";
@@ -32,4 +36,4 @@ export {
32
36
  stopGossip,
33
37
  stopGossipListener
34
38
  };
35
- //# sourceMappingURL=gossip-3C3BSNPN.js.map
39
+ //# sourceMappingURL=gossip-SKRCPOBS.js.map
@@ -9,9 +9,9 @@ import {
9
9
  isDockerActive,
10
10
  isGuardrailsActive,
11
11
  isSeatbeltActive
12
- } from "./chunk-URQPDCK5.js";
13
- import "./chunk-65VCEC32.js";
14
- import "./chunk-GWILHZPT.js";
12
+ } from "./chunk-Q66LQMMZ.js";
13
+ import "./chunk-6PA5JBUU.js";
14
+ import "./chunk-XRTXYN66.js";
15
15
  import "./chunk-GALQBVKO.js";
16
16
  import "./chunk-O7KQG6ME.js";
17
17
  import "./chunk-7K2YZTLD.js";
@@ -25,4 +25,4 @@ export {
25
25
  isGuardrailsActive,
26
26
  isSeatbeltActive
27
27
  };
28
- //# sourceMappingURL=guardrails-DL7ZSWVN.js.map
28
+ //# sourceMappingURL=guardrails-64GQ5Y5K.js.map
@@ -5,12 +5,12 @@ import {
5
5
  getHeartbeatInstance,
6
6
  init_heartbeat_system,
7
7
  setHeartbeatInstance
8
- } from "./chunk-LDUOOKQY.js";
9
- import "./chunk-GRVWZO4C.js";
8
+ } from "./chunk-SJPUNDZ3.js";
9
+ import "./chunk-KOSFXW2S.js";
10
10
  import "./chunk-N5KN3LGD.js";
11
- import "./chunk-65VCEC32.js";
12
- import "./chunk-YSKCQH6E.js";
13
- import "./chunk-GWILHZPT.js";
11
+ import "./chunk-6PA5JBUU.js";
12
+ import "./chunk-2IYJ4I66.js";
13
+ import "./chunk-XRTXYN66.js";
14
14
  import "./chunk-GALQBVKO.js";
15
15
  import "./chunk-O7KQG6ME.js";
16
16
  import "./chunk-7K2YZTLD.js";
@@ -20,4 +20,4 @@ export {
20
20
  getHeartbeatInstance,
21
21
  setHeartbeatInstance
22
22
  };
23
- //# sourceMappingURL=heartbeat-system-MVTRS4GP.js.map
23
+ //# sourceMappingURL=heartbeat-system-X4MUTKJD.js.map
@@ -4,7 +4,7 @@ import {
4
4
  loadFixes,
5
5
  recordResult,
6
6
  shouldAttempt
7
- } from "./chunk-IJT4KWXT.js";
7
+ } from "./chunk-U4U47YE7.js";
8
8
  import {
9
9
  checkCron,
10
10
  clearPendingReminders,
@@ -13,44 +13,44 @@ import {
13
13
  createDbIntegrityTask,
14
14
  createIdleCompactTask,
15
15
  createKanbanCleanupTask,
16
- createKanbanDeliveryTask,
17
16
  createMetricsTask,
18
17
  createUserSessionExpiryTask,
19
18
  readPendingReminders
20
- } from "./chunk-IHYKTDIP.js";
21
- import "./chunk-SMPHE3ZM.js";
19
+ } from "./chunk-SC2Y5NR2.js";
20
+ import "./chunk-PB5GF4FG.js";
22
21
  import "./chunk-63A7ZRIH.js";
23
- import "./chunk-OKAQICWY.js";
24
- import "./chunk-JQDJPUHM.js";
22
+ import "./chunk-TWB2ZGVH.js";
25
23
  import "./chunk-ZAA7B5BN.js";
26
- import "./chunk-5QUTMUIK.js";
27
- import "./chunk-NRUSRJXR.js";
28
- import "./chunk-WYHGNI56.js";
24
+ import "./chunk-3GQX34S2.js";
25
+ import "./chunk-JXYWDAHD.js";
26
+ import "./chunk-DZJ5QZFD.js";
27
+ import "./chunk-PMD5BLFS.js";
29
28
  import {
30
29
  readEnvWithDefault
31
- } from "./chunk-YRSMGJFP.js";
30
+ } from "./chunk-E67KESEG.js";
32
31
  import {
33
32
  init_spin,
34
33
  spin_exports
35
- } from "./chunk-M3JEX6L4.js";
36
- import "./chunk-C7K6VZNY.js";
34
+ } from "./chunk-L72RIPEC.js";
35
+ import "./chunk-BNXV7SZI.js";
37
36
  import "./chunk-YWZPKBO6.js";
38
- import "./chunk-IKUZPMVA.js";
39
- import "./chunk-AFREM7FX.js";
40
- import "./chunk-EFJVUJBE.js";
37
+ import "./chunk-YJZE4OK3.js";
38
+ import "./chunk-CK7YTA2F.js";
39
+ import "./chunk-Y5FEFKGM.js";
41
40
  import {
42
41
  init_user_registry,
43
42
  loadUsers
44
- } from "./chunk-ZV4IWKDJ.js";
45
- import "./chunk-4S554KLW.js";
46
- import "./chunk-LUNA6PM5.js";
43
+ } from "./chunk-E7XD5UGB.js";
47
44
  import "./chunk-R76K6L6H.js";
48
- import "./chunk-GRVWZO4C.js";
49
- import "./chunk-EQSG2CRM.js";
50
- import "./chunk-GVM5YU5I.js";
51
- import "./chunk-OXTSWQCX.js";
45
+ import "./chunk-KOSFXW2S.js";
46
+ import "./chunk-FGYDIX54.js";
47
+ import "./chunk-Z4FZPB42.js";
48
+ import "./chunk-5Y3FJ2Y7.js";
49
+ import "./chunk-3BG3AIDP.js";
50
+ import "./chunk-5RVOEFGT.js";
51
+ import "./chunk-WC5O5KOE.js";
52
52
  import "./chunk-WTIGZO3N.js";
53
- import "./chunk-PEDX56EL.js";
53
+ import "./chunk-EFGBM555.js";
54
54
  import {
55
55
  init_local_time,
56
56
  localISO
@@ -58,18 +58,18 @@ import {
58
58
  import {
59
59
  getEnv,
60
60
  init_env_schema
61
- } from "./chunk-65VCEC32.js";
61
+ } from "./chunk-6PA5JBUU.js";
62
62
  import {
63
63
  init_log_and_swallow,
64
64
  logAndSwallow
65
- } from "./chunk-YSKCQH6E.js";
65
+ } from "./chunk-2IYJ4I66.js";
66
66
  import {
67
67
  getLogFile,
68
68
  init_logger,
69
69
  logDebug,
70
70
  logInfo,
71
71
  logWarn
72
- } from "./chunk-GWILHZPT.js";
72
+ } from "./chunk-XRTXYN66.js";
73
73
  import "./chunk-DGS7J4P6.js";
74
74
  import {
75
75
  abtarsHome,
@@ -266,7 +266,7 @@ Do NOT attempt to fix code you don't understand.`;
266
266
  }, 5 * 6e4);
267
267
  (async () => {
268
268
  try {
269
- const { spin } = await import("./spin-E3ZDEDKT.js");
269
+ const { spin } = await import("./spin-VHNGNWTD.js");
270
270
  const { result } = await spin.dispatchAwait({ type: "H", goal: prompt, title: `SHA: ${errorKey.slice(0, 20)}`, source: "agent" });
271
271
  recordResult("autofix-unknown", errorKey, true);
272
272
  logAutoFix(`AGENT OK: ${errorKey} \u2192 ${result.slice(0, 200)}`);
@@ -298,7 +298,7 @@ function createModelHealthTask(ctx) {
298
298
  const execute = async () => {
299
299
  if (done) return;
300
300
  done = true;
301
- const { loadTransport, resolveAgent, consumeRepairs } = await import("./transport-config-KBF5W2DP.js");
301
+ const { loadTransport, resolveAgent, consumeRepairs } = await import("./transport-config-6MB2K2XC.js");
302
302
  const tc = loadTransport();
303
303
  if (!tc) return;
304
304
  const repairs = consumeRepairs();
@@ -358,8 +358,8 @@ function createModelHealthTask(ctx) {
358
358
  }
359
359
  }
360
360
  if (warnings.length > 0) {
361
- const { sendNotification } = await import("./notification-BFSIEECG.js");
362
- sendNotification(ctx, `\u{1F3E5} Model health check:
361
+ const { sendNotification } = await import("./notification-3JICGXWU.js");
362
+ sendNotification(ctx, `Model health check:
363
363
  ${warnings.join("\n")}
364
364
  Subagents will fall back to main model.`);
365
365
  }
@@ -437,51 +437,28 @@ async function registerTier3Tasks(ctx) {
437
437
  }));
438
438
  heartbeat.registerTask(createDbIntegrityTask(memory));
439
439
  const masterChatId = [...config.telegram.allowedUserIds][0] ?? 0;
440
- heartbeat.registerTask(createKanbanDeliveryTask({
441
- sendSystemMessage: ctx.sendSystemMessage,
442
- sendMessage: async (chatId, text) => {
443
- if (!ctx.telegramAdapter) return;
444
- await ctx.telegramAdapter.sendMessage(chatId, text);
445
- },
446
- sendDocument: async (chatId, filePath, caption) => {
447
- if (!ctx.telegramAdapter) return;
448
- await ctx.telegramAdapter.sendDocument(chatId, filePath, caption);
449
- },
450
- chatId: () => String(masterChatId)
451
- }));
452
- import("./nerve-IGSXBKZZ.js").then(({ nerve }) => {
440
+ import("./nerve-QPAEBRKX.js").then(({ nerve }) => {
453
441
  nerve.on("card:done", async (cardId) => {
454
442
  try {
455
- const { kanbanPending, kanbanSetDelivering, kanbanMarkDelivered } = await import("./kanban-board-M326B2XJ.js");
443
+ const { kanbanPending } = await import("./kanban-board-DLEJUCNN.js");
444
+ const { deliverCard } = await import("./kanban-delivery-C4QPBNPX.js");
456
445
  const pending = kanbanPending();
457
446
  const card = pending.find((c) => c.id === cardId);
458
447
  if (!card) return;
459
- kanbanSetDelivering(card.id);
460
- const targetChat = card.chat_id || String(masterChatId);
461
- if (card.delivery_mode === "silent") {
462
- kanbanMarkDelivered(card.id);
463
- return;
464
- }
465
- if (card.delivery_mode === "deliver") {
466
- if (ctx.telegramAdapter) {
467
- if (card.result_path) await ctx.telegramAdapter.sendDocument(targetChat, card.result_path, card.title);
468
- }
469
- if (ctx.sendSystemMessage) {
470
- await ctx.sendSystemMessage(`[SYSTEM] Task "${card.title}" complete. File delivered: ${card.result_path ?? "(no file)"}`);
471
- }
472
- kanbanMarkDelivered(card.id);
473
- return;
474
- }
475
- if (ctx.sendSystemMessage) {
476
- await ctx.sendSystemMessage(
477
- `[TASK COMPLETE] "${card.title}" done.
478
- Result:
479
- ${card.result_summary ?? "(no output)"}
480
-
481
- Deliver this to the user naturally.`
482
- );
483
- }
484
- kanbanMarkDelivered(card.id);
448
+ await deliverCard(card, {
449
+ sendMessage: async (chatId, text) => {
450
+ if (!ctx.telegramAdapter) return;
451
+ await ctx.telegramAdapter.sendMessage(chatId, text);
452
+ },
453
+ sendDocument: async (chatId, filePath, caption) => {
454
+ if (!ctx.telegramAdapter) return;
455
+ await ctx.telegramAdapter.sendDocument(chatId, filePath, caption);
456
+ },
457
+ announce: async (prompt) => {
458
+ if (ctx.sendSystemMessage) await ctx.sendSystemMessage(prompt);
459
+ },
460
+ chatIdFor: (card2) => card2.chat_id || String(masterChatId)
461
+ });
485
462
  } catch (err) {
486
463
  logAndSwallow(TAG, "nerve:card:done delivery", err);
487
464
  }
@@ -499,16 +476,16 @@ ${String(meta.message ?? "").slice(0, 200)}`);
499
476
  });
500
477
  }).catch((err) => logAndSwallow(TAG, "nerve import", err));
501
478
  heartbeat.registerTask(createKanbanCleanupTask());
502
- import("./metrics-collector-L3VPEHII.js").then(({ initMetrics }) => {
479
+ import("./metrics-collector-YMUGY3PI.js").then(({ initMetrics }) => {
503
480
  initMetrics(abtarsHome());
504
481
  }).catch(() => {
505
482
  });
506
483
  heartbeat.registerTask(createMetricsTask(() => cronQueue.pending));
507
484
  heartbeat.registerTask(createUserSessionExpiryTask());
508
- import("./reconciler-NZ4O4BCP.js").then(({ startReconciler }) => {
485
+ import("./reconciler-IEUJXJN2.js").then(({ startReconciler }) => {
509
486
  startReconciler();
510
487
  }).catch((err) => logAndSwallow(TAG, "reconciler", err));
511
- import("./spin-E3ZDEDKT.js").then(({ spin }) => {
488
+ import("./spin-VHNGNWTD.js").then(({ spin }) => {
512
489
  heartbeat.registerTask({ name: "spin-tick", execute: () => spin.tick() });
513
490
  }).catch((err) => logAndSwallow(TAG, "spin-tick", err));
514
491
  {
@@ -527,7 +504,7 @@ ${String(meta.message ?? "").slice(0, 200)}`);
527
504
  }
528
505
  } });
529
506
  }
530
- import("./gossip-3C3BSNPN.js").then(({ gossipBroadcast, setGossipInterval }) => {
507
+ import("./gossip-SKRCPOBS.js").then(({ gossipBroadcast, setGossipInterval }) => {
531
508
  setGossipInterval(heartbeat.intervalMs);
532
509
  heartbeat.registerTask({ name: "gossip-health", execute: async () => {
533
510
  gossipBroadcast();
@@ -543,7 +520,7 @@ ${String(meta.message ?? "").slice(0, 200)}`);
543
520
  }
544
521
  ctx.selfHealerTask = selfHealerTask;
545
522
  pipelineDeps.selfHealerTask = selfHealerTask;
546
- const { registerCommand } = await import("./commands-OIISYHTD.js");
523
+ const { registerCommand } = await import("./commands-2ZW6CMLC.js");
547
524
  for (const [name, handler] of capabilities.commands) {
548
525
  registerCommand(name, handler);
549
526
  }
@@ -559,4 +536,4 @@ ${String(meta.message ?? "").slice(0, 200)}`);
559
536
  export {
560
537
  registerTier3Tasks
561
538
  };
562
- //# sourceMappingURL=heartbeat-tier3-6KH45CL6.js.map
539
+ //# sourceMappingURL=heartbeat-tier3-2PTPWEQQ.js.map