abtars 0.3.3 → 0.3.4-alpha.1

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 (384) hide show
  1. package/bundle/{_registry.generated-7DRCE4V6.js → _registry.generated-ZJBAZMXN.js} +16 -15
  2. package/bundle/{_registry.generated-7DRCE4V6.js.map → _registry.generated-ZJBAZMXN.js.map} +1 -1
  3. package/bundle/abtars-browser.js +6 -5
  4. package/bundle/abtars-browser.js.map +1 -1
  5. package/bundle/abtars-cli.js +47 -39
  6. package/bundle/abtars-cli.js.map +2 -2
  7. package/bundle/abtars-restart.js +7 -7
  8. package/bundle/abtars-rss.js +2 -1
  9. package/bundle/abtars-rss.js.map +2 -2
  10. package/bundle/abtars-task.js +6 -5
  11. package/bundle/abtars-task.js.map +1 -1
  12. package/bundle/abtars-todo.js +2 -1
  13. package/bundle/abtars-todo.js.map +1 -1
  14. package/bundle/abtars.js +299 -209
  15. package/bundle/abtars.js.map +4 -4
  16. package/bundle/{acp-raw-client-AZJCEB6S.js → acp-raw-client-YTBGFN4S.js} +4 -3
  17. package/bundle/{acp-raw-client-AZJCEB6S.js.map → acp-raw-client-YTBGFN4S.js.map} +1 -1
  18. package/bundle/{action-gate-QYJL57IX.js → action-gate-YISTP773.js} +4 -3
  19. package/bundle/{action-gate-QYJL57IX.js.map → action-gate-YISTP773.js.map} +1 -1
  20. package/bundle/{agent-api-adapter-PYMNQXHE.js → agent-api-adapter-E4HWVJ32.js} +5 -4
  21. package/bundle/{agent-api-adapter-PYMNQXHE.js.map → agent-api-adapter-E4HWVJ32.js.map} +1 -1
  22. package/bundle/{agent-api-rate-limit-4GEZ4YN5.js → agent-api-rate-limit-VENFGOAD.js} +6 -5
  23. package/bundle/{agent-registry-563P4EUJ.js → agent-registry-DL7UT272.js} +9 -8
  24. package/bundle/bootstrap-V5MROD3X.js +62 -0
  25. package/bundle/bootstrap-V5MROD3X.js.map +7 -0
  26. package/bundle/{bridge-lock-transport-LXCF2IVN.js → bridge-lock-transport-BJAMHMXW.js} +6 -5
  27. package/bundle/{browser-2VZOGOGX.js → browser-PT54UWSW.js} +8 -7
  28. package/bundle/{budget-PPA7WY3D.js → budget-QNK6IIT6.js} +5 -4
  29. package/bundle/{budget-PPA7WY3D.js.map → budget-QNK6IIT6.js.map} +1 -1
  30. package/bundle/{capability-WXEA2WFK.js → capability-EKPGHQIO.js} +7 -6
  31. package/bundle/{chunk-C3EYYJN3.js → chunk-2BXXQG7P.js} +16 -4
  32. package/bundle/chunk-2BXXQG7P.js.map +7 -0
  33. package/bundle/{chunk-4PIVWXUJ.js → chunk-2ZD7VQRW.js} +2 -2
  34. package/bundle/{chunk-OY2HAK33.js → chunk-36ZEYDKZ.js} +1 -1
  35. package/bundle/chunk-36ZEYDKZ.js.map +7 -0
  36. package/bundle/{chunk-3QW2K53E.js → chunk-4IGLXZCC.js} +11 -19
  37. package/bundle/chunk-4IGLXZCC.js.map +7 -0
  38. package/bundle/{chunk-T7TAWGBX.js → chunk-52PQM4EZ.js} +2 -2
  39. package/bundle/{chunk-2RGR3LSV.js → chunk-5P5HF7IJ.js} +2 -2
  40. package/bundle/{chunk-LE23VPN3.js → chunk-63A7ZRIH.js} +4 -4
  41. package/bundle/{chunk-LE23VPN3.js.map → chunk-63A7ZRIH.js.map} +1 -1
  42. package/bundle/chunk-6IB3GVXK.js +77 -0
  43. package/bundle/chunk-6IB3GVXK.js.map +7 -0
  44. package/bundle/{chunk-OOKNHOCB.js → chunk-6S3G6GPO.js} +2 -2
  45. package/bundle/{chunk-E7MV7WFT.js → chunk-6VTHSN4V.js} +6 -6
  46. package/bundle/{chunk-NGZVJ52F.js → chunk-76YN7O3U.js} +7 -7
  47. package/bundle/{chunk-43DKPXTP.js → chunk-7LORCJCQ.js} +4 -4
  48. package/bundle/{chunk-HDOFJVFS.js → chunk-7OI46MH7.js} +3 -3
  49. package/bundle/{chunk-H2K23MOF.js → chunk-7XXISOHU.js} +21 -5
  50. package/bundle/chunk-7XXISOHU.js.map +7 -0
  51. package/bundle/{chunk-CB6S3ZRF.js → chunk-AFFW2LRY.js} +3 -3
  52. package/bundle/{chunk-TCI6FZTP.js → chunk-AHJDG6OM.js} +9 -9
  53. package/bundle/{chunk-NP72ZB7P.js → chunk-AMUJEP6L.js} +45 -45
  54. package/bundle/{chunk-NP72ZB7P.js.map → chunk-AMUJEP6L.js.map} +2 -2
  55. package/bundle/{chunk-BU7LTI2W.js → chunk-AWCO3DQ3.js} +6 -7
  56. package/bundle/chunk-AWCO3DQ3.js.map +7 -0
  57. package/bundle/{chunk-YME7NRGP.js → chunk-B2TIRDZC.js} +2 -2
  58. package/bundle/{chunk-SSCGWDIC.js → chunk-BWJ37KMW.js} +2 -2
  59. package/bundle/{chunk-ULO2PX3T.js → chunk-CCZ43JB7.js} +3 -3
  60. package/bundle/{chunk-FVUL44T4.js → chunk-CNENVY37.js} +2 -2
  61. package/bundle/{chunk-J5NOL4DB.js → chunk-DJOSXXM2.js} +2 -2
  62. package/bundle/{chunk-7RAGSHSH.js → chunk-DMDX35YT.js} +12 -10
  63. package/bundle/chunk-DMDX35YT.js.map +7 -0
  64. package/bundle/{chunk-DNDYD5SL.js → chunk-E7DZYCSF.js} +3 -3
  65. package/bundle/{chunk-M6Q3IQ4H.js → chunk-FF2F7ENH.js} +250 -118
  66. package/bundle/chunk-FF2F7ENH.js.map +7 -0
  67. package/bundle/{chunk-GCFIK6OB.js → chunk-FSGICOCX.js} +21 -21
  68. package/bundle/{chunk-IXKQ4JMX.js → chunk-GFAJSPMD.js} +33 -17
  69. package/bundle/chunk-GFAJSPMD.js.map +7 -0
  70. package/bundle/{chunk-FJF42RZY.js → chunk-GHRLO2UL.js} +3 -3
  71. package/bundle/{chunk-3LQOJVTB.js → chunk-HFOCNYEO.js} +1842 -1220
  72. package/bundle/{chunk-3LQOJVTB.js.map → chunk-HFOCNYEO.js.map} +4 -4
  73. package/bundle/{chunk-7WHXTCVD.js → chunk-HWFN7JGU.js} +2 -2
  74. package/bundle/{chunk-KBPVJGD7.js → chunk-IXGDDDAB.js} +3 -3
  75. package/bundle/chunk-JHLKEUHE.js +37 -0
  76. package/bundle/chunk-JHLKEUHE.js.map +7 -0
  77. package/bundle/{chunk-YEOZN5IE.js → chunk-JRGEEGZF.js} +2 -2
  78. package/bundle/{chunk-56D3Y44D.js → chunk-KLG4SCF7.js} +10 -10
  79. package/bundle/{chunk-ASYX43OU.js → chunk-LB43Q7G6.js} +26 -26
  80. package/bundle/{chunk-TVSPVZTX.js → chunk-LN5MNDSA.js} +3 -3
  81. package/bundle/{chunk-RJX45XIC.js → chunk-LPF2HELD.js} +9 -4
  82. package/bundle/chunk-LPF2HELD.js.map +7 -0
  83. package/bundle/{chunk-72T2Q7IG.js → chunk-MJACYH7A.js} +270 -282
  84. package/bundle/chunk-MJACYH7A.js.map +7 -0
  85. package/bundle/{chunk-SESM4GBM.js → chunk-MPQ2PJQX.js} +52 -25
  86. package/bundle/chunk-MPQ2PJQX.js.map +7 -0
  87. package/bundle/{chunk-FIAVVKGN.js → chunk-MTE32OQH.js} +3 -3
  88. package/bundle/{chunk-MV5KOWOR.js → chunk-N3Q3TASM.js} +7 -7
  89. package/bundle/{chunk-IQKADER4.js → chunk-O4YBJS2K.js} +2 -2
  90. package/bundle/{chunk-VJATH7AN.js → chunk-OOUCUCUW.js} +9 -8
  91. package/bundle/chunk-OOUCUCUW.js.map +7 -0
  92. package/bundle/{chunk-5V4VHKEA.js → chunk-OT6HLPEA.js} +3 -3
  93. package/bundle/{chunk-V6CV3QPH.js → chunk-OWPQIBAO.js} +2 -2
  94. package/bundle/{chunk-EDZGF6BC.js → chunk-QJPDBJDP.js} +11 -4
  95. package/bundle/chunk-QJPDBJDP.js.map +7 -0
  96. package/bundle/{chunk-N5VROZ7A.js → chunk-QMP2KC4W.js} +5 -5
  97. package/bundle/{chunk-4HNCOQSK.js → chunk-QOGZ7BFL.js} +7 -7
  98. package/bundle/{chunk-2LKQV2ND.js → chunk-R23FHZRY.js} +3 -3
  99. package/bundle/{chunk-SXNY6HC4.js → chunk-R4GYWVCR.js} +6 -6
  100. package/bundle/chunk-R4GYWVCR.js.map +7 -0
  101. package/bundle/{chunk-S7ZIGIR5.js → chunk-R76K6L6H.js} +27 -27
  102. package/bundle/{chunk-S7ZIGIR5.js.map → chunk-R76K6L6H.js.map} +1 -1
  103. package/bundle/{chunk-TY26WMQY.js → chunk-RCWQ34QR.js} +2 -2
  104. package/bundle/{chunk-MQJG7OJX.js → chunk-RJ2OUNFU.js} +38 -36
  105. package/bundle/chunk-RJ2OUNFU.js.map +7 -0
  106. package/bundle/{chunk-S6HEHCCG.js → chunk-RO3TAYBR.js} +83 -46
  107. package/bundle/chunk-RO3TAYBR.js.map +7 -0
  108. package/bundle/{chunk-ZOCEBV62.js → chunk-UU3RLJSD.js} +3 -3
  109. package/bundle/{chunk-P5O6QZDC.js → chunk-V7Y2LFO4.js} +10 -6
  110. package/bundle/chunk-V7Y2LFO4.js.map +7 -0
  111. package/bundle/{chunk-WP7FZHMI.js → chunk-W2PSVV2T.js} +2 -2
  112. package/bundle/{chunk-V2QIAXWZ.js → chunk-WEGFRA6G.js} +3 -3
  113. package/bundle/{chunk-ZY6DH2S4.js → chunk-WTIGZO3N.js} +80 -70
  114. package/bundle/chunk-WTIGZO3N.js.map +7 -0
  115. package/bundle/{chunk-O4GKI3Q3.js → chunk-X7DLKIQM.js} +4 -4
  116. package/bundle/{chunk-BNBC4T45.js → chunk-XZ4ZBDM5.js} +3 -3
  117. package/bundle/{chunk-24V4A6RP.js → chunk-YI2KSYB4.js} +4 -4
  118. package/bundle/{chunk-37EX63K4.js → chunk-YWHJJHJ2.js} +6998 -3621
  119. package/bundle/chunk-YWHJJHJ2.js.map +7 -0
  120. package/bundle/{chunk-IK4R3RBZ.js → chunk-YZCOA4DC.js} +3 -3
  121. package/bundle/{chunk-2FZJDMAF.js → chunk-ZGNSCJWH.js} +10 -10
  122. package/bundle/{chunk-W726UGI6.js → chunk-ZKMKAO75.js} +3 -3
  123. package/bundle/{chunk-WGWM4IZM.js → chunk-ZT5ZBGWS.js} +4 -4
  124. package/bundle/{chunk-WGWM4IZM.js.map → chunk-ZT5ZBGWS.js.map} +1 -1
  125. package/bundle/{commands-XXFU2ZF7.js → commands-2JQ5YTJX.js} +20 -20
  126. package/bundle/{config-EWDZ234X.js → config-ZEWIM5Z2.js} +8 -7
  127. package/bundle/{config-show-6J33O4TE.js → config-show-WBJPQPRD.js} +5 -5
  128. package/bundle/{context-OCS7HLJP.js → context-V75QNXB5.js} +5 -2
  129. package/bundle/{context-OCS7HLJP.js.map → context-V75QNXB5.js.map} +1 -1
  130. package/bundle/{daemon-LTDAXNA2.js → daemon-W7VQOSZC.js} +7 -7
  131. package/bundle/{delegation-tools-YDTWQMZD.js → delegation-tools-VGTRFQBF.js} +13 -11
  132. package/bundle/{registry-client-VN2MM2HI.js → deploy-5AGIULM2.js} +10 -6
  133. package/bundle/{deploy-lib-import-RGZJ3CGC.js → deploy-lib-import-ZBDYORN4.js} +5 -3
  134. package/bundle/{deps-PHSLIA77.js → deps-VB3S3RLF.js} +21 -19
  135. package/bundle/deps-VB3S3RLF.js.map +7 -0
  136. package/bundle/{direct-api-transport-OAKYQBJR.js → direct-api-transport-YSROTC35.js} +30 -28
  137. package/bundle/direct-api-transport-YSROTC35.js.map +7 -0
  138. package/bundle/{discord-adapter-WUNYPTDE.js → discord-adapter-LKBSIFLV.js} +26 -26
  139. package/bundle/{dist-7HEHHQI2.js → dist-KMK7TZGN.js} +376 -348
  140. package/bundle/dist-KMK7TZGN.js.map +7 -0
  141. package/bundle/{dns-wakeup-F55ALHXJ.js → dns-wakeup-KIURCCFJ.js} +4 -3
  142. package/bundle/{dns-wakeup-F55ALHXJ.js.map → dns-wakeup-KIURCCFJ.js.map} +1 -1
  143. package/bundle/{doctor-probes-3SLIUGKS.js → doctor-probes-46UKIROK.js} +4 -3
  144. package/bundle/{env-schema-MSDP2YBO.js → env-schema-YGHCKX5B.js} +5 -4
  145. package/bundle/{gossip-CS3G3447.js → gossip-VSEY2HSE.js} +7 -6
  146. package/bundle/{guardrails-24XK2COI.js → guardrails-U7M6H2GE.js} +6 -5
  147. package/bundle/{health-check-FRUNRVNQ.js → health-check-ASRLUJE5.js} +6 -2
  148. package/bundle/health-check-ASRLUJE5.js.map +7 -0
  149. package/bundle/{heartbeat-system-G4IFQXT6.js → heartbeat-system-MUXLT4E6.js} +7 -6
  150. package/bundle/{heartbeat-tier3-3ZO3EVXP.js → heartbeat-tier3-636ZMM4E.js} +45 -44
  151. package/bundle/heartbeat-tier3-636ZMM4E.js.map +7 -0
  152. package/bundle/{hook-system-X6INNJGV.js → hook-system-Z4XD6IM5.js} +5 -4
  153. package/bundle/{hotskills-6FQYTJIO.js → hotskills-AOUWVTQB.js} +7 -6
  154. package/bundle/{install-ZAHTZ5M5.js → install-3GGZUN22.js} +23 -20
  155. package/bundle/install-3GGZUN22.js.map +7 -0
  156. package/bundle/{install-manifest-QX7KVDCA.js → install-manifest-624KOB4S.js} +4 -3
  157. package/bundle/{install-manifest-QX7KVDCA.js.map → install-manifest-624KOB4S.js.map} +1 -1
  158. package/bundle/{irc-adapter-IEJQKKJF.js → irc-adapter-SA7GLJGR.js} +5 -4
  159. package/bundle/{irc-adapter-IEJQKKJF.js.map → irc-adapter-SA7GLJGR.js.map} +1 -1
  160. package/bundle/{irc-config-TTWNYFLH.js → irc-config-PG4X2I4M.js} +6 -5
  161. package/bundle/{irc-config-TTWNYFLH.js.map → irc-config-PG4X2I4M.js.map} +1 -1
  162. package/bundle/{kanban-board-J6RO3ZU7.js → kanban-board-4AI5Z6B5.js} +7 -5
  163. package/bundle/{kanban-channel-5EIXBFSA.js → kanban-channel-JMBYWGWD.js} +8 -6
  164. package/bundle/{lazy-require-V6EFUATC.js → lazy-require-GURNBC3C.js} +11 -6
  165. package/bundle/{logger-Y3VILPRH.js → logger-UQJPZMYV.js} +4 -3
  166. package/bundle/{logs-YS3GDURO.js → logs-2WTDLMB5.js} +5 -5
  167. package/bundle/{main-chat-YLZDNQPO.js → main-chat-EID5Y6H2.js} +6 -5
  168. package/bundle/{master-user-Z4M7KCJE.js → master-user-TKA7M2GL.js} +7 -6
  169. package/bundle/{media-utils-P6RZ2K3U.js → media-utils-X3UN342B.js} +44 -43
  170. package/bundle/{media-utils-P6RZ2K3U.js.map → media-utils-X3UN342B.js.map} +2 -2
  171. package/bundle/{message-pipeline-MHEBDJLH.js → message-pipeline-TAWXNEVS.js} +20 -20
  172. package/bundle/meta.json +9264 -8575
  173. package/bundle/{migrate-layout-RJJQLVGR.js → migrate-layout-KEAIIN26.js} +8 -4
  174. package/bundle/migrate-layout-KEAIIN26.js.map +7 -0
  175. package/bundle/{nerve-VZNMFDGY.js → nerve-TC34H4EL.js} +5 -4
  176. package/bundle/{notification-VV2OR6NW.js → notification-JQNVGICN.js} +8 -7
  177. package/bundle/{openrouter-credits-LXC7P4G6.js → openrouter-credits-5Q3EYWE5.js} +5 -4
  178. package/bundle/{openrouter-credits-LXC7P4G6.js.map → openrouter-credits-5Q3EYWE5.js.map} +1 -1
  179. package/bundle/{orc-KC4USP55.js → orc-74Z62W7B.js} +4 -4
  180. package/bundle/{orc-tools-CHRSXSAS.js → orc-tools-GME3DKIN.js} +5 -4
  181. package/bundle/{paths-EDK6KWHG.js → paths-BAUNPLNJ.js} +6 -2
  182. package/bundle/{paths-RZF6WDMG.js → paths-MZC2KU2C.js} +3 -2
  183. package/bundle/{peer-auth-SRONOLNG.js → peer-auth-VRO3JYL5.js} +9 -8
  184. package/bundle/{peer-client-VOF77T6C.js → peer-client-WLK5GZQS.js} +9 -8
  185. package/bundle/{peer-client-VOF77T6C.js.map → peer-client-WLK5GZQS.js.map} +1 -1
  186. package/bundle/{peer-config-FRWLEYQ5.js → peer-config-24WILLCJ.js} +6 -5
  187. package/bundle/{peer-jwt-XY3XRIA2.js → peer-jwt-ZR6RF3XM.js} +6 -5
  188. package/bundle/{peer-transport-UBBXTDRP.js → peer-transport-BK5VHI2M.js} +8 -7
  189. package/bundle/{phase-transport-4NQHZX75.js → phase-transport-7QJM7J6V.js} +18 -16
  190. package/bundle/{reconcile-2EUXJ6W5.js → reconcile-7N7OE2GU.js} +5 -4
  191. package/bundle/{reconciler-FFQGV4DO.js → reconciler-7LOOUK43.js} +13 -11
  192. package/bundle/{reconciler-FFQGV4DO.js.map → reconciler-7LOOUK43.js.map} +1 -1
  193. package/bundle/{restore-NFDE2RG6.js → restore-MENZ3I3K.js} +13 -9
  194. package/bundle/{restore-NFDE2RG6.js.map → restore-MENZ3I3K.js.map} +3 -3
  195. package/bundle/{rollback-MVZ53XS4.js → rollback-JOHY6KWW.js} +5 -5
  196. package/bundle/{chunk-SKY6656M.js → sandbox-runtime-T7RF4WJD.js} +11 -28
  197. package/bundle/{chunk-SKY6656M.js.map → sandbox-runtime-T7RF4WJD.js.map} +1 -1
  198. package/bundle/{self-healer-utils-KD6LV63S.js → self-healer-utils-OR2N6RLD.js} +5 -4
  199. package/bundle/{self-healer-utils-KD6LV63S.js.map → self-healer-utils-OR2N6RLD.js.map} +1 -1
  200. package/bundle/{sha-tracker-2DB4R2TW.js → sha-tracker-BXOLWZJL.js} +5 -4
  201. package/bundle/{skill-session-BPDVA6ZG.js → skill-session-H6EQ4NGN.js} +5 -4
  202. package/bundle/{skill-session-BPDVA6ZG.js.map → skill-session-H6EQ4NGN.js.map} +1 -1
  203. package/bundle/{skill-stats-TPD2NROA.js → skill-stats-7O777ZSZ.js} +6 -5
  204. package/bundle/{skill-watcher-D7QYYYON.js → skill-watcher-ZGLTDPG5.js} +6 -5
  205. package/bundle/{sleep-GH6DLBJJ.js → sleep-3LFZH727.js} +10 -9
  206. package/bundle/{soul-bundle-GXLMDBCC.js → soul-bundle-RQ2YQMJW.js} +10 -9
  207. package/bundle/{spin-4DBYHS3E.js → spin-76K4R6FK.js} +12 -10
  208. package/bundle/{spin-notifications-IKYJPER5.js → spin-notifications-LD46B4K5.js} +7 -5
  209. package/bundle/{spin-notifications-IKYJPER5.js.map → spin-notifications-LD46B4K5.js.map} +1 -1
  210. package/bundle/{spin-types-PLJH3SIK.js → spin-types-MOKTZXGB.js} +5 -4
  211. package/bundle/{src-SUFZ27S5.js → src-6BTCMOD3.js} +4 -4
  212. package/bundle/{sse-parser-anthropic-U7ILHOY5.js → sse-parser-anthropic-NV2CGBIT.js} +5 -4
  213. package/bundle/{sse-parser-anthropic-U7ILHOY5.js.map → sse-parser-anthropic-NV2CGBIT.js.map} +1 -1
  214. package/bundle/{sse-parser-responses-OI73R3AH.js → sse-parser-responses-FC3PFHQ5.js} +5 -4
  215. package/bundle/{sse-parser-responses-OI73R3AH.js.map → sse-parser-responses-FC3PFHQ5.js.map} +1 -1
  216. package/bundle/{ssrf-guard-6GP4QYVA.js → ssrf-guard-E2YPLW6G.js} +5 -4
  217. package/bundle/{ssrf-guard-6GP4QYVA.js.map → ssrf-guard-E2YPLW6G.js.map} +1 -1
  218. package/bundle/{start-JT2BPMSW.js → start-HPO5LYJP.js} +5 -5
  219. package/bundle/start-HPO5LYJP.js.map +7 -0
  220. package/bundle/{stt-KD3AABKG.js → stt-UE7EOYD7.js} +6 -5
  221. package/bundle/{subagent-runtime-LVECAUPV.js → subagent-runtime-4X3UHF4H.js} +6 -5
  222. package/bundle/system-status-PLPWV4RF.js +346 -0
  223. package/bundle/system-status-PLPWV4RF.js.map +7 -0
  224. package/bundle/{task-store-2XRDM3AW.js → task-store-RAFMDQ7N.js} +6 -5
  225. package/bundle/{telegram-adapter-UJ3RYYV6.js → telegram-adapter-PPXKTGOP.js} +35 -35
  226. package/bundle/{tool-registry-YU6WBXPA.js → tool-registry-NKIPNJZ5.js} +25 -23
  227. package/bundle/{tool-sandbox-RNNPDR5M.js → tool-sandbox-DQCP3UTU.js} +6 -5
  228. package/bundle/{transport-config-OK3MZPJK.js → transport-config-SF6GBV47.js} +9 -8
  229. package/bundle/{update-ENNPRW7Y.js → update-QOOGMFSJ.js} +6 -6
  230. package/bundle/{update-check-SJB6GV3A.js → update-check-LPZG3K5P.js} +3 -2
  231. package/bundle/{update-check-SJB6GV3A.js.map → update-check-LPZG3K5P.js.map} +1 -1
  232. package/bundle/{usage-tracker-HRSGC7QC.js → usage-tracker-TBDM4KE6.js} +2 -2
  233. package/bundle/{user-registry-6PUJJ5J2.js → user-registry-OYJVAHDD.js} +6 -5
  234. package/bundle/{wrapper-WLHLG4MI.js → wrapper-W66YICNZ.js} +3 -3
  235. package/bundle/{ws-peer-client-WHW3RJTD.js → ws-peer-client-G5QHOF6K.js} +15 -14
  236. package/bundle/{ws-peer-client-WHW3RJTD.js.map → ws-peer-client-G5QHOF6K.js.map} +2 -2
  237. package/package.json +3 -7
  238. package/scripts/emergency-deploy.sh +11 -8
  239. package/scripts/emergency-update.sh +156 -23
  240. package/templates/config/.env +1 -1
  241. package/templates/config/models.json +13 -0
  242. package/bundle/chunk-37EX63K4.js.map +0 -7
  243. package/bundle/chunk-3QW2K53E.js.map +0 -7
  244. package/bundle/chunk-72T2Q7IG.js.map +0 -7
  245. package/bundle/chunk-7RAGSHSH.js.map +0 -7
  246. package/bundle/chunk-BU7LTI2W.js.map +0 -7
  247. package/bundle/chunk-C3EYYJN3.js.map +0 -7
  248. package/bundle/chunk-CAOIIVFP.js +0 -110
  249. package/bundle/chunk-CAOIIVFP.js.map +0 -7
  250. package/bundle/chunk-EDZGF6BC.js.map +0 -7
  251. package/bundle/chunk-H2K23MOF.js.map +0 -7
  252. package/bundle/chunk-HAZHNBBY.js +0 -156
  253. package/bundle/chunk-HAZHNBBY.js.map +0 -7
  254. package/bundle/chunk-IXKQ4JMX.js.map +0 -7
  255. package/bundle/chunk-JAJ3DUQ2.js +0 -30
  256. package/bundle/chunk-JAJ3DUQ2.js.map +0 -7
  257. package/bundle/chunk-KMFR5AVY.js +0 -45
  258. package/bundle/chunk-KMFR5AVY.js.map +0 -7
  259. package/bundle/chunk-M6Q3IQ4H.js.map +0 -7
  260. package/bundle/chunk-MQJG7OJX.js.map +0 -7
  261. package/bundle/chunk-OY2HAK33.js.map +0 -7
  262. package/bundle/chunk-P5O6QZDC.js.map +0 -7
  263. package/bundle/chunk-RJX45XIC.js.map +0 -7
  264. package/bundle/chunk-S6HEHCCG.js.map +0 -7
  265. package/bundle/chunk-SESM4GBM.js.map +0 -7
  266. package/bundle/chunk-SXNY6HC4.js.map +0 -7
  267. package/bundle/chunk-VJATH7AN.js.map +0 -7
  268. package/bundle/chunk-ZY6DH2S4.js.map +0 -7
  269. package/bundle/deps-PHSLIA77.js.map +0 -7
  270. package/bundle/direct-api-transport-OAKYQBJR.js.map +0 -7
  271. package/bundle/dist-7HEHHQI2.js.map +0 -7
  272. package/bundle/health-check-FRUNRVNQ.js.map +0 -7
  273. package/bundle/heartbeat-tier3-3ZO3EVXP.js.map +0 -7
  274. package/bundle/install-ZAHTZ5M5.js.map +0 -7
  275. package/bundle/migrate-layout-RJJQLVGR.js.map +0 -7
  276. package/bundle/phase-config-V4XETN5F.js +0 -18
  277. package/bundle/sandbox-runtime-WHACQLLN.js +0 -22
  278. package/bundle/start-JT2BPMSW.js.map +0 -7
  279. package/bundle/system-status-XXJWTVJN.js +0 -243
  280. package/bundle/system-status-XXJWTVJN.js.map +0 -7
  281. package/bundle/user-registry-6PUJJ5J2.js.map +0 -7
  282. package/bundle/wrapper-WLHLG4MI.js.map +0 -7
  283. /package/bundle/{agent-api-rate-limit-4GEZ4YN5.js.map → agent-api-rate-limit-VENFGOAD.js.map} +0 -0
  284. /package/bundle/{agent-registry-563P4EUJ.js.map → agent-registry-DL7UT272.js.map} +0 -0
  285. /package/bundle/{bridge-lock-transport-LXCF2IVN.js.map → bridge-lock-transport-BJAMHMXW.js.map} +0 -0
  286. /package/bundle/{browser-2VZOGOGX.js.map → browser-PT54UWSW.js.map} +0 -0
  287. /package/bundle/{capability-WXEA2WFK.js.map → capability-EKPGHQIO.js.map} +0 -0
  288. /package/bundle/{chunk-4PIVWXUJ.js.map → chunk-2ZD7VQRW.js.map} +0 -0
  289. /package/bundle/{chunk-T7TAWGBX.js.map → chunk-52PQM4EZ.js.map} +0 -0
  290. /package/bundle/{chunk-2RGR3LSV.js.map → chunk-5P5HF7IJ.js.map} +0 -0
  291. /package/bundle/{chunk-OOKNHOCB.js.map → chunk-6S3G6GPO.js.map} +0 -0
  292. /package/bundle/{chunk-E7MV7WFT.js.map → chunk-6VTHSN4V.js.map} +0 -0
  293. /package/bundle/{chunk-NGZVJ52F.js.map → chunk-76YN7O3U.js.map} +0 -0
  294. /package/bundle/{chunk-43DKPXTP.js.map → chunk-7LORCJCQ.js.map} +0 -0
  295. /package/bundle/{chunk-HDOFJVFS.js.map → chunk-7OI46MH7.js.map} +0 -0
  296. /package/bundle/{chunk-CB6S3ZRF.js.map → chunk-AFFW2LRY.js.map} +0 -0
  297. /package/bundle/{chunk-TCI6FZTP.js.map → chunk-AHJDG6OM.js.map} +0 -0
  298. /package/bundle/{chunk-YME7NRGP.js.map → chunk-B2TIRDZC.js.map} +0 -0
  299. /package/bundle/{chunk-SSCGWDIC.js.map → chunk-BWJ37KMW.js.map} +0 -0
  300. /package/bundle/{chunk-ULO2PX3T.js.map → chunk-CCZ43JB7.js.map} +0 -0
  301. /package/bundle/{chunk-FVUL44T4.js.map → chunk-CNENVY37.js.map} +0 -0
  302. /package/bundle/{chunk-J5NOL4DB.js.map → chunk-DJOSXXM2.js.map} +0 -0
  303. /package/bundle/{chunk-DNDYD5SL.js.map → chunk-E7DZYCSF.js.map} +0 -0
  304. /package/bundle/{chunk-GCFIK6OB.js.map → chunk-FSGICOCX.js.map} +0 -0
  305. /package/bundle/{chunk-FJF42RZY.js.map → chunk-GHRLO2UL.js.map} +0 -0
  306. /package/bundle/{chunk-7WHXTCVD.js.map → chunk-HWFN7JGU.js.map} +0 -0
  307. /package/bundle/{chunk-KBPVJGD7.js.map → chunk-IXGDDDAB.js.map} +0 -0
  308. /package/bundle/{chunk-YEOZN5IE.js.map → chunk-JRGEEGZF.js.map} +0 -0
  309. /package/bundle/{chunk-56D3Y44D.js.map → chunk-KLG4SCF7.js.map} +0 -0
  310. /package/bundle/{chunk-ASYX43OU.js.map → chunk-LB43Q7G6.js.map} +0 -0
  311. /package/bundle/{chunk-TVSPVZTX.js.map → chunk-LN5MNDSA.js.map} +0 -0
  312. /package/bundle/{chunk-FIAVVKGN.js.map → chunk-MTE32OQH.js.map} +0 -0
  313. /package/bundle/{chunk-MV5KOWOR.js.map → chunk-N3Q3TASM.js.map} +0 -0
  314. /package/bundle/{chunk-IQKADER4.js.map → chunk-O4YBJS2K.js.map} +0 -0
  315. /package/bundle/{chunk-5V4VHKEA.js.map → chunk-OT6HLPEA.js.map} +0 -0
  316. /package/bundle/{chunk-V6CV3QPH.js.map → chunk-OWPQIBAO.js.map} +0 -0
  317. /package/bundle/{chunk-N5VROZ7A.js.map → chunk-QMP2KC4W.js.map} +0 -0
  318. /package/bundle/{chunk-4HNCOQSK.js.map → chunk-QOGZ7BFL.js.map} +0 -0
  319. /package/bundle/{chunk-2LKQV2ND.js.map → chunk-R23FHZRY.js.map} +0 -0
  320. /package/bundle/{chunk-TY26WMQY.js.map → chunk-RCWQ34QR.js.map} +0 -0
  321. /package/bundle/{chunk-ZOCEBV62.js.map → chunk-UU3RLJSD.js.map} +0 -0
  322. /package/bundle/{chunk-WP7FZHMI.js.map → chunk-W2PSVV2T.js.map} +0 -0
  323. /package/bundle/{chunk-V2QIAXWZ.js.map → chunk-WEGFRA6G.js.map} +0 -0
  324. /package/bundle/{chunk-O4GKI3Q3.js.map → chunk-X7DLKIQM.js.map} +0 -0
  325. /package/bundle/{chunk-BNBC4T45.js.map → chunk-XZ4ZBDM5.js.map} +0 -0
  326. /package/bundle/{chunk-24V4A6RP.js.map → chunk-YI2KSYB4.js.map} +0 -0
  327. /package/bundle/{chunk-IK4R3RBZ.js.map → chunk-YZCOA4DC.js.map} +0 -0
  328. /package/bundle/{chunk-2FZJDMAF.js.map → chunk-ZGNSCJWH.js.map} +0 -0
  329. /package/bundle/{chunk-W726UGI6.js.map → chunk-ZKMKAO75.js.map} +0 -0
  330. /package/bundle/{commands-XXFU2ZF7.js.map → commands-2JQ5YTJX.js.map} +0 -0
  331. /package/bundle/{config-EWDZ234X.js.map → config-ZEWIM5Z2.js.map} +0 -0
  332. /package/bundle/{config-show-6J33O4TE.js.map → config-show-WBJPQPRD.js.map} +0 -0
  333. /package/bundle/{daemon-LTDAXNA2.js.map → daemon-W7VQOSZC.js.map} +0 -0
  334. /package/bundle/{delegation-tools-YDTWQMZD.js.map → delegation-tools-VGTRFQBF.js.map} +0 -0
  335. /package/bundle/{deploy-lib-import-RGZJ3CGC.js.map → deploy-5AGIULM2.js.map} +0 -0
  336. /package/bundle/{doctor-probes-3SLIUGKS.js.map → deploy-lib-import-ZBDYORN4.js.map} +0 -0
  337. /package/bundle/{discord-adapter-WUNYPTDE.js.map → discord-adapter-LKBSIFLV.js.map} +0 -0
  338. /package/bundle/{env-schema-MSDP2YBO.js.map → doctor-probes-46UKIROK.js.map} +0 -0
  339. /package/bundle/{gossip-CS3G3447.js.map → env-schema-YGHCKX5B.js.map} +0 -0
  340. /package/bundle/{guardrails-24XK2COI.js.map → gossip-VSEY2HSE.js.map} +0 -0
  341. /package/bundle/{heartbeat-system-G4IFQXT6.js.map → guardrails-U7M6H2GE.js.map} +0 -0
  342. /package/bundle/{hook-system-X6INNJGV.js.map → heartbeat-system-MUXLT4E6.js.map} +0 -0
  343. /package/bundle/{hotskills-6FQYTJIO.js.map → hook-system-Z4XD6IM5.js.map} +0 -0
  344. /package/bundle/{kanban-board-J6RO3ZU7.js.map → hotskills-AOUWVTQB.js.map} +0 -0
  345. /package/bundle/{kanban-channel-5EIXBFSA.js.map → kanban-board-4AI5Z6B5.js.map} +0 -0
  346. /package/bundle/{lazy-require-V6EFUATC.js.map → kanban-channel-JMBYWGWD.js.map} +0 -0
  347. /package/bundle/{logger-Y3VILPRH.js.map → lazy-require-GURNBC3C.js.map} +0 -0
  348. /package/bundle/{main-chat-YLZDNQPO.js.map → logger-UQJPZMYV.js.map} +0 -0
  349. /package/bundle/{logs-YS3GDURO.js.map → logs-2WTDLMB5.js.map} +0 -0
  350. /package/bundle/{master-user-Z4M7KCJE.js.map → main-chat-EID5Y6H2.js.map} +0 -0
  351. /package/bundle/{message-pipeline-MHEBDJLH.js.map → master-user-TKA7M2GL.js.map} +0 -0
  352. /package/bundle/{nerve-VZNMFDGY.js.map → message-pipeline-TAWXNEVS.js.map} +0 -0
  353. /package/bundle/{notification-VV2OR6NW.js.map → nerve-TC34H4EL.js.map} +0 -0
  354. /package/bundle/{orc-tools-CHRSXSAS.js.map → notification-JQNVGICN.js.map} +0 -0
  355. /package/bundle/{orc-KC4USP55.js.map → orc-74Z62W7B.js.map} +0 -0
  356. /package/bundle/{paths-EDK6KWHG.js.map → orc-tools-GME3DKIN.js.map} +0 -0
  357. /package/bundle/{paths-RZF6WDMG.js.map → paths-BAUNPLNJ.js.map} +0 -0
  358. /package/bundle/{peer-auth-SRONOLNG.js.map → paths-MZC2KU2C.js.map} +0 -0
  359. /package/bundle/{peer-config-FRWLEYQ5.js.map → peer-auth-VRO3JYL5.js.map} +0 -0
  360. /package/bundle/{peer-jwt-XY3XRIA2.js.map → peer-config-24WILLCJ.js.map} +0 -0
  361. /package/bundle/{peer-transport-UBBXTDRP.js.map → peer-jwt-ZR6RF3XM.js.map} +0 -0
  362. /package/bundle/{phase-config-V4XETN5F.js.map → peer-transport-BK5VHI2M.js.map} +0 -0
  363. /package/bundle/{phase-transport-4NQHZX75.js.map → phase-transport-7QJM7J6V.js.map} +0 -0
  364. /package/bundle/{reconcile-2EUXJ6W5.js.map → reconcile-7N7OE2GU.js.map} +0 -0
  365. /package/bundle/{registry-client-VN2MM2HI.js.map → rollback-JOHY6KWW.js.map} +0 -0
  366. /package/bundle/{rollback-MVZ53XS4.js.map → sha-tracker-BXOLWZJL.js.map} +0 -0
  367. /package/bundle/{sandbox-runtime-WHACQLLN.js.map → skill-stats-7O777ZSZ.js.map} +0 -0
  368. /package/bundle/{sha-tracker-2DB4R2TW.js.map → skill-watcher-ZGLTDPG5.js.map} +0 -0
  369. /package/bundle/{skill-stats-TPD2NROA.js.map → sleep-3LFZH727.js.map} +0 -0
  370. /package/bundle/{skill-watcher-D7QYYYON.js.map → soul-bundle-RQ2YQMJW.js.map} +0 -0
  371. /package/bundle/{sleep-GH6DLBJJ.js.map → spin-76K4R6FK.js.map} +0 -0
  372. /package/bundle/{soul-bundle-GXLMDBCC.js.map → spin-types-MOKTZXGB.js.map} +0 -0
  373. /package/bundle/{spin-4DBYHS3E.js.map → src-6BTCMOD3.js.map} +0 -0
  374. /package/bundle/{spin-types-PLJH3SIK.js.map → stt-UE7EOYD7.js.map} +0 -0
  375. /package/bundle/{src-SUFZ27S5.js.map → subagent-runtime-4X3UHF4H.js.map} +0 -0
  376. /package/bundle/{stt-KD3AABKG.js.map → task-store-RAFMDQ7N.js.map} +0 -0
  377. /package/bundle/{telegram-adapter-UJ3RYYV6.js.map → telegram-adapter-PPXKTGOP.js.map} +0 -0
  378. /package/bundle/{subagent-runtime-LVECAUPV.js.map → tool-registry-NKIPNJZ5.js.map} +0 -0
  379. /package/bundle/{task-store-2XRDM3AW.js.map → tool-sandbox-DQCP3UTU.js.map} +0 -0
  380. /package/bundle/{tool-registry-YU6WBXPA.js.map → transport-config-SF6GBV47.js.map} +0 -0
  381. /package/bundle/{tool-sandbox-RNNPDR5M.js.map → update-QOOGMFSJ.js.map} +0 -0
  382. /package/bundle/{transport-config-OK3MZPJK.js.map → usage-tracker-TBDM4KE6.js.map} +0 -0
  383. /package/bundle/{update-ENNPRW7Y.js.map → user-registry-OYJVAHDD.js.map} +0 -0
  384. /package/bundle/{usage-tracker-HRSGC7QC.js.map → wrapper-W66YICNZ.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/commands/restore.ts"],
4
- "sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars restore` \u2014 restore from backup archive, auto-detect type.\n *\n * .abm \u2192 delegate to abmind restore\n * .zip/.7z \u2192 extract to ~/.abtars/ + find sibling .abm \u2192 restore both\n * .enc \u2192 find sibling .abm first (restore \u2192 key exists) \u2192 decrypt \u2192 extract\n * --config \u2192 zip only, skip abmind\n * --passphrase \u2192 passed through to abmind restore\n */\n\nimport { existsSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawnSync } from \"node:child_process\";\nimport { createDecipheriv, hkdfSync } from \"node:crypto\";\nimport { reconcile } from \"../deploy-lib/reconcile.js\";\nimport { abtarsHome, abmindHome as resolveAbmindHome } from \"../../paths.js\";\n\nexport interface RestoreOpts {\n config?: boolean;\n passphrase?: string;\n}\n\nexport async function restore(archivePath: string, opts: RestoreOpts = {}): Promise<number> {\n await printBanner(\"restore\");\n if (!archivePath) {\n process.stderr.write(\"Usage: abtars restore <file.zip|.7z|.abm|.enc> [--config] [--passphrase <p>]\\n\");\n return 1;\n }\n if (!existsSync(archivePath)) {\n process.stderr.write(`File not found: ${archivePath}\\n`);\n return 1;\n }\n\n // Direct .abm \u2192 delegate entirely to abmind restore\n if (archivePath.endsWith(\".abm\")) {\n return restoreAbmind(archivePath, opts.passphrase);\n }\n\n // .enc \u2192 restore sibling .abm first (ensures key exists), then decrypt\n if (archivePath.endsWith(\".enc\")) {\n // Find sibling .abm\n const date = extractDate(archivePath);\n const dir = dirname(archivePath);\n const sibling = findSiblingAbm(dir, date);\n\n if (!opts.config && sibling) {\n const rc = restoreAbmind(sibling, opts.passphrase);\n if (rc !== 0) return rc;\n }\n\n // Decrypt .enc \u2192 temp zip\n const abmindHome = resolveAbmindHome();\n const keyPath = join(abmindHome, \"secret\", \"abmind.key\");\n if (!existsSync(keyPath)) {\n process.stderr.write(\"Error: abmind.key not found \u2014 run `abmind restore <file.abm>` first to recreate it, then retry.\\n\");\n return 1;\n }\n\n const tmpZip = join(process.env[\"TMPDIR\"] ?? \"/tmp\", `abtars-restore-${Date.now()}.zip`);\n const ok = decryptFile(archivePath, tmpZip, keyPath);\n if (!ok) return 1;\n process.stdout.write(\"\u2713 decrypted\\n\");\n\n // Extract the decrypted zip\n const rc = extractZip(tmpZip, abtarsHome());\n try { unlinkSync(tmpZip); } catch { /* ignore */ }\n return rc;\n }\n\n // .zip/.7z\n if (!opts.config) {\n // Restore sibling .abm first\n const date = extractDate(archivePath);\n const dir = dirname(archivePath);\n const sibling = findSiblingAbm(dir, date);\n if (sibling) {\n const rc = restoreAbmindSibling(sibling, opts.passphrase);\n if (rc !== 0) {\n // Continue with abtars restore, print prominent message at the end\n const abmFile = sibling.endsWith(\".abm\") ? sibling : null;\n process.on(\"exit\", () => {\n process.stderr.write(\"\\n\\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\\n\");\n process.stderr.write(\"\u26A0 MEMORY NOT RESTORED \u2014 wrong passphrase.\\n\");\n process.stderr.write(\"Fix: abmind restore \" + (abmFile ?? \"<file.abm>\") + \" --passphrase <original>\\n\");\n process.stderr.write(\"\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\\n\");\n });\n }\n } else {\n process.stdout.write(\"\u2139 no sibling .abm found \u2014 memory not restored\\n\");\n }\n }\n\n // Extract zip to ~/.abtars/ (overlays existing \u2014 bridge keeps running)\n return extractZip(archivePath, abtarsHome());\n}\n\nfunction restoreAbmind(abmPath: string, passphrase?: string): number {\n const args = [\"restore\", abmPath, \"--mode\", \"merge\"];\n if (passphrase) args.push(\"--passphrase\", passphrase);\n\n const envPassphrase = process.env[\"ABMIND_BACKUP_PASSPHRASE\"];\n const env = { ...process.env };\n if (!passphrase && envPassphrase) {\n env[\"ABMIND_BACKUP_PASSPHRASE\"] = envPassphrase;\n }\n\n const result = spawnSync(\"abmind\", args, { encoding: \"utf-8\", stdio: \"inherit\", env });\n if (result.status !== 0) {\n process.stderr.write(\"abmind restore failed\\n\");\n return 1;\n }\n process.stdout.write(\"\u2713 abmind memory restored\\n\");\n return 0;\n}\n\n/** Handle abmind sibling: .abm direct, .7z/.zip \u2192 extract to ~/.abmind + find .abm inside */\nfunction restoreAbmindSibling(siblingPath: string, passphrase?: string): number {\n if (siblingPath.endsWith(\".abm\")) return restoreAbmind(siblingPath, passphrase);\n\n // .7z or .zip: extract filesystem to ~/.abmind/, then find .abm inside and restore memories\n const abmindHome = resolveAbmindHome();\n const is7z = siblingPath.endsWith(\".7z\");\n const extractResult = is7z\n ? spawnSync(\"7z\", [\"x\", `-o${abmindHome}`, \"-aoa\", \"-bso0\", siblingPath], { encoding: \"utf-8\", stdio: \"pipe\" })\n : spawnSync(\"unzip\", [\"-oq\", siblingPath, \"-d\", abmindHome], { encoding: \"utf-8\", stdio: \"pipe\" });\n if (extractResult.status !== 0) {\n process.stderr.write(\"abmind archive extract failed\\n\");\n return 1;\n }\n process.stdout.write(\"\u2713 abmind files restored\\n\");\n\n // Find .abm file extracted into abmindHome\n const abmFile = readdirSync(abmindHome).find(f => f.endsWith(\".abm\"));\n if (abmFile) {\n const abmPath = join(abmindHome, abmFile);\n const rc = restoreAbmind(abmPath, passphrase);\n try { unlinkSync(abmPath); } catch {} // cleanup extracted .abm\n return rc;\n }\n process.stdout.write(\"\u2139 no .abm in archive \u2014 files restored but memories not imported\\n\");\n return 0;\n}\n\nfunction extractZip(archivePath: string, destDir: string): number {\n // Avoid \"getcwd: cannot access parent directories\" if CWD is inside destDir\n try { process.chdir(homedir()); } catch {}\n const is7z = archivePath.endsWith(\".7z\");\n const listCmd = is7z\n ? spawnSync(\"7z\", [\"l\", archivePath], { encoding: \"utf-8\" })\n : spawnSync(\"unzip\", [\"-l\", archivePath], { encoding: \"utf-8\" });\n if (!listCmd.stdout?.includes(\"config/\")) {\n process.stderr.write(\"Error: archive does not contain config/ \u2014 not a valid abtars backup\\n\");\n return 1;\n }\n\n // Extract, excluding binary dirs + manifest (install state, not user data)\n let result;\n if (is7z) {\n result = spawnSync(\"7z\", [\"x\", `-o${destDir}`, \"-aoa\", \"-bso0\", \"-xr!releases\", \"-xr!current\", \"-xr!bin\", \"-xr!manifest.json\", archivePath],\n { encoding: \"utf-8\", stdio: \"pipe\" });\n } else {\n result = spawnSync(\"unzip\", [\"-oq\", archivePath, \"-d\", destDir, \"-x\", \"releases/*\", \"current/*\", \"bin/*\", \"manifest.json\"],\n { encoding: \"utf-8\", stdio: \"pipe\" });\n }\n\n if (result.status !== 0) {\n process.stderr.write(\"Restore extract failed\\n\");\n return 1;\n }\n\n // Reconcile runtime tree (skills/core, prompts, config seeds)\n const templatesSrc = join(homedir(), \".abtars-releases\", \"src\", \"abtars\", \"templates\");\n reconcile(templatesSrc, destDir);\n\n process.stdout.write(`\u2713 Restored to ${destDir}\\n`);\n return 0;\n}\n\nfunction extractDate(filePath: string): string | null {\n const name = basename(filePath);\n const match = name.match(/(\\d{8}-\\d{4})/);\n return match?.[1] ?? null;\n}\n\nfunction findSiblingAbm(dir: string, date: string | null): string | null {\n if (!existsSync(dir)) return null;\n // Look for abmind zip first, then .abm\n const files = readdirSync(dir).filter(f => f.startsWith(\"abmind-\") && (f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\")));\n if (date) {\n const exact = files.find(f => f.includes(date));\n if (exact) return join(dir, exact);\n }\n const sorted = files.sort().reverse();\n return sorted[0] ? join(dir, sorted[0]) : null;\n}\n\nfunction decryptFile(inputPath: string, outputPath: string, keyPath: string): boolean {\n const master = Buffer.from(readFileSync(keyPath, \"utf-8\").trim(), \"hex\");\n const key = Buffer.from(hkdfSync(\"sha256\", master, \"\", \"abtars-backup-v1\", 32));\n\n const buf = readFileSync(inputPath);\n if (buf.length < 28) { // 12 iv + 16 tag minimum\n process.stderr.write(\"Error: encrypted file too small\\n\");\n return false;\n }\n\n const iv = buf.subarray(0, 12);\n const tag = buf.subarray(buf.length - 16);\n const ciphertext = buf.subarray(12, buf.length - 16);\n\n try {\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n writeFileSync(outputPath, decrypted);\n return true;\n } catch {\n process.stderr.write(\"Error: decryption failed \u2014 wrong key or corrupted file\\n\");\n return false;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["rc", "abmindHome"]
4
+ "sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars restore` \u2014 restore from backup archive, auto-detect type.\n *\n * .abm \u2192 delegate to abmind restore\n * .zip/.7z \u2192 extract to ~/.abtars/ + find sibling .abm \u2192 restore both\n * .enc \u2192 find sibling .abm first (restore \u2192 key exists) \u2192 decrypt \u2192 extract\n * --config \u2192 zip only, skip abmind\n * --passphrase \u2192 passed through to abmind restore\n */\n\nimport { existsSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawnSync } from \"node:child_process\";\nimport { createDecipheriv, hkdfSync } from \"node:crypto\";\nimport { reconcile } from \"../deploy-lib/reconcile.js\";\nimport { abtarsHome, abmindHome as resolveAbmindHome } from \"../../paths.js\";\nimport { resolveReleasesDir } from \"../deploy-lib/paths.js\";\n\nexport interface RestoreOpts {\n config?: boolean;\n passphrase?: string;\n}\n\nexport async function restore(archivePath: string, opts: RestoreOpts = {}): Promise<number> {\n await printBanner(\"restore\");\n if (!archivePath) {\n process.stderr.write(\"Usage: abtars restore <file.zip|.7z|.abm|.enc> [--config] [--passphrase <p>]\\n\");\n return 1;\n }\n if (!existsSync(archivePath)) {\n process.stderr.write(`File not found: ${archivePath}\\n`);\n return 1;\n }\n\n // Direct .abm \u2192 delegate entirely to abmind restore\n if (archivePath.endsWith(\".abm\")) {\n return restoreAbmind(archivePath, opts.passphrase);\n }\n\n // .enc \u2192 restore sibling .abm first (ensures key exists), then decrypt\n if (archivePath.endsWith(\".enc\")) {\n // Find sibling .abm\n const date = extractDate(archivePath);\n const dir = dirname(archivePath);\n const sibling = findSiblingAbm(dir, date);\n\n if (!opts.config && sibling) {\n const rc = restoreAbmind(sibling, opts.passphrase);\n if (rc !== 0) return rc;\n }\n\n // Decrypt .enc \u2192 temp zip\n const abmindHome = resolveAbmindHome();\n const keyPath = join(abmindHome, \"secret\", \"abmind.key\");\n if (!existsSync(keyPath)) {\n process.stderr.write(\"Error: abmind.key not found \u2014 run `abmind restore <file.abm>` first to recreate it, then retry.\\n\");\n return 1;\n }\n\n const tmpZip = join(process.env[\"TMPDIR\"] ?? \"/tmp\", `abtars-restore-${Date.now()}.zip`);\n const ok = decryptFile(archivePath, tmpZip, keyPath);\n if (!ok) return 1;\n process.stdout.write(\"\u2713 decrypted\\n\");\n\n // Extract the decrypted zip\n const rc = extractZip(tmpZip, abtarsHome());\n try { unlinkSync(tmpZip); } catch { /* ignore */ }\n return rc;\n }\n\n // .zip/.7z\n if (!opts.config) {\n // Restore sibling .abm first\n const date = extractDate(archivePath);\n const dir = dirname(archivePath);\n const sibling = findSiblingAbm(dir, date);\n if (sibling) {\n const rc = restoreAbmindSibling(sibling, opts.passphrase);\n if (rc !== 0) {\n // Continue with abtars restore, print prominent message at the end\n const abmFile = sibling.endsWith(\".abm\") ? sibling : null;\n process.on(\"exit\", () => {\n process.stderr.write(\"\\n\\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\\n\");\n process.stderr.write(\"\u26A0 MEMORY NOT RESTORED \u2014 wrong passphrase.\\n\");\n process.stderr.write(\"Fix: abmind restore \" + (abmFile ?? \"<file.abm>\") + \" --passphrase <original>\\n\");\n process.stderr.write(\"\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\\n\");\n });\n }\n } else {\n process.stdout.write(\"\u2139 no sibling .abm found \u2014 memory not restored\\n\");\n }\n }\n\n // Extract zip to ~/.abtars/ (overlays existing \u2014 bridge keeps running)\n return extractZip(archivePath, abtarsHome());\n}\n\nfunction restoreAbmind(abmPath: string, passphrase?: string): number {\n const args = [\"restore\", abmPath, \"--mode\", \"merge\"];\n if (passphrase) args.push(\"--passphrase\", passphrase);\n\n const envPassphrase = process.env[\"ABMIND_BACKUP_PASSPHRASE\"];\n const env = { ...process.env };\n if (!passphrase && envPassphrase) {\n env[\"ABMIND_BACKUP_PASSPHRASE\"] = envPassphrase;\n }\n\n const result = spawnSync(\"abmind\", args, { encoding: \"utf-8\", stdio: \"inherit\", env });\n if (result.status !== 0) {\n process.stderr.write(\"abmind restore failed\\n\");\n return 1;\n }\n process.stdout.write(\"\u2713 abmind memory restored\\n\");\n return 0;\n}\n\n/** Handle abmind sibling: .abm direct, .7z/.zip \u2192 extract to ~/.abmind + find .abm inside */\nfunction restoreAbmindSibling(siblingPath: string, passphrase?: string): number {\n if (siblingPath.endsWith(\".abm\")) return restoreAbmind(siblingPath, passphrase);\n\n // .7z or .zip: extract filesystem to ~/.abmind/, then find .abm inside and restore memories\n const abmindHome = resolveAbmindHome();\n const is7z = siblingPath.endsWith(\".7z\");\n const extractResult = is7z\n ? spawnSync(\"7z\", [\"x\", `-o${abmindHome}`, \"-aoa\", \"-bso0\", siblingPath], { encoding: \"utf-8\", stdio: \"pipe\" })\n : spawnSync(\"unzip\", [\"-oq\", siblingPath, \"-d\", abmindHome], { encoding: \"utf-8\", stdio: \"pipe\" });\n if (extractResult.status !== 0) {\n process.stderr.write(\"abmind archive extract failed\\n\");\n return 1;\n }\n process.stdout.write(\"\u2713 abmind files restored\\n\");\n\n // Find .abm file extracted into abmindHome\n const abmFile = readdirSync(abmindHome).find(f => f.endsWith(\".abm\"));\n if (abmFile) {\n const abmPath = join(abmindHome, abmFile);\n const rc = restoreAbmind(abmPath, passphrase);\n try { unlinkSync(abmPath); } catch {} // cleanup extracted .abm\n return rc;\n }\n process.stdout.write(\"\u2139 no .abm in archive \u2014 files restored but memories not imported\\n\");\n return 0;\n}\n\nfunction extractZip(archivePath: string, destDir: string): number {\n // Avoid \"getcwd: cannot access parent directories\" if CWD is inside destDir\n try { process.chdir(homedir()); } catch {}\n const is7z = archivePath.endsWith(\".7z\");\n const listCmd = is7z\n ? spawnSync(\"7z\", [\"l\", archivePath], { encoding: \"utf-8\" })\n : spawnSync(\"unzip\", [\"-l\", archivePath], { encoding: \"utf-8\" });\n if (!listCmd.stdout?.includes(\"config/\")) {\n process.stderr.write(\"Error: archive does not contain config/ \u2014 not a valid abtars backup\\n\");\n return 1;\n }\n\n // Extract, excluding binary dirs + manifest (install state, not user data)\n let result;\n if (is7z) {\n result = spawnSync(\"7z\", [\"x\", `-o${destDir}`, \"-aoa\", \"-bso0\", \"-xr!releases\", \"-xr!current\", \"-xr!bin\", \"-xr!manifest.json\", archivePath],\n { encoding: \"utf-8\", stdio: \"pipe\" });\n } else {\n result = spawnSync(\"unzip\", [\"-oq\", archivePath, \"-d\", destDir, \"-x\", \"releases/*\", \"current/*\", \"bin/*\", \"manifest.json\"],\n { encoding: \"utf-8\", stdio: \"pipe\" });\n }\n\n if (result.status !== 0) {\n process.stderr.write(\"Restore extract failed\\n\");\n return 1;\n }\n\n // Reconcile runtime tree (skills/core, prompts, config seeds)\n const templatesSrc = join(resolveReleasesDir(), \"src\", \"abtars\", \"templates\");\n reconcile(templatesSrc, destDir);\n\n process.stdout.write(`\u2713 Restored to ${destDir}\\n`);\n return 0;\n}\n\nfunction extractDate(filePath: string): string | null {\n const name = basename(filePath);\n const match = name.match(/(\\d{8}-\\d{4})/);\n return match?.[1] ?? null;\n}\n\nfunction findSiblingAbm(dir: string, date: string | null): string | null {\n if (!existsSync(dir)) return null;\n // Look for abmind zip first, then .abm\n const files = readdirSync(dir).filter(f => f.startsWith(\"abmind-\") && (f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\")));\n if (date) {\n const exact = files.find(f => f.includes(date));\n if (exact) return join(dir, exact);\n }\n const sorted = files.sort().reverse();\n return sorted[0] ? join(dir, sorted[0]) : null;\n}\n\nfunction decryptFile(inputPath: string, outputPath: string, keyPath: string): boolean {\n const master = Buffer.from(readFileSync(keyPath, \"utf-8\").trim(), \"hex\");\n const key = Buffer.from(hkdfSync(\"sha256\", master, \"\", \"abtars-backup-v1\", 32));\n\n const buf = readFileSync(inputPath);\n if (buf.length < 28) { // 12 iv + 16 tag minimum\n process.stderr.write(\"Error: encrypted file too small\\n\");\n return false;\n }\n\n const iv = buf.subarray(0, 12);\n const tag = buf.subarray(buf.length - 16);\n const ciphertext = buf.subarray(12, buf.length - 16);\n\n try {\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n writeFileSync(outputPath, decrypted);\n return true;\n } catch {\n process.stderr.write(\"Error: decryption failed \u2014 wrong key or corrupted file\\n\");\n return false;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["init_paths", "rc", "abmindHome"]
7
7
  }
@@ -2,12 +2,12 @@
2
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
3
  import {
4
4
  rollback
5
- } from "./chunk-BU7LTI2W.js";
6
- import "./chunk-TVSPVZTX.js";
7
- import "./chunk-EDZGF6BC.js";
8
- import "./chunk-C3EYYJN3.js";
5
+ } from "./chunk-AWCO3DQ3.js";
6
+ import "./chunk-LN5MNDSA.js";
7
+ import "./chunk-QJPDBJDP.js";
8
+ import "./chunk-2BXXQG7P.js";
9
9
  import "./chunk-7K2YZTLD.js";
10
10
  export {
11
11
  rollback
12
12
  };
13
- //# sourceMappingURL=rollback-MVZ53XS4.js.map
13
+ //# sourceMappingURL=rollback-JOHY6KWW.js.map
@@ -4,23 +4,17 @@ import {
4
4
  init_logger,
5
5
  logError,
6
6
  logInfo
7
- } from "./chunk-OOKNHOCB.js";
8
- import {
9
- __esm,
10
- __export
11
- } from "./chunk-7K2YZTLD.js";
7
+ } from "./chunk-6S3G6GPO.js";
8
+ import "./chunk-7XXISOHU.js";
9
+ import "./chunk-2BXXQG7P.js";
10
+ import "./chunk-7K2YZTLD.js";
12
11
 
13
12
  // src/components/sandbox-runtime.ts
14
- var sandbox_runtime_exports = {};
15
- __export(sandbox_runtime_exports, {
16
- dockerAvailable: () => dockerAvailable,
17
- getActiveSandboxes: () => getActiveSandboxes,
18
- killAllSandboxes: () => killAllSandboxes,
19
- killSandbox: () => killSandbox,
20
- spawnSandbox: () => spawnSandbox
21
- });
13
+ init_logger();
22
14
  import { randomBytes } from "node:crypto";
23
15
  import { spawnSync } from "node:child_process";
16
+ var TAG = "sandbox";
17
+ var activeSessions = /* @__PURE__ */ new Map();
24
18
  function dockerAvailable() {
25
19
  const result = spawnSync("docker", ["info"], { stdio: "pipe", timeout: 5e3 });
26
20
  return result.status === 0;
@@ -92,22 +86,11 @@ function killAllSandboxes() {
92
86
  function getActiveSandboxes() {
93
87
  return activeSessions;
94
88
  }
95
- var TAG, activeSessions;
96
- var init_sandbox_runtime = __esm({
97
- "src/components/sandbox-runtime.ts"() {
98
- init_logger();
99
- TAG = "sandbox";
100
- activeSessions = /* @__PURE__ */ new Map();
101
- }
102
- });
103
-
104
89
  export {
105
90
  dockerAvailable,
106
- spawnSandbox,
107
- killSandbox,
108
- killAllSandboxes,
109
91
  getActiveSandboxes,
110
- sandbox_runtime_exports,
111
- init_sandbox_runtime
92
+ killAllSandboxes,
93
+ killSandbox,
94
+ spawnSandbox
112
95
  };
113
- //# sourceMappingURL=chunk-SKY6656M.js.map
96
+ //# sourceMappingURL=sandbox-runtime-T7RF4WJD.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/sandbox-runtime.ts"],
4
4
  "sourcesContent": ["/**\n * sandbox-runtime.ts \u2014 spawn and manage Docker containers for sandboxed sessions.\n * Only active when SECURITY_MODE=sandbox and Docker is available.\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { spawnSync } from \"node:child_process\";\nimport { logInfo, logError } from \"./logger.js\";\n\nconst TAG = \"sandbox\";\n\nexport interface SandboxSession {\n containerId: string;\n sessionToken: string;\n sessionType: string;\n startedAt: number;\n}\n\nconst activeSessions = new Map<string, SandboxSession>();\n\n/** Check if Docker is available on this machine. */\nexport function dockerAvailable(): boolean {\n const result = spawnSync(\"docker\", [\"info\"], { stdio: \"pipe\", timeout: 5000 });\n return result.status === 0;\n}\n\n/** Spawn a sandboxed session in a Docker container. */\nexport function spawnSandbox(opts: {\n sessionId: string;\n sessionType: string;\n apiKey: string;\n socketPath: string;\n workspacePath: string;\n image?: string;\n memoryLimit?: string;\n timeoutSec?: number;\n network?: \"bridge\" | \"none\";\n}): SandboxSession | null {\n const token = randomBytes(32).toString(\"hex\");\n const image = opts.image ?? \"abtars-sandbox:latest\";\n const memLimit = opts.memoryLimit ?? \"512m\";\n const timeout = opts.timeoutSec ?? 300;\n const network = opts.network ?? (opts.sessionType === \"B\" ? \"bridge\" : \"none\");\n\n const args = [\n \"run\", \"--rm\", \"-d\",\n \"--name\", `abtars-session-${opts.sessionId}`,\n \"--memory\", memLimit,\n \"--pids-limit\", \"100\",\n \"--security-opt\", \"no-new-privileges:true\",\n \"--network\", network,\n \"--stop-timeout\", String(timeout),\n \"-e\", `SESSION_TOKEN=${token}`,\n \"-e\", `SESSION_ID=${opts.sessionId}`,\n \"-e\", `SESSION_TYPE=${opts.sessionType}`,\n \"-e\", `API_KEY=${opts.apiKey}`,\n \"-v\", `${opts.socketPath}:/run/bridge.sock:ro`,\n \"-v\", `${opts.workspacePath}:/workspace`,\n image,\n ];\n\n const result = spawnSync(\"docker\", args, { encoding: \"utf-8\", timeout: 30_000 });\n if (result.status !== 0) {\n logError(TAG, `Failed to spawn sandbox: ${(result.stderr || \"\").trim()}`);\n return null;\n }\n\n const containerId = (result.stdout || \"\").trim().slice(0, 12);\n logInfo(TAG, `Spawned sandbox ${containerId} for session ${opts.sessionId} (type=${opts.sessionType}, net=${network})`);\n\n const session: SandboxSession = {\n containerId,\n sessionToken: token,\n sessionType: opts.sessionType,\n startedAt: Date.now(),\n };\n\n activeSessions.set(opts.sessionId, session);\n return session;\n}\n\n/** Stop and remove a sandboxed session container. */\nexport function killSandbox(sessionId: string): void {\n const session = activeSessions.get(sessionId);\n if (!session) return;\n\n spawnSync(\"docker\", [\"kill\", session.containerId], { stdio: \"pipe\", timeout: 10_000 });\n activeSessions.delete(sessionId);\n logInfo(TAG, `Killed sandbox ${session.containerId} (session ${sessionId})`);\n}\n\n/** Kill all active sandbox containers (bridge shutdown). */\nexport function killAllSandboxes(): void {\n for (const [id] of activeSessions) {\n killSandbox(id);\n }\n}\n\n/** Get active sandbox sessions for observability. */\nexport function getActiveSandboxes(): ReadonlyMap<string, SandboxSession> {\n return activeSessions;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAenB,SAAS,kBAA2B;AACzC,QAAM,SAAS,UAAU,UAAU,CAAC,MAAM,GAAG,EAAE,OAAO,QAAQ,SAAS,IAAK,CAAC;AAC7E,SAAO,OAAO,WAAW;AAC3B;AAGO,SAAS,aAAa,MAUH;AACxB,QAAM,QAAQ,YAAY,EAAE,EAAE,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,WAAW,KAAK,eAAe;AACrC,QAAM,UAAU,KAAK,cAAc;AACnC,QAAM,UAAU,KAAK,YAAY,KAAK,gBAAgB,MAAM,WAAW;AAEvE,QAAM,OAAO;AAAA,IACX;AAAA,IAAO;AAAA,IAAQ;AAAA,IACf;AAAA,IAAU,kBAAkB,KAAK,SAAS;AAAA,IAC1C;AAAA,IAAY;AAAA,IACZ;AAAA,IAAgB;AAAA,IAChB;AAAA,IAAkB;AAAA,IAClB;AAAA,IAAa;AAAA,IACb;AAAA,IAAkB,OAAO,OAAO;AAAA,IAChC;AAAA,IAAM,iBAAiB,KAAK;AAAA,IAC5B;AAAA,IAAM,cAAc,KAAK,SAAS;AAAA,IAClC;AAAA,IAAM,gBAAgB,KAAK,WAAW;AAAA,IACtC;AAAA,IAAM,WAAW,KAAK,MAAM;AAAA,IAC5B;AAAA,IAAM,GAAG,KAAK,UAAU;AAAA,IACxB;AAAA,IAAM,GAAG,KAAK,aAAa;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,SAAS,UAAU,UAAU,MAAM,EAAE,UAAU,SAAS,SAAS,IAAO,CAAC;AAC/E,MAAI,OAAO,WAAW,GAAG;AACvB,aAAS,KAAK,6BAA6B,OAAO,UAAU,IAAI,KAAK,CAAC,EAAE;AACxE,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,OAAO,UAAU,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE;AAC5D,UAAQ,KAAK,mBAAmB,WAAW,gBAAgB,KAAK,SAAS,UAAU,KAAK,WAAW,SAAS,OAAO,GAAG;AAEtH,QAAM,UAA0B;AAAA,IAC9B;AAAA,IACA,cAAc;AAAA,IACd,aAAa,KAAK;AAAA,IAClB,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,iBAAe,IAAI,KAAK,WAAW,OAAO;AAC1C,SAAO;AACT;AAGO,SAAS,YAAY,WAAyB;AACnD,QAAM,UAAU,eAAe,IAAI,SAAS;AAC5C,MAAI,CAAC,QAAS;AAEd,YAAU,UAAU,CAAC,QAAQ,QAAQ,WAAW,GAAG,EAAE,OAAO,QAAQ,SAAS,IAAO,CAAC;AACrF,iBAAe,OAAO,SAAS;AAC/B,UAAQ,KAAK,kBAAkB,QAAQ,WAAW,aAAa,SAAS,GAAG;AAC7E;AAGO,SAAS,mBAAyB;AACvC,aAAW,CAAC,EAAE,KAAK,gBAAgB;AACjC,gBAAY,EAAE;AAAA,EAChB;AACF;AAGO,SAAS,qBAA0D;AACxE,SAAO;AACT;AArGA,IASM,KASA;AAlBN;AAAA;AAOA;AAEA,IAAM,MAAM;AASZ,IAAM,iBAAiB,oBAAI,IAA4B;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;;;;;;AAOA;AAFA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAG1B,IAAM,MAAM;AASZ,IAAM,iBAAiB,oBAAI,IAA4B;AAGhD,SAAS,kBAA2B;AACzC,QAAM,SAAS,UAAU,UAAU,CAAC,MAAM,GAAG,EAAE,OAAO,QAAQ,SAAS,IAAK,CAAC;AAC7E,SAAO,OAAO,WAAW;AAC3B;AAGO,SAAS,aAAa,MAUH;AACxB,QAAM,QAAQ,YAAY,EAAE,EAAE,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,WAAW,KAAK,eAAe;AACrC,QAAM,UAAU,KAAK,cAAc;AACnC,QAAM,UAAU,KAAK,YAAY,KAAK,gBAAgB,MAAM,WAAW;AAEvE,QAAM,OAAO;AAAA,IACX;AAAA,IAAO;AAAA,IAAQ;AAAA,IACf;AAAA,IAAU,kBAAkB,KAAK,SAAS;AAAA,IAC1C;AAAA,IAAY;AAAA,IACZ;AAAA,IAAgB;AAAA,IAChB;AAAA,IAAkB;AAAA,IAClB;AAAA,IAAa;AAAA,IACb;AAAA,IAAkB,OAAO,OAAO;AAAA,IAChC;AAAA,IAAM,iBAAiB,KAAK;AAAA,IAC5B;AAAA,IAAM,cAAc,KAAK,SAAS;AAAA,IAClC;AAAA,IAAM,gBAAgB,KAAK,WAAW;AAAA,IACtC;AAAA,IAAM,WAAW,KAAK,MAAM;AAAA,IAC5B;AAAA,IAAM,GAAG,KAAK,UAAU;AAAA,IACxB;AAAA,IAAM,GAAG,KAAK,aAAa;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,SAAS,UAAU,UAAU,MAAM,EAAE,UAAU,SAAS,SAAS,IAAO,CAAC;AAC/E,MAAI,OAAO,WAAW,GAAG;AACvB,aAAS,KAAK,6BAA6B,OAAO,UAAU,IAAI,KAAK,CAAC,EAAE;AACxE,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,OAAO,UAAU,IAAI,KAAK,EAAE,MAAM,GAAG,EAAE;AAC5D,UAAQ,KAAK,mBAAmB,WAAW,gBAAgB,KAAK,SAAS,UAAU,KAAK,WAAW,SAAS,OAAO,GAAG;AAEtH,QAAM,UAA0B;AAAA,IAC9B;AAAA,IACA,cAAc;AAAA,IACd,aAAa,KAAK;AAAA,IAClB,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,iBAAe,IAAI,KAAK,WAAW,OAAO;AAC1C,SAAO;AACT;AAGO,SAAS,YAAY,WAAyB;AACnD,QAAM,UAAU,eAAe,IAAI,SAAS;AAC5C,MAAI,CAAC,QAAS;AAEd,YAAU,UAAU,CAAC,QAAQ,QAAQ,WAAW,GAAG,EAAE,OAAO,QAAQ,SAAS,IAAO,CAAC;AACrF,iBAAe,OAAO,SAAS;AAC/B,UAAQ,KAAK,kBAAkB,QAAQ,WAAW,aAAa,SAAS,GAAG;AAC7E;AAGO,SAAS,mBAAyB;AACvC,aAAW,CAAC,EAAE,KAAK,gBAAgB;AACjC,gBAAY,EAAE;AAAA,EAChB;AACF;AAGO,SAAS,qBAA0D;AACxE,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -3,12 +3,13 @@
3
3
  import {
4
4
  init_log_and_swallow,
5
5
  logAndSwallow
6
- } from "./chunk-WP7FZHMI.js";
6
+ } from "./chunk-W2PSVV2T.js";
7
7
  import {
8
8
  init_logger,
9
9
  logInfo
10
- } from "./chunk-OOKNHOCB.js";
11
- import "./chunk-H2K23MOF.js";
10
+ } from "./chunk-6S3G6GPO.js";
11
+ import "./chunk-7XXISOHU.js";
12
+ import "./chunk-2BXXQG7P.js";
12
13
  import "./chunk-7K2YZTLD.js";
13
14
 
14
15
  // src/components/self-healer-utils.ts
@@ -41,4 +42,4 @@ function healPort(port) {
41
42
  export {
42
43
  healPort
43
44
  };
44
- //# sourceMappingURL=self-healer-utils-KD6LV63S.js.map
45
+ //# sourceMappingURL=self-healer-utils-OR2N6RLD.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/self-healer-utils.ts"],
4
4
  "sourcesContent": ["/**\n * Shared healing utilities \u2014 called by service-registry during background retry.\n */\nimport { execFileSync } from \"node:child_process\";\nimport { logInfo } from \"./logger.js\";\nimport { logAndSwallow } from \"./log-and-swallow.js\";\n\nconst TAG = \"self-healer\";\n\n/** Kill the process holding a port. Returns true if killed, false if nothing found. */\nexport function healPort(port: number): boolean {\n try {\n const cmd = process.platform === \"darwin\" ? \"lsof\" : \"fuser\";\n const args = process.platform === \"darwin\" ? [\"-ti\", `:${port}`] : [`${port}/tcp`];\n const out = execFileSync(cmd, args, { encoding: \"utf-8\", timeout: 5000 }).trim();\n if (!out) return false;\n const pids = out.split(/\\s+/).map(Number).filter(p => p > 0 && p !== process.pid);\n if (pids.length === 0) return false;\n for (const pid of pids) {\n try { process.kill(pid, \"SIGKILL\"); } catch (err) { logAndSwallow(TAG, \"kill pid\", err); }\n }\n logInfo(TAG, `healPort(${port}): killed PID ${pids.join(\", \")}`);\n return true;\n } catch (err) {\n logAndSwallow(TAG, \"healPort\", err);\n return false;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;AAIA;AACA;AAFA,SAAS,oBAAoB;AAI7B,IAAM,MAAM;AAGL,SAAS,SAAS,MAAuB;AAC9C,MAAI;AACF,UAAM,MAAM,QAAQ,aAAa,WAAW,SAAS;AACrD,UAAM,OAAO,QAAQ,aAAa,WAAW,CAAC,OAAO,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,MAAM;AACjF,UAAM,MAAM,aAAa,KAAK,MAAM,EAAE,UAAU,SAAS,SAAS,IAAK,CAAC,EAAE,KAAK;AAC/E,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,OAAO,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,EAAE,OAAO,OAAK,IAAI,KAAK,MAAM,QAAQ,GAAG;AAChF,QAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,eAAW,OAAO,MAAM;AACtB,UAAI;AAAE,gBAAQ,KAAK,KAAK,SAAS;AAAA,MAAG,SAAS,KAAK;AAAE,sBAAc,KAAK,YAAY,GAAG;AAAA,MAAG;AAAA,IAC3F;AACA,YAAQ,KAAK,YAAY,IAAI,iBAAiB,KAAK,KAAK,IAAI,CAAC,EAAE;AAC/D,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,kBAAc,KAAK,YAAY,GAAG;AAClC,WAAO;AAAA,EACT;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;AAIA;AACA;AAFA,SAAS,oBAAoB;AAI7B,IAAM,MAAM;AAGL,SAAS,SAAS,MAAuB;AAC9C,MAAI;AACF,UAAM,MAAM,QAAQ,aAAa,WAAW,SAAS;AACrD,UAAM,OAAO,QAAQ,aAAa,WAAW,CAAC,OAAO,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,MAAM;AACjF,UAAM,MAAM,aAAa,KAAK,MAAM,EAAE,UAAU,SAAS,SAAS,IAAK,CAAC,EAAE,KAAK;AAC/E,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,OAAO,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,EAAE,OAAO,OAAK,IAAI,KAAK,MAAM,QAAQ,GAAG;AAChF,QAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,eAAW,OAAO,MAAM;AACtB,UAAI;AAAE,gBAAQ,KAAK,KAAK,SAAS;AAAA,MAAG,SAAS,KAAK;AAAE,sBAAc,KAAK,YAAY,GAAG;AAAA,MAAG;AAAA,IAC3F;AACA,YAAQ,KAAK,YAAY,IAAI,iBAAiB,KAAK,KAAK,IAAI,CAAC,EAAE;AAC/D,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,kBAAc,KAAK,YAAY,GAAG;AAClC,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -10,9 +10,10 @@ import {
10
10
  reload,
11
11
  resetAutofixState,
12
12
  shouldAttempt
13
- } from "./chunk-FVUL44T4.js";
14
- import "./chunk-OOKNHOCB.js";
15
- import "./chunk-H2K23MOF.js";
13
+ } from "./chunk-CNENVY37.js";
14
+ import "./chunk-6S3G6GPO.js";
15
+ import "./chunk-7XXISOHU.js";
16
+ import "./chunk-2BXXQG7P.js";
16
17
  import "./chunk-7K2YZTLD.js";
17
18
  export {
18
19
  addSelfFix,
@@ -25,4 +26,4 @@ export {
25
26
  resetAutofixState,
26
27
  shouldAttempt
27
28
  };
28
- //# sourceMappingURL=sha-tracker-2DB4R2TW.js.map
29
+ //# sourceMappingURL=sha-tracker-BXOLWZJL.js.map
@@ -4,11 +4,12 @@ import {
4
4
  init_logger,
5
5
  logInfo,
6
6
  logWarn
7
- } from "./chunk-OOKNHOCB.js";
7
+ } from "./chunk-6S3G6GPO.js";
8
8
  import {
9
9
  abtarsHome,
10
10
  init_paths
11
- } from "./chunk-H2K23MOF.js";
11
+ } from "./chunk-7XXISOHU.js";
12
+ import "./chunk-2BXXQG7P.js";
12
13
  import "./chunk-7K2YZTLD.js";
13
14
 
14
15
  // src/components/skill-session.ts
@@ -77,7 +78,7 @@ ${context}`);
77
78
  if (message) parts.push(`[USER MESSAGE]
78
79
  ${message}`);
79
80
  const goal = parts.join("\n\n");
80
- const { spin } = await import("./spin-4DBYHS3E.js");
81
+ const { spin } = await import("./spin-76K4R6FK.js");
81
82
  const timeout = (config.timeout ?? 1800) * 1e3;
82
83
  const { cardId } = spin.dispatch({
83
84
  type: "T",
@@ -142,4 +143,4 @@ export {
142
143
  launchSkill,
143
144
  listRunnableSkills
144
145
  };
145
- //# sourceMappingURL=skill-session-BPDVA6ZG.js.map
146
+ //# sourceMappingURL=skill-session-H6EQ4NGN.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/skill-session.ts"],
4
4
  "sourcesContent": ["/**\n * skill-session.ts \u2014 Launch and manage skill sessions (#1141).\n *\n * Skills with skill.json are launchable into dedicated T-sessions.\n * Entry points: /skill run, model dispatch_skill tool, task with skill field.\n */\n\nimport { existsSync, readFileSync, mkdirSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { abtarsHome } from \"../paths.js\";\nimport { logInfo, logWarn } from \"./logger.js\";\n\nconst TAG = \"skill-session\";\n\nexport interface SkillConfig {\n agent?: string;\n interactive?: boolean;\n contextPath?: string;\n description?: string;\n memory?: boolean;\n tools?: string[];\n timeout?: number;\n prerequisites?: string[];\n}\n\ninterface ActiveSkillSession {\n skillName: string;\n sessionId: string;\n userId: string;\n chatId: string;\n startedAt: number;\n timeout: number;\n}\n\n/** Active skill sessions keyed by chatId */\nconst activeSessions = new Map<string, ActiveSkillSession>();\n\nconst SKILL_SUBDIRS = [\"self\", \"custom\", \"downloaded\", \"core\"];\n\n/** Resolve a skill directory by name \u2014 searches self \u2192 custom \u2192 downloaded \u2192 core. */\nfunction resolveSkillDir(name: string): string | null {\n const base = join(abtarsHome(), \"skills\");\n for (const sub of SKILL_SUBDIRS) {\n const dir = join(base, sub, name);\n if (existsSync(join(dir, \"skill.json\"))) return dir;\n }\n // Also check core/skills in the app bundle\n const bundleDir = join(abtarsHome(), \"app\", \"bundle\", \"core\", \"skills\", name);\n if (existsSync(join(bundleDir, \"skill.json\"))) return bundleDir;\n return null;\n}\n\n/** Read and parse skill.json from a skill directory. */\nfunction readSkillConfig(dir: string): SkillConfig | null {\n try {\n return JSON.parse(readFileSync(join(dir, \"skill.json\"), \"utf-8\")) as SkillConfig;\n } catch { return null; }\n}\n\n/** Check prerequisites (which <bin>). Returns first missing binary or null if all OK. */\nfunction checkPrerequisites(config: SkillConfig): string | null {\n for (const bin of config.prerequisites ?? []) {\n try { execSync(`which ${bin}`, { stdio: \"ignore\" }); }\n catch { return bin; }\n }\n return null;\n}\n\n/** Launch a skill session. Returns error message or null on success. */\nexport async function launchSkill(skillName: string, userId: string, chatId: string, message?: string): Promise<string | null> {\n const dir = resolveSkillDir(skillName);\n if (!dir) return `Skill \"${skillName}\" not found or has no skill.json`;\n\n const config = readSkillConfig(dir);\n if (!config) return `Failed to read skill.json for \"${skillName}\"`;\n\n // Check prerequisites\n const missing = checkPrerequisites(config);\n if (missing) return `Cannot run ${skillName}: \"${missing}\" not found on PATH`;\n\n // End existing skill session for this chat if any\n if (activeSessions.has(chatId)) {\n await endSkillSession(chatId);\n }\n\n // Read SKILL.md\n const skillMdPath = join(dir, \"SKILL.md\");\n const skillMd = existsSync(skillMdPath) ? readFileSync(skillMdPath, \"utf-8\").trim() : \"\";\n if (!skillMd) return `Skill \"${skillName}\" has no SKILL.md`;\n\n // Read CONTEXT.md (resolve ${userId} in contextPath)\n let context = \"\";\n if (config.contextPath) {\n const ctxPath = join(abtarsHome(), config.contextPath.replace(\"${userId}\", userId));\n if (existsSync(ctxPath)) {\n const raw = readFileSync(ctxPath, \"utf-8\").trim();\n context = raw.length > 30000 ? raw.slice(0, 30000) : raw;\n }\n // Ensure directory exists for model to write later\n mkdirSync(join(ctxPath, \"..\"), { recursive: true });\n }\n\n // Build goal prompt\n const parts: string[] = [];\n parts.push(`[SKILL: ${skillName}]\\n${skillMd}`);\n if (context) parts.push(`[SKILL CONTEXT \u2014 progress from previous sessions]\\n${context}`);\n if (message) parts.push(`[USER MESSAGE]\\n${message}`);\n const goal = parts.join(\"\\n\\n\");\n\n // Dispatch via Spin\n const { spin } = await import(\"./spin.js\");\n const timeout = (config.timeout ?? 1800) * 1000;\n\n const { cardId } = spin.dispatch({\n type: \"T\",\n agent: (config.agent ?? \"professor\") as any,\n goal,\n title: `Skill: ${skillName}`,\n source: \"task\",\n timeoutMs: timeout,\n chatId,\n });\n\n // Track active session\n const sessionId = `skill_${skillName}_${Date.now()}`;\n activeSessions.set(chatId, {\n skillName,\n sessionId,\n userId,\n chatId,\n startedAt: Date.now(),\n timeout: config.timeout ?? 1800,\n });\n\n logInfo(TAG, `Launched skill \"${skillName}\" for ${userId} (chat ${chatId}, card ${cardId}, interactive=${config.interactive ?? false})`);\n return null;\n}\n\n/** End an active skill session for a chatId. */\nexport async function endSkillSession(chatId: string): Promise<boolean> {\n const session = activeSessions.get(chatId);\n if (!session) return false;\n activeSessions.delete(chatId);\n logInfo(TAG, `Ended skill \"${session.skillName}\" for ${session.userId} (${Math.round((Date.now() - session.startedAt) / 1000)}s)`);\n return true;\n}\n\n/** Get active skill session for a chatId (used by pipeline routing). */\nexport function getActiveSkillSession(chatId: string): ActiveSkillSession | undefined {\n const session = activeSessions.get(chatId);\n if (!session) return undefined;\n // Check timeout\n if (Date.now() - session.startedAt > session.timeout * 1000) {\n activeSessions.delete(chatId);\n logWarn(TAG, `Skill \"${session.skillName}\" timed out for ${session.userId}`);\n return undefined;\n }\n return session;\n}\n\n/** List all launchable skills (have skill.json). */\nexport function listRunnableSkills(): Array<{ name: string; description: string; interactive: boolean }> {\n const base = join(abtarsHome(), \"skills\");\n const results: Array<{ name: string; description: string; interactive: boolean }> = [];\n for (const sub of SKILL_SUBDIRS) {\n const subDir = join(base, sub);\n if (!existsSync(subDir)) continue;\n try {\n for (const entry of readdirSync(subDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const dir = join(subDir, entry.name);\n if (!existsSync(join(dir, \"skill.json\"))) continue;\n const config = readSkillConfig(dir);\n if (config) results.push({ name: entry.name, description: config.description ?? \"\", interactive: config.interactive ?? false });\n }\n } catch {}\n }\n return results;\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -7,10 +7,11 @@ import {
7
7
  flush,
8
8
  init,
9
9
  setProvenance
10
- } from "./chunk-ULO2PX3T.js";
11
- import "./chunk-WP7FZHMI.js";
12
- import "./chunk-OOKNHOCB.js";
13
- import "./chunk-H2K23MOF.js";
10
+ } from "./chunk-CCZ43JB7.js";
11
+ import "./chunk-W2PSVV2T.js";
12
+ import "./chunk-6S3G6GPO.js";
13
+ import "./chunk-7XXISOHU.js";
14
+ import "./chunk-2BXXQG7P.js";
14
15
  import "./chunk-7K2YZTLD.js";
15
16
  export {
16
17
  _getStats,
@@ -20,4 +21,4 @@ export {
20
21
  init,
21
22
  setProvenance
22
23
  };
23
- //# sourceMappingURL=skill-stats-TPD2NROA.js.map
24
+ //# sourceMappingURL=skill-stats-7O777ZSZ.js.map
@@ -3,13 +3,14 @@
3
3
  import {
4
4
  SkillWatcher,
5
5
  init_skill_watcher
6
- } from "./chunk-FIAVVKGN.js";
7
- import "./chunk-WP7FZHMI.js";
8
- import "./chunk-OOKNHOCB.js";
9
- import "./chunk-H2K23MOF.js";
6
+ } from "./chunk-MTE32OQH.js";
7
+ import "./chunk-W2PSVV2T.js";
8
+ import "./chunk-6S3G6GPO.js";
9
+ import "./chunk-7XXISOHU.js";
10
+ import "./chunk-2BXXQG7P.js";
10
11
  import "./chunk-7K2YZTLD.js";
11
12
  init_skill_watcher();
12
13
  export {
13
14
  SkillWatcher
14
15
  };
15
- //# sourceMappingURL=skill-watcher-D7QYYYON.js.map
16
+ //# sourceMappingURL=skill-watcher-ZGLTDPG5.js.map
@@ -3,18 +3,19 @@
3
3
  import {
4
4
  createSleepHandle,
5
5
  register
6
- } from "./chunk-TCI6FZTP.js";
7
- import "./chunk-JAJ3DUQ2.js";
8
- import "./chunk-V6CV3QPH.js";
9
- import "./chunk-W726UGI6.js";
6
+ } from "./chunk-AHJDG6OM.js";
7
+ import "./chunk-OWPQIBAO.js";
8
+ import "./chunk-6IB3GVXK.js";
9
+ import "./chunk-ZKMKAO75.js";
10
10
  import "./chunk-N5KN3LGD.js";
11
- import "./chunk-SSCGWDIC.js";
12
- import "./chunk-WP7FZHMI.js";
13
- import "./chunk-OOKNHOCB.js";
14
- import "./chunk-H2K23MOF.js";
11
+ import "./chunk-BWJ37KMW.js";
12
+ import "./chunk-W2PSVV2T.js";
13
+ import "./chunk-6S3G6GPO.js";
14
+ import "./chunk-7XXISOHU.js";
15
+ import "./chunk-2BXXQG7P.js";
15
16
  import "./chunk-7K2YZTLD.js";
16
17
  export {
17
18
  createSleepHandle,
18
19
  register
19
20
  };
20
- //# sourceMappingURL=sleep-GH6DLBJJ.js.map
21
+ //# sourceMappingURL=sleep-3LFZH727.js.map
@@ -4,18 +4,19 @@ import {
4
4
  buildSoulBundle,
5
5
  getInstanceName,
6
6
  init_soul_bundle
7
- } from "./chunk-56D3Y44D.js";
8
- import "./chunk-O4GKI3Q3.js";
9
- import "./chunk-4PIVWXUJ.js";
10
- import "./chunk-43DKPXTP.js";
11
- import "./chunk-SSCGWDIC.js";
12
- import "./chunk-WP7FZHMI.js";
13
- import "./chunk-OOKNHOCB.js";
14
- import "./chunk-H2K23MOF.js";
7
+ } from "./chunk-KLG4SCF7.js";
8
+ import "./chunk-7LORCJCQ.js";
9
+ import "./chunk-X7DLKIQM.js";
10
+ import "./chunk-2ZD7VQRW.js";
11
+ import "./chunk-BWJ37KMW.js";
12
+ import "./chunk-W2PSVV2T.js";
13
+ import "./chunk-6S3G6GPO.js";
14
+ import "./chunk-7XXISOHU.js";
15
+ import "./chunk-2BXXQG7P.js";
15
16
  import "./chunk-7K2YZTLD.js";
16
17
  init_soul_bundle();
17
18
  export {
18
19
  buildSoulBundle,
19
20
  getInstanceName
20
21
  };
21
- //# sourceMappingURL=soul-bundle-GXLMDBCC.js.map
22
+ //# sourceMappingURL=soul-bundle-RQ2YQMJW.js.map
@@ -5,21 +5,23 @@ import {
5
5
  init_spin,
6
6
  isHollow,
7
7
  spin
8
- } from "./chunk-GCFIK6OB.js";
8
+ } from "./chunk-FSGICOCX.js";
9
+ import "./chunk-RCWQ34QR.js";
10
+ import "./chunk-7LORCJCQ.js";
9
11
  import {
10
12
  parseSessionType,
11
13
  sessionCreatedAt,
12
14
  sessionType,
13
15
  typeAgent,
14
16
  typeLabel
15
- } from "./chunk-T7TAWGBX.js";
16
- import "./chunk-S6HEHCCG.js";
17
- import "./chunk-YME7NRGP.js";
18
- import "./chunk-TY26WMQY.js";
19
- import "./chunk-43DKPXTP.js";
20
- import "./chunk-SSCGWDIC.js";
21
- import "./chunk-OOKNHOCB.js";
22
- import "./chunk-H2K23MOF.js";
17
+ } from "./chunk-52PQM4EZ.js";
18
+ import "./chunk-RO3TAYBR.js";
19
+ import "./chunk-GFAJSPMD.js";
20
+ import "./chunk-B2TIRDZC.js";
21
+ import "./chunk-BWJ37KMW.js";
22
+ import "./chunk-6S3G6GPO.js";
23
+ import "./chunk-7XXISOHU.js";
24
+ import "./chunk-2BXXQG7P.js";
23
25
  import "./chunk-7K2YZTLD.js";
24
26
  init_spin();
25
27
  export {
@@ -32,4 +34,4 @@ export {
32
34
  typeAgent,
33
35
  typeLabel
34
36
  };
35
- //# sourceMappingURL=spin-4DBYHS3E.js.map
37
+ //# sourceMappingURL=spin-76K4R6FK.js.map
@@ -3,13 +3,15 @@
3
3
  import {
4
4
  init_kanban_board,
5
5
  kanbanGetCard
6
- } from "./chunk-S6HEHCCG.js";
6
+ } from "./chunk-RO3TAYBR.js";
7
+ import "./chunk-GFAJSPMD.js";
7
8
  import {
8
9
  init_nerve,
9
10
  nerve
10
- } from "./chunk-YME7NRGP.js";
11
- import "./chunk-OOKNHOCB.js";
12
- import "./chunk-H2K23MOF.js";
11
+ } from "./chunk-B2TIRDZC.js";
12
+ import "./chunk-6S3G6GPO.js";
13
+ import "./chunk-7XXISOHU.js";
14
+ import "./chunk-2BXXQG7P.js";
13
15
  import {
14
16
  __esm
15
17
  } from "./chunk-7K2YZTLD.js";
@@ -46,4 +48,4 @@ init_spin_notifications();
46
48
  export {
47
49
  drainOrcNotifications
48
50
  };
49
- //# sourceMappingURL=spin-notifications-IKYJPER5.js.map
51
+ //# sourceMappingURL=spin-notifications-LD46B4K5.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/spin-notifications.ts"],
4
4
  "sourcesContent": ["/**\n * spin-notifications.ts \u2014 Per-project notification buffer for Orc (#907).\n * Subscribes to Nerve card:done/card:failed. Buffers structured messages\n * keyed by parent_id. Orc drains its project's buffer before each turn.\n */\n\nimport { nerve } from \"./nerve.js\";\nimport { kanbanGetCard } from \"./tasks/kanban-board.js\";\n\nconst buffers = new Map<number, string[]>();\n\nnerve.on(\"card:done\", (cardId: number) => {\n const card = kanbanGetCard(cardId);\n if (!card || !card.parent_id) return;\n const buf = buffers.get(card.parent_id) ?? [];\n buf.push(`[WORKER COMPLETE] Card #${cardId} \"${card.title}\" \u2014 done. Summary: \"${card.result_summary?.slice(0, 150) ?? \"\"}\"`);\n buffers.set(card.parent_id, buf);\n});\n\nnerve.on(\"card:failed\", (cardId: number) => {\n const card = kanbanGetCard(cardId);\n if (!card || !card.parent_id) return;\n const buf = buffers.get(card.parent_id) ?? [];\n buf.push(`[WORKER FAILED] Card #${cardId} \"${card.title}\" \u2014 ${card.error?.slice(0, 100) ?? \"unknown error\"}`);\n buffers.set(card.parent_id, buf);\n});\n\n/** Drain notifications for a specific project card. Returns and clears buffered messages. */\nexport function drainOrcNotifications(projectCardId: number): string[] {\n const msgs = buffers.get(projectCardId) ?? [];\n buffers.delete(projectCardId);\n return msgs;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AA4BO,SAAS,sBAAsB,eAAiC;AACrE,QAAM,OAAO,QAAQ,IAAI,aAAa,KAAK,CAAC;AAC5C,UAAQ,OAAO,aAAa;AAC5B,SAAO;AACT;AAhCA,IASM;AATN;AAAA;AAMA;AACA;AAEA,IAAM,UAAU,oBAAI,IAAsB;AAE1C,UAAM,GAAG,aAAa,CAAC,WAAmB;AACxC,YAAM,OAAO,cAAc,MAAM;AACjC,UAAI,CAAC,QAAQ,CAAC,KAAK,UAAW;AAC9B,YAAM,MAAM,QAAQ,IAAI,KAAK,SAAS,KAAK,CAAC;AAC5C,UAAI,KAAK,2BAA2B,MAAM,KAAK,KAAK,KAAK,4BAAuB,KAAK,gBAAgB,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG;AAC3H,cAAQ,IAAI,KAAK,WAAW,GAAG;AAAA,IACjC,CAAC;AAED,UAAM,GAAG,eAAe,CAAC,WAAmB;AAC1C,YAAM,OAAO,cAAc,MAAM;AACjC,UAAI,CAAC,QAAQ,CAAC,KAAK,UAAW;AAC9B,YAAM,MAAM,QAAQ,IAAI,KAAK,SAAS,KAAK,CAAC;AAC5C,UAAI,KAAK,yBAAyB,MAAM,KAAK,KAAK,KAAK,YAAO,KAAK,OAAO,MAAM,GAAG,GAAG,KAAK,eAAe,EAAE;AAC5G,cAAQ,IAAI,KAAK,WAAW,GAAG;AAAA,IACjC,CAAC;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AA4BO,SAAS,sBAAsB,eAAiC;AACrE,QAAM,OAAO,QAAQ,IAAI,aAAa,KAAK,CAAC;AAC5C,UAAQ,OAAO,aAAa;AAC5B,SAAO;AACT;AAhCA,IASM;AATN;AAAA;AAMA;AACA;AAEA,IAAM,UAAU,oBAAI,IAAsB;AAE1C,UAAM,GAAG,aAAa,CAAC,WAAmB;AACxC,YAAM,OAAO,cAAc,MAAM;AACjC,UAAI,CAAC,QAAQ,CAAC,KAAK,UAAW;AAC9B,YAAM,MAAM,QAAQ,IAAI,KAAK,SAAS,KAAK,CAAC;AAC5C,UAAI,KAAK,2BAA2B,MAAM,KAAK,KAAK,KAAK,4BAAuB,KAAK,gBAAgB,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG;AAC3H,cAAQ,IAAI,KAAK,WAAW,GAAG;AAAA,IACjC,CAAC;AAED,UAAM,GAAG,eAAe,CAAC,WAAmB;AAC1C,YAAM,OAAO,cAAc,MAAM;AACjC,UAAI,CAAC,QAAQ,CAAC,KAAK,UAAW;AAC9B,YAAM,MAAM,QAAQ,IAAI,KAAK,SAAS,KAAK,CAAC;AAC5C,UAAI,KAAK,yBAAyB,MAAM,KAAK,KAAK,KAAK,YAAO,KAAK,OAAO,MAAM,GAAG,GAAG,KAAK,eAAe,EAAE;AAC5G,cAAQ,IAAI,KAAK,WAAW,GAAG;AAAA,IACjC,CAAC;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -7,9 +7,10 @@ import {
7
7
  sessionType,
8
8
  typeAgent,
9
9
  typeLabel
10
- } from "./chunk-T7TAWGBX.js";
11
- import "./chunk-OOKNHOCB.js";
12
- import "./chunk-H2K23MOF.js";
10
+ } from "./chunk-52PQM4EZ.js";
11
+ import "./chunk-6S3G6GPO.js";
12
+ import "./chunk-7XXISOHU.js";
13
+ import "./chunk-2BXXQG7P.js";
13
14
  import "./chunk-7K2YZTLD.js";
14
15
  init_spin_types();
15
16
  export {
@@ -19,4 +20,4 @@ export {
19
20
  typeAgent,
20
21
  typeLabel
21
22
  };
22
- //# sourceMappingURL=spin-types-PLJH3SIK.js.map
23
+ //# sourceMappingURL=spin-types-MOKTZXGB.js.map
@@ -2,9 +2,9 @@
2
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
3
  import {
4
4
  require_src
5
- } from "./chunk-3LQOJVTB.js";
6
- import "./chunk-LE23VPN3.js";
7
- import "./chunk-S7ZIGIR5.js";
5
+ } from "./chunk-HFOCNYEO.js";
6
+ import "./chunk-63A7ZRIH.js";
7
+ import "./chunk-R76K6L6H.js";
8
8
  import "./chunk-7K2YZTLD.js";
9
9
  export default require_src();
10
- //# sourceMappingURL=src-SUFZ27S5.js.map
10
+ //# sourceMappingURL=src-6BTCMOD3.js.map
@@ -3,9 +3,10 @@
3
3
  import {
4
4
  init_log_and_swallow,
5
5
  logAndSwallow
6
- } from "./chunk-WP7FZHMI.js";
7
- import "./chunk-OOKNHOCB.js";
8
- import "./chunk-H2K23MOF.js";
6
+ } from "./chunk-W2PSVV2T.js";
7
+ import "./chunk-6S3G6GPO.js";
8
+ import "./chunk-7XXISOHU.js";
9
+ import "./chunk-2BXXQG7P.js";
9
10
  import "./chunk-7K2YZTLD.js";
10
11
 
11
12
  // src/components/transport/sse-parser-anthropic.ts
@@ -70,4 +71,4 @@ async function* parseAnthropicSSE(response, signal) {
70
71
  export {
71
72
  parseAnthropicSSE
72
73
  };
73
- //# sourceMappingURL=sse-parser-anthropic-U7ILHOY5.js.map
74
+ //# sourceMappingURL=sse-parser-anthropic-NV2CGBIT.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/transport/sse-parser-anthropic.ts"],
4
4
  "sourcesContent": ["/**\n * sse-parser-anthropic.ts \u2014 Anthropic Messages API streaming parser (#472).\n * Yields same SSEEvent types as sse-parser.ts for consumer compatibility.\n * v1: text streaming only. Tool calls (tool_use blocks) not yet mapped.\n */\n\nimport type { SSEEvent } from \"./sse-parser.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"sse_parser_anthropic\";\n\nexport async function* parseAnthropicSSE(\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 usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n\n try {\n while (true) {\n if (signal.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n let eventType = \"\";\n for (const line of lines) {\n if (line.startsWith(\"event: \")) {\n eventType = line.slice(7).trim();\n } else if (line.startsWith(\"data: \") && eventType) {\n const data = line.slice(6).trim();\n let parsed: Record<string, unknown>;\n try { parsed = JSON.parse(data); } catch (err) { logAndSwallow(TAG, \"JSON.parse SSE chunk\", err); eventType = \"\"; continue; }\n\n if (eventType === \"content_block_delta\") {\n const delta = parsed[\"delta\"] as Record<string, unknown> | undefined;\n if (delta?.[\"type\"] === \"text_delta\" && typeof delta[\"text\"] === \"string\") {\n yield { type: \"chunk\", content: delta[\"text\"] as string };\n } else if (delta?.[\"type\"] === \"input_json_delta\" && typeof delta[\"partial_json\"] === \"string\") {\n yield { type: \"tool_call_delta\", index: (parsed[\"index\"] as number) ?? 0, id: undefined, name: undefined, arguments: delta[\"partial_json\"] as string };\n }\n } else if (eventType === \"content_block_start\") {\n const block = parsed[\"content_block\"] as Record<string, unknown> | undefined;\n if (block?.[\"type\"] === \"tool_use\") {\n yield { type: \"tool_call_delta\", index: (parsed[\"index\"] as number) ?? 0, id: block[\"id\"] as string, name: block[\"name\"] as string, arguments: undefined };\n }\n } else if (eventType === \"message_delta\") {\n const u = parsed[\"usage\"] as Record<string, number> | undefined;\n if (u) usage = { prompt_tokens: u[\"input_tokens\"] ?? 0, completion_tokens: u[\"output_tokens\"] ?? 0 };\n } else if (eventType === \"message_stop\") {\n yield { type: \"done\", usage };\n return;\n }\n eventType = \"\";\n }\n }\n }\n yield { type: \"done\", usage };\n } finally {\n reader.releaseLock();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAOA;AAEA,IAAM,MAAM;AAEZ,gBAAuB,kBACrB,UACA,QAC0B;AAC1B,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+BAA+B;AAE5D,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI,QAAqE;AAEzE,MAAI;AACF,WAAO,MAAM;AACX,UAAI,OAAO,QAAS;AACpB,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AAEV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,UAAI,YAAY;AAChB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,sBAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,QACjC,WAAW,KAAK,WAAW,QAAQ,KAAK,WAAW;AACjD,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI;AACJ,cAAI;AAAE,qBAAS,KAAK,MAAM,IAAI;AAAA,UAAG,SAAS,KAAK;AAAE,0BAAc,KAAK,wBAAwB,GAAG;AAAG,wBAAY;AAAI;AAAA,UAAU;AAE5H,cAAI,cAAc,uBAAuB;AACvC,kBAAM,QAAQ,OAAO,OAAO;AAC5B,gBAAI,QAAQ,MAAM,MAAM,gBAAgB,OAAO,MAAM,MAAM,MAAM,UAAU;AACzE,oBAAM,EAAE,MAAM,SAAS,SAAS,MAAM,MAAM,EAAY;AAAA,YAC1D,WAAW,QAAQ,MAAM,MAAM,sBAAsB,OAAO,MAAM,cAAc,MAAM,UAAU;AAC9F,oBAAM,EAAE,MAAM,mBAAmB,OAAQ,OAAO,OAAO,KAAgB,GAAG,IAAI,QAAW,MAAM,QAAW,WAAW,MAAM,cAAc,EAAY;AAAA,YACvJ;AAAA,UACF,WAAW,cAAc,uBAAuB;AAC9C,kBAAM,QAAQ,OAAO,eAAe;AACpC,gBAAI,QAAQ,MAAM,MAAM,YAAY;AAClC,oBAAM,EAAE,MAAM,mBAAmB,OAAQ,OAAO,OAAO,KAAgB,GAAG,IAAI,MAAM,IAAI,GAAa,MAAM,MAAM,MAAM,GAAa,WAAW,OAAU;AAAA,YAC3J;AAAA,UACF,WAAW,cAAc,iBAAiB;AACxC,kBAAM,IAAI,OAAO,OAAO;AACxB,gBAAI,EAAG,SAAQ,EAAE,eAAe,EAAE,cAAc,KAAK,GAAG,mBAAmB,EAAE,eAAe,KAAK,EAAE;AAAA,UACrG,WAAW,cAAc,gBAAgB;AACvC,kBAAM,EAAE,MAAM,QAAQ,MAAM;AAC5B;AAAA,UACF;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,UAAM,EAAE,MAAM,QAAQ,MAAM;AAAA,EAC9B,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;",
5
+ "mappings": ";;;;;;;;;;;;AAOA;AAEA,IAAM,MAAM;AAEZ,gBAAuB,kBACrB,UACA,QAC0B;AAC1B,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+BAA+B;AAE5D,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI,QAAqE;AAEzE,MAAI;AACF,WAAO,MAAM;AACX,UAAI,OAAO,QAAS;AACpB,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AAEV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,UAAI,YAAY;AAChB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,sBAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,QACjC,WAAW,KAAK,WAAW,QAAQ,KAAK,WAAW;AACjD,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI;AACJ,cAAI;AAAE,qBAAS,KAAK,MAAM,IAAI;AAAA,UAAG,SAAS,KAAK;AAAE,0BAAc,KAAK,wBAAwB,GAAG;AAAG,wBAAY;AAAI;AAAA,UAAU;AAE5H,cAAI,cAAc,uBAAuB;AACvC,kBAAM,QAAQ,OAAO,OAAO;AAC5B,gBAAI,QAAQ,MAAM,MAAM,gBAAgB,OAAO,MAAM,MAAM,MAAM,UAAU;AACzE,oBAAM,EAAE,MAAM,SAAS,SAAS,MAAM,MAAM,EAAY;AAAA,YAC1D,WAAW,QAAQ,MAAM,MAAM,sBAAsB,OAAO,MAAM,cAAc,MAAM,UAAU;AAC9F,oBAAM,EAAE,MAAM,mBAAmB,OAAQ,OAAO,OAAO,KAAgB,GAAG,IAAI,QAAW,MAAM,QAAW,WAAW,MAAM,cAAc,EAAY;AAAA,YACvJ;AAAA,UACF,WAAW,cAAc,uBAAuB;AAC9C,kBAAM,QAAQ,OAAO,eAAe;AACpC,gBAAI,QAAQ,MAAM,MAAM,YAAY;AAClC,oBAAM,EAAE,MAAM,mBAAmB,OAAQ,OAAO,OAAO,KAAgB,GAAG,IAAI,MAAM,IAAI,GAAa,MAAM,MAAM,MAAM,GAAa,WAAW,OAAU;AAAA,YAC3J;AAAA,UACF,WAAW,cAAc,iBAAiB;AACxC,kBAAM,IAAI,OAAO,OAAO;AACxB,gBAAI,EAAG,SAAQ,EAAE,eAAe,EAAE,cAAc,KAAK,GAAG,mBAAmB,EAAE,eAAe,KAAK,EAAE;AAAA,UACrG,WAAW,cAAc,gBAAgB;AACvC,kBAAM,EAAE,MAAM,QAAQ,MAAM;AAC5B;AAAA,UACF;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,UAAM,EAAE,MAAM,QAAQ,MAAM;AAAA,EAC9B,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;",
6
6
  "names": []
7
7
  }
@@ -3,9 +3,10 @@
3
3
  import {
4
4
  init_log_and_swallow,
5
5
  logAndSwallow
6
- } from "./chunk-WP7FZHMI.js";
7
- import "./chunk-OOKNHOCB.js";
8
- import "./chunk-H2K23MOF.js";
6
+ } from "./chunk-W2PSVV2T.js";
7
+ import "./chunk-6S3G6GPO.js";
8
+ import "./chunk-7XXISOHU.js";
9
+ import "./chunk-2BXXQG7P.js";
9
10
  import "./chunk-7K2YZTLD.js";
10
11
 
11
12
  // src/components/transport/sse-parser-responses.ts
@@ -61,4 +62,4 @@ async function* parseResponsesSSE(response, signal) {
61
62
  export {
62
63
  parseResponsesSSE
63
64
  };
64
- //# sourceMappingURL=sse-parser-responses-OI73R3AH.js.map
65
+ //# sourceMappingURL=sse-parser-responses-FC3PFHQ5.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/transport/sse-parser-responses.ts"],
4
4
  "sourcesContent": ["/**\n * sse-parser-responses.ts \u2014 OpenAI Responses API streaming parser (#472).\n * Yields same SSEEvent types as sse-parser.ts for consumer compatibility.\n * v1: text streaming only.\n */\n\nimport type { SSEEvent } from \"./sse-parser.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"sse_parser_responses\";\n\nexport async function* parseResponsesSSE(\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\n try {\n while (true) {\n if (signal.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n let eventType = \"\";\n for (const line of lines) {\n if (line.startsWith(\"event: \")) {\n eventType = line.slice(7).trim();\n } else if (line.startsWith(\"data: \") && eventType) {\n const data = line.slice(6).trim();\n let parsed: Record<string, unknown>;\n try { parsed = JSON.parse(data); } catch (err) { logAndSwallow(TAG, \"JSON.parse SSE chunk\", err); eventType = \"\"; continue; }\n\n if (eventType === \"response.output_text.delta\") {\n const delta = parsed[\"delta\"] as string | undefined;\n if (delta) yield { type: \"chunk\", content: delta };\n } else if (eventType === \"response.function_call_arguments.delta\") {\n yield { type: \"tool_call_delta\", index: 0, id: (parsed[\"call_id\"] as string) ?? undefined, name: undefined, arguments: (parsed[\"delta\"] as string) ?? \"\" };\n } else if (eventType === \"response.function_call_arguments.done\") {\n yield { type: \"tool_call_delta\", index: 0, id: (parsed[\"call_id\"] as string) ?? undefined, name: (parsed[\"name\"] as string) ?? undefined, arguments: undefined };\n } else if (eventType === \"response.completed\" || eventType === \"response.done\") {\n yield { type: \"done\", usage: null };\n return;\n }\n eventType = \"\";\n }\n }\n }\n yield { type: \"done\", usage: null };\n } finally {\n reader.releaseLock();\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAOA;AAEA,IAAM,MAAM;AAEZ,gBAAuB,kBACrB,UACA,QAC0B;AAC1B,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+BAA+B;AAE5D,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AAEb,MAAI;AACF,WAAO,MAAM;AACX,UAAI,OAAO,QAAS;AACpB,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AAEV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,UAAI,YAAY;AAChB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,sBAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,QACjC,WAAW,KAAK,WAAW,QAAQ,KAAK,WAAW;AACjD,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI;AACJ,cAAI;AAAE,qBAAS,KAAK,MAAM,IAAI;AAAA,UAAG,SAAS,KAAK;AAAE,0BAAc,KAAK,wBAAwB,GAAG;AAAG,wBAAY;AAAI;AAAA,UAAU;AAE5H,cAAI,cAAc,8BAA8B;AAC9C,kBAAM,QAAQ,OAAO,OAAO;AAC5B,gBAAI,MAAO,OAAM,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,UACnD,WAAW,cAAc,0CAA0C;AACjE,kBAAM,EAAE,MAAM,mBAAmB,OAAO,GAAG,IAAK,OAAO,SAAS,KAAgB,QAAW,MAAM,QAAW,WAAY,OAAO,OAAO,KAAgB,GAAG;AAAA,UAC3J,WAAW,cAAc,yCAAyC;AAChE,kBAAM,EAAE,MAAM,mBAAmB,OAAO,GAAG,IAAK,OAAO,SAAS,KAAgB,QAAW,MAAO,OAAO,MAAM,KAAgB,QAAW,WAAW,OAAU;AAAA,UACjK,WAAW,cAAc,wBAAwB,cAAc,iBAAiB;AAC9E,kBAAM,EAAE,MAAM,QAAQ,OAAO,KAAK;AAClC;AAAA,UACF;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,UAAM,EAAE,MAAM,QAAQ,OAAO,KAAK;AAAA,EACpC,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;",
5
+ "mappings": ";;;;;;;;;;;;AAOA;AAEA,IAAM,MAAM;AAEZ,gBAAuB,kBACrB,UACA,QAC0B;AAC1B,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+BAA+B;AAE5D,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AAEb,MAAI;AACF,WAAO,MAAM;AACX,UAAI,OAAO,QAAS;AACpB,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AAEV,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,eAAS,MAAM,IAAI,KAAK;AAExB,UAAI,YAAY;AAChB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,sBAAY,KAAK,MAAM,CAAC,EAAE,KAAK;AAAA,QACjC,WAAW,KAAK,WAAW,QAAQ,KAAK,WAAW;AACjD,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI;AACJ,cAAI;AAAE,qBAAS,KAAK,MAAM,IAAI;AAAA,UAAG,SAAS,KAAK;AAAE,0BAAc,KAAK,wBAAwB,GAAG;AAAG,wBAAY;AAAI;AAAA,UAAU;AAE5H,cAAI,cAAc,8BAA8B;AAC9C,kBAAM,QAAQ,OAAO,OAAO;AAC5B,gBAAI,MAAO,OAAM,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,UACnD,WAAW,cAAc,0CAA0C;AACjE,kBAAM,EAAE,MAAM,mBAAmB,OAAO,GAAG,IAAK,OAAO,SAAS,KAAgB,QAAW,MAAM,QAAW,WAAY,OAAO,OAAO,KAAgB,GAAG;AAAA,UAC3J,WAAW,cAAc,yCAAyC;AAChE,kBAAM,EAAE,MAAM,mBAAmB,OAAO,GAAG,IAAK,OAAO,SAAS,KAAgB,QAAW,MAAO,OAAO,MAAM,KAAgB,QAAW,WAAW,OAAU;AAAA,UACjK,WAAW,cAAc,wBAAwB,cAAc,iBAAiB;AAC9E,kBAAM,EAAE,MAAM,QAAQ,OAAO,KAAK;AAClC;AAAA,UACF;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,UAAM,EAAE,MAAM,QAAQ,OAAO,KAAK;AAAA,EACpC,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;",
6
6
  "names": []
7
7
  }