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,136 @@
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);
3
+ import {
4
+ buildUsersBlock,
5
+ loadUsers
6
+ } from "./chunk-J5YIMCLT.js";
7
+ import {
8
+ init_log_and_swallow,
9
+ logAndSwallow
10
+ } from "./chunk-EX2SRTUE.js";
11
+ import {
12
+ getEnv,
13
+ init_env_schema
14
+ } from "./chunk-AQVOAQQI.js";
15
+ import {
16
+ init_logger,
17
+ logDebug,
18
+ logInfo,
19
+ logTrace,
20
+ logWarn
21
+ } from "./chunk-2BY6I4P5.js";
22
+ import {
23
+ abtarsHome,
24
+ init_paths
25
+ } from "./chunk-MJ6PHMOK.js";
26
+
27
+ // src/components/soul-loader.ts
28
+ init_log_and_swallow();
29
+ init_env_schema();
30
+ init_logger();
31
+ init_paths();
32
+ import { existsSync, readFileSync } from "node:fs";
33
+ import { join } from "node:path";
34
+ var TAG = "soul-loader";
35
+ var HOST_CORE_DIR = join(abtarsHome(), "core");
36
+ function readOr(path) {
37
+ try {
38
+ return existsSync(path) ? readFileSync(path, "utf-8").trim() : "";
39
+ } catch {
40
+ return "";
41
+ }
42
+ }
43
+ function buildModelInstructions() {
44
+ const lines = [];
45
+ if (getEnv().primingModelTopics) {
46
+ lines.push("End each response with [TOPICS: kw1, kw2, kw3] \u2014 your top 3 topics from this exchange. Keep them English, lowercase, concise.");
47
+ }
48
+ return lines.length > 0 ? `# Model Instructions
49
+
50
+ ${lines.join("\n")}` : "";
51
+ }
52
+ function loadSoulBundle(memory) {
53
+ const parts = [];
54
+ let bundle = null;
55
+ try {
56
+ bundle = memory?.getSessionBundle() ?? null;
57
+ } catch (err) {
58
+ logAndSwallow("soul_loader", "op", err);
59
+ }
60
+ const soul = bundle?.soul || readOr(join(HOST_CORE_DIR, "SOUL.md"));
61
+ const profile = bundle?.profile || readOr(join(HOST_CORE_DIR, "user_profile.md"));
62
+ const notes = bundle?.notes || readOr(join(HOST_CORE_DIR, "agent_notes.md"));
63
+ const memoryTools = bundle?.memoryTools || readOr(join(HOST_CORE_DIR, "TOOLS.md"));
64
+ const coreFacts = bundle?.coreFacts || readOr(join(HOST_CORE_DIR, "core_facts.md"));
65
+ if (soul) parts.push(soul);
66
+ if (memoryTools) parts.push(memoryTools);
67
+ if (profile) parts.push(profile);
68
+ if (notes) parts.push(notes);
69
+ if (coreFacts) parts.push(coreFacts);
70
+ const skillsCatalog = readOr(join(HOST_CORE_DIR, "skills_catalog.md"));
71
+ if (skillsCatalog) parts.push(skillsCatalog);
72
+ const modelInstructions = buildModelInstructions();
73
+ if (modelInstructions) parts.push(modelInstructions);
74
+ try {
75
+ const arcs = memory?.getEmotionalArcs() ?? [];
76
+ if (arcs.length > 0) {
77
+ const ARC_LABELS = { "\u2191": "user sentiment improving", "\u2193": "user sentiment worsening \u2014 be careful", "\u2195": "volatile \u2014 user feelings fluctuate", "\u2192": "stable" };
78
+ const lines = arcs.map((a) => `- ${a.topic}: ${a.arc} (${ARC_LABELS[a.arc] ?? "unknown"})`);
79
+ parts.push(`[EMOTIONAL CONTEXT]
80
+ ${lines.join("\n")}`);
81
+ }
82
+ } catch (err) {
83
+ logAndSwallow("soul_loader", "op", err);
84
+ }
85
+ try {
86
+ const registry = loadUsers();
87
+ if (registry.users.length > 0) parts.push(buildUsersBlock(registry));
88
+ } catch (err) {
89
+ logAndSwallow("soul_loader", "op", err);
90
+ }
91
+ const now = /* @__PURE__ */ new Date();
92
+ const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
93
+ parts.push(`[CURRENT TIME] ${now.toLocaleDateString("en-GB")} ${days[now.getDay()]}, ${now.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" })}`);
94
+ if (parts.length === 0) {
95
+ logWarn(TAG, "No session bundle files found");
96
+ return null;
97
+ }
98
+ logInfo(TAG, `Session bundle: ${parts.length} parts (abmind: ${bundle ? "API" : "fallback"})`);
99
+ logDebug(TAG, `Bundle parts: soul=${!!soul} profile=${!!profile} notes=${!!notes} memTools=${!!memoryTools} coreFacts=${!!coreFacts} skills=${!!skillsCatalog}`);
100
+ const assembled = parts.join("\n\n---\n\n");
101
+ const partLabels = ["soul", "profile", "notes", "memTools", "coreFacts", "skills", "time", "extra1", "extra2"];
102
+ for (let i = 0; i < parts.length; i++) {
103
+ const p = parts[i];
104
+ const flat = p.replace(/\n/g, " ");
105
+ const preview = p.length <= 75 ? flat : `${flat.slice(0, 50)}\u2026${flat.slice(-20)}`;
106
+ logTrace(TAG, `[${partLabels[i] ?? i}] (${p.length}ch) ${preview}`);
107
+ }
108
+ return assembled;
109
+ }
110
+ function loadMinimalSoul(memory) {
111
+ const parts = [];
112
+ let bundle = null;
113
+ try {
114
+ bundle = memory?.getSessionBundle() ?? null;
115
+ } catch (err) {
116
+ logAndSwallow("soul_loader", "op", err);
117
+ }
118
+ const notes = bundle?.notes || readOr(join(HOST_CORE_DIR, "agent_notes.md"));
119
+ const memoryTools = bundle?.memoryTools || readOr(join(HOST_CORE_DIR, "TOOLS.md"));
120
+ if (notes) parts.push(notes);
121
+ if (memoryTools) parts.push(memoryTools);
122
+ const skillsCatalog = readOr(join(HOST_CORE_DIR, "skills_catalog.md"));
123
+ if (skillsCatalog) parts.push(skillsCatalog);
124
+ const now = /* @__PURE__ */ new Date();
125
+ const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
126
+ parts.push(`[CURRENT TIME] ${now.toLocaleDateString("en-GB")} ${days[now.getDay()]}, ${now.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" })}`);
127
+ if (parts.length === 0) return null;
128
+ logInfo(TAG, `Minimal soul (Code): ${parts.length} parts`);
129
+ return parts.join("\n\n---\n\n");
130
+ }
131
+
132
+ export {
133
+ loadSoulBundle,
134
+ loadMinimalSoul
135
+ };
136
+ //# sourceMappingURL=chunk-AUQD2PKM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/soul-loader.ts"],
4
+ "sourcesContent": ["import { logAndSwallow } from \"./log-and-swallow.js\";\nimport { getEnv } from \"./env-schema.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { logInfo, logDebug, logWarn, logTrace } from \"./logger.js\";\nimport { abtarsHome } from \"../paths.js\";\nimport { loadUsers, buildUsersBlock } from \"./user-registry.js\";\nimport type { MemoryManager } from \"abmind\";\n\nconst TAG = \"soul-loader\";\nconst HOST_CORE_DIR = join(abtarsHome(), \"core\");\n\n/** Read a single file, return empty string on failure. */\nfunction readOr(path: string): string {\n try { return existsSync(path) ? readFileSync(path, \"utf-8\").trim() : \"\"; } catch { return \"\"; }\n}\n\n/** Build env-gated model behavior directives. Generated at session start. */\nfunction buildModelInstructions(): string {\n const lines: string[] = [];\n if (getEnv().primingModelTopics) {\n lines.push(\"End each response with [TOPICS: kw1, kw2, kw3] \u2014 your top 3 topics from this exchange. Keep them English, lowercase, concise.\");\n }\n return lines.length > 0 ? `# Model Instructions\\n\\n${lines.join(\"\\n\")}` : \"\";\n}\n\n/**\n * Build the session injection bundle: abmind 4 + host 2.\n *\n * abmind files via memory.getSessionBundle() (SOUL, profile, notes, memory-tools).\n * Transition fallback: if memory unavailable or file missing, reads from ~/.abtars/core/.\n * Host files (core_facts.md, skills_catalog.md) always from ~/.abtars/core/.\n * Appends [USERS] block.\n */\nexport function loadSoulBundle(memory?: MemoryManager | null): string | null {\n const parts: string[] = [];\n\n // abmind 4 \u2014 prefer getSessionBundle(), fall back to host core dir\n let bundle: { soul: string; profile: string; notes: string; memoryTools: string; coreFacts: string } | null = null;\n try { bundle = memory?.getSessionBundle() ?? null; } catch (err) { logAndSwallow(\"soul_loader\", \"op\", err); }\n\n const soul = bundle?.soul || readOr(join(HOST_CORE_DIR, \"SOUL.md\"));\n const profile = bundle?.profile || readOr(join(HOST_CORE_DIR, \"user_profile.md\"));\n const notes = bundle?.notes || readOr(join(HOST_CORE_DIR, \"agent_notes.md\"));\n const memoryTools = bundle?.memoryTools || readOr(join(HOST_CORE_DIR, \"TOOLS.md\"));\n const coreFacts = bundle?.coreFacts || readOr(join(HOST_CORE_DIR, \"core_facts.md\"));\n\n if (soul) parts.push(soul);\n if (memoryTools) parts.push(memoryTools);\n if (profile) parts.push(profile);\n if (notes) parts.push(notes);\n if (coreFacts) parts.push(coreFacts);\n\n // Host 2 \u2014 skills_catalog stays in ~/.abtars/core/ (generated by hotskills watcher)\n const skillsCatalog = readOr(join(HOST_CORE_DIR, \"skills_catalog.md\"));\n if (skillsCatalog) parts.push(skillsCatalog);\n\n // Host 3: model-instructions \u2014 env-gated dynamic directives\n const modelInstructions = buildModelInstructions();\n if (modelInstructions) parts.push(modelInstructions);\n\n // [EMOTIONAL CONTEXT] \u2014 topic arcs for tone awareness\n try {\n const arcs = memory?.getEmotionalArcs() ?? [];\n if (arcs.length > 0) {\n const ARC_LABELS: Record<string, string> = { \"\u2191\": \"user sentiment improving\", \"\u2193\": \"user sentiment worsening \u2014 be careful\", \"\u2195\": \"volatile \u2014 user feelings fluctuate\", \"\u2192\": \"stable\" };\n const lines = arcs.map(a => `- ${a.topic}: ${a.arc} (${ARC_LABELS[a.arc] ?? \"unknown\"})`);\n parts.push(`[EMOTIONAL CONTEXT]\\n${lines.join(\"\\n\")}`);\n }\n } catch (err) { logAndSwallow(\"soul_loader\", \"op\", err); }\n\n // [USERS] block\n try {\n const registry = loadUsers();\n if (registry.users.length > 0) parts.push(buildUsersBlock(registry));\n } catch (err) { logAndSwallow(\"soul_loader\", \"op\", err); }\n\n // Current date/time \u2014 prevents model from hallucinating temporal context\n const now = new Date();\n const days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n parts.push(`[CURRENT TIME] ${now.toLocaleDateString(\"en-GB\")} ${days[now.getDay()]}, ${now.toLocaleTimeString(\"en-GB\", { hour: \"2-digit\", minute: \"2-digit\" })}`);\n\n if (parts.length === 0) {\n logWarn(TAG, \"No session bundle files found\");\n return null;\n }\n\n logInfo(TAG, `Session bundle: ${parts.length} parts (abmind: ${bundle ? \"API\" : \"fallback\"})`);\n logDebug(TAG, `Bundle parts: soul=${!!soul} profile=${!!profile} notes=${!!notes} memTools=${!!memoryTools} coreFacts=${!!coreFacts} skills=${!!skillsCatalog}`);\n const assembled = parts.join(\"\\n\\n---\\n\\n\");\n const partLabels = [\"soul\", \"profile\", \"notes\", \"memTools\", \"coreFacts\", \"skills\", \"time\", \"extra1\", \"extra2\"];\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n const flat = p.replace(/\\n/g, \" \");\n const preview = p.length <= 75 ? flat : `${flat.slice(0, 50)}\u2026${flat.slice(-20)}`;\n logTrace(TAG, `[${partLabels[i] ?? i}] (${p.length}ch) ${preview}`);\n }\n return assembled;\n}\n\n/**\n * Minimal soul for Code sessions (#658): agent_notes + memory-tools + skills + time.\n * No personality, no user_profile, no core_facts, no emotional context.\n */\nexport function loadMinimalSoul(memory?: MemoryManager | null): string | null {\n const parts: string[] = [];\n\n let bundle: { notes: string; memoryTools: string } | null = null;\n try { bundle = memory?.getSessionBundle() ?? null; } catch (err) { logAndSwallow(\"soul_loader\", \"op\", err); }\n\n const notes = bundle?.notes || readOr(join(HOST_CORE_DIR, \"agent_notes.md\"));\n const memoryTools = bundle?.memoryTools || readOr(join(HOST_CORE_DIR, \"TOOLS.md\"));\n\n if (notes) parts.push(notes);\n if (memoryTools) parts.push(memoryTools);\n\n const skillsCatalog = readOr(join(HOST_CORE_DIR, \"skills_catalog.md\"));\n if (skillsCatalog) parts.push(skillsCatalog);\n\n const now = new Date();\n const days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n parts.push(`[CURRENT TIME] ${now.toLocaleDateString(\"en-GB\")} ${days[now.getDay()]}, ${now.toLocaleTimeString(\"en-GB\", { hour: \"2-digit\", minute: \"2-digit\" })}`);\n\n if (parts.length === 0) return null;\n logInfo(TAG, `Minimal soul (Code): ${parts.length} parts`);\n return parts.join(\"\\n\\n---\\n\\n\");\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,8 +1,9 @@
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
  init_logger,
4
5
  logTrace
5
- } from "./chunk-BUUVFUPO.js";
6
+ } from "./chunk-2BY6I4P5.js";
6
7
 
