abtars 0.1.0-alpha.2 → 0.1.0-alpha.21

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 (386) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/bundle/_registry.generated-KQODGKTQ.js +36 -0
  3. package/bundle/{_registry.generated-M4WY2MMI.js.map → _registry.generated-KQODGKTQ.js.map} +1 -1
  4. package/bundle/abtars-browser.js +8 -7
  5. package/bundle/abtars-browser.js.map +1 -1
  6. package/bundle/abtars-cli.js +646 -73
  7. package/bundle/abtars-cli.js.map +4 -4
  8. package/bundle/abtars-restart.js +7 -6
  9. package/bundle/abtars-rss.js +2 -1
  10. package/bundle/abtars-rss.js.map +1 -1
  11. package/bundle/abtars-task.js +9 -8
  12. package/bundle/abtars-task.js.map +1 -1
  13. package/bundle/abtars.js +103 -96
  14. package/bundle/abtars.js.map +2 -2
  15. package/bundle/{agent-api-rate-limit-OQNFMXTZ.js → agent-api-rate-limit-7R5TX2F2.js} +7 -6
  16. package/bundle/{agent-api-rate-limit-OQNFMXTZ.js.map → agent-api-rate-limit-7R5TX2F2.js.map} +1 -1
  17. package/bundle/agent-registry-5M77ZOMV.js +19 -0
  18. package/bundle/agent-registry-VJMNIQ5W.js +19 -0
  19. package/bundle/{anthropic-adapter-2APTH3LA.js → anthropic-adapter-IBY3NPXW.js} +4 -3
  20. package/bundle/{anthropic-adapter-2APTH3LA.js.map → anthropic-adapter-IBY3NPXW.js.map} +1 -1
  21. package/bundle/{bridge-lock-transport-4AC2G5G6.js → bridge-lock-transport-HO545SBK.js} +9 -8
  22. package/bundle/browse-delivery-64GQIUHG.js +18 -0
  23. package/bundle/browser-EXR5OQGK.js +19 -0
  24. package/bundle/capability-HIE7UGFU.js +18 -0
  25. package/bundle/{chunk-BUUVFUPO.js → chunk-2BY6I4P5.js} +5 -4
  26. package/bundle/{chunk-BUUVFUPO.js.map → chunk-2BY6I4P5.js.map} +1 -1
  27. package/bundle/{chunk-Y6XAEX2Q.js → chunk-2F6XKG7Y.js} +15 -9
  28. package/bundle/chunk-2F6XKG7Y.js.map +7 -0
  29. package/bundle/{chunk-V76TVMCM.js → chunk-3MO2MDXJ.js} +5 -4
  30. package/bundle/{chunk-V76TVMCM.js.map → chunk-3MO2MDXJ.js.map} +1 -1
  31. package/bundle/{chunk-6UCRKRWR.js → chunk-6XX4OAAM.js} +22 -21
  32. package/bundle/chunk-6XX4OAAM.js.map +7 -0
  33. package/bundle/{chunk-XREWVCUO.js → chunk-7CHLS36W.js} +16 -148
  34. package/bundle/chunk-7CHLS36W.js.map +7 -0
  35. package/bundle/{chunk-NWDBD4PA.js → chunk-7K2YZTLD.js} +3 -2
  36. package/bundle/{chunk-JCJS4ZIB.js → chunk-AQVOAQQI.js} +5 -4
  37. package/bundle/{chunk-JCJS4ZIB.js.map → chunk-AQVOAQQI.js.map} +1 -1
  38. package/bundle/chunk-AUQD2PKM.js +136 -0
  39. package/bundle/chunk-AUQD2PKM.js.map +7 -0
  40. package/bundle/{chunk-YOCTDKKL.js → chunk-BYDUMHXT.js} +4 -3
  41. package/bundle/{chunk-YOCTDKKL.js.map → chunk-BYDUMHXT.js.map} +1 -1
  42. package/bundle/{chunk-RVE2N7FA.js → chunk-CELR236Q.js} +5 -4
  43. package/bundle/{chunk-RVE2N7FA.js.map → chunk-CELR236Q.js.map} +1 -1
  44. package/bundle/{chunk-2XU2X4OI.js → chunk-CUQA2AJT.js} +3 -2
  45. package/bundle/{chunk-2XU2X4OI.js.map → chunk-CUQA2AJT.js.map} +1 -1
  46. package/bundle/chunk-DMPR5MYT.js +183 -0
  47. package/bundle/chunk-DMPR5MYT.js.map +7 -0
  48. package/bundle/{chunk-BHMZ4RCC.js → chunk-DY3R7LDW.js} +55 -54
  49. package/bundle/{chunk-BHMZ4RCC.js.map → chunk-DY3R7LDW.js.map} +1 -1
  50. package/bundle/{chunk-AR6GO6YC.js → chunk-ELRAH7VL.js} +5 -4
  51. package/bundle/{chunk-AR6GO6YC.js.map → chunk-ELRAH7VL.js.map} +1 -1
  52. package/bundle/{chunk-FMWKEPM7.js → chunk-EX2SRTUE.js} +5 -4
  53. package/bundle/{chunk-FMWKEPM7.js.map → chunk-EX2SRTUE.js.map} +1 -1
  54. package/bundle/{chunk-JW6RU47G.js → chunk-FVQGP5YO.js} +8 -7
  55. package/bundle/{chunk-JW6RU47G.js.map → chunk-FVQGP5YO.js.map} +1 -1
  56. package/bundle/{chunk-GRNENTPA.js → chunk-G6IXMYIO.js} +4 -3
  57. package/bundle/{chunk-GRNENTPA.js.map → chunk-G6IXMYIO.js.map} +1 -1
  58. package/bundle/{chunk-6NR3OHEW.js → chunk-H2RZ4NEJ.js} +6 -5
  59. package/bundle/{chunk-6NR3OHEW.js.map → chunk-H2RZ4NEJ.js.map} +1 -1
  60. package/bundle/chunk-HVKJN3AG.js +189 -0
  61. package/bundle/chunk-HVKJN3AG.js.map +7 -0
  62. package/bundle/{chunk-265TPOPC.js → chunk-HXJRZWKA.js} +3 -2
  63. package/bundle/{chunk-265TPOPC.js.map → chunk-HXJRZWKA.js.map} +1 -1
  64. package/bundle/chunk-IU3RI5E4.js +645 -0
  65. package/bundle/chunk-IU3RI5E4.js.map +7 -0
  66. package/bundle/{chunk-GST5T3WZ.js → chunk-J5YIMCLT.js} +6 -5
  67. package/bundle/{chunk-GST5T3WZ.js.map → chunk-J5YIMCLT.js.map} +1 -1
  68. package/bundle/chunk-JAJ3DUQ2.js +30 -0
  69. package/bundle/{chunk-OP7BTAWY.js.map → chunk-JAJ3DUQ2.js.map} +1 -1
  70. package/bundle/chunk-JHF25OOG.js +645 -0
  71. package/bundle/chunk-JHF25OOG.js.map +7 -0
  72. package/bundle/{chunk-MPX525QO.js → chunk-JRG4EFMP.js} +5 -4
  73. package/bundle/{chunk-MPX525QO.js.map → chunk-JRG4EFMP.js.map} +1 -1
  74. package/bundle/{chunk-VVEDVGCR.js → chunk-JU3UBWLN.js} +17 -16
  75. package/bundle/{chunk-VVEDVGCR.js.map → chunk-JU3UBWLN.js.map} +1 -1
  76. package/bundle/{chunk-QBGBT5QS.js → chunk-JX3ZZU3O.js} +5 -4
  77. package/bundle/{chunk-QBGBT5QS.js.map → chunk-JX3ZZU3O.js.map} +1 -1
  78. package/bundle/{chunk-6SETMHNN.js → chunk-K7P74UNQ.js} +8 -7
  79. package/bundle/{chunk-6SETMHNN.js.map → chunk-K7P74UNQ.js.map} +1 -1
  80. package/bundle/{chunk-AZJIODTQ.js → chunk-KED3G7HS.js} +6 -5
  81. package/bundle/{chunk-AZJIODTQ.js.map → chunk-KED3G7HS.js.map} +1 -1
  82. package/bundle/chunk-KI2ROWAH.js +3707 -0
  83. package/bundle/chunk-KI2ROWAH.js.map +7 -0
  84. package/bundle/{chunk-UHRP745J.js → chunk-L7YHV5DL.js} +6 -5
  85. package/bundle/{chunk-UHRP745J.js.map → chunk-L7YHV5DL.js.map} +1 -1
  86. package/bundle/{chunk-BSSBCSCL.js → chunk-LD5BMLHG.js} +11 -10
  87. package/bundle/{chunk-BSSBCSCL.js.map → chunk-LD5BMLHG.js.map} +1 -1
  88. package/bundle/{chunk-2UPU3OW6.js → chunk-LYEAHE5V.js} +5 -4
  89. package/bundle/{chunk-2UPU3OW6.js.map → chunk-LYEAHE5V.js.map} +1 -1
  90. package/bundle/{chunk-3B7BBE4F.js → chunk-MCGEXAG5.js} +8 -7
  91. package/bundle/{chunk-3B7BBE4F.js.map → chunk-MCGEXAG5.js.map} +1 -1
  92. package/bundle/{chunk-X76UX47U.js → chunk-MJ6PHMOK.js} +4 -3
  93. package/bundle/{chunk-X76UX47U.js.map → chunk-MJ6PHMOK.js.map} +1 -1
  94. package/bundle/{chunk-LSPKJQCI.js → chunk-MV6CJFWR.js} +3 -2
  95. package/bundle/{chunk-LSPKJQCI.js.map → chunk-MV6CJFWR.js.map} +1 -1
  96. package/bundle/chunk-MZWMYN4O.js +17 -0
  97. package/bundle/{chunk-M6VBAPNT.js.map → chunk-MZWMYN4O.js.map} +1 -1
  98. package/bundle/{chunk-HX7Y7EYP.js → chunk-NIRYBWUW.js} +4 -3
  99. package/bundle/{chunk-HX7Y7EYP.js.map → chunk-NIRYBWUW.js.map} +1 -1
  100. package/bundle/{chunk-3E545J66.js → chunk-OW64RUE5.js} +3 -2
  101. package/bundle/{chunk-3E545J66.js.map → chunk-OW64RUE5.js.map} +1 -1
  102. package/bundle/chunk-P56PLAIC.js +126 -0
  103. package/bundle/chunk-P56PLAIC.js.map +7 -0
  104. package/bundle/{chunk-TZHIDLDS.js → chunk-P6PN34XD.js} +5 -4
  105. package/bundle/{chunk-TZHIDLDS.js.map → chunk-P6PN34XD.js.map} +1 -1
  106. package/bundle/{chunk-2UENBO6M.js → chunk-PF5UQ64X.js} +9 -8
  107. package/bundle/{chunk-2UENBO6M.js.map → chunk-PF5UQ64X.js.map} +1 -1
  108. package/bundle/{chunk-6CPN4IGS.js → chunk-PQ62LZNA.js} +9 -8
  109. package/bundle/{chunk-6CPN4IGS.js.map → chunk-PQ62LZNA.js.map} +1 -1
  110. package/bundle/{chunk-UCQ2WC3B.js → chunk-PQW5QBPY.js} +15 -8
  111. package/bundle/chunk-PQW5QBPY.js.map +7 -0
  112. package/bundle/{chunk-D2DCBO6M.js → chunk-R36WIOYX.js} +3 -2
  113. package/bundle/{chunk-D2DCBO6M.js.map → chunk-R36WIOYX.js.map} +1 -1
  114. package/bundle/chunk-RB3X66KM.js +386 -0
  115. package/bundle/chunk-RB3X66KM.js.map +7 -0
  116. package/bundle/{chunk-GUQVJC3U.js → chunk-RE3F3CFW.js} +7 -6
  117. package/bundle/{chunk-GUQVJC3U.js.map → chunk-RE3F3CFW.js.map} +1 -1
  118. package/bundle/chunk-RWUINZUQ.js +19 -0
  119. package/bundle/chunk-RWUINZUQ.js.map +7 -0
  120. package/bundle/{chunk-NT3OBORC.js → chunk-S54DBUZ4.js} +10 -9
  121. package/bundle/{chunk-NT3OBORC.js.map → chunk-S54DBUZ4.js.map} +1 -1
  122. package/bundle/{chunk-CWOHNFUV.js → chunk-SY67HM2Y.js} +3 -2
  123. package/bundle/{chunk-CWOHNFUV.js.map → chunk-SY67HM2Y.js.map} +1 -1
  124. package/bundle/{chunk-BQ2L4GMG.js → chunk-TBLYGCPQ.js} +4 -3
  125. package/bundle/{chunk-BQ2L4GMG.js.map → chunk-TBLYGCPQ.js.map} +1 -1
  126. package/bundle/chunk-TCBMBX3Z.js +183 -0
  127. package/bundle/chunk-TCBMBX3Z.js.map +7 -0
  128. package/bundle/chunk-TXRWQIQQ.js +3707 -0
  129. package/bundle/chunk-TXRWQIQQ.js.map +7 -0
  130. package/bundle/chunk-U34CSHFS.js +645 -0
  131. package/bundle/chunk-U34CSHFS.js.map +7 -0
  132. package/bundle/{chunk-CEVRHKJY.js → chunk-UDZIZB5F.js} +6 -5
  133. package/bundle/{chunk-CEVRHKJY.js.map → chunk-UDZIZB5F.js.map} +1 -1
  134. package/bundle/{chunk-W6FAL35D.js → chunk-VA5WKN3Z.js} +7 -6
  135. package/bundle/{chunk-W6FAL35D.js.map → chunk-VA5WKN3Z.js.map} +1 -1
  136. package/bundle/{chunk-X6TERNVJ.js → chunk-WX7GHGFX.js} +10 -9
  137. package/bundle/{chunk-X6TERNVJ.js.map → chunk-WX7GHGFX.js.map} +1 -1
  138. package/bundle/{chunk-PNEDC45Y.js → chunk-XETTJVEU.js} +4 -3
  139. package/bundle/{chunk-PNEDC45Y.js.map → chunk-XETTJVEU.js.map} +1 -1
  140. package/bundle/{chunk-PLCY3GFH.js → chunk-XLLSPBBT.js} +5 -4
  141. package/bundle/{chunk-PLCY3GFH.js.map → chunk-XLLSPBBT.js.map} +1 -1
  142. package/bundle/{chunk-ZXPXCDA6.js → chunk-XOCP5BMO.js} +6 -5
  143. package/bundle/{chunk-ZXPXCDA6.js.map → chunk-XOCP5BMO.js.map} +1 -1
  144. package/bundle/chunk-ZEY6YZAB.js +138 -0
  145. package/bundle/chunk-ZEY6YZAB.js.map +7 -0
  146. package/bundle/{chunk-MW6WDLU7.js → chunk-ZZR3JZHR.js} +10 -9
  147. package/bundle/{chunk-MW6WDLU7.js.map → chunk-ZZR3JZHR.js.map} +1 -1
  148. package/bundle/commands-AIL4XOIZ.js +33 -0
  149. package/bundle/commands-K77NVSXZ.js +32 -0
  150. package/bundle/commands-V6RSVC4Y.js +32 -0
  151. package/bundle/completion-buffer-S3LXDZG2.js +14 -0
  152. package/bundle/config-C6VHRJQ7.js +20 -0
  153. package/bundle/{config-show-ERTATR6E.js → config-show-ZTXX27FW.js} +4 -3
  154. package/bundle/{config-show-ERTATR6E.js.map → config-show-ZTXX27FW.js.map} +1 -1
  155. package/bundle/{context-HCEGZNDC.js → context-OCS7HLJP.js} +5 -4
  156. package/bundle/{context-HCEGZNDC.js.map → context-OCS7HLJP.js.map} +1 -1
  157. package/bundle/daemon-NPKYZ3CJ.js +292 -0
  158. package/bundle/daemon-NPKYZ3CJ.js.map +7 -0
  159. package/bundle/delegation-tools-PF7RD2RW.js +28 -0
  160. package/bundle/{deploy-lib-import-32ZFKHWP.js → deploy-lib-import-ODLDL2DB.js} +5 -4
  161. package/bundle/digital-signature-PNY4TR2W.js +14 -0
  162. package/bundle/{direct-api-transport-YR7SXXNN.js → direct-api-transport-EADHM67Z.js} +21 -20
  163. package/bundle/{direct-api-transport-YR7SXXNN.js.map → direct-api-transport-EADHM67Z.js.map} +1 -1
  164. package/bundle/direct-api-transport-SLJ2Z6NX.js +861 -0
  165. package/bundle/direct-api-transport-SLJ2Z6NX.js.map +7 -0
  166. package/bundle/{discord-adapter-YYWVMPPU.js → discord-adapter-FBJOJSTW.js} +25 -24
  167. package/bundle/{discord-adapter-YYWVMPPU.js.map → discord-adapter-FBJOJSTW.js.map} +1 -1
  168. package/bundle/discord-adapter-IJISVHUE.js +585 -0
  169. package/bundle/discord-adapter-IJISVHUE.js.map +7 -0
  170. package/bundle/discord-adapter-UYOCKRDF.js +586 -0
  171. package/bundle/discord-adapter-UYOCKRDF.js.map +7 -0
  172. package/bundle/{dist-MTMKARCP.js → dist-J3T4XVKX.js} +4 -3
  173. package/bundle/{dist-MTMKARCP.js.map → dist-J3T4XVKX.js.map} +1 -1
  174. package/bundle/{dns-wakeup-27M7D2MR.js → dns-wakeup-RYOCQ6GR.js} +6 -5
  175. package/bundle/{dns-wakeup-27M7D2MR.js.map → dns-wakeup-RYOCQ6GR.js.map} +1 -1
  176. package/bundle/{doctor-QNUSDY73.js → doctor-R54GZPKL.js} +10 -9
  177. package/bundle/{doctor-QNUSDY73.js.map → doctor-R54GZPKL.js.map} +1 -1
  178. package/bundle/{ensure-invariants-NMXNS476.js → ensure-invariants-K2ZUZ6NR.js} +7 -6
  179. package/bundle/{ensure-invariants-NMXNS476.js.map → ensure-invariants-K2ZUZ6NR.js.map} +1 -1
  180. package/bundle/ensure-invariants-KUXIW73S.js +50 -0
  181. package/bundle/ensure-invariants-KUXIW73S.js.map +7 -0
  182. package/bundle/env-schema-DGD6QWPA.js +20 -0
  183. package/bundle/{esm-DDP6NCZG.js → esm-PFOJARXA.js} +5 -4
  184. package/bundle/{esm-DDP6NCZG.js.map → esm-PFOJARXA.js.map} +1 -1
  185. package/bundle/{fallback-policy-L4QV2PEJ.js → fallback-policy-SR6ED5I3.js} +4 -3
  186. package/bundle/{fallback-policy-L4QV2PEJ.js.map → fallback-policy-SR6ED5I3.js.map} +1 -1
  187. package/bundle/{health-check-SPA7NT6N.js → health-check-RJ2SUJYL.js} +4 -3
  188. package/bundle/{health-check-SPA7NT6N.js.map → health-check-RJ2SUJYL.js.map} +1 -1
  189. package/bundle/hook-system-POI5VRIX.js +18 -0
  190. package/bundle/hotskills-6ECHLXTJ.js +13 -0
  191. package/bundle/install-24XR5FO5.js +13 -0
  192. package/bundle/install-AJ7VW76P.js +13 -0
  193. package/bundle/{install-log-IAPHYKD4.js → install-log-Q6RUHKWC.js} +4 -3
  194. package/bundle/{install-log-IAPHYKD4.js.map → install-log-Q6RUHKWC.js.map} +1 -1
  195. package/bundle/{install-manifest-SPQRUNXL.js → install-manifest-MCJCAYSR.js} +9 -7
  196. package/bundle/install-manifest-MCJCAYSR.js.map +7 -0
  197. package/bundle/install-manifest-ZETY4AFS.js +104 -0
  198. package/bundle/install-manifest-ZETY4AFS.js.map +7 -0
  199. package/bundle/{install-validate-PVLZXYLQ.js → install-validate-H74LUCE2.js} +4 -3
  200. package/bundle/{install-validate-PVLZXYLQ.js.map → install-validate-H74LUCE2.js.map} +1 -1
  201. package/bundle/{irc-adapter-OI5UZSQF.js → irc-adapter-RKRUSZXB.js} +7 -6
  202. package/bundle/{irc-adapter-OI5UZSQF.js.map → irc-adapter-RKRUSZXB.js.map} +1 -1
  203. package/bundle/{irc-config-55YO6EGB.js → irc-config-6VY67UPQ.js} +8 -7
  204. package/bundle/{irc-config-55YO6EGB.js.map → irc-config-6VY67UPQ.js.map} +1 -1
  205. package/bundle/{logs-ZNYXX5PA.js → logs-EK4HYRKR.js} +4 -3
  206. package/bundle/{logs-ZNYXX5PA.js.map → logs-EK4HYRKR.js.map} +1 -1
  207. package/bundle/{media-utils-XNNDTYFI.js → media-utils-QBY5WBF3.js} +8 -7
  208. package/bundle/{media-utils-XNNDTYFI.js.map → media-utils-QBY5WBF3.js.map} +1 -1
  209. package/bundle/message-pipeline-ANSMPK5O.js +34 -0
  210. package/bundle/message-pipeline-HXZMRGXZ.js +34 -0
  211. package/bundle/message-pipeline-XUUTGPFH.js +35 -0
  212. package/bundle/meta.json +1828 -1650
  213. package/bundle/model-health-registry-7ECZFCW4.js +12 -0
  214. package/bundle/model-health-registry-LDC76RPP.js +12 -0
  215. package/bundle/notification-OJ4YE4VG.js +14 -0
  216. package/bundle/{openrouter-credits-EDY7ETAU.js → openrouter-credits-L45SYKT3.js} +7 -6
  217. package/bundle/{openrouter-credits-EDY7ETAU.js.map → openrouter-credits-L45SYKT3.js.map} +1 -1
  218. package/bundle/{passwd-RRFV4CC5.js → passwd-QSHZJ2CG.js} +4 -3
  219. package/bundle/{passwd-RRFV4CC5.js.map → passwd-QSHZJ2CG.js.map} +1 -1
  220. package/bundle/paths-ZJYIDND2.js +18 -0
  221. package/bundle/{peer-client-52XYMNI7.js → peer-client-T44VI7NB.js} +13 -12
  222. package/bundle/{peer-client-52XYMNI7.js.map → peer-client-T44VI7NB.js.map} +1 -1
  223. package/bundle/peer-config-D5A4454H.js +17 -0
  224. package/bundle/{peer-sessions-EAXTNQ36.js → peer-sessions-MY2YVXHC.js} +4 -3
  225. package/bundle/{peer-sessions-EAXTNQ36.js.map → peer-sessions-MY2YVXHC.js.map} +1 -1
  226. package/bundle/{pending-callback-RIMQZ7FJ.js → pending-callback-6KLBSHLX.js} +4 -3
  227. package/bundle/{pending-callback-RIMQZ7FJ.js.map → pending-callback-6KLBSHLX.js.map} +1 -1
  228. package/bundle/phase-transport-43NP5XBK.js +23 -0
  229. package/bundle/phase-transport-GNUZI6EW.js +23 -0
  230. package/bundle/phase-transport-Q7K6V3VZ.js +23 -0
  231. package/bundle/phase-transport-SLJXIAY5.js +23 -0
  232. package/bundle/{responses-adapter-AAQTY3K4.js → responses-adapter-DAV2JUL7.js} +4 -3
  233. package/bundle/{responses-adapter-AAQTY3K4.js.map → responses-adapter-DAV2JUL7.js.map} +1 -1
  234. package/bundle/{restore-ZE3SEPSS.js → restore-ROJF22R2.js} +5 -4
  235. package/bundle/{restore-ZE3SEPSS.js.map → restore-ROJF22R2.js.map} +1 -1
  236. package/bundle/{self-healer-utils-DMUUXC47.js → self-healer-utils-7NFH22VJ.js} +7 -6
  237. package/bundle/{self-healer-utils-DMUUXC47.js.map → self-healer-utils-7NFH22VJ.js.map} +1 -1
  238. package/bundle/skill-stats-IPVKMWN3.js +23 -0
  239. package/bundle/sleep-4NVWZHVN.js +20 -0
  240. package/bundle/soul-bundle-7EYTEKFE.js +15 -0
  241. package/bundle/soul-loader-7FN7WDHM.js +18 -0
  242. package/bundle/soul-loader-K237NP4T.js +17 -0
  243. package/bundle/soul-loader-K237NP4T.js.map +7 -0
  244. package/bundle/soul-loader-UVJ6HZM3.js +17 -0
  245. package/bundle/soul-loader-UVJ6HZM3.js.map +7 -0
  246. package/bundle/src-Z3WR7SRT.js +9 -0
  247. package/bundle/src-Z3WR7SRT.js.map +7 -0
  248. package/bundle/{sse-parser-anthropic-P7CE2MH2.js → sse-parser-anthropic-H42TTLBD.js} +7 -6
  249. package/bundle/{sse-parser-anthropic-P7CE2MH2.js.map → sse-parser-anthropic-H42TTLBD.js.map} +1 -1
  250. package/bundle/{sse-parser-responses-EQQA5FWN.js → sse-parser-responses-WG2LY2ML.js} +7 -6
  251. package/bundle/{sse-parser-responses-EQQA5FWN.js.map → sse-parser-responses-WG2LY2ML.js.map} +1 -1
  252. package/bundle/{ssrf-guard-FZCBYIVW.js → ssrf-guard-E2KBBC5E.js} +7 -6
  253. package/bundle/{ssrf-guard-FZCBYIVW.js.map → ssrf-guard-E2KBBC5E.js.map} +1 -1
  254. package/bundle/{start-FH3GRMJ4.js → start-4IWBKLWO.js} +4 -3
  255. package/bundle/{start-FH3GRMJ4.js.map → start-4IWBKLWO.js.map} +1 -1
  256. package/bundle/{stream-single-WSG4D53C.js → stream-single-RFJNUTL6.js} +4 -3
  257. package/bundle/{stream-single-WSG4D53C.js.map → stream-single-RFJNUTL6.js.map} +1 -1
  258. package/bundle/stt-CF3CPFDC.js +15 -0
  259. package/bundle/stt-CF3CPFDC.js.map +7 -0
  260. package/bundle/subagent-runtime-P7GCFBM3.js +13 -0
  261. package/bundle/subagent-runtime-P7GCFBM3.js.map +7 -0
  262. package/bundle/subagent-runtime-USNPO4WF.js +13 -0
  263. package/bundle/subagent-runtime-USNPO4WF.js.map +7 -0
  264. package/bundle/subagent-runtime-XS2ZXYOZ.js +13 -0
  265. package/bundle/subagent-runtime-XS2ZXYOZ.js.map +7 -0
  266. package/bundle/{system-message-T5R3EYYN.js → system-message-TALP6GP2.js} +6 -5
  267. package/bundle/{system-message-T5R3EYYN.js.map → system-message-TALP6GP2.js.map} +1 -1
  268. package/bundle/{system-status-KQ6KHFJ6.js → system-status-2CR5OUDY.js} +10 -9
  269. package/bundle/{system-status-KQ6KHFJ6.js.map → system-status-2CR5OUDY.js.map} +1 -1
  270. package/bundle/task-store-KIBFZL5A.js +23 -0
  271. package/bundle/task-store-KIBFZL5A.js.map +7 -0
  272. package/bundle/{telegram-adapter-2V3XUMT5.js → telegram-adapter-ISQRW7PN.js} +34 -33
  273. package/bundle/{telegram-adapter-2V3XUMT5.js.map → telegram-adapter-ISQRW7PN.js.map} +1 -1
  274. package/bundle/telegram-adapter-QCD7AG5D.js +1062 -0
  275. package/bundle/telegram-adapter-QCD7AG5D.js.map +7 -0
  276. package/bundle/telegram-adapter-Y3PVA25S.js +1061 -0
  277. package/bundle/telegram-adapter-Y3PVA25S.js.map +7 -0
  278. package/bundle/telegram-adapter-YAXSK2RT.js +1062 -0
  279. package/bundle/telegram-adapter-YAXSK2RT.js.map +7 -0
  280. package/bundle/tool-registry-DFCCGZCB.js +39 -0
  281. package/bundle/tool-registry-DFCCGZCB.js.map +7 -0
  282. package/bundle/tool-sandbox-OZMXJZLQ.js +21 -0
  283. package/bundle/tool-sandbox-OZMXJZLQ.js.map +7 -0
  284. package/bundle/{transport-config-YLXU33RO.js → transport-config-ANPS2RYT.js} +11 -10
  285. package/bundle/transport-config-ANPS2RYT.js.map +7 -0
  286. package/bundle/update-check-O5MS6B3L.js +13 -0
  287. package/bundle/update-check-O5MS6B3L.js.map +7 -0
  288. package/bundle/usage-tracker-S4Z2G2K5.js +18 -0
  289. package/bundle/usage-tracker-S4Z2G2K5.js.map +7 -0
  290. package/bundle/user-registry-GTAJIW6E.js +17 -0
  291. package/bundle/user-registry-GTAJIW6E.js.map +7 -0
  292. package/config/.env +2 -0
  293. package/config/auto-fix.json +14 -0
  294. package/config/irc.json.example +30 -0
  295. package/config/models.json.example +229 -0
  296. package/config/peers.json.example +12 -0
  297. package/config/schemas/irc.schema.json +42 -0
  298. package/config/schemas/models.schema.json +17 -0
  299. package/config/schemas/peers.schema.json +35 -0
  300. package/config/schemas/transport.schema.json +35 -0
  301. package/config/schemas/users.schema.json +22 -0
  302. package/config/transport.default.json +30 -0
  303. package/config/transport.json.example +102 -0
  304. package/config/users.json.example +11 -0
  305. package/install-manifest.json +148 -0
  306. package/package.json +4 -2
  307. package/scripts/abtars-daemon.service +1 -0
  308. package/scripts/watchdog.sh +1 -1
  309. package/bundle/_registry.generated-M4WY2MMI.js +0 -35
  310. package/bundle/agent-registry-LT4JNQH6.js +0 -18
  311. package/bundle/browse-delivery-JXBY36GK.js +0 -17
  312. package/bundle/browser-ELNDVPLC.js +0 -18
  313. package/bundle/capability-CIL3G4FI.js +0 -17
  314. package/bundle/chunk-5R2ANXQ7.js +0 -510
  315. package/bundle/chunk-5R2ANXQ7.js.map +0 -7
  316. package/bundle/chunk-6UCRKRWR.js.map +0 -7
  317. package/bundle/chunk-M6VBAPNT.js +0 -16
  318. package/bundle/chunk-OP7BTAWY.js +0 -29
  319. package/bundle/chunk-UCQ2WC3B.js.map +0 -7
  320. package/bundle/chunk-XREWVCUO.js.map +0 -7
  321. package/bundle/chunk-Y6XAEX2Q.js.map +0 -7
  322. package/bundle/commands-BHVUOU3V.js +0 -31
  323. package/bundle/completion-buffer-P253ONKF.js +0 -13
  324. package/bundle/config-RGSDAPZN.js +0 -19
  325. package/bundle/delegation-tools-GYTS2D6A.js +0 -27
  326. package/bundle/digital-signature-OFCGSHWO.js +0 -13
  327. package/bundle/env-schema-2KBHBDGN.js +0 -19
  328. package/bundle/hook-system-6Q5YTR53.js +0 -17
  329. package/bundle/hotskills-K7BM4YLB.js +0 -12
  330. package/bundle/install-6HRZVKUM.js +0 -15
  331. package/bundle/install-manifest-SPQRUNXL.js.map +0 -7
  332. package/bundle/message-pipeline-LLH5SYMO.js +0 -33
  333. package/bundle/model-health-registry-35LQNVQR.js +0 -11
  334. package/bundle/notification-Y5S5MMLV.js +0 -13
  335. package/bundle/paths-G33RZWZ7.js +0 -17
  336. package/bundle/peer-config-VK6EDLN5.js +0 -16
  337. package/bundle/phase-transport-KYERDL2O.js +0 -22
  338. package/bundle/skill-stats-LLEXEXLR.js +0 -22
  339. package/bundle/sleep-OYIUOVQD.js +0 -19
  340. package/bundle/soul-loader-54WCVNLJ.js +0 -16
  341. package/bundle/src-JL4PVO23.js +0 -8
  342. package/bundle/stt-2UH3RITX.js +0 -14
  343. package/bundle/subagent-runtime-LE2ZXH3G.js +0 -12
  344. package/bundle/task-store-K7CQDEPI.js +0 -22
  345. package/bundle/tool-registry-MU3OX4UI.js +0 -38
  346. package/bundle/tool-sandbox-VYOK4ZOA.js +0 -20
  347. package/bundle/update-QCW5LXRN.js +0 -13
  348. package/bundle/update-check-27KZSAP6.js +0 -12
  349. package/bundle/usage-tracker-OVVEVMOY.js +0 -17
  350. package/bundle/user-registry-D4SD73UV.js +0 -16
  351. /package/bundle/{agent-registry-LT4JNQH6.js.map → agent-registry-5M77ZOMV.js.map} +0 -0
  352. /package/bundle/{bridge-lock-transport-4AC2G5G6.js.map → agent-registry-VJMNIQ5W.js.map} +0 -0
  353. /package/bundle/{browse-delivery-JXBY36GK.js.map → bridge-lock-transport-HO545SBK.js.map} +0 -0
  354. /package/bundle/{browser-ELNDVPLC.js.map → browse-delivery-64GQIUHG.js.map} +0 -0
  355. /package/bundle/{capability-CIL3G4FI.js.map → browser-EXR5OQGK.js.map} +0 -0
  356. /package/bundle/{chunk-NWDBD4PA.js.map → capability-HIE7UGFU.js.map} +0 -0
  357. /package/bundle/{commands-BHVUOU3V.js.map → chunk-7K2YZTLD.js.map} +0 -0
  358. /package/bundle/{completion-buffer-P253ONKF.js.map → commands-AIL4XOIZ.js.map} +0 -0
  359. /package/bundle/{config-RGSDAPZN.js.map → commands-K77NVSXZ.js.map} +0 -0
  360. /package/bundle/{delegation-tools-GYTS2D6A.js.map → commands-V6RSVC4Y.js.map} +0 -0
  361. /package/bundle/{deploy-lib-import-32ZFKHWP.js.map → completion-buffer-S3LXDZG2.js.map} +0 -0
  362. /package/bundle/{digital-signature-OFCGSHWO.js.map → config-C6VHRJQ7.js.map} +0 -0
  363. /package/bundle/{env-schema-2KBHBDGN.js.map → delegation-tools-PF7RD2RW.js.map} +0 -0
  364. /package/bundle/{hook-system-6Q5YTR53.js.map → deploy-lib-import-ODLDL2DB.js.map} +0 -0
  365. /package/bundle/{hotskills-K7BM4YLB.js.map → digital-signature-PNY4TR2W.js.map} +0 -0
  366. /package/bundle/{install-6HRZVKUM.js.map → env-schema-DGD6QWPA.js.map} +0 -0
  367. /package/bundle/{message-pipeline-LLH5SYMO.js.map → hook-system-POI5VRIX.js.map} +0 -0
  368. /package/bundle/{model-health-registry-35LQNVQR.js.map → hotskills-6ECHLXTJ.js.map} +0 -0
  369. /package/bundle/{notification-Y5S5MMLV.js.map → install-24XR5FO5.js.map} +0 -0
  370. /package/bundle/{paths-G33RZWZ7.js.map → install-AJ7VW76P.js.map} +0 -0
  371. /package/bundle/{peer-config-VK6EDLN5.js.map → message-pipeline-ANSMPK5O.js.map} +0 -0
  372. /package/bundle/{phase-transport-KYERDL2O.js.map → message-pipeline-HXZMRGXZ.js.map} +0 -0
  373. /package/bundle/{skill-stats-LLEXEXLR.js.map → message-pipeline-XUUTGPFH.js.map} +0 -0
  374. /package/bundle/{sleep-OYIUOVQD.js.map → model-health-registry-7ECZFCW4.js.map} +0 -0
  375. /package/bundle/{soul-loader-54WCVNLJ.js.map → model-health-registry-LDC76RPP.js.map} +0 -0
  376. /package/bundle/{src-JL4PVO23.js.map → notification-OJ4YE4VG.js.map} +0 -0
  377. /package/bundle/{stt-2UH3RITX.js.map → paths-ZJYIDND2.js.map} +0 -0
  378. /package/bundle/{subagent-runtime-LE2ZXH3G.js.map → peer-config-D5A4454H.js.map} +0 -0
  379. /package/bundle/{task-store-K7CQDEPI.js.map → phase-transport-43NP5XBK.js.map} +0 -0
  380. /package/bundle/{tool-registry-MU3OX4UI.js.map → phase-transport-GNUZI6EW.js.map} +0 -0
  381. /package/bundle/{tool-sandbox-VYOK4ZOA.js.map → phase-transport-Q7K6V3VZ.js.map} +0 -0
  382. /package/bundle/{transport-config-YLXU33RO.js.map → phase-transport-SLJXIAY5.js.map} +0 -0
  383. /package/bundle/{update-QCW5LXRN.js.map → skill-stats-IPVKMWN3.js.map} +0 -0
  384. /package/bundle/{update-check-27KZSAP6.js.map → sleep-4NVWZHVN.js.map} +0 -0
  385. /package/bundle/{usage-tracker-OVVEVMOY.js.map → soul-bundle-7EYTEKFE.js.map} +0 -0
  386. /package/bundle/{user-registry-D4SD73UV.js.map → soul-loader-7FN7WDHM.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/transport/direct-api-transport.ts", "../src/components/retry.ts", "../src/components/transport/conversation-session.ts", "../src/components/transport/sse-parser.ts", "../src/components/transport/transport-utils.ts"],
4
+ "sourcesContent": ["import { getEnv } from \"../env-schema.js\";\n/**\n * Direct API Transport \u2014 talks to any OpenAI-compatible endpoint.\n * Implements IKiroTransport with its own agent loop (send \u2192 stream \u2192 tools \u2192 loop).\n */\n\nimport { logInfo, logWarn, logDebug, logTrace } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { withRetry, isFatal } from \"../retry.js\";\nimport { ConversationSession, type ToolCall, type ContentPart } from \"./conversation-session.js\";\nimport { parseSSEStream, type SSEToolCallDelta } from \"./sse-parser.js\";\nimport { getToolSchemas, executeToolCall } from \"./tool-registry.js\";\nimport { classifyError } from \"./model-health-registry.js\";\nimport { normalizeToolCalls, parseErrorStatus, parseRetryAfter, parseUsageLimitCooldown } from \"./transport-utils.js\";\nimport { recordUsage } from \"../usage-tracker.js\";\nimport type { FallbackPolicy } from \"./fallback-policy.js\";\nimport type { IKiroTransport } from \"./kiro-transport.js\";\n\nconst TAG = \"direct-api\";\n\n\nexport interface DirectApiConfig {\n endpoint: string;\n apiKey?: string;\n model: string;\n maxContext: number;\n maxOutput: number;\n maxTurns: number;\n apiFormat?: \"chat\" | \"responses\" | \"anthropic\";\n thinking?: { style: \"effort\"; default: string } | { style: \"extended\"; default: number };\n fallbacks?: Array<{ endpoint: string; apiKey?: string; model: string; maxContext?: number }>;\n}\n\nexport { normalizeToolCalls } from \"./transport-utils.js\";\n\nexport class DirectApiTransport implements IKiroTransport {\n private readonly config: DirectApiConfig;\n private readonly sessions = new Map<string, ConversationSession>();\n private readonly abortControllers = new Map<string, AbortController>();\n private systemPrompt = \"\";\n private _contextPercent = -1;\n private _lastAnswer = \"\";\n private _timeoutOverrideMs: number | null = null;\n private _toolCallsSucceeded = 0;\n private _intermediateText = \"\";\n private _promptStartedAt: number | null = null;\n private _lastActivityAt: number | null = null;\n private activeEndpoint: string;\n private activeApiKey?: string;\n private activeModel: string;\n private _lastPromptTokens = 0;\n private _activeSessionKey = \"\";\n private _activeUserId = \"master\";\n\n /** Currently active model (may differ from config if on fallback). */\n get currentModel(): string { return this.activeModel; }\n\n onIntermediateResponse?: (text: string) => void;\n onToolCallStart?: (toolName: string) => void;\n onSegmentBreak?: (text: string) => void;\n /** Sandbox policy for tool access control (#681). Set by pipeline before prompt. */\n sandboxPolicy?: import(\"../tool-sandbox.js\").SandboxPolicy;\n /** Called when fallback model is selected \u2014 send notification before response. */\n onFallback?: (model: string, ctxPercent: number, reason?: string) => void;\n /** Cooperative pause check \u2014 if returns true, agent loop breaks between tool calls. */\n isPaused?: () => boolean;\n /** Returns a pending instruction from parent, if any. Consumed once. */\n getPendingInstruction?: () => string | undefined;\n\n /** Context orchestrator \u2014 when set, messages are built from DB instead of in-memory session. */\n contextOrchestrator?: import(\"abmind\").ContextOrchestrator;\n\n private policy: FallbackPolicy | null;\n private emergencyOverride: { endpoint: string; apiKey?: string; model: string; maxContext: number } | null = null;\n\n /** Activate emergency (hailMary) mode \u2014 next prompts bypass the fallback policy. */\n setEmergencyMode(override: { endpoint: string; apiKey?: string; model: string; maxContext: number } | null): void {\n if (!override && !this.emergencyOverride) return; // no-op if already off\n this.emergencyOverride = override;\n if (override) logWarn(TAG, `\uD83D\uDEA8 EMERGENCY MODE: using ${override.model} (paid) \u2014 bypassing fallback chain`);\n else { this.activeModel = this.config.model; logInfo(TAG, `Emergency mode cleared \u2014 restored ${this.config.model}`); }\n }\n\n /** True if emergency (hailMary) mode is active. */\n get isEmergencyMode(): boolean { return this.emergencyOverride !== null; }\n\n constructor(config: DirectApiConfig, policy?: FallbackPolicy) {\n this.config = config;\n this.activeEndpoint = config.endpoint;\n this.activeApiKey = config.apiKey;\n this.activeModel = config.model;\n this.policy = policy ?? null;\n }\n\n async initialize(): Promise<void> {\n const count = this.policy ? this.policy.candidates.length : (this.config.fallbacks?.length ?? 0) + 1;\n const fb = count > 1 ? ` (+${count - 1} fallback${count > 2 ? \"s\" : \"\"})` : \"\";\n logInfo(TAG, `\uD83D\uDD0C Direct API transport (${this.config.endpoint}, model: ${this.config.model}${fb})`);\n }\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n async sendPrompt(sessionKey: string, message: string, image?: { mime: string; base64: string }, userId?: string): Promise<string> {\n const session = this.getOrCreateSession(sessionKey);\n this._activeSessionKey = sessionKey;\n this._activeUserId = userId || \"master\";\n\n // If context orchestrator is active, rebuild messages from DB\n if (this.contextOrchestrator) {\n try {\n const ctx = await this.contextOrchestrator.getContext(sessionKey, this.config.maxContext);\n // Replace session messages with DB-backed context + system prompt\n session.messages = [\n { role: \"system\" as const, content: this.systemPrompt },\n ...ctx.messages.map(m => ({ role: m.role as \"user\" | \"assistant\" | \"tool\", content: m.content })),\n ];\n if (ctx.compacted) logDebug(TAG, `Context compacted for ${sessionKey}`);\n } catch (err) {\n logWarn(TAG, `Context engine failed, falling back to in-memory: ${err}`);\n }\n }\n\n session.addUser(message, image);\n\n this._lastAnswer = \"\";\n this._toolCallsSucceeded = 0;\n this._intermediateText = \"\";\n this._promptStartedAt = Date.now();\n this._lastActivityAt = Date.now();\n\n const ac = new AbortController();\n this.abortControllers.set(sessionKey, ac);\n\n try {\n if (this.emergencyOverride) return await this.sendEmergency(session, ac.signal);\n if (!this.policy) throw new Error(\"DirectApiTransport requires a FallbackPolicy\");\n return await this.sendWithPolicy(session, ac.signal);\n } finally {\n // AfterPrompt hook \u2014 observe-only, fire-and-forget\n const durationMs = Date.now() - (this._promptStartedAt ?? Date.now());\n import(\"../hooks/hook-system.js\").then(({ hasHooks, fire }) => {\n if (!hasHooks(\"AfterPrompt\")) return;\n fire(\"AfterPrompt\", {\n event: \"AfterPrompt\", timestamp: new Date().toISOString(),\n sessionKey, platform: \"\", userId: \"\",\n model: this.activeModel, durationMs,\n inputTokens: this._lastPromptTokens || null,\n outputTokens: null, // not tracked per-prompt in DirectApi\n }).catch(err => logAndSwallow(TAG, \"fire AfterPrompt\", err));\n }).catch(err => logAndSwallow(TAG, \"import hook-system\", err));\n this._promptStartedAt = null;\n this.abortControllers.delete(sessionKey);\n }\n }\n\n private async sendEmergency(session: ConversationSession, signal: AbortSignal): Promise<string> {\n const em = this.emergencyOverride!;\n this.activeEndpoint = em.endpoint;\n this.activeApiKey = em.apiKey;\n this.activeModel = em.model;\n this._lastActivityAt = Date.now();\n logWarn(TAG, `\uD83D\uDEA8 Emergency mode: using ${em.model}`);\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n return result;\n }\n\n private async sendWithPolicy(session: ConversationSession, signal: AbortSignal): Promise<string> {\n const policy = this.policy!;\n const failedAttempts: Array<{ model: string; kind: string; bucket: number }> = [];\n const isPrimary = (m: string): boolean => m === this.config.model;\n\n // Try each candidate via policy\n let candidate = policy.selectModel(this._lastPromptTokens);\n while (candidate) {\n this.activeEndpoint = candidate.endpoint;\n this.activeApiKey = candidate.apiKey;\n this.activeModel = candidate.model;\n this._lastActivityAt = Date.now();\n logDebug(TAG, `Trying model: ${candidate.model}`);\n\n if (!isPrimary(candidate.model) && this.onFallback) {\n const ctxPct = candidate.maxContext > 0 ? Math.round((this._lastPromptTokens / candidate.maxContext) * 100) : -1;\n const lastFail = failedAttempts[failedAttempts.length - 1];\n this.onFallback(candidate.model, ctxPct, lastFail?.kind);\n }\n\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n if (!result || !result.trim()) {\n policy.recordError(candidate, \"empty\");\n } else {\n policy.recordSuccess(candidate);\n }\n return result;\n } catch (err) {\n if (signal.aborted) { session.rollbackToLastUser(); throw err; }\n const errMsg = err instanceof Error ? err.message : String(err);\n // Capability miss \u2014 strip image and retry text-only (#670)\n if (errMsg.includes(\"does not support image input\") || errMsg.includes(\"No endpoints found that support image\")) {\n session.rollbackToLastUser();\n // Strip image parts from session, retry same model text-only\n for (const m of session.messages) {\n if (Array.isArray(m.content)) {\n const textParts = (m.content as Array<{ type: string; text?: string }>).filter(p => p.type === \"text\");\n m.content = textParts.map(p => p.text ?? \"\").join(\"\\n\") || \"User sent an image (not supported by this model).\";\n }\n }\n logWarn(TAG, `${candidate.model} doesn't support images \u2014 retrying text-only`);\n if (this.onIntermediateResponse) this.onIntermediateResponse(\"\u26A0\uFE0F Model doesn't support images via this provider. Sending text-only.\\n\");\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n policy.recordSuccess(candidate);\n return result;\n } catch (retryErr) {\n const retryStatus = this.parseErrorStatus(retryErr);\n const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);\n policy.recordError(candidate, classifyError(retryStatus, retryMsg));\n session.rollbackToLastUser();\n throw retryErr;\n }\n }\n const status = this.parseErrorStatus(err);\n const kind = classifyError(status, errMsg);\n const retryAfterMs = this.parseRetryAfter(err) ?? parseUsageLimitCooldown(errMsg);\n policy.recordError(candidate, kind, retryAfterMs);\n const bucket = policy.registry.getBucketLevel(candidate.model, candidate.endpoint);\n failedAttempts.push({ model: candidate.model, kind, bucket });\n session.rollbackToLastUser();\n logWarn(TAG, `${candidate.model} failed (${kind}, bucket: ${bucket}%${retryAfterMs ? `, retry-after: ${Math.round(retryAfterMs / 1000)}s` : \"\"}): ${errMsg.slice(0, 100)}`);\n }\n\n candidate = policy.selectModel(this._lastPromptTokens);\n }\n\n // Compaction fallback: pick smallest surviving candidate, truncate to fit\n const surviving = policy.survivingCandidates()\n .filter(c => c.maxContext > 0)\n .sort((a, b) => a.maxContext - b.maxContext);\n const smallest = surviving[0];\n\n if (smallest && this._lastPromptTokens > smallest.maxContext * 0.95) {\n logWarn(TAG, `Compacting session to fit ${smallest.model} (${smallest.maxContext} tokens)`);\n session.truncateToFit(smallest.maxContext);\n this.activeEndpoint = smallest.endpoint;\n this.activeApiKey = smallest.apiKey;\n this.activeModel = smallest.model;\n if (this.onFallback) {\n this.onFallback(`${smallest.model} (compacted)`, Math.round((session.estimateTokens() / smallest.maxContext) * 100));\n }\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n if (!result || !result.trim()) policy.recordError(smallest, \"empty\");\n else policy.recordSuccess(smallest);\n return result;\n } catch (err) {\n const status = this.parseErrorStatus(err);\n const errMsg2 = err instanceof Error ? err.message : String(err);\n policy.recordError(smallest, classifyError(status, errMsg2));\n failedAttempts.push({ model: smallest.model, kind: classifyError(status, errMsg2), bucket: policy.registry.getBucketLevel(smallest.model, smallest.endpoint) });\n }\n }\n\n const summary = failedAttempts.map(a => ` - ${a.model}: ${a.kind} (bucket: ${a.bucket}%)`).join(\"\\n\");\n if (policy.lastDecision) {\n logDebug(TAG, `Last decision: ${JSON.stringify(policy.lastDecision)}`);\n }\n throw new Error(`All models exhausted:\\n${summary}`);\n }\n\n private async agentLoop(session: ConversationSession, signal: AbortSignal): Promise<string> {\n let zeroTokenRetries = 0;\n const loopStart = Date.now();\n for (let turn = 0; turn < this.config.maxTurns; turn++) {\n if (signal.aborted) throw new Error(\"Aborted\");\n if (this.isPaused?.()) return \"\u23F8 Session paused. Use `/session resume` to continue.\";\n\n const pendingInstruction = this.getPendingInstruction?.();\n if (pendingInstruction) session.addUser(pendingInstruction);\n\n const { content, toolCalls, usage } = await this.streamCompletion(session, signal);\n\n if (usage) {\n session.updateTokens(usage.prompt_tokens);\n this._contextPercent = session.contextPercent;\n this._lastPromptTokens = usage.prompt_tokens;\n this.contextOrchestrator?.onApiResponse(this._activeSessionKey, usage.prompt_tokens, this.config.maxContext);\n logTrace(TAG, `${this.activeModel} \u2014 ${usage.prompt_tokens}\u2192${usage.completion_tokens ?? 0} tokens, ${Date.now() - (this._lastActivityAt ?? Date.now())}ms`);\n recordUsage(this.activeModel, usage.prompt_tokens, usage.completion_tokens ?? 0);\n }\n\n if (toolCalls.length > 0) {\n session.addAssistant(content, toolCalls);\n logDebug(TAG, `Tool calls: ${toolCalls.map(tc => tc.function.name).join(\", \")}`);\n logTrace(TAG, `Tool args: ${toolCalls.map(tc => {\n // #621: redact abmind_store args based on classification\n if ((tc.function.name === \"abmind_store\" || tc.function.name === \"memory_store\") && /class(?:ification)?[\":\\s]+[23]/.test(tc.function.arguments)) {\n return `${tc.function.name}([REDACTED])`;\n }\n return `${tc.function.name}(${tc.function.arguments})`;\n }).join(\", \")}`);\n\n // Deliver pre-tool text immediately (segment break)\n if (content?.trim()) {\n this.onSegmentBreak?.(content.trim());\n }\n\n for (const tc of toolCalls) {\n if (signal.aborted) throw new Error(\"Aborted\");\n this._lastActivityAt = Date.now();\n this.onToolCallStart?.(tc.function.name ?? \"tool\");\n\n let args: Record<string, string>;\n try { args = JSON.parse(tc.function.arguments); } catch (err) { logAndSwallow(TAG, \"JSON.parse tool args\", err); args = {}; }\n\n const result = await executeToolCall(tc.function.name, args, { userId: this._activeUserId, signal, sandboxPolicy: this.sandboxPolicy });\n session.addToolResult(tc.id, tc.function.name, result);\n\n // #621: scrub secret values from conversation history after store\n if ((tc.function.name === \"abmind_store\" || tc.function.name === \"memory_store\") && parseInt(args.classification ?? args.class ?? \"1\", 10) >= 2) {\n const secretValue = args.content ?? args.value ?? args.translated;\n if (secretValue && secretValue.length > 4) {\n session.scrubFromHistory(secretValue);\n }\n }\n\n try { if (!JSON.parse(result).error) this._toolCallsSucceeded++; } catch (err) { logAndSwallow(TAG, \"JSON.parse tool result\", err); this._toolCallsSucceeded++; }\n }\n continue;\n }\n\n // No tool calls \u2014 final response\n const answer = content ?? \"\";\n // Budget-aware backoff on 0\u21920 token response (#732)\n if (!answer && usage && usage.prompt_tokens === 0) {\n const elapsed = Date.now() - loopStart;\n const remaining = (this._timeoutOverrideMs ?? 60_000) - elapsed;\n const retryDelay = 5000 + (zeroTokenRetries * 3000);\n if (remaining > retryDelay + 5000) {\n zeroTokenRetries++;\n logWarn(TAG, `API returned 0 tokens \u2014 retry #${zeroTokenRetries} after ${retryDelay / 1000}s (${Math.round(remaining / 1000)}s left)`);\n await new Promise(r => setTimeout(r, retryDelay));\n continue;\n }\n }\n session.addAssistant(answer);\n return answer;\n }\n\n logWarn(TAG, `Max turns (${this.config.maxTurns}) reached`);\n const last = session.messages.at(-1)?.content;\n return (typeof last === \"string\" ? last : null) ?? \"(max turns reached)\";\n }\n\n private parseErrorStatus(err: unknown): number { return parseErrorStatus(err); }\n\n /** Extract Retry-After from error (seconds or date). Returns ms or undefined. */\n private parseRetryAfter(err: unknown): number | undefined { return parseRetryAfter(err); }\n\n private async streamCompletion(\n session: ConversationSession,\n signal: AbortSignal,\n ): Promise<{ content: string | null; toolCalls: ToolCall[]; usage: { prompt_tokens: number; completion_tokens: number } | null }> {\n // Compose pipeline signal (user /stop) with per-request timeout\n const timeoutCtrl = new AbortController();\n const timer = setTimeout(() => timeoutCtrl.abort(new Error(\"model API timeout\")), this._timeoutOverrideMs ?? getEnv().modelApiTimeoutMs);\n const composed = AbortSignal.any([signal, timeoutCtrl.signal]);\n\n try {\n // Responses API format (#465, streaming #472)\n if (this.config.apiFormat === \"responses\") {\n const { toResponsesRequest } = await import(\"./responses-adapter.js\");\n const { parseResponsesSSE } = await import(\"./sse-parser-responses.js\");\n const msgs = session.messages.map(m => ({ role: m.role, content: m.content ?? \"\" as string | ContentPart[] }));\n const reqBody = { ...toResponsesRequest(this.activeModel, msgs, getToolSchemas(this.sandboxPolicy), this.config.maxOutput), stream: true };\n const hdrs: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.activeApiKey) hdrs[\"Authorization\"] = `Bearer ${this.activeApiKey}`;\n const res = await fetch(`${this.activeEndpoint}/responses`, {\n method: \"POST\", headers: hdrs, body: JSON.stringify(reqBody), signal: composed,\n });\n if (!res.ok) { const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; }); throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`); }\n\n let content = \"\";\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n const toolCallAcc = new Map<string, { id: string; name: string; arguments: string }>();\n for await (const event of parseResponsesSSE(res, composed)) {\n this._lastActivityAt = Date.now();\n if (event.type === \"chunk\") { content += event.content; this._intermediateText += event.content; this.onIntermediateResponse?.(event.content); }\n else if (event.type === \"tool_call_delta\") { this.accumulateToolCall(toolCallAcc, event); }\n else if (event.type === \"done\") { usage = event.usage; }\n }\n clearTimeout(timer);\n const toolCalls = this.finalizeToolCalls(toolCallAcc);\n return { content: content || null, toolCalls, usage };\n }\n\n // Anthropic Messages API format (#467, streaming #472)\n if (this.config.apiFormat === \"anthropic\") {\n const { toAnthropicRequest, buildAnthropicHeaders } = await import(\"./anthropic-adapter.js\");\n const { parseAnthropicSSE } = await import(\"./sse-parser-anthropic.js\");\n const msgs = session.messages.map(m => ({ role: m.role, content: m.content ?? \"\" as string | ContentPart[], tool_call_id: m.tool_call_id }));\n const reqBody = { ...toAnthropicRequest(this.activeModel, msgs, this.config.maxOutput, getToolSchemas(this.sandboxPolicy)), stream: true };\n const hdrs = buildAnthropicHeaders(this.activeApiKey ?? \"\");\n const res = await fetch(`${this.activeEndpoint}/messages`, {\n method: \"POST\", headers: hdrs, body: JSON.stringify(reqBody), signal: composed,\n });\n if (!res.ok) { const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; }); throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`); }\n\n let content = \"\";\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n const toolCallAcc = new Map<string, { id: string; name: string; arguments: string }>();\n for await (const event of parseAnthropicSSE(res, composed)) {\n this._lastActivityAt = Date.now();\n if (event.type === \"chunk\") { content += event.content; this._intermediateText += event.content; this.onIntermediateResponse?.(event.content); }\n else if (event.type === \"tool_call_delta\") { this.accumulateToolCall(toolCallAcc, event); }\n else if (event.type === \"done\") { usage = event.usage; }\n }\n clearTimeout(timer);\n const toolCalls = this.finalizeToolCalls(toolCallAcc);\n return { content: content || null, toolCalls, usage };\n }\n\n const body: Record<string, unknown> = {\n model: this.activeModel,\n messages: session.messages,\n tools: getToolSchemas(this.sandboxPolicy),\n max_tokens: this.config.maxOutput,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n // #466: inject thinking/reasoning parameters\n if (this.config.thinking) {\n if (this.config.thinking.style === \"effort\") {\n body.reasoning_effort = this.config.thinking.default;\n } else if (this.config.thinking.style === \"extended\") {\n body.thinking = { type: \"enabled\", budget_tokens: this.config.thinking.default };\n }\n }\n\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.activeApiKey) headers[\"Authorization\"] = `Bearer ${this.activeApiKey}`;\n\n const response = await withRetry(\n async () => {\n const res = await fetch(`${this.activeEndpoint}/chat/completions`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: composed,\n });\n if (!res.ok) {\n const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; });\n throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`);\n }\n return res;\n },\n {\n attempts: 3, minDelayMs: 3000,\n isRecoverable: (err) => {\n const msg = err instanceof Error ? err.message : String(err);\n if (/model API timeout/.test(msg)) return false;\n // Don't retry 429/401/402/403 \u2014 let the bucket loop handle model switching\n if (/API error (429|401|402|403)/.test(msg)) return false;\n return !isFatal(err);\n },\n },\n );\n\n let content = \"\";\n const toolCallAccumulator = new Map<string, { id: string; name: string; arguments: string }>();\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n\n for await (const event of parseSSEStream(response, composed)) {\n this._lastActivityAt = Date.now();\n\n switch (event.type) {\n case \"chunk\":\n content += event.content;\n this._intermediateText += event.content;\n this.onIntermediateResponse?.(event.content);\n break;\n\n case \"tool_call_delta\":\n this.accumulateToolCall(toolCallAccumulator, event);\n break;\n\n case \"done\":\n usage = event.usage;\n break;\n }\n }\n\n const toolCalls = this.finalizeToolCalls(toolCallAccumulator);\n\n return { content: content || null, toolCalls, usage };\n } finally {\n clearTimeout(timer);\n }\n }\n\n /** Accumulate streaming tool call deltas by ID (Ollama-safe: tracks by ID not index). */\n private accumulateToolCall(\n acc: Map<string, { id: string; name: string; arguments: string }>,\n delta: SSEToolCallDelta,\n ): void {\n // Use ID if available, fall back to index-based key\n const key = delta.id ?? `idx:${delta.index}`;\n const existing = acc.get(key);\n if (existing) {\n if (delta.arguments) existing.arguments += delta.arguments;\n } else {\n acc.set(key, { id: delta.id ?? `call_${acc.size}`, name: delta.name ?? \"\", arguments: delta.arguments ?? \"\" });\n }\n }\n\n /**\n * Convert accumulated tool call map \u2192 normalized ToolCall array.\n * Handles model fragmentation: some models (nemotron, mistral-free) split a\n * single tool call across multiple SSE entries with different indices/IDs.\n * Pattern: [name=\"execute_bash\" args=\"{}\"], [name=\"\" args=\"\"], [name=\"\" args='{\"command\":\"...\"}']\n * Fix: merge adjacent unnamed entries' args into the preceding named entry.\n */\n private finalizeToolCalls(acc: Map<string, { id: string; name: string; arguments: string }>): ToolCall[] {\n const raw: ToolCall[] = [...acc.values()].map(tc => ({\n id: tc.id, type: \"function\" as const, function: { name: tc.name, arguments: tc.arguments },\n }));\n return normalizeToolCalls(raw);\n }\n\n private getOrCreateSession(sessionKey: string): ConversationSession {\n let session = this.sessions.get(sessionKey);\n if (!session) {\n session = new ConversationSession(this.systemPrompt, this.config.maxContext);\n this.sessions.set(sessionKey, session);\n }\n return session;\n }\n\n async resetSession(sessionKey: string): Promise<void> {\n const session = this.sessions.get(sessionKey);\n if (session) session.reset(this.systemPrompt);\n else this.sessions.delete(sessionKey);\n logInfo(TAG, `Session ${sessionKey} reset`);\n }\n\n async sendInterrupt(): Promise<void> {\n for (const ac of this.abortControllers.values()) ac.abort();\n }\n\n destroy(): void {\n for (const ac of this.abortControllers.values()) ac.abort();\n this.sessions.clear();\n this.abortControllers.clear();\n }\n\n get isReady(): boolean { return true; }\n get contextPercent(): number { return this._contextPercent; }\n get answerOnly(): string { return this._lastAnswer; }\n get toolCallsSucceeded(): number { return this._toolCallsSucceeded; }\n\n /** Hot-swap the active model. Takes effect on next API call. */\n setModel(model: string): void {\n this.activeModel = model;\n (this.config as { model: string }).model = model;\n logInfo(TAG, `Model switched (user): ${model}`);\n }\n\n /** Hot-swap provider+model+policy. Rejects if prompt is in flight. */\n switchProvider(opts: { endpoint: string; apiKey?: string; model: string; maxContext: number; policy: FallbackPolicy }): void {\n if (this._promptStartedAt !== null) {\n throw new Error(\"Cannot switch provider while a prompt is in progress \u2014 try after the response\");\n }\n this.activeEndpoint = opts.endpoint;\n this.activeApiKey = opts.apiKey;\n this.activeModel = opts.model;\n (this.config as { model: string; maxContext: number }).model = opts.model;\n (this.config as { maxContext: number }).maxContext = opts.maxContext;\n this.policy = opts.policy;\n logInfo(TAG, `Provider switched: ${opts.model} @ ${opts.endpoint} (maxCtx=${opts.maxContext})`);\n }\n\n /** Get current active model name. */\n getModel(): string { return this.activeModel; }\n get intermediateDeliveredText(): string { return this._intermediateText; }\n get transportCommands(): string[] { return []; }\n\n // Watchdog support\n get promptStartedAt(): number | null { return this._promptStartedAt; }\n setTimeoutOverride(ms: number | null): void { this._timeoutOverrideMs = ms; }\n\n get lastActivityAt(): number | null { return this._lastActivityAt; }\n\n private readonly _stuckTimeout = getEnv().watchdogSilentSec * 1000;\n\n async healthCheck(): Promise<void> {\n if (!this._promptStartedAt) return;\n const idle = Date.now() - (this._lastActivityAt ?? this._promptStartedAt);\n if (idle > this._stuckTimeout) {\n logWarn(TAG, `[transport-health] Prompt stuck (${Math.round(idle / 1000)}s idle) \u2014 aborting`);\n await this.sendInterrupt();\n }\n }\n}\n", "/**\n * Generic retry utility with escalating backoff, jitter, and fatal error detection.\n */\n\nexport interface RetryPolicy {\n /** Max attempts (including first). Default: 3 */\n attempts?: number;\n /** Initial delay in ms. Default: 300 */\n minDelayMs?: number;\n /** Max delay cap in ms. Default: 30_000 */\n maxDelayMs?: number;\n /** Jitter factor 0-1 (0.1 = \u00B110%). Default: 0.1 */\n jitter?: number;\n /** Return false to stop retrying (fatal error). Default: always retry. */\n isRecoverable?: (err: unknown) => boolean;\n /** Extract delay hint from error (e.g. rate limit header). */\n getDelayHint?: (err: unknown) => number | undefined;\n /** Called before each retry. */\n onAttempt?: (info: { attempt: number; maxAttempts: number; err: unknown; delayMs: number }) => void;\n}\n\nconst DEFAULTS = { attempts: 3, minDelayMs: 300, maxDelayMs: 30_000, jitter: 0.1 };\n\n/** Known-fatal error patterns \u2014 don't retry these. */\nexport const FATAL_PATTERNS = [\n /auth.*fail|invalid.*key|unauthorized/i,\n /model.*not found|not supported/i,\n /account.*suspended|quota.*exceeded/i,\n /bot was blocked/i,\n];\n\n/** Check if an error matches a known-fatal pattern. */\nexport function isFatal(err: unknown): boolean {\n const msg = err instanceof Error ? err.message : String(err);\n return FATAL_PATTERNS.some(p => p.test(msg));\n}\n\n/** Execute `fn` with retry, escalating backoff, and jitter. */\nexport async function withRetry<T>(fn: () => Promise<T>, policy?: RetryPolicy): Promise<T> {\n const attempts = Math.max(1, policy?.attempts ?? DEFAULTS.attempts);\n const minDelay = Math.max(0, policy?.minDelayMs ?? DEFAULTS.minDelayMs);\n const maxDelay = Math.max(minDelay, policy?.maxDelayMs ?? DEFAULTS.maxDelayMs);\n const jitter = Math.max(0, Math.min(1, policy?.jitter ?? DEFAULTS.jitter));\n const isRecoverable = policy?.isRecoverable ?? ((err: unknown) => !isFatal(err));\n\n let lastErr: unknown;\n for (let i = 0; i < attempts; i++) {\n try {\n return await fn();\n } catch (err) {\n lastErr = err;\n if (i === attempts - 1) break;\n if (!isRecoverable(err)) break;\n\n const hint = policy?.getDelayHint?.(err);\n const baseDelay = hint ?? Math.min(maxDelay, minDelay * Math.pow(2, i));\n const offset = jitter > 0 ? (Math.random() * 2 - 1) * jitter * baseDelay : 0;\n const delayMs = Math.max(0, Math.round(baseDelay + offset));\n\n policy?.onAttempt?.({ attempt: i + 1, maxAttempts: attempts, err, delayMs });\n await new Promise(r => setTimeout(r, delayMs));\n }\n }\n throw lastErr;\n}\n", "/**\n * Per-session conversation state for DirectApiTransport.\n * Manages message history and token tracking.\n */\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } };\n\nexport type ChatMessage = {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | ContentPart[] | null;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n name?: string;\n};\n\nexport type ToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport class ConversationSession {\n messages: ChatMessage[] = [];\n totalPromptTokens = 0;\n private readonly maxContext: number;\n\n constructor(systemPrompt: string, maxContext: number) {\n this.maxContext = maxContext;\n this.messages.push({ role: \"system\", content: systemPrompt });\n }\n\n addUser(content: string, image?: { mime: string; base64: string }): void {\n if (image) {\n this.messages.push({ role: \"user\", content: [\n { type: \"image_url\", image_url: { url: `data:${image.mime};base64,${image.base64}` } },\n { type: \"text\", text: content },\n ]});\n } else {\n this.messages.push({ role: \"user\", content });\n }\n }\n\n addAssistant(content: string | null, toolCalls?: ToolCall[]): void {\n const msg: ChatMessage = { role: \"assistant\", content };\n if (toolCalls?.length) msg.tool_calls = toolCalls;\n this.messages.push(msg);\n }\n\n addToolResult(toolCallId: string, name: string, content: string): void {\n this.messages.push({ role: \"tool\", content, tool_call_id: toolCallId, name });\n }\n\n updateTokens(promptTokens: number): void {\n this.totalPromptTokens = promptTokens;\n }\n\n get contextPercent(): number {\n if (this.maxContext <= 0) return 0;\n return Math.round((this.totalPromptTokens / this.maxContext) * 100);\n }\n\n reset(systemPrompt: string): void {\n this.messages = [{ role: \"system\", content: systemPrompt }];\n this.totalPromptTokens = 0;\n }\n\n /** Roll back to last user message \u2014 remove everything after it for clean fallback. */\n rollbackToLastUser(): void {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i]!.role === \"user\") {\n this.messages.splice(i + 1);\n return;\n }\n }\n }\n\n /** Rough token estimate: ~4 chars per token. */\n estimateTokens(): number {\n return Math.round(this.messages.reduce((sum, m) => sum + (typeof m.content === \"string\" ? m.content.length : 0), 0) / 4);\n }\n\n /** Drop oldest non-system messages until estimated tokens fit within limit. */\n truncateToFit(maxTokens: number): void {\n while (this.messages.length > 2 && this.estimateTokens() > maxTokens * 0.85) {\n this.messages.splice(1, 1); // remove oldest after system prompt\n }\n this.totalPromptTokens = this.estimateTokens();\n }\n\n /** #621: Replace a literal secret value with [REDACTED] across all messages. */\n scrubFromHistory(value: string): void {\n for (const msg of this.messages) {\n if (typeof msg.content === \"string\" && msg.content.includes(value)) {\n msg.content = msg.content.replaceAll(value, \"[REDACTED]\");\n }\n }\n }\n}\n", "/**\n * SSE stream parser for OpenAI-compatible chat completions.\n * Parses Server-Sent Events into typed events.\n */\n\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"sse_parser\";\n\nexport type SSEChunkEvent = { type: \"chunk\"; content: string };\nexport type SSEToolCallDelta = { type: \"tool_call_delta\"; index: number; id?: string; name?: string; arguments?: string };\nexport type SSEDoneEvent = { type: \"done\"; usage: { prompt_tokens: number; completion_tokens: number } | null };\nexport type SSEEvent = SSEChunkEvent | SSEToolCallDelta | SSEDoneEvent;\n\nconst STALE_TIMEOUT_MS = 90_000;\n\nexport async function* parseSSEStream(\n response: Response,\n signal: AbortSignal,\n): AsyncGenerator<SSEEvent> {\n const reader = response.body?.getReader();\n if (!reader) throw new Error(\"Response body is not readable\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let lastChunkAt = Date.now();\n let staleTimer: ReturnType<typeof setTimeout> | null = null;\n\n const resetStaleTimer = (): void => {\n lastChunkAt = Date.now();\n if (staleTimer) clearTimeout(staleTimer);\n staleTimer = setTimeout(() => {\n if (Date.now() - lastChunkAt >= STALE_TIMEOUT_MS) {\n reader.cancel(\"stale stream\").catch(err => logAndSwallow(TAG, \"reader.cancel stale\", err));\n }\n }, STALE_TIMEOUT_MS);\n };\n\n try {\n resetStaleTimer();\n while (true) {\n if (signal.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n\n resetStaleTimer();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") return;\n\n let parsed: Record<string, unknown>;\n try { parsed = JSON.parse(data); } catch (err) { logAndSwallow(TAG, \"JSON.parse SSE chunk\", err); continue; }\n\n // Usage in final chunk (stream_options: { include_usage: true })\n if (parsed[\"usage\"]) {\n const u = parsed[\"usage\"] as Record<string, number>;\n yield { type: \"done\", usage: { prompt_tokens: u[\"prompt_tokens\"] ?? 0, completion_tokens: u[\"completion_tokens\"] ?? 0 } };\n }\n\n const choices = parsed[\"choices\"] as Array<Record<string, unknown>> | undefined;\n if (!choices?.length) continue;\n const delta = choices[0]![\"delta\"] as Record<string, unknown> | undefined;\n if (!delta) continue;\n\n // Text content\n if (typeof delta[\"content\"] === \"string\" && delta[\"content\"]) {\n yield { type: \"chunk\", content: delta[\"content\"] as string };\n }\n\n // Tool calls\n const toolCalls = delta[\"tool_calls\"] as Array<Record<string, unknown>> | undefined;\n if (toolCalls) {\n for (const tc of toolCalls) {\n const fn = tc[\"function\"] as Record<string, string> | undefined;\n yield {\n type: \"tool_call_delta\",\n index: (tc[\"index\"] as number) ?? 0,\n id: tc[\"id\"] as string | undefined,\n name: fn?.[\"name\"],\n arguments: fn?.[\"arguments\"],\n };\n }\n }\n }\n }\n } finally {\n if (staleTimer) clearTimeout(staleTimer);\n reader.releaseLock();\n }\n}\n", "/**\n * transport-utils.ts \u2014 Pure utility functions for the transport layer.\n * No I/O, no state, no side effects (except logging).\n */\n\nimport { logWarn } from \"../logger.js\";\nimport type { ToolCall } from \"./conversation-session.js\";\n\nconst TAG = \"direct-api\";\n\n/**\n * Normalize tool calls from models that fragment a single call across multiple entries.\n * Pattern: [name=\"execute_bash\" args=\"{}\"], [name=\"\" args=\"\"], [name=\"\" args='{\"command\":\"...\"}']\n * Fix: merge next unnamed entry's args into preceding named entry. Drop remaining unnamed.\n */\nexport function normalizeToolCalls(raw: ToolCall[]): ToolCall[] {\n if (raw.length <= 1) return raw;\n\n const result: ToolCall[] = [];\n for (let i = 0; i < raw.length; i++) {\n const tc = raw[i]!;\n if (tc.function.name) {\n if (!tc.function.arguments || tc.function.arguments === \"{}\") {\n // Look ahead for the next unnamed entry with real args\n for (let j = i + 1; j < raw.length; j++) {\n const next = raw[j]!;\n if (next.function.name) break; // hit another named entry, stop\n if (next.function.arguments && next.function.arguments !== \"{}\") {\n tc.function.arguments = next.function.arguments;\n i = j; // skip all entries up to and including the merged one\n break;\n }\n }\n }\n result.push(tc);\n }\n }\n\n if (result.length !== raw.length) {\n logWarn(TAG, `Normalized ${raw.length} tool call entries \u2192 ${result.length} (model fragmentation): ${raw.map(tc => `${tc.function.name || \"(unnamed)\"}(${tc.function.arguments.slice(0, 60)})`).join(\", \")}`);\n }\n return result;\n}\n\n/** Extract HTTP status code from error message. Returns 0 if not found. */\nexport function parseErrorStatus(err: unknown): number {\n const msg = err instanceof Error ? err.message : String(err);\n const m = /API error (\\d+)/.exec(msg);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\n/** Extract Retry-After from error (seconds or date). Returns ms or undefined. */\nexport function parseRetryAfter(err: unknown): number | undefined {\n const msg = err instanceof Error ? err.message : String(err);\n const jsonMatch = /retry[_-]after[\"\\s:]+(\\d+(?:\\.\\d+)?)/i.exec(msg);\n if (jsonMatch) return Math.ceil(parseFloat(jsonMatch[1]!) * 1000);\n const resetMatch = /x-ratelimit-reset[\"\\s:]+(\\d{10,13})/i.exec(msg);\n if (resetMatch) {\n const ts = parseInt(resetMatch[1]!, 10);\n const ms = ts < 1e12 ? ts * 1000 : ts;\n const delta = ms - Date.now();\n return delta > 0 ? delta : undefined;\n }\n return undefined;\n}\n\n/** Detect \"day/week/month limit\" in error message and return cooldown ms. */\nexport function parseUsageLimitCooldown(message: string): number | undefined {\n const lower = message.toLowerCase();\n if (!lower.includes(\"limit\")) return undefined;\n if (lower.includes(\"day\")) {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n tomorrow.setHours(0, 0, 0, 0);\n return tomorrow.getTime() - Date.now();\n }\n if (lower.includes(\"week\")) {\n const now = new Date();\n const daysUntilMonday = (8 - now.getDay()) % 7 || 7;\n const monday = new Date(now);\n monday.setDate(monday.getDate() + daysUntilMonday);\n monday.setHours(0, 0, 0, 0);\n return monday.getTime() - Date.now();\n }\n if (lower.includes(\"month\")) {\n const now = new Date();\n const nextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n return nextMonth.getTime() - Date.now();\n }\n return undefined;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["TAG", "TAG", "content", "usage", "toolCalls"]
7
+ }
@@ -1,48 +1,49 @@
1
- import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  BOT_COMMANDS,
4
5
  ResponseFormatter,
5
6
  SecurityGate,
6
7
  emojiToScore
7
- } from "./chunk-D2DCBO6M.js";
8
+ } from "./chunk-R36WIOYX.js";
8
9
  import {
9
10
  require_src
10
- } from "./chunk-TZHIDLDS.js";
11
+ } from "./chunk-P6PN34XD.js";
11
12
  import {
12
13
  formatReactionSignal,
13
14
  handleInboundMessage
14
- } from "./chunk-BHMZ4RCC.js";
15
- import "./chunk-HX7Y7EYP.js";
16
- import "./chunk-V76TVMCM.js";
17
- import "./chunk-X6TERNVJ.js";
18
- import "./chunk-UCQ2WC3B.js";
15
+ } from "./chunk-TXRWQIQQ.js";
16
+ import "./chunk-NIRYBWUW.js";
17
+ import "./chunk-3MO2MDXJ.js";
18
+ import "./chunk-WX7GHGFX.js";
19
+ import "./chunk-AUQD2PKM.js";
19
20
  import {
20
21
  loadUsers
21
- } from "./chunk-GST5T3WZ.js";
22
- import "./chunk-OP7BTAWY.js";
23
- import "./chunk-GRNENTPA.js";
24
- import "./chunk-CEVRHKJY.js";
25
- import "./chunk-PLCY3GFH.js";
26
- import "./chunk-M6VBAPNT.js";
22
+ } from "./chunk-J5YIMCLT.js";
23
+ import "./chunk-JAJ3DUQ2.js";
24
+ import "./chunk-G6IXMYIO.js";
25
+ import "./chunk-UDZIZB5F.js";
26
+ import "./chunk-XLLSPBBT.js";
27
+ import "./chunk-MZWMYN4O.js";
27
28
  import {
28
29
  init_log_and_swallow,
29
30
  logAndSwallow
30
- } from "./chunk-FMWKEPM7.js";
31
+ } from "./chunk-EX2SRTUE.js";
31
32
  import {
32
33
  getEnv,
33
34
  init_env_schema
34
- } from "./chunk-JCJS4ZIB.js";
35
+ } from "./chunk-AQVOAQQI.js";
35
36
  import {
36
37
  init_logger,
37
38
  logDebug,
38
39
  logError,
39
40
  logInfo,
40
41
  logWarn
41
- } from "./chunk-BUUVFUPO.js";
42
- import "./chunk-X76UX47U.js";
42
+ } from "./chunk-2BY6I4P5.js";
43
+ import "./chunk-MJ6PHMOK.js";
43
44
  import {
44
45
  __toESM
45
- } from "./chunk-NWDBD4PA.js";
46
+ } from "./chunk-7K2YZTLD.js";
46
47
 
47
48
  // src/platforms/discord/discord-api.ts
48
49
  init_log_and_swallow();
@@ -398,8 +399,8 @@ var DiscordAdapter = class {
398
399
  }
399
400
  /** Interactive model picker — ephemeral select menus. */
400
401
  async handleModelPicker(interaction) {
401
- const { ActionRowBuilder, StringSelectMenuBuilder } = await import("./src-JL4PVO23.js");
402
- const { loadTransport } = await import("./transport-config-YLXU33RO.js");
402
+ const { ActionRowBuilder, StringSelectMenuBuilder } = await import("./src-Z3WR7SRT.js");
403
+ const { loadTransport } = await import("./transport-config-ANPS2RYT.js");
403
404
  const tc = loadTransport();
404
405
  if (!tc) {
405
406
  await interaction.reply({ content: "No transport config.", ephemeral: true });
@@ -420,7 +421,7 @@ var DiscordAdapter = class {
420
421
  await selectInteraction.update({ content: "Provider not found.", components: [] });
421
422
  return;
422
423
  }
423
- const { getModelsForProvider } = await import("./transport-config-YLXU33RO.js");
424
+ const { getModelsForProvider } = await import("./transport-config-ANPS2RYT.js");
424
425
  const models = getModelsForProvider(providerId).filter((m) => m.entry.status === "alive" || !m.entry.status).slice(0, 25);
425
426
  if (models.length === 0) {
426
427
  await selectInteraction.update({ content: `No models for ${providerId}.`, components: [] });
@@ -490,7 +491,7 @@ Select model:`, components: [modelRow] });
490
491
  let mediaPath;
491
492
  if (message.attachments?.length) {
492
493
  try {
493
- const { saveInboundMedia } = await import("./media-utils-XNNDTYFI.js");
494
+ const { saveInboundMedia } = await import("./media-utils-QBY5WBF3.js");
494
495
  const att = message.attachments[0];
495
496
  const res = await fetch(att.url);
496
497
  if (res.ok) {
@@ -581,4 +582,4 @@ export {
581
582
  DISCORD_CAPABILITIES,
582
583
  DiscordAdapter
583
584
  };
584
- //# sourceMappingURL=discord-adapter-YYWVMPPU.js.map
585
+ //# sourceMappingURL=discord-adapter-FBJOJSTW.js.map
@@ -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 } 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 readonly deps: DiscordAdapterDeps;\n private poller: DiscordPoller | null = null;\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 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: `\u2705 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 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 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 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) {\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 await handleInboundMessage(inbound, this, this.deps.pipeline);\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 resolvedUserId = loadUsers().byPlatformId.get(\"discord:\" + user.id)?.userId ?? \"unknown\";\n const updated = this.deps.memory.updateEmotionByPlatformId(resolvedUserId, messageId, score);\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": "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",
5
+ "mappings": "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",
6
6
  "names": ["TAG", "TAG"]
7
7
  }