7
8
  // src/components/env.ts
8
9
  init_logger();
@@ -25,4 +26,4 @@ export {
25
26
  readEnv,
26
27
  readEnvWithDefault
27
28
  };
28
- //# sourceMappingURL=chunk-YOCTDKKL.js.map
29
+ //# sourceMappingURL=chunk-BYDUMHXT.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/env.ts"],
4
4
  "sourcesContent": ["/**\n * Env var helpers.\n *\n * `readEnv(key, impact)` reads process.env[key] and warns once per process\n * per missing key. Replaces raw `process.env.X` reads \u2014 authors get\n * visibility into misconfig without polluting hot paths with per-read\n * warnings.\n *\n * The helper intentionally warns AT the first read site (lazy), not at\n * boot. Reasons:\n * - Boot-time lists go stale; consumer-site reads can't.\n * - New env vars auto-covered when authors reach for this helper.\n * - Warn-once guarantees quiet hot paths (Set<string> dedup).\n *\n * For vars that MUST be set for the bridge to function (e.g. TELEGRAM_BOT_TOKEN),\n * use a boot-time fatal check instead \u2014 missing them should exit(1), not log.\n */\n\nimport { logTrace } from \"./logger.js\";\n\nconst warned = new Set<string>();\n\nexport function readEnv(key: string, impact: string): string | undefined {\n const v = process.env[key];\n if (v !== undefined && v.trim() !== \"\") return v;\n if (!warned.has(key)) {\n warned.add(key);\n logTrace(\"env\", `${key} not set \u2014 ${impact}`);\n }\n return undefined;\n}\n\n/** Same as readEnv but returns a fallback when the var is unset. Still warns once. */\nexport function readEnvWithDefault(key: string, fallback: string, impact: string): string {\n const v = readEnv(key, `${impact} (falling back to \"${fallback}\")`);\n return v ?? fallback;\n}\n\n/** Test-only: clear the warn-once cache. */\nexport function _resetEnvWarnedForTests(): void {\n warned.clear();\n}\n"],
5
- "mappings": ";;;;;;;AAkBA;AAEA,IAAM,SAAS,oBAAI,IAAY;AAExB,SAAS,QAAQ,KAAa,QAAoC;AACvE,QAAM,IAAI,QAAQ,IAAI,GAAG;AACzB,MAAI,MAAM,UAAa,EAAE,KAAK,MAAM,GAAI,QAAO;AAC/C,MAAI,CAAC,OAAO,IAAI,GAAG,GAAG;AACpB,WAAO,IAAI,GAAG;AACd,aAAS,OAAO,GAAG,GAAG,mBAAc,MAAM,EAAE;AAAA,EAC9C;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,KAAa,UAAkB,QAAwB;AACxF,QAAM,IAAI,QAAQ,KAAK,GAAG,MAAM,sBAAsB,QAAQ,IAAI;AAClE,SAAO,KAAK;AACd;",
5
+ "mappings": ";;;;;;;;AAkBA;AAEA,IAAM,SAAS,oBAAI,IAAY;AAExB,SAAS,QAAQ,KAAa,QAAoC;AACvE,QAAM,IAAI,QAAQ,IAAI,GAAG;AACzB,MAAI,MAAM,UAAa,EAAE,KAAK,MAAM,GAAI,QAAO;AAC/C,MAAI,CAAC,OAAO,IAAI,GAAG,GAAG;AACpB,WAAO,IAAI,GAAG;AACd,aAAS,OAAO,GAAG,GAAG,mBAAc,MAAM,EAAE;AAAA,EAC9C;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,KAAa,UAAkB,QAAwB;AACxF,QAAM,IAAI,QAAQ,KAAK,GAAG,MAAM,sBAAsB,QAAQ,IAAI;AAClE,SAAO,KAAK;AACd;",
6
6
  "names": []
7
7
  }
@@ -1,12 +1,13 @@
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
  init_log_and_swallow,
4
5
  logAndSwallow
5
- } from "./chunk-FMWKEPM7.js";
6
+ } from "./chunk-EX2SRTUE.js";
6
7
  import {
7
8
  __esm,
8
9
  __export
9
- } from "./chunk-NWDBD4PA.js";
10
+ } from "./chunk-7K2YZTLD.js";
10
11
 
11
12
  // src/components/peer-jwt.ts
12
13
  var peer_jwt_exports = {};
@@ -67,4 +68,4 @@ export {
67
68
  peer_jwt_exports,
68
69
  init_peer_jwt
69
70
  };
70
- //# sourceMappingURL=chunk-RVE2N7FA.js.map
71
+ //# sourceMappingURL=chunk-CELR236Q.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/peer-jwt.ts"],
4
4
  "sourcesContent": ["/**\n * Minimal JWT-HS256 implementation for peer auth (#393).\n * No external deps \u2014 uses Node built-in crypto only.\n */\n\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { logAndSwallow } from \"./log-and-swallow.js\";\n\nconst TAG = \"peer_jwt\";\n\nexport interface JwtPayload {\n iss: string; // sender name\n aud: string; // receiver name\n iat: number; // issued-at (seconds)\n exp: number; // expiry (seconds)\n}\n\nfunction base64url(buf: Buffer): string {\n return buf.toString(\"base64url\");\n}\n\nfunction base64urlEncode(str: string): string {\n return Buffer.from(str, \"utf-8\").toString(\"base64url\");\n}\n\nfunction base64urlDecode(str: string): string {\n return Buffer.from(str, \"base64url\").toString(\"utf-8\");\n}\n\nconst HEADER = base64urlEncode(JSON.stringify({ alg: \"HS256\", typ: \"JWT\" }));\n\n/**\n * Sign a JWT with HS256.\n */\nexport function signJwt(payload: JwtPayload, secret: string): string {\n const payloadB64 = base64urlEncode(JSON.stringify(payload));\n const sigInput = `${HEADER}.${payloadB64}`;\n const sig = base64url(createHmac(\"sha256\", secret).update(sigInput).digest());\n return `${sigInput}.${sig}`;\n}\n\nexport type VerifyResult =\n | { ok: true; payload: JwtPayload }\n | { ok: false; reason: string };\n\n/**\n * Verify a JWT-HS256 token. Returns the payload if valid.\n *\n * @param token Raw JWT string\n * @param secret Shared secret for this peer\n * @param selfName Our own name (checked against `aud`)\n * @param clockSkewSec Tolerance for clock drift (default 5s)\n */\nexport function verifyJwt(\n token: string,\n secret: string,\n selfName: string,\n clockSkewSec = 5,\n): VerifyResult {\n const parts = token.split(\".\");\n if (parts.length !== 3) return { ok: false, reason: \"malformed\" };\n\n const [headerB64, payloadB64, sigB64] = parts;\n\n // Verify signature (timing-safe)\n const sigInput = `${headerB64}.${payloadB64}`;\n const expected = createHmac(\"sha256\", secret).update(sigInput).digest();\n const actual = Buffer.from(sigB64!, \"base64url\");\n if (expected.length !== actual.length || !timingSafeEqual(expected, actual)) {\n return { ok: false, reason: \"bad_signature\" };\n }\n\n // Decode payload\n let payload: JwtPayload;\n try {\n payload = JSON.parse(base64urlDecode(payloadB64!));\n } catch (err) {\n logAndSwallow(TAG, \"JSON.parse jwt payload\", err);\n return { ok: false, reason: \"malformed_payload\" };\n }\n\n // Check expiry\n const now = Math.floor(Date.now() / 1000);\n if (payload.exp < now) return { ok: false, reason: \"expired\" };\n\n // Check iat not too far in future (clock skew)\n if (payload.iat > now + clockSkewSec) return { ok: false, reason: \"iat_future\" };\n\n // Check audience\n if (payload.aud !== selfName) return { ok: false, reason: \"wrong_aud\" };\n\n return { ok: true, payload };\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,YAAY,uBAAuB;AAY5C,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,SAAS,WAAW;AACjC;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,OAAO,KAAK,KAAK,OAAO,EAAE,SAAS,WAAW;AACvD;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,OAAO,KAAK,KAAK,WAAW,EAAE,SAAS,OAAO;AACvD;AAOO,SAAS,QAAQ,SAAqB,QAAwB;AACnE,QAAM,aAAa,gBAAgB,KAAK,UAAU,OAAO,CAAC;AAC1D,QAAM,WAAW,GAAG,MAAM,IAAI,UAAU;AACxC,QAAM,MAAM,UAAU,WAAW,UAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,OAAO,CAAC;AAC5E,SAAO,GAAG,QAAQ,IAAI,GAAG;AAC3B;AAcO,SAAS,UACd,OACA,QACA,UACA,eAAe,GACD;AACd,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,EAAG,QAAO,EAAE,IAAI,OAAO,QAAQ,YAAY;AAEhE,QAAM,CAAC,WAAW,YAAY,MAAM,IAAI;AAGxC,QAAM,WAAW,GAAG,SAAS,IAAI,UAAU;AAC3C,QAAM,WAAW,WAAW,UAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,OAAO;AACtE,QAAM,SAAS,OAAO,KAAK,QAAS,WAAW;AAC/C,MAAI,SAAS,WAAW,OAAO,UAAU,CAAC,gBAAgB,UAAU,MAAM,GAAG;AAC3E,WAAO,EAAE,IAAI,OAAO,QAAQ,gBAAgB;AAAA,EAC9C;AAGA,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAM,gBAAgB,UAAW,CAAC;AAAA,EACnD,SAAS,KAAK;AACZ,kBAAc,KAAK,0BAA0B,GAAG;AAChD,WAAO,EAAE,IAAI,OAAO,QAAQ,oBAAoB;AAAA,EAClD;AAGA,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,MAAI,QAAQ,MAAM,IAAK,QAAO,EAAE,IAAI,OAAO,QAAQ,UAAU;AAG7D,MAAI,QAAQ,MAAM,MAAM,aAAc,QAAO,EAAE,IAAI,OAAO,QAAQ,aAAa;AAG/E,MAAI,QAAQ,QAAQ,SAAU,QAAO,EAAE,IAAI,OAAO,QAAQ,YAAY;AAEtE,SAAO,EAAE,IAAI,MAAM,QAAQ;AAC7B;AA5FA,IAQM,KAqBA;AA7BN;AAAA;AAAA;AAMA;AAEA,IAAM,MAAM;AAqBZ,IAAM,SAAS,gBAAgB,KAAK,UAAU,EAAE,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,YAAY,uBAAuB;AAY5C,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,SAAS,WAAW;AACjC;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,OAAO,KAAK,KAAK,OAAO,EAAE,SAAS,WAAW;AACvD;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,OAAO,KAAK,KAAK,WAAW,EAAE,SAAS,OAAO;AACvD;AAOO,SAAS,QAAQ,SAAqB,QAAwB;AACnE,QAAM,aAAa,gBAAgB,KAAK,UAAU,OAAO,CAAC;AAC1D,QAAM,WAAW,GAAG,MAAM,IAAI,UAAU;AACxC,QAAM,MAAM,UAAU,WAAW,UAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,OAAO,CAAC;AAC5E,SAAO,GAAG,QAAQ,IAAI,GAAG;AAC3B;AAcO,SAAS,UACd,OACA,QACA,UACA,eAAe,GACD;AACd,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,EAAG,QAAO,EAAE,IAAI,OAAO,QAAQ,YAAY;AAEhE,QAAM,CAAC,WAAW,YAAY,MAAM,IAAI;AAGxC,QAAM,WAAW,GAAG,SAAS,IAAI,UAAU;AAC3C,QAAM,WAAW,WAAW,UAAU,MAAM,EAAE,OAAO,QAAQ,EAAE,OAAO;AACtE,QAAM,SAAS,OAAO,KAAK,QAAS,WAAW;AAC/C,MAAI,SAAS,WAAW,OAAO,UAAU,CAAC,gBAAgB,UAAU,MAAM,GAAG;AAC3E,WAAO,EAAE,IAAI,OAAO,QAAQ,gBAAgB;AAAA,EAC9C;AAGA,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAM,gBAAgB,UAAW,CAAC;AAAA,EACnD,SAAS,KAAK;AACZ,kBAAc,KAAK,0BAA0B,GAAG;AAChD,WAAO,EAAE,IAAI,OAAO,QAAQ,oBAAoB;AAAA,EAClD;AAGA,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,MAAI,QAAQ,MAAM,IAAK,QAAO,EAAE,IAAI,OAAO,QAAQ,UAAU;AAG7D,MAAI,QAAQ,MAAM,MAAM,aAAc,QAAO,EAAE,IAAI,OAAO,QAAQ,aAAa;AAG/E,MAAI,QAAQ,QAAQ,SAAU,QAAO,EAAE,IAAI,OAAO,QAAQ,YAAY;AAEtE,SAAO,EAAE,IAAI,MAAM,QAAQ;AAC7B;AA5FA,IAQM,KAqBA;AA7BN;AAAA;AAAA;AAMA;AAEA,IAAM,MAAM;AAqBZ,IAAM,SAAS,gBAAgB,KAAK,UAAU,EAAE,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,5 @@
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
 
3
4
  // src/components/transport/model-health-registry.ts
4
5
  var D_SKIP_THRESHOLD = 0.7;
@@ -122,4 +123,4 @@ export {
122
123
  ModelHealthRegistry,
123
124
  classifyError
124
125
  };
125
- //# sourceMappingURL=chunk-2XU2X4OI.js.map
126
+ //# sourceMappingURL=chunk-CUQA2AJT.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/transport/model-health-registry.ts"],
4
4
  "sourcesContent": ["/**\n * ModelHealthRegistry \u2014 shared per-model error tracking.\n * Leaky-bucket algorithm: fills on errors, drains over time. Full = skip.\n * One instance per bridge process, shared across all FallbackPolicy instances.\n *\n * All tuning constants configurable via transport.json `healthPolicy` key.\n * Missing fields fall back to hardcoded defaults.\n */\n\nexport type ErrorKind = \"rate_limit\" | \"auth\" | \"transient\" | \"weak\";\nexport type ModelStatus = \"healthy\" | \"degraded\" | \"exhausted\" | \"auth_failed\";\n\nexport interface HealthPolicyConfig {\n /** Bucket level (0-1) above which model is skipped. Default: 0.7 */\n skipThreshold?: number;\n /** Drain rate per minute (0-1). Default: 0.03 */\n leakPerMinute?: number;\n /** Auth error: fill amount (0-1). Default: 1.0 (instant full) */\n authFill?: number;\n /** Auth errors are sticky (never auto-drain). Default: true */\n authSticky?: boolean;\n /** Rate-limit fill per hit. Default: 0.5 */\n rateLimitFill?: number;\n /** Weak-model fill per hit. Default: 0.05 */\n weakFill?: number;\n /** Transient progressive fill array. Default: [0.1, 0.2, 0.4, 0.8] */\n transientProgressive?: number[];\n /** Consecutive errors before cooldown kicks in. Default: 3 */\n transientCooldownAfter?: number;\n /** Max cooldown seconds for transient errors. Default: 300 */\n transientMaxCooldownSec?: number;\n}\n\ninterface Bucket {\n level: number;\n lastUpdate: number;\n consecutiveErrors: number;\n cooldownUntil?: number;\n authFailed?: boolean;\n demoted?: boolean;\n}\n\n// Defaults (unchanged from pre-config behavior)\nconst D_SKIP_THRESHOLD = 0.7;\nconst D_LEAK_PER_MIN = 0.03;\nconst D_AUTH_STICKY = true;\nconst D_RATE_LIMIT_FILL = 0.5;\nconst D_WEAK_FILL = 0.35;\nconst D_TRANSIENT_PROGRESSIVE = [0.1, 0.2, 0.4, 0.8];\nconst D_TRANSIENT_COOLDOWN_AFTER = 3;\nconst D_TRANSIENT_MAX_COOLDOWN_SEC = 300;\n\nexport class ModelHealthRegistry {\n private readonly buckets = new Map<string, Bucket>();\n private readonly skipThreshold: number;\n private readonly leakPerMs: number;\n private readonly authSticky: boolean;\n private readonly rateLimitFill: number;\n private readonly weakFill: number;\n private readonly transientProgressive: number[];\n private readonly transientCooldownAfter: number;\n private readonly transientMaxCooldownMs: number;\n\n /** Fired when a model crosses the demotion threshold. Wired at boot. */\n onDemote?: (model: string, endpoint: string, reason: \"auth\" | \"timeout\") => void;\n\n constructor(config?: HealthPolicyConfig) {\n this.skipThreshold = config?.skipThreshold ?? D_SKIP_THRESHOLD;\n this.leakPerMs = (config?.leakPerMinute ?? D_LEAK_PER_MIN) / 60000;\n this.authSticky = config?.authSticky ?? D_AUTH_STICKY;\n this.rateLimitFill = config?.rateLimitFill ?? D_RATE_LIMIT_FILL;\n this.weakFill = config?.weakFill ?? D_WEAK_FILL;\n this.transientProgressive = config?.transientProgressive ?? D_TRANSIENT_PROGRESSIVE;\n this.transientCooldownAfter = config?.transientCooldownAfter ?? D_TRANSIENT_COOLDOWN_AFTER;\n this.transientMaxCooldownMs = (config?.transientMaxCooldownSec ?? D_TRANSIENT_MAX_COOLDOWN_SEC) * 1000;\n }\n\n private drain(b: Bucket, now: number): void {\n if (this.authSticky && b.authFailed) return;\n const elapsed = now - b.lastUpdate;\n b.level = Math.max(0, b.level - elapsed * this.leakPerMs);\n b.lastUpdate = now;\n }\n\n shouldSkip(model: string, endpoint: string): boolean {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return false;\n const now = Date.now();\n if (b.cooldownUntil && now < b.cooldownUntil) return true;\n if (b.cooldownUntil && now >= b.cooldownUntil) b.cooldownUntil = undefined;\n this.drain(b, now);\n return b.level > this.skipThreshold;\n }\n\n recordSuccess(model: string, endpoint: string): void {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return;\n b.consecutiveErrors = 0;\n b.cooldownUntil = undefined;\n b.authFailed = false;\n }\n\n recordError(model: string, endpoint: string, kind: ErrorKind, retryAfterMs?: number): void {\n const key = `${endpoint}|${model}`;\n const now = Date.now();\n const b = this.buckets.get(key) ?? { level: 0, lastUpdate: now, consecutiveErrors: 0 };\n this.drain(b, now);\n\n switch (kind) {\n case \"auth\":\n b.level = 1.0;\n b.authFailed = true;\n if (this.onDemote && !b.demoted) {\n b.demoted = true;\n this.onDemote(model, endpoint, \"auth\");\n }\n break;\n case \"transient\": {\n const idx = Math.min(b.consecutiveErrors, this.transientProgressive.length - 1);\n b.level = Math.min(1.0, b.level + this.transientProgressive[idx]!);\n if (b.consecutiveErrors >= this.transientCooldownAfter) {\n b.cooldownUntil = now + Math.min((b.consecutiveErrors + 1) * 60_000, this.transientMaxCooldownMs);\n }\n break;\n }\n case \"rate_limit\":\n b.level = Math.min(1.0, b.level + this.rateLimitFill);\n if (retryAfterMs && retryAfterMs > 0) b.cooldownUntil = now + retryAfterMs;\n break;\n case \"weak\":\n b.level = Math.min(1.0, b.level + this.weakFill);\n break;\n }\n\n b.consecutiveErrors++;\n b.lastUpdate = now;\n this.buckets.set(key, b);\n }\n\n getHealth(): Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }> {\n const now = Date.now();\n const result = new Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }>();\n for (const [key, b] of this.buckets) {\n this.drain(b, now);\n let status: ModelStatus = \"healthy\";\n if (b.authFailed) status = \"auth_failed\";\n else if (b.level > this.skipThreshold) status = \"exhausted\";\n else if (b.level > 0.3) status = \"degraded\";\n result.set(key, { level: Math.round(b.level * 100), consecutiveErrors: b.consecutiveErrors, cooldownUntil: b.cooldownUntil, status });\n }\n return result;\n }\n\n /** Get bucket level for a specific model (0-100%). */\n getBucketLevel(model: string, endpoint: string): number {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return 0;\n this.drain(b, Date.now());\n return Math.round(b.level * 100);\n }\n\n resetAll(): void {\n this.buckets.clear();\n }\n}\n\n/** Classify HTTP status to error kind. */\nexport function classifyError(status: number, message?: string): ErrorKind {\n if (status === 429 || status === 402) return \"rate_limit\";\n if (status === 404 && message && /image input|No endpoints found/i.test(message)) return \"transient\";\n if (status === 401 || status === 403 || status === 404) return \"auth\";\n return \"transient\";\n}\n"],
5
- "mappings": ";;;AA2CA,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAC1B,IAAM,cAAc;AACpB,IAAM,0BAA0B,CAAC,KAAK,KAAK,KAAK,GAAG;AACnD,IAAM,6BAA6B;AACnC,IAAM,+BAA+B;AAE9B,IAAM,sBAAN,MAA0B;AAAA,EACd,UAAU,oBAAI,IAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGjB;AAAA,EAEA,YAAY,QAA6B;AACvC,SAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,SAAK,aAAa,QAAQ,iBAAiB,kBAAkB;AAC7D,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,uBAAuB,QAAQ,wBAAwB;AAC5D,SAAK,yBAAyB,QAAQ,0BAA0B;AAChE,SAAK,0BAA0B,QAAQ,2BAA2B,gCAAgC;AAAA,EACpG;AAAA,EAEQ,MAAM,GAAW,KAAmB;AAC1C,QAAI,KAAK,cAAc,EAAE,WAAY;AACrC,UAAM,UAAU,MAAM,EAAE;AACxB,MAAE,QAAQ,KAAK,IAAI,GAAG,EAAE,QAAQ,UAAU,KAAK,SAAS;AACxD,MAAE,aAAa;AAAA,EACjB;AAAA,EAEA,WAAW,OAAe,UAA2B;AACnD,UAAM,IAAI,KAAK,QAAQ,IAAI,GAAG,QAAQ,IAAI,KAAK,EAAE;AACjD,QAAI,CAAC,EAAG,QAAO;AACf,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,EAAE,iBAAiB,MAAM,EAAE,cAAe,QAAO;AACrD,QAAI,EAAE,iBAAiB,OAAO,EAAE,cAAe,GAAE,gBAAgB;AACjE,SAAK,MAAM,GAAG,GAAG;AACjB,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAAA,EAEA,cAAc,OAAe,UAAwB;AACnD,UAAM,IAAI,KAAK,QAAQ,IAAI,GAAG,QAAQ,IAAI,KAAK,EAAE;AACjD,QAAI,CAAC,EAAG;AACR,MAAE,oBAAoB;AACtB,MAAE,gBAAgB;AAClB,MAAE,aAAa;AAAA,EACjB;AAAA,EAEA,YAAY,OAAe,UAAkB,MAAiB,cAA6B;AACzF,UAAM,MAAM,GAAG,QAAQ,IAAI,KAAK;AAChC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,OAAO,GAAG,YAAY,KAAK,mBAAmB,EAAE;AACrF,SAAK,MAAM,GAAG,GAAG;AAEjB,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,UAAE,QAAQ;AACV,UAAE,aAAa;AACf,YAAI,KAAK,YAAY,CAAC,EAAE,SAAS;AAC/B,YAAE,UAAU;AACZ,eAAK,SAAS,OAAO,UAAU,MAAM;AAAA,QACvC;AACA;AAAA,MACF,KAAK,aAAa;AAChB,cAAM,MAAM,KAAK,IAAI,EAAE,mBAAmB,KAAK,qBAAqB,SAAS,CAAC;AAC9E,UAAE,QAAQ,KAAK,IAAI,GAAK,EAAE,QAAQ,KAAK,qBAAqB,GAAG,CAAE;AACjE,YAAI,EAAE,qBAAqB,KAAK,wBAAwB;AACtD,YAAE,gBAAgB,MAAM,KAAK,KAAK,EAAE,oBAAoB,KAAK,KAAQ,KAAK,sBAAsB;AAAA,QAClG;AACA;AAAA,MACF;AAAA,MACA,KAAK;AACH,UAAE,QAAQ,KAAK,IAAI,GAAK,EAAE,QAAQ,KAAK,aAAa;AACpD,YAAI,gBAAgB,eAAe,EAAG,GAAE,gBAAgB,MAAM;AAC9D;AAAA,MACF,KAAK;AACH,UAAE,QAAQ,KAAK,IAAI,GAAK,EAAE,QAAQ,KAAK,QAAQ;AAC/C;AAAA,IACJ;AAEA,MAAE;AACF,MAAE,aAAa;AACf,SAAK,QAAQ,IAAI,KAAK,CAAC;AAAA,EACzB;AAAA,EAEA,YAAoH;AAClH,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,SAAS,oBAAI,IAAuG;AAC1H,eAAW,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS;AACnC,WAAK,MAAM,GAAG,GAAG;AACjB,UAAI,SAAsB;AAC1B,UAAI,EAAE,WAAY,UAAS;AAAA,eAClB,EAAE,QAAQ,KAAK,cAAe,UAAS;AAAA,eACvC,EAAE,QAAQ,IAAK,UAAS;AACjC,aAAO,IAAI,KAAK,EAAE,OAAO,KAAK,MAAM,EAAE,QAAQ,GAAG,GAAG,mBAAmB,EAAE,mBAAmB,eAAe,EAAE,eAAe,OAAO,CAAC;AAAA,IACtI;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,OAAe,UAA0B;AACtD,UAAM,IAAI,KAAK,QAAQ,IAAI,GAAG,QAAQ,IAAI,KAAK,EAAE;AACjD,QAAI,CAAC,EAAG,QAAO;AACf,SAAK,MAAM,GAAG,KAAK,IAAI,CAAC;AACxB,WAAO,KAAK,MAAM,EAAE,QAAQ,GAAG;AAAA,EACjC;AAAA,EAEA,WAAiB;AACf,SAAK,QAAQ,MAAM;AAAA,EACrB;AACF;AAGO,SAAS,cAAc,QAAgB,SAA6B;AACzE,MAAI,WAAW,OAAO,WAAW,IAAK,QAAO;AAC7C,MAAI,WAAW,OAAO,WAAW,kCAAkC,KAAK,OAAO,EAAG,QAAO;AACzF,MAAI,WAAW,OAAO,WAAW,OAAO,WAAW,IAAK,QAAO;AAC/D,SAAO;AACT;",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,183 @@
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);
3
+ import {
4
+ init_log_and_swallow,
5
+ logAndSwallow
6
+ } from "./chunk-EX2SRTUE.js";
7
+ import {
8
+ init_logger,
9
+ logInfo,
10
+ logWarn
11
+ } from "./chunk-2BY6I4P5.js";
12
+
13
+ // src/components/subagent-runtime.ts
14
+ init_log_and_swallow();
15
+ init_logger();
16
+ import { randomBytes } from "node:crypto";
17
+ var TAG = "runtime";
18
+ var DEFAULT_SESSION = {
19
+ professor: "reuse",
20
+ dreamy: "fresh",
21
+ browsie: "fresh",
22
+ coding: "reuse",
23
+ task: "fresh"
24
+ };
25
+ var DEFAULT_SPAWN_TIMEOUT_MS = 6e5;
26
+ var SubagentRuntime = class {
27
+ cache = /* @__PURE__ */ new Map();
28
+ activeSpawns = /* @__PURE__ */ new Map();
29
+ _registry = null;
30
+ _mainTransport = null;
31
+ _sessionManager = null;
32
+ /** Set shared model health registry (from boot ctx). */
33
+ setRegistry(registry) {
34
+ this._registry = registry;
35
+ }
36
+ /** Set main transport reference for currentModel reads. */
37
+ setMainTransport(transport) {
38
+ this._mainTransport = transport;
39
+ }
40
+ /** Set session manager for auto-spawn sub-session creation (#510). */
41
+ setSessionManager(mgr) {
42
+ this._sessionManager = mgr;
43
+ }
44
+ /** Send a prompt to a named agent and get the response. */
45
+ async complete(agent, prompt, opts) {
46
+ const sessionStrategy = opts?.session ?? DEFAULT_SESSION[agent] ?? "fresh";
47
+ const start = Date.now();
48
+ const cached = this.cache.get(agent);
49
+ if (cached && sessionStrategy === "fresh") {
50
+ await cached.transport.resetSession?.(cached.sessionKey);
51
+ (await import("./tool-registry-DFCCGZCB.js")).resetStoreCounter();
52
+ }
53
+ const { transport, model, sessionKey } = cached ?? await this.createAgent(agent, opts?.sessionType);
54
+ if (opts?.timeoutMs && transport.setTimeoutOverride) {
55
+ transport.setTimeoutOverride(opts.timeoutMs);
56
+ }
57
+ try {
58
+ const response = await transport.sendPrompt(sessionKey, prompt);
59
+ const elapsed = Date.now() - start;
60
+ logInfo(TAG, `${agent} complete: ${prompt.length}ch \u2192 ${response?.length ?? 0}ch (${elapsed}ms, ${model})`);
61
+ return response ?? "";
62
+ } catch (err) {
63
+ logWarn(TAG, `${agent} complete failed: ${err instanceof Error ? err.message : String(err)}`);
64
+ this.cache.delete(agent);
65
+ throw err;
66
+ } finally {
67
+ if (opts?.timeoutMs && transport.setTimeoutOverride) {
68
+ transport.setTimeoutOverride(null);
69
+ }
70
+ }
71
+ }
72
+ /** Get a persistent session handle for multi-turn callers. */
73
+ async session(agent) {
74
+ const cached = this.cache.get(agent) ?? await this.createAgent(agent);
75
+ return {
76
+ sendPrompt: (sessionKey, prompt) => cached.transport.sendPrompt(sessionKey, prompt),
77
+ destroy: async () => {
78
+ try {
79
+ cached.transport.destroy();
80
+ } catch (err) {
81
+ logAndSwallow("subagent_runtime", "op", err);
82
+ }
83
+ this.cache.delete(agent);
84
+ logInfo(TAG, `${agent} session destroyed`);
85
+ },
86
+ get isReady() {
87
+ return cached.transport.isReady;
88
+ },
89
+ get transport() {
90
+ return cached.transport;
91
+ }
92
+ };
93
+ }
94
+ /** Fire-and-forget: run complete() in background, deliver result via callback. */
95
+ async spawn(agent, prompt, opts) {
96
+ const taskId = randomBytes(4).toString("hex");
97
+ const abort = new AbortController();
98
+ this.activeSpawns.set(taskId, { abort, startedAt: Date.now() });
99
+ if (this._sessionManager) {
100
+ const typeMap = { browsie: "B", coding: "C", task: "T" };
101
+ const sessionType = typeMap[agent];
102
+ if (sessionType) this._sessionManager.createSubSession("master", "telegram", sessionType);
103
+ }
104
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_SPAWN_TIMEOUT_MS;
105
+ const timer = setTimeout(() => abort.abort(), timeoutMs);
106
+ void (async () => {
107
+ try {
108
+ const result = await this.complete(agent, prompt);
109
+ if (!abort.signal.aborted) opts?.onComplete?.(taskId, result);
110
+ } catch (err) {
111
+ if (!abort.signal.aborted) opts?.onError?.(taskId, err instanceof Error ? err : new Error(String(err)));
112
+ } finally {
113
+ clearTimeout(timer);
114
+ this.activeSpawns.delete(taskId);
115
+ }
116
+ })();
117
+ logInfo(TAG, `${agent} spawned: taskId=${taskId}, timeout=${timeoutMs}ms`);
118
+ return { taskId };
119
+ }
120
+ /** Shut down all cached transports and abort active spawns. */
121
+ async shutdown() {
122
+ for (const [id, { abort }] of this.activeSpawns) {
123
+ abort.abort();
124
+ logInfo(TAG, `spawn ${id} aborted`);
125
+ }
126
+ this.activeSpawns.clear();
127
+ for (const [name, cached] of this.cache) {
128
+ try {
129
+ cached.transport.destroy();
130
+ } catch (err) {
131
+ logAndSwallow("subagent_runtime", "op", err);
132
+ }
133
+ logInfo(TAG, `${name} transport closed`);
134
+ }
135
+ this.cache.clear();
136
+ }
137
+ /** Active registry: list running background spawns. */
138
+ listActive() {
139
+ return [...this.activeSpawns.entries()].map(([taskId, entry]) => ({
140
+ taskId,
141
+ startedAt: entry.startedAt ?? 0
142
+ }));
143
+ }
144
+ /** Interrupt a specific spawn by taskId. Returns true if found. */
145
+ interruptSpawn(taskId) {
146
+ const entry = this.activeSpawns.get(taskId);
147
+ if (!entry) return false;
148
+ entry.abort.abort();
149
+ this.activeSpawns.delete(taskId);
150
+ logInfo(TAG, `spawn ${taskId} interrupted`);
151
+ return true;
152
+ }
153
+ async createAgent(agent, sessionType) {
154
+ const { createSubagentTransport } = await import("./agent-registry-5M77ZOMV.js");
155
+ const role = AGENT_TO_ROLE[agent];
156
+ const mainModel = this._mainTransport && "currentModel" in this._mainTransport ? this._mainTransport.currentModel : void 0;
157
+ const { transport, model } = await createSubagentTransport(role, this._registry ?? void 0, mainModel);
158
+ const typeMap = { browsie: "B", coding: "C", task: "T" };
159
+ const resolvedType = sessionType || typeMap[agent];
160
+ if (resolvedType && "setSystemPrompt" in transport && typeof transport.setSystemPrompt === "function") {
161
+ const { buildSoulBundle } = await import("./soul-bundle-7EYTEKFE.js");
162
+ const bundle = buildSoulBundle(sessionType);
163
+ if (bundle) transport.setSystemPrompt(bundle);
164
+ }
165
+ const sessionKey = `system:${agent}`;
166
+ const entry = { transport, model, sessionKey };
167
+ this.cache.set(agent, entry);
168
+ (await import("./tool-registry-DFCCGZCB.js")).resetStoreCounter();
169
+ return entry;
170
+ }
171
+ };
172
+ var AGENT_TO_ROLE = {
173
+ professor: "task",
174
+ dreamy: "sleep",
175
+ browsie: "browse",
176
+ coding: "coding",
177
+ task: "task"
178
+ };
179
+
180
+ export {
181
+ SubagentRuntime
182
+ };
183
+ //# sourceMappingURL=chunk-DMPR5MYT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/subagent-runtime.ts"],
4
+ "sourcesContent": ["/**\n * SubagentRuntime \u2014 unified LLM access for all subagents.\n * Replaces manual createSubagentTransport() calls.\n * Caches transports per agent, handles session lifecycle + fallback.\n */\n\nimport { logAndSwallow } from \"./log-and-swallow.js\";\nimport type { IKiroTransport } from \"./transport/kiro-transport.js\";\nimport { logInfo, logWarn } from \"./logger.js\";\nimport { randomBytes } from \"node:crypto\";\n\nimport type { ModelHealthRegistry } from \"./transport/model-health-registry.js\";\n\nconst TAG = \"runtime\";\n\nexport type AgentName = \"professor\" | \"dreamy\" | \"browsie\" | \"coding\" | \"task\";\n\nexport interface AgentOpts {\n /** Override default session strategy for this call. */\n session?: \"fresh\" | \"reuse\";\n /** Context passed to tool executor (userId, metadata). */\n context?: Record<string, unknown>;\n /** Override model API timeout for this call (ms). */\n timeoutMs?: number;\n /** Override session type (default: derived from agent name). */\n sessionType?: import(\"./session-manager.js\").SessionType;\n}\n\n/** Persistent transport handle for multi-turn callers. */\nexport interface AgentSession {\n sendPrompt(sessionKey: string, prompt: string, image?: { mime: string; base64: string }): Promise<string>;\n destroy(): Promise<void>;\n readonly isReady: boolean;\n /** Underlying transport \u2014 used to set sandboxPolicy for peer sessions (#678). */\n readonly transport?: IKiroTransport;\n}\n\nexport interface SpawnResult {\n taskId: string;\n}\n\nexport interface SpawnOpts {\n onComplete?: (taskId: string, result: string) => void;\n onError?: (taskId: string, error: Error) => void;\n timeoutMs?: number;\n}\n\ninterface CachedAgent {\n transport: IKiroTransport;\n model: string;\n sessionKey: string;\n}\n\nconst DEFAULT_SESSION: Record<AgentName, \"fresh\" | \"reuse\"> = {\n professor: \"reuse\",\n dreamy: \"fresh\",\n browsie: \"fresh\",\n coding: \"reuse\",\n task: \"fresh\",\n};\n\nconst DEFAULT_SPAWN_TIMEOUT_MS = 600_000; // 10 min\n\nexport class SubagentRuntime {\n private readonly cache = new Map<AgentName, CachedAgent>();\n private readonly activeSpawns = new Map<string, { abort: AbortController; startedAt: number }>();\n private _registry: ModelHealthRegistry | null = null;\n private _mainTransport: IKiroTransport | null = null;\n private _sessionManager: import(\"./session-manager.js\").SessionManager | null = null;\n\n /** Set shared model health registry (from boot ctx). */\n setRegistry(registry: ModelHealthRegistry): void { this._registry = registry; }\n\n /** Set main transport reference for currentModel reads. */\n setMainTransport(transport: IKiroTransport): void { this._mainTransport = transport; }\n\n /** Set session manager for auto-spawn sub-session creation (#510). */\n setSessionManager(mgr: import(\"./session-manager.js\").SessionManager): void { this._sessionManager = mgr; }\n\n /** Send a prompt to a named agent and get the response. */\n async complete(agent: AgentName, prompt: string, opts?: AgentOpts): Promise<string> {\n const sessionStrategy = opts?.session ?? DEFAULT_SESSION[agent] ?? \"fresh\";\n const start = Date.now();\n\n const cached = this.cache.get(agent);\n if (cached && sessionStrategy === \"fresh\") {\n await cached.transport.resetSession?.(cached.sessionKey);\n (await import(\"./transport/tool-registry.js\")).resetStoreCounter();\n }\n\n const { transport, model, sessionKey } = cached ?? await this.createAgent(agent, opts?.sessionType);\n\n // Per-call timeout override (e.g. dreamy sleep steps need longer than default)\n if (opts?.timeoutMs && transport.setTimeoutOverride) {\n transport.setTimeoutOverride(opts.timeoutMs);\n }\n\n try {\n const response = await transport.sendPrompt(sessionKey, prompt);\n const elapsed = Date.now() - start;\n logInfo(TAG, `${agent} complete: ${prompt.length}ch \u2192 ${response?.length ?? 0}ch (${elapsed}ms, ${model})`);\n return response ?? \"\";\n } catch (err) {\n logWarn(TAG, `${agent} complete failed: ${err instanceof Error ? err.message : String(err)}`);\n this.cache.delete(agent);\n throw err;\n } finally {\n if (opts?.timeoutMs && transport.setTimeoutOverride) {\n transport.setTimeoutOverride(null);\n }\n }\n }\n\n /** Get a persistent session handle for multi-turn callers. */\n async session(agent: AgentName): Promise<AgentSession> {\n const cached = this.cache.get(agent) ?? await this.createAgent(agent);\n return {\n sendPrompt: (sessionKey: string, prompt: string) => cached.transport.sendPrompt(sessionKey, prompt),\n destroy: async () => {\n try { cached.transport.destroy(); } catch (err) { logAndSwallow(\"subagent_runtime\", \"op\", err); }\n this.cache.delete(agent);\n logInfo(TAG, `${agent} session destroyed`);\n },\n get isReady() { return cached.transport.isReady; },\n get transport() { return cached.transport; },\n };\n }\n\n /** Fire-and-forget: run complete() in background, deliver result via callback. */\n async spawn(agent: AgentName, prompt: string, opts?: SpawnOpts): Promise<SpawnResult> {\n const taskId = randomBytes(4).toString(\"hex\");\n const abort = new AbortController();\n this.activeSpawns.set(taskId, { abort, startedAt: Date.now() });\n\n // Create sub-session for visibility in /session list (#510)\n if (this._sessionManager) {\n const typeMap: Partial<Record<AgentName, import(\"./session-manager.js\").SessionType>> = { browsie: \"B\", coding: \"C\", task: \"T\" };\n const sessionType = typeMap[agent];\n if (sessionType) this._sessionManager.createSubSession(\"master\", \"telegram\", sessionType);\n }\n\n const timeoutMs = opts?.timeoutMs ?? DEFAULT_SPAWN_TIMEOUT_MS;\n const timer = setTimeout(() => abort.abort(), timeoutMs);\n\n // Fire and forget \u2014 don't await\n void (async () => {\n try {\n const result = await this.complete(agent, prompt);\n if (!abort.signal.aborted) opts?.onComplete?.(taskId, result);\n } catch (err) {\n if (!abort.signal.aborted) opts?.onError?.(taskId, err instanceof Error ? err : new Error(String(err)));\n } finally {\n clearTimeout(timer);\n this.activeSpawns.delete(taskId);\n }\n })();\n\n logInfo(TAG, `${agent} spawned: taskId=${taskId}, timeout=${timeoutMs}ms`);\n return { taskId };\n }\n\n /** Shut down all cached transports and abort active spawns. */\n async shutdown(): Promise<void> {\n for (const [id, { abort }] of this.activeSpawns) {\n abort.abort();\n logInfo(TAG, `spawn ${id} aborted`);\n }\n this.activeSpawns.clear();\n\n for (const [name, cached] of this.cache) {\n try { cached.transport.destroy(); } catch (err) { logAndSwallow(\"subagent_runtime\", \"op\", err); }\n logInfo(TAG, `${name} transport closed`);\n }\n this.cache.clear();\n }\n\n /** Active registry: list running background spawns. */\n listActive(): Array<{ taskId: string; startedAt: number }> {\n return [...this.activeSpawns.entries()].map(([taskId, entry]) => ({\n taskId,\n startedAt: (entry as any).startedAt ?? 0,\n }));\n }\n\n /** Interrupt a specific spawn by taskId. Returns true if found. */\n interruptSpawn(taskId: string): boolean {\n const entry = this.activeSpawns.get(taskId);\n if (!entry) return false;\n entry.abort.abort();\n this.activeSpawns.delete(taskId);\n logInfo(TAG, `spawn ${taskId} interrupted`);\n return true;\n }\n\n private async createAgent(agent: AgentName, sessionType?: import(\"./session-manager.js\").SessionType): Promise<CachedAgent> {\n const { createSubagentTransport } = await import(\"./agent-registry.js\");\n const role = AGENT_TO_ROLE[agent];\n const mainModel = this._mainTransport && \"currentModel\" in this._mainTransport\n ? (this._mainTransport as unknown as { currentModel: string }).currentModel\n : undefined;\n const { transport, model } = await createSubagentTransport(role, this._registry ?? undefined, mainModel);\n\n // Inject session-type-appropriate SOUL bundle (#744)\n const typeMap: Partial<Record<AgentName, import(\"./session-manager.js\").SessionType>> = { browsie: \"B\", coding: \"C\", task: \"T\" };\n const resolvedType = sessionType || typeMap[agent];\n if (resolvedType && \"setSystemPrompt\" in transport && typeof (transport as any).setSystemPrompt === \"function\") {\n const { buildSoulBundle } = await import(\"./soul-bundle.js\");\n const bundle = buildSoulBundle(sessionType);\n if (bundle) (transport as any).setSystemPrompt(bundle);\n }\n\n const sessionKey = `system:${agent}`;\n const entry: CachedAgent = { transport, model, sessionKey };\n this.cache.set(agent, entry);\n (await import(\"./transport/tool-registry.js\")).resetStoreCounter();\n return entry;\n }\n}\n\nconst AGENT_TO_ROLE: Record<AgentName, import(\"./agent-registry.js\").SubagentRole> = {\n professor: \"task\",\n dreamy: \"sleep\",\n browsie: \"browse\",\n coding: \"coding\",\n task: \"task\",\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }