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
@@ -2,56 +2,60 @@
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
  abmind
5
- } from "./chunk-JAJ3DUQ2.js";
5
+ } from "./chunk-6IB3GVXK.js";
6
+ import {
7
+ getDelegationTools
8
+ } from "./chunk-QMP2KC4W.js";
6
9
  import {
7
10
  guardrails_exports,
8
11
  init_guardrails
9
- } from "./chunk-KBPVJGD7.js";
12
+ } from "./chunk-IXGDDDAB.js";
10
13
  import {
11
14
  init_seatbelt,
12
15
  seatbelt_exports
13
16
  } from "./chunk-VOLAZHA2.js";
17
+ import {
18
+ getOrcTools,
19
+ init_orc_tools
20
+ } from "./chunk-DMDX35YT.js";
21
+ import {
22
+ artifactAttachTool,
23
+ artifactPullTool,
24
+ artifactPushTool,
25
+ init_artifact_tools
26
+ } from "./chunk-FSGICOCX.js";
14
27
  import {
15
28
  auditDeny,
16
29
  checkPath,
17
30
  checkTool
18
- } from "./chunk-5V4VHKEA.js";
31
+ } from "./chunk-OT6HLPEA.js";
19
32
  import {
20
33
  bumpRead,
21
34
  setProvenance
22
- } from "./chunk-ULO2PX3T.js";
23
- import {
24
- getDelegationTools
25
- } from "./chunk-N5VROZ7A.js";
26
- import {
27
- artifactAttachTool,
28
- artifactPullTool,
29
- artifactPushTool,
30
- init_artifact_tools
31
- } from "./chunk-GCFIK6OB.js";
35
+ } from "./chunk-CCZ43JB7.js";
32
36
  import {
33
37
  channelPost,
34
38
  channelRead,
35
39
  init_kanban_channel
36
- } from "./chunk-SESM4GBM.js";
40
+ } from "./chunk-MPQ2PJQX.js";
37
41
  import {
38
42
  getPeerTransport,
39
43
  init_peer_transport
40
- } from "./chunk-3QW2K53E.js";
44
+ } from "./chunk-4IGLXZCC.js";
41
45
  import {
42
- getOrcTools,
43
- init_orc_tools
44
- } from "./chunk-7RAGSHSH.js";
46
+ getMasterUserId,
47
+ init_master_user
48
+ } from "./chunk-RCWQ34QR.js";
45
49
  import {
46
50
  init_kanban_board,
47
51
  kanbanEnqueue,
48
52
  kanbanList,
49
53
  kanbanUpdate
50
- } from "./chunk-S6HEHCCG.js";
54
+ } from "./chunk-RO3TAYBR.js";
51
55
  import {
52
56
  init_log_and_swallow,
53
57
  logAndSwallow
54
- } from "./chunk-WP7FZHMI.js";
58
+ } from "./chunk-W2PSVV2T.js";
55
59
  import {
56
60
  init_logger,
57
61
  logDebug,
@@ -59,11 +63,11 @@ import {
59
63
  logTrace,
60
64
  logWarn,
61
65
  redactSecrets
62
- } from "./chunk-OOKNHOCB.js";
66
+ } from "./chunk-6S3G6GPO.js";
63
67
  import {
64
68
  abtarsHome,
65
69
  init_paths
66
- } from "./chunk-H2K23MOF.js";
70
+ } from "./chunk-7XXISOHU.js";
67
71
  import {
68
72
  __toCommonJS
69
73
  } from "./chunk-7K2YZTLD.js";
@@ -75,6 +79,7 @@ import { execFile as execFile2 } from "node:child_process";
75
79
  import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
76
80
  import { join as join2 } from "node:path";
77
81
  import { homedir } from "node:os";
82
+ init_master_user();
78
83
 
79
84
  // src/components/transport/skill-authoring.ts
80
85
  import { existsSync, mkdirSync, writeFileSync, readFileSync, renameSync, appendFileSync } from "node:fs";
@@ -414,20 +419,20 @@ var peerDelegateTool = {
414
419
  const artifacts = args.artifacts ? JSON.parse(args.artifacts) : void 0;
415
420
  if (!goal) return JSON.stringify({ error: "goal is required" });
416
421
  if (!peer && requires.length > 0) {
417
- const { findCapablePeer } = await import("./gossip-CS3G3447.js");
422
+ const { findCapablePeer } = await import("./gossip-VSEY2HSE.js");
418
423
  const match = findCapablePeer(requires);
419
424
  if (!match) return JSON.stringify({ error: `No alive peer with capabilities: [${requires.join(", ")}]` });
420
425
  peer = match.name;
421
426
  logDebug(TAG3, `Auto-selected peer ${peer} for requires=[${requires.join(",")}] (load=${match.load})`);
422
427
  } else if (!peer) {
423
- const { getPeerTable } = await import("./gossip-CS3G3447.js");
428
+ const { getPeerTable } = await import("./gossip-VSEY2HSE.js");
424
429
  const alive = getPeerTable().sort((a, b) => a.load - b.load);
425
430
  if (alive.length === 0) return JSON.stringify({ error: "No alive peers available" });
426
431
  peer = alive[0].name;
427
432
  logDebug(TAG3, `Auto-selected least-loaded peer ${peer} (load=${alive[0].load})`);
428
433
  }
429
434
  if (requires.length > 0 && args.peer) {
430
- const { getPeerTable } = await import("./gossip-CS3G3447.js");
435
+ const { getPeerTable } = await import("./gossip-VSEY2HSE.js");
431
436
  const entry = getPeerTable(true).find((p) => p.name.toLowerCase() === peer.toLowerCase());
432
437
  if (entry && !requires.every((r) => entry.capabilities.includes(r))) {
433
438
  const missing = requires.filter((r) => !entry.capabilities.includes(r));
@@ -445,8 +450,8 @@ var peerDelegateTool = {
445
450
  notes: JSON.stringify({ peer, remote_task_id: remoteTaskId, remote_session_id: remoteSessionId, goal, requires })
446
451
  });
447
452
  if (remoteSessionId) {
448
- const { spin } = await import("./spin-4DBYHS3E.js");
449
- const { getMasterUserId: getMasterUserId2 } = await import("./phase-config-V4XETN5F.js");
453
+ const { spin } = await import("./spin-76K4R6FK.js");
454
+ const { getMasterUserId: getMasterUserId2 } = await import("./master-user-TKA7M2GL.js");
450
455
  spin.createHollowSession(getMasterUserId2(), "telegram", "W", peer, remoteSessionId);
451
456
  }
452
457
  logInfo(TAG3, `Delegated to ${peer}: remote#${remoteTaskId} \u2192 local#${localCardId}`);
@@ -647,9 +652,6 @@ var channelReadTool = {
647
652
 
648
653
  // src/components/transport/tool-registry.ts
649
654
  init_artifact_tools();
650
- function getMasterUserId() {
651
- return getMasterUserId();
652
- }
653
655
  var TAG4 = "tool_registry";
654
656
  var AUDIT_DIR = join2(process.env["ABTARS_HOME"] ?? join2(homedir(), ".abtars"), "logs");
655
657
  var AUDIT_PATH = join2(AUDIT_DIR, "audit.jsonl");
@@ -873,7 +875,7 @@ var memoryRecallTool = {
873
875
  try {
874
876
  const t0 = Date.now();
875
877
  const userId = context?.userId ?? getMasterUserId();
876
- const { loadUsers } = await import("./user-registry-6PUJJ5J2.js");
878
+ const { loadUsers } = await import("./user-registry-OYJVAHDD.js");
877
879
  const userEntry = loadUsers().byUserId.get(userId);
878
880
  const result = await memoryBackend.recall({
879
881
  translated: [args["query"] ?? ""],
@@ -1059,8 +1061,8 @@ var peerSessionTool = {
1059
1061
  required: ["peer_name", "message"]
1060
1062
  },
1061
1063
  async execute(args) {
1062
- const { callPeer } = await import("./peer-client-VOF77T6C.js");
1063
- const { loadPeerConfig } = await import("./peer-config-FRWLEYQ5.js");
1064
+ const { callPeer } = await import("./peer-client-WLK5GZQS.js");
1065
+ const { loadPeerConfig } = await import("./peer-config-24WILLCJ.js");
1064
1066
  const { getOrCreateSession, addTurn, isEnded, destroySession } = await import("./peer-sessions-MY2YVXHC.js");
1065
1067
  const peerName = args.peer_name?.trim();
1066
1068
  const message = args.message?.trim();
@@ -1099,8 +1101,8 @@ var peerWakeupTool = {
1099
1101
  required: ["peer_name"]
1100
1102
  },
1101
1103
  async execute(args) {
1102
- const { sendWakeup } = await import("./dns-wakeup-F55ALHXJ.js");
1103
- const { loadPeerConfig } = await import("./peer-config-FRWLEYQ5.js");
1104
+ const { sendWakeup } = await import("./dns-wakeup-KIURCCFJ.js");
1105
+ const { loadPeerConfig } = await import("./peer-config-24WILLCJ.js");
1104
1106
  const peerName = args.peer_name?.trim();
1105
1107
  if (!peerName) return JSON.stringify({ error: "peer_name required" });
1106
1108
  const config = loadPeerConfig();
@@ -1241,4 +1243,4 @@ export {
1241
1243
  getToolSchemas,
1242
1244
  executeToolCall
1243
1245
  };
1244
- //# sourceMappingURL=chunk-MQJG7OJX.js.map
1246
+ //# sourceMappingURL=chunk-RJ2OUNFU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/transport/tool-registry.ts", "../src/components/transport/skill-authoring.ts", "../src/components/transport/mcp-tool.ts", "../src/components/transport/peer-delegation-tools.ts", "../src/components/transport/kanban-tool.ts", "../src/components/transport/channel-tool.ts"],
4
+ "sourcesContent": ["/**\n * Tool registry for DirectApiTransport.\n * Phase 2: native tool schemas. Phase 3: in-process memory when available.\n */\n\nimport { execFile } from \"node:child_process\";\nimport { appendFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { MemoryBackend } from \"abmind\";\nimport type { InstantStoreParams } from \"../../types/index.js\";\nimport { logWarn, redactSecrets } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { checkTool, checkPath, auditDeny, type SandboxPolicy } from \"../tool-sandbox.js\";\nimport { getMasterUserId } from \"../master-user.js\";\n\nconst TAG = \"tool_registry\";\n\n// #449: append-only audit log\nconst AUDIT_DIR = join(process.env[\"ABTARS_HOME\"] ?? join(homedir(), \".abtars\"), \"logs\");\nconst AUDIT_PATH = join(AUDIT_DIR, \"audit.jsonl\");\ntry { mkdirSync(AUDIT_DIR, { recursive: true }); } catch (err) { logAndSwallow(TAG, \"mkdirSync audit dir\", err); }\nfunction audit(entry: Record<string, unknown>): void {\n try { appendFileSync(AUDIT_PATH, JSON.stringify(entry) + \"\\n\"); } catch (err) { logAndSwallow(TAG, \"audit write\", err); }\n}\n\nexport type ToolDefinition = {\n readonly name: string;\n readonly description: string;\n readonly parameters: Record<string, unknown>;\n execute(args: Record<string, string>, context?: { userId: string; signal?: AbortSignal }): Promise<string>;\n};\n\nconst BASH_TIMEOUT_MS = 300_000;\nconst CLI_TIMEOUT_MS = 60_000;\n\n/**\n * Patterns that would spawn or restart a bridge/watchdog process.\n * Blocked to prevent the LLM (especially fallback models) from accidentally\n * starting a second bridge instance, which would cause port conflicts,\n * Telegram 409 errors, and bridge.lock PID confusion.\n *\n * See post-mortem of 2026-04-22 outage: cron agent ran execute_bash that\n * spawned a rogue bridge alongside the watchdog-supervised one.\n */\nconst BLOCKED_PATTERNS: readonly RegExp[] = [\n /\\bmain\\.js\\b/, // node .../current/dist/main.js ...\n /\\babtars\\.sh\\b/, // the launcher\n /\\bwatchdog\\.sh\\b/, // the watchdog\n /\\blaunchctl\\s+(load|bootstrap|kickstart|start)\\b/, // launchd bridge start\n];\n\nexport function isBridgeSpawnCommand(cmd: string): boolean {\n return BLOCKED_PATTERNS.some(p => p.test(cmd));\n}\n\n/** Block kill/pkill/killall targeting the bridge's own PID or process patterns (#414). */\nfunction isBridgeKillCommand(cmd: string): boolean {\n const pid = process.pid;\n const ppid = process.ppid;\n // Direct kill of own PID or parent\n if (new RegExp(`\\\\bkill\\\\s+(-\\\\d+\\\\s+)?${pid}\\\\b`).test(cmd)) return true;\n if (new RegExp(`\\\\bkill\\\\s+(-\\\\d+\\\\s+)?${ppid}\\\\b`).test(cmd)) return true;\n // pkill/killall targeting bridge patterns\n if (/\\b(pkill|killall)\\b.*\\b(abtars|main\\.js|watchdog)\\b/.test(cmd)) return true;\n if (/\\bkill\\b.*\\$\\(.*pgrep.*abtars/.test(cmd)) return true;\n return false;\n}\n\nfunction runBash(cmd: string, timeout = BASH_TIMEOUT_MS, signal?: AbortSignal): Promise<string> {\n // Guardrails: command check\n const { checkCommand, classifyCommand } = require(\"../guardrails.js\") as typeof import(\"../guardrails.js\");\n const cmdBlock = checkCommand(cmd);\n if (cmdBlock) {\n logWarn(\"tool-registry\", `Guardrails blocked: ${cmd.slice(0, 200)}`);\n return Promise.resolve(JSON.stringify({ stderr: cmdBlock, exit_code: 126 }));\n }\n\n // Action gate: auth-required commands\n const tier = classifyCommand(cmd);\n if (tier === \"auth-required\" && _actionGate) {\n return _actionGate.requestAuth(\"bash-auth\", cmd).then((granted) => {\n if (!granted) {\n logWarn(\"tool-registry\", `Auth denied for: ${cmd.slice(0, 200)}`);\n return JSON.stringify({ stderr: \"Command requires authorization. Master denied or timed out.\", exit_code: 126 });\n }\n return executeBash(cmd, timeout, signal);\n });\n }\n\n if (isBridgeSpawnCommand(cmd)) {\n logWarn(\"tool-registry\", `Blocked bridge-spawn command: ${cmd.slice(0, 200)}`);\n return Promise.resolve(JSON.stringify({\n stderr: \"Command blocked: this would spawn/restart a bridge or watchdog process. The bridge is already running under launchd+watchdog supervision; use launchctl inspection commands (launchctl list, launchctl print) or signal the existing process instead.\",\n exit_code: 126,\n }));\n }\n if (isBridgeKillCommand(cmd)) {\n logWarn(\"tool-registry\", `Blocked bridge-kill command: ${cmd.slice(0, 200)}`);\n return Promise.resolve(JSON.stringify({\n stderr: \"Command blocked: this would kill the bridge process (yourself). Ask the user to send /restart for a session reset or restart the bridge manually.\",\n exit_code: 126,\n }));\n }\n return executeBash(cmd, timeout, signal);\n}\n\nlet _seatbeltActive = false;\nlet _seatbeltPolicy: import(\"../seatbelt/policy.js\").SeatbeltPolicy | null = null;\n\n/** Wire seatbelt for OS-level command sandboxing (#906). */\nexport function setSeatbelt(active: boolean, policy?: import(\"../seatbelt/policy.js\").SeatbeltPolicy): void {\n _seatbeltActive = active;\n _seatbeltPolicy = policy ?? null;\n}\n\nfunction executeBash(cmd: string, timeout: number, signal?: AbortSignal): Promise<string> {\n return new Promise((resolve) => {\n let bin = \"bash\";\n let args = [\"-c\", cmd];\n\n // #906: Wrap in OS sandbox if seatbelt active and command needs sandboxing\n if (_seatbeltActive && _seatbeltPolicy) {\n const { shouldSandbox, wrapCommand } = require(\"../seatbelt/index.js\") as typeof import(\"../seatbelt/index.js\");\n if (shouldSandbox(cmd)) {\n const wrapped = wrapCommand(cmd, _seatbeltPolicy);\n bin = wrapped.bin;\n args = wrapped.args;\n }\n }\n\n const child = execFile(bin, args, { timeout, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {\n const result: Record<string, unknown> = {};\n if (stdout) result[\"stdout\"] = stdout.slice(0, 50_000);\n if (stderr) result[\"stderr\"] = stderr.slice(0, 10_000);\n if (err) result[\"exit_code\"] = (err as NodeJS.ErrnoException & { code?: number }).code ?? 1;\n else result[\"exit_code\"] = 0;\n resolve(JSON.stringify(result));\n });\n if (signal) {\n if (signal.aborted) { child.kill(\"SIGTERM\"); return; }\n const onAbort = (): void => {\n child.kill(\"SIGTERM\");\n // #1003: escalate to SIGKILL if child doesn't exit within 3s\n setTimeout(() => { try { child.kill(\"SIGKILL\"); } catch {} }, 3000);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n child.on(\"exit\", () => signal.removeEventListener(\"abort\", onAbort));\n }\n });\n}\n\nlet memoryBackend: MemoryBackend | null = null;\n\n/** Wire in-process memory backend. Call once after memory init. */\nexport function setMemoryBackend(backend: MemoryBackend | null): void {\n memoryBackend = backend;\n}\n\nlet _actionGate: import(\"../action-gate.js\").ActionGate | null = null;\n\n/** Wire action gate for auth-required commands. */\nexport function setActionGate(gate: import(\"../action-gate.js\").ActionGate | null): void {\n _actionGate = gate;\n}\n\nlet _peerActivityCb: ((msg: string) => void) | null = null;\n\n/** Wire peer activity notification callback. */\nexport function setPeerActivityCallback(cb: ((msg: string) => void) | null): void {\n _peerActivityCb = cb;\n}\n\n// --- Tool definitions ---\n\nconst bashTool: ToolDefinition = {\n name: \"execute_bash\",\n description: \"Execute a bash command. Use for file operations, git, running scripts, and any shell command. Commands that would spawn or restart a bridge/watchdog process (node main.js, abtars.sh, abtars-watchdog.sh, launchctl load/bootstrap/kickstart/start) are blocked \u2014 the bridge is already supervised.\",\n parameters: {\n type: \"object\",\n properties: { command: { type: \"string\", description: \"The bash command to execute\" } },\n required: [\"command\"],\n },\n execute: (args, context) => runBash(args[\"command\"] ?? \"\", BASH_TIMEOUT_MS, context?.signal),\n};\n\nlet _storeCount = 0;\nconst STORE_CAP = 20;\n\n/** Reset store counter (called on new subagent session). */\nexport function resetStoreCounter(): void { _storeCount = 0; }\n\nconst memoryStoreTool: ToolDefinition = {\n name: \"memory_store\",\n description: \"Store a memory. Use after learning something about the user, their preferences, decisions, or facts worth remembering.\",\n parameters: {\n type: \"object\",\n properties: {\n translated: { type: \"string\", description: \"Memory content in English\" },\n original: { type: \"string\", description: \"Memory content in original language (if not English)\" },\n type: { type: \"string\", enum: [\"fact\", \"preference\", \"decision\", \"experience\", \"skill\", \"relationship\", \"goal\"], description: \"Memory type\" },\n emotion: { type: \"integer\", description: \"Emotion score -5 to +5 (0=neutral)\" },\n confidence: { type: \"integer\", description: \"Confidence 1-5 (3=default)\" },\n classification: { type: \"integer\", description: \"0=public (general knowledge), 1=internal (default), 2=confidential (personal preferences, habits, opinions about specific users), 3=secret (credentials, API keys, tokens, passwords \u2014 store IMMEDIATELY with exact string, never paraphrase, never wait for Dreamy)\" },\n },\n required: [\"translated\", \"type\"],\n },\n async execute(args, context): Promise<string> {\n if (++_storeCount > STORE_CAP) {\n return JSON.stringify({ stored: false, error: \"Store limit reached for this session. Move to next task.\" });\n }\n if (memoryBackend) {\n try {\n const params: InstantStoreParams = {\n userId: context?.userId ?? getMasterUserId(),\n contentEn: args[\"translated\"] ?? \"\",\n contentOriginal: args[\"original\"] ?? args[\"translated\"] ?? \"\",\n memoryType: (args[\"type\"] ?? \"fact\") as InstantStoreParams[\"memoryType\"],\n emotionScore: parseInt(args[\"emotion\"] ?? \"0\", 10),\n confidence: parseInt(args[\"confidence\"] ?? \"3\", 10),\n classification: parseInt(args[\"classification\"] ?? \"1\", 10),\n };\n const result = await memoryBackend.instantStore({ ...params, createdBy: \"tool:memory_store\" });\n return JSON.stringify(result);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // #706: FTS5 corruption self-heal \u2014 rebuild indexes and retry once\n if (msg.includes(\"fts5\") || msg.includes(\"corruption\")) {\n try {\n memoryBackend.rebuildFtsIndexes();\n logWarn(\"tool-registry\", \"FTS corruption detected \u2014 rebuilt indexes, retrying store\");\n const params: InstantStoreParams = {\n userId: context?.userId ?? getMasterUserId(),\n contentEn: args[\"translated\"] ?? \"\",\n contentOriginal: args[\"original\"] ?? args[\"translated\"] ?? \"\",\n memoryType: (args[\"type\"] ?? \"fact\") as InstantStoreParams[\"memoryType\"],\n emotionScore: parseInt(args[\"emotion\"] ?? \"0\", 10),\n confidence: parseInt(args[\"confidence\"] ?? \"3\", 10),\n classification: parseInt(args[\"classification\"] ?? \"1\", 10),\n };\n const result = await memoryBackend.instantStore({ ...params, createdBy: \"tool:memory_store\" });\n return JSON.stringify(result);\n } catch (retryErr) { /* fall through */ }\n }\n return JSON.stringify({ error: msg });\n }\n }\n let cmd = `abmind store --translated ${JSON.stringify(args[\"translated\"] ?? \"\")} --type ${args[\"type\"] ?? \"fact\"}`;\n if (args[\"original\"]) cmd += ` --original ${JSON.stringify(args[\"original\"])}`;\n if (args[\"emotion\"]) cmd += ` --emotion-score ${args[\"emotion\"]}`;\n if (args[\"confidence\"]) cmd += ` --confidence ${args[\"confidence\"]}`;\n if (args[\"classification\"]) cmd += ` --classification ${args[\"classification\"]}`;\n return runBash(cmd, CLI_TIMEOUT_MS);\n },\n};\n\nconst memoryRecallTool: ToolDefinition = {\n name: \"memory_recall\",\n description: \"Search memories by keyword or semantic query. Returns relevant stored memories.\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query\" },\n limit: { type: \"integer\", description: \"Max results (default 10)\" },\n },\n required: [\"query\"],\n },\n async execute(args, context): Promise<string> {\n if (memoryBackend) {\n try {\n const t0 = Date.now();\n const userId = context?.userId ?? getMasterUserId();\n const { loadUsers } = await import(\"../user-registry.js\");\n const userEntry = loadUsers().byUserId.get(userId);\n const result = await memoryBackend.recall({\n translated: [args[\"query\"] ?? \"\"],\n original: args[\"query\"] ?? \"\",\n userId,\n limit: parseInt(args[\"limit\"] ?? \"10\", 10),\n maxClassification: userEntry?.maxClass ?? 1,\n });\n import(\"../metrics-collector.js\").then(({ recordLatency }) => recordLatency(\"recall\", Date.now() - t0)).catch(() => {});\n return JSON.stringify(result);\n } catch (err) {\n return JSON.stringify({ error: err instanceof Error ? err.message : String(err) });\n }\n }\n let cmd = `abmind recall ${JSON.stringify(args[\"query\"] ?? \"\")}`;\n if (args[\"limit\"]) cmd += ` --limit ${args[\"limit\"]}`;\n return runBash(cmd, CLI_TIMEOUT_MS);\n },\n};\n\nconst memoryEditTool: ToolDefinition = {\n name: \"memory_edit\",\n description: \"Edit an existing memory by ID. Change content, type, emotion, confidence, or classification.\",\n parameters: {\n type: \"object\",\n properties: {\n memory_id: { type: \"integer\", description: \"Memory ID to edit\" },\n translated: { type: \"string\", description: \"New English content\" },\n original: { type: \"string\", description: \"New original language content\" },\n type: { type: \"string\", description: \"New memory type\" },\n emotion: { type: \"integer\", description: \"New emotion score\" },\n confidence: { type: \"integer\", description: \"New confidence\" },\n classification: { type: \"integer\", description: \"New classification\" },\n caller: { type: \"string\", enum: [\"kp\", \"dreamy\"], description: \"Who is making the edit\" },\n },\n required: [\"memory_id\"],\n },\n async execute(args): Promise<string> {\n if (memoryBackend) {\n try {\n const result = await memoryBackend.editMemory({\n memoryId: parseInt(args[\"memory_id\"] ?? \"0\", 10),\n contentEn: args[\"translated\"],\n contentOriginal: args[\"original\"],\n memoryType: args[\"type\"] as \"fact\" | \"decision\" | \"preference\" | \"event\" | undefined,\n emotionScore: args[\"emotion\"] ? parseInt(args[\"emotion\"], 10) : undefined,\n confidence: args[\"confidence\"] ? parseInt(args[\"confidence\"], 10) : undefined,\n classification: args[\"classification\"] ? parseInt(args[\"classification\"], 10) : undefined,\n caller: (args[\"caller\"] ?? \"kp\") as \"kp\" | \"dreamy\",\n });\n return JSON.stringify(result);\n } catch (err) {\n return JSON.stringify({ error: err instanceof Error ? err.message : String(err) });\n }\n }\n let cmd = `abmind edit --memory-id ${args[\"memory_id\"] ?? \"0\"}`;\n if (args[\"translated\"]) cmd += ` --translated ${JSON.stringify(args[\"translated\"])}`;\n if (args[\"original\"]) cmd += ` --original ${JSON.stringify(args[\"original\"])}`;\n if (args[\"type\"]) cmd += ` --type ${args[\"type\"]}`;\n if (args[\"emotion\"]) cmd += ` --emotion-score ${args[\"emotion\"]}`;\n if (args[\"confidence\"]) cmd += ` --confidence ${args[\"confidence\"]}`;\n if (args[\"classification\"]) cmd += ` --classification ${args[\"classification\"]}`;\n if (args[\"caller\"]) cmd += ` --caller ${args[\"caller\"]}`;\n return runBash(cmd, CLI_TIMEOUT_MS);\n },\n};\n\nconst webBrowseTool: ToolDefinition = {\n name: \"web_browse\",\n description: \"Browse a URL or perform a complex multi-step web task. For quick lookups use execute_bash with curl.\",\n parameters: {\n type: \"object\",\n properties: {\n task: { type: \"string\", description: \"What to do on the web\" },\n chat_id: { type: \"string\", description: \"Chat ID for result delivery\" },\n engine: { type: \"string\", enum: [\"cloakbrowser\"], description: \"Browser engine (default: cloakbrowser)\" },\n },\n required: [\"task\", \"chat_id\"],\n },\n execute: (args) => {\n let cmd = `abtars-browse --task ${JSON.stringify(args[\"task\"] ?? \"\")} --chat-id ${args[\"chat_id\"] ?? \"0\"}`;\n if (args[\"engine\"]) cmd += ` --engine ${args[\"engine\"]}`;\n return runBash(cmd, CLI_TIMEOUT_MS);\n },\n};\n\nconst todoTool: ToolDefinition = {\n name: \"todo_manage\",\n description: \"Manage TODO items. Add, complete, or list tasks.\",\n parameters: {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"add\", \"done\", \"list\", \"remove\"], description: \"Action to perform\" },\n text: { type: \"string\", description: \"TODO text (for add)\" },\n id: { type: \"string\", description: \"TODO ID (for done/remove)\" },\n },\n required: [\"action\"],\n },\n execute: (args) => {\n const action = args[\"action\"] ?? \"list\";\n if (action === \"add\") return runBash(`abtars-todo add ${JSON.stringify(args[\"text\"] ?? \"\")}`, CLI_TIMEOUT_MS);\n if (action === \"done\") return runBash(`abtars-todo done ${args[\"id\"] ?? \"\"}`, CLI_TIMEOUT_MS);\n if (action === \"remove\") return runBash(`abtars-todo remove ${args[\"id\"] ?? \"\"}`, CLI_TIMEOUT_MS);\n return runBash(\"abtars-todo list\", CLI_TIMEOUT_MS);\n },\n};\n\nlet _enqueueCron: ((id: string, manual?: boolean) => string | null) | null = null;\n\n/** Inject enqueueCron from bridge for task_manage --run. */\nexport function setEnqueueCron(fn: (id: string, manual?: boolean) => string | null): void { _enqueueCron = fn; }\n\nlet _ircSend: ((channel: string, message: string) => void) | null = null;\n\n/** Inject IRC send from bridge for irc_send tool. */\nexport function setIrcSend(fn: (channel: string, message: string) => void): void { _ircSend = fn; }\n\n/** @deprecated \u2014 secret_get now reads from file, not DB. Kept for backward compat (callers may still call this). */\n\nlet _sendDocument: ((path: string, caption?: string) => Promise<number>) | null = null;\n\n/**\n * Inject sendDocument from bridge for the send_document tool.\n * Caller binds main chat id + telegram adapter; tool is a thin wrapper around that.\n */\nexport function setSendDocument(fn: ((path: string, caption?: string) => Promise<number>) | null): void { _sendDocument = fn; }\n\nconst sendDocumentTool: ToolDefinition = {\n name: \"send_document\",\n description: \"Send a file from disk to the user's Telegram chat. Use for delivering reports, daily summaries, logs, or any .md file the user asks for. Do not summarize \u2014 the raw file is sent as an attachment.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Absolute path to the file\" },\n caption: { type: \"string\", description: \"Optional short caption (\u22641024 chars)\" },\n },\n required: [\"path\"],\n },\n execute: async (args) => {\n const path = args[\"path\"];\n if (!path) return JSON.stringify({ error: \"path is required\" });\n if (!_sendDocument) return JSON.stringify({ error: \"Telegram not configured (sendDocument unavailable)\" });\n try {\n const messageId = await _sendDocument(path, args[\"caption\"]);\n return JSON.stringify({ ok: true, message_id: messageId });\n } catch (err) {\n return JSON.stringify({ error: err instanceof Error ? err.message : String(err) });\n }\n },\n};\n\nconst taskTool: ToolDefinition = {\n name: \"task_manage\",\n description: \"Manage scheduled/recurring tasks (cron). Add, list, remove, pause, resume, or run tasks. Use action=run to execute a task immediately via the cron queue (isolated subagent).\",\n parameters: {\n type: \"object\",\n properties: {\n action: { type: \"string\", enum: [\"add\", \"list\", \"remove\", \"pause\", \"resume\", \"run\"], description: \"Action\" },\n message: { type: \"string\", description: \"Task message/command (for add)\" },\n schedule: { type: \"string\", description: \"Cron schedule expression (for add)\" },\n type: { type: \"string\", enum: [\"reminder\", \"script\", \"agent\"], description: \"Task type (for add)\" },\n chat_id: { type: \"string\", description: \"Chat ID (for add)\" },\n id: { type: \"string\", description: \"Task ID (for remove/pause/resume/run)\" },\n },\n required: [\"action\"],\n },\n execute: (args) => {\n const action = args[\"action\"] ?? \"list\";\n if (action === \"list\") return runBash(\"abtars-task list\", CLI_TIMEOUT_MS);\n if (action === \"remove\") return runBash(`abtars-task remove ${args[\"id\"] ?? \"\"}`, CLI_TIMEOUT_MS);\n if (action === \"pause\") return runBash(`abtars-task pause ${args[\"id\"] ?? \"\"}`, CLI_TIMEOUT_MS);\n if (action === \"resume\") return runBash(`abtars-task resume ${args[\"id\"] ?? \"\"}`, CLI_TIMEOUT_MS);\n if (action === \"run\") {\n if (!_enqueueCron) return Promise.resolve(JSON.stringify({ error: \"enqueueCron not available\" }));\n const err = _enqueueCron(args[\"id\"] ?? \"\", true);\n return Promise.resolve(JSON.stringify(err ? { error: err } : { ok: true, message: `Task ${args[\"id\"]} enqueued for immediate execution` }));\n }\n let cmd = `abtars-task add --message ${JSON.stringify(args[\"message\"] ?? \"\")}`;\n if (args[\"schedule\"]) cmd += ` --schedule ${JSON.stringify(args[\"schedule\"])}`;\n if (args[\"type\"]) cmd += ` --type ${args[\"type\"]}`;\n if (args[\"chat_id\"]) cmd += ` --chat-id ${args[\"chat_id\"]}`;\n return runBash(cmd, CLI_TIMEOUT_MS);\n },\n};\n\nconst peerSessionTool: ToolDefinition = {\n name: \"peer_session\",\n description: \"Open or continue a peer-to-peer session with another agent. Messages persist across turns. Use only when the user explicitly asks to contact another agent.\",\n parameters: {\n type: \"object\",\n properties: {\n peer_name: { type: \"string\", description: \"Name of the peer (as in peers.json)\" },\n message: { type: \"string\", description: \"Your message to the peer\" },\n session_id: { type: \"string\", description: \"Session ID from previous call (omit for new conversation)\" },\n },\n required: [\"peer_name\", \"message\"],\n },\n async execute(args) {\n const { callPeer } = await import(\"../peer-client.js\");\n const { loadPeerConfig } = await import(\"../peer-config.js\");\n const { getOrCreateSession, addTurn, isEnded, destroySession } = await import(\"../peer-sessions.js\");\n\n const peerName = args.peer_name?.trim();\n const message = args.message?.trim();\n if (!peerName || !message) return JSON.stringify({ error: \"peer_name and message required\" });\n\n const config = loadPeerConfig();\n if (peerName === config.self.name) return JSON.stringify({ error: \"Cannot chat with yourself\" });\n if (!config.peers[peerName]) return JSON.stringify({ error: `Unknown peer: ${peerName}` });\n\n const session = getOrCreateSession(args.session_id?.trim() || undefined, peerName);\n\n // Check turn cap before sending\n if (session.messages.length >= 20) {\n destroySession(session.id);\n return JSON.stringify({ session_id: session.id, response: \"[SESSION_END] Turn limit reached.\", ended: true, reason: \"max-turns\" });\n }\n\n addTurn(session, \"user\", message);\n\n // Build full conversation for peer (OpenAI messages format)\n const prompt = session.messages.map(m => `${m.role === \"user\" ? \"You\" : \"Peer\"}: ${m.content}`).join(\"\\n\") + \"\\n\\nRespond to the latest message.\";\n\n try {\n const response = await callPeer(peerName, prompt, config.maxHops);\n addTurn(session, \"assistant\", response);\n _peerActivityCb?.(`\uD83E\uDD16 Agents: ${config.self.name} \u2194 ${peerName} session. [turn ${session.messages.length}]`);\n\n const { ended, reason } = isEnded(session, response);\n if (ended) destroySession(session.id);\n\n return JSON.stringify({ session_id: session.id, response, ended, reason });\n } catch (err) {\n destroySession(session.id);\n return JSON.stringify({ error: `peer_session failed: ${err instanceof Error ? err.message : String(err)}`, session_id: session.id, ended: true });\n }\n },\n};\n\nconst peerWakeupTool: ToolDefinition = {\n name: \"peer_wakeup\",\n description: \"Send a wake-up signal to a peer that cannot reach us directly (firewall). The peer's bridge will call us back via A2A within seconds.\",\n parameters: {\n type: \"object\",\n properties: {\n peer_name: { type: \"string\", description: \"Name of the peer to wake up (as in peers.json)\" },\n },\n required: [\"peer_name\"],\n },\n async execute(args) {\n const { sendWakeup } = await import(\"../dns-wakeup.js\");\n const { loadPeerConfig } = await import(\"../peer-config.js\");\n const peerName = args.peer_name?.trim();\n if (!peerName) return JSON.stringify({ error: \"peer_name required\" });\n const config = loadPeerConfig();\n const peer = config.peers[peerName];\n if (!peer) return JSON.stringify({ error: `Unknown peer: ${peerName}` });\n const udpPort = peer.udpPort ?? 5353;\n sendWakeup(config.self.name, peer.host, udpPort, peer.token);\n return JSON.stringify({ ok: true, message: `Wake-up sent to ${peerName}. Expect callback within seconds.` });\n },\n};\n\nconst ircSendTool: ToolDefinition = {\n name: \"irc_send\",\n description: \"Send a message to an IRC channel (e.g. #bridges)\",\n parameters: {\n channel: { type: \"string\", description: \"IRC channel (e.g. #bridges)\" },\n message: { type: \"string\", description: \"Message text to send\" },\n },\n execute: async (args) => {\n if (!_ircSend) return JSON.stringify({ error: \"IRC adapter not connected\" });\n const channel = args[\"channel\"] ?? \"\";\n const message = args[\"message\"] ?? \"\";\n if (!channel || !message) return JSON.stringify({ error: \"channel and message are required\" });\n _ircSend(channel, message);\n return JSON.stringify({ ok: true, channel, sent: message.length + \" chars\" });\n },\n};\n\nconst secretGetTool: ToolDefinition = {\n name: \"secret_get\",\n description: \"Retrieve a secret from ~/.abtars/secret/. For env-var secrets (no extension), returns the value. For files (with extension like .json), returns the full decrypted content. NEVER echo the value to the user.\",\n parameters: {\n properties: {\n name: { type: \"string\", description: \"Exact filename in secret/ dir (e.g. 'OPENROUTER_API_KEY', 'x-cookies.json')\" },\n },\n required: [\"name\"],\n },\n execute: async (args) => {\n const name = args.name?.trim();\n if (!name) return JSON.stringify({ error: \"name is required\" });\n try {\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const { readFileSync, existsSync } = await import(\"node:fs\");\n const { createDecipheriv, hkdfSync } = await import(\"node:crypto\");\n const { loadKey } = await import(\"abmind\");\n\n const secretPath = join(homedir(), \".abtars\", \"secret\", name);\n if (!existsSync(secretPath)) return JSON.stringify({ error: `secret '${name}' not found` });\n\n const raw = readFileSync(secretPath, \"utf-8\").trim();\n if (!raw) return JSON.stringify({ error: `secret '${name}' is empty` });\n\n let value: string;\n if (raw.startsWith(\"ENC:\")) {\n const master = loadKey();\n const key = Buffer.from(hkdfSync(\"sha256\", master, \"\", \"abtars-secrets-files-v1\", 32));\n const buf = Buffer.from(raw.slice(4), \"base64\");\n const d = createDecipheriv(\"aes-256-gcm\", key, buf.subarray(1, 13));\n d.setAuthTag(buf.subarray(buf.length - 16));\n value = d.update(buf.subarray(13, buf.length - 16), undefined, \"utf-8\") + d.final(\"utf-8\");\n } else {\n value = raw;\n }\n\n // For env-var type (no extension): also inject into process.env\n if (!name.includes(\".\")) {\n process.env[name] = value;\n return JSON.stringify({ ok: true, env_var: `$${name}`, hint: `Use $${name} in commands. NEVER print or echo the value.` });\n }\n return JSON.stringify({ ok: true, content: value });\n } catch (err) {\n return JSON.stringify({ error: `secret_get failed: ${err instanceof Error ? err.message : String(err)}` });\n }\n },\n};\n\nimport { skillCreateTool, skillUpdateTool, skillPatchTool, skillRemoveTool } from \"./skill-authoring.js\";\nimport { mcpTool } from \"./mcp-tool.js\";\nimport { getDelegationTools } from \"./delegation-tools.js\";\nimport { getPeerDelegationTools } from \"./peer-delegation-tools.js\";\nimport { getOrcTools } from \"./orc-tools.js\";\nimport { kanbanTool } from \"./kanban-tool.js\";\nimport { channelPostTool, channelReadTool } from \"./channel-tool.js\";\nimport { artifactPushTool, artifactPullTool, artifactAttachTool } from \"./artifact-tools.js\";\n\nconst ALL_TOOLS: ToolDefinition[] = [bashTool, memoryStoreTool, memoryRecallTool, memoryEditTool, webBrowseTool, todoTool, taskTool, sendDocumentTool, peerSessionTool, peerWakeupTool, ircSendTool, secretGetTool, skillCreateTool, skillUpdateTool, skillPatchTool, skillRemoveTool, mcpTool, kanbanTool, channelPostTool, channelReadTool, artifactAttachTool, ...getDelegationTools(), ...getPeerDelegationTools(), ...getOrcTools()];\n\n// Conditional: artifact store tools (#929)\nif (process.env[\"ARTIFACT_S3_ENDPOINT\"]) {\n ALL_TOOLS.push(artifactPushTool, artifactPullTool);\n}\n\nexport function getToolDefinitions(): ToolDefinition[] { return ALL_TOOLS; }\n\nexport function getToolSchemas(policy?: SandboxPolicy): Array<{ type: \"function\"; function: { name: string; description: string; parameters: Record<string, unknown> } }> {\n const tools = policy ? ALL_TOOLS.filter(t => checkTool(t.name, policy).allowed) : ALL_TOOLS;\n return tools.map(t => ({\n type: \"function\" as const,\n function: { name: t.name, description: t.description, parameters: t.parameters },\n }));\n}\n\nimport { bumpRead } from \"../skill-stats.js\";\n\n/** Check if a bash command result indicates a skill file was read. */\nfunction checkSkillRead(toolName: string, args: Record<string, string>): void {\n if (toolName !== \"execute_bash\") return;\n const cmd = args[\"command\"] ?? \"\";\n if (cmd.includes(\"/.abtars/skills/\") && cmd.includes(\"/SKILL.md\")) {\n const match = cmd.match(/\\/.abtars\\/skills\\/[^/]+\\/([^/]+)\\/SKILL\\.md/);\n if (match) bumpRead(match[1]!);\n }\n}\n\nexport async function executeToolCall(name: string, args: Record<string, string>, context?: { userId: string; signal?: AbortSignal; sandboxPolicy?: SandboxPolicy }): Promise<string> {\n // Sandbox enforcement\n if (context?.sandboxPolicy) {\n const toolCheck = checkTool(name, context.sandboxPolicy);\n if (!toolCheck.allowed) {\n const available = ALL_TOOLS.filter(t => checkTool(t.name, context.sandboxPolicy!).allowed).map(t => t.name);\n auditDeny(name, undefined, \"session\", toolCheck.reason!);\n return JSON.stringify({ error: `Tool '${name}' not available in this session`, available_tools: available, reason: \"peer_sandbox\" });\n }\n const filePath = args[\"path\"] ?? args[\"file_path\"];\n if (filePath) {\n const mode = name.includes(\"read\") || name === \"memory_recall\" ? \"read\" as const : \"write\" as const;\n const pathCheck = checkPath(filePath, mode, context.sandboxPolicy);\n if (!pathCheck.allowed) {\n auditDeny(name, filePath, \"session\", pathCheck.reason!);\n return JSON.stringify({ error: pathCheck.reason, reason: \"peer_sandbox\" });\n }\n }\n }\n\n const tool = ALL_TOOLS.find(t => t.name === name);\n if (!tool) return JSON.stringify({ error: `Unknown tool: ${name}` });\n const ts = Date.now();\n\n // #621: redact abmind_store args based on classification\n const storeClass = (name === \"abmind_store\" || name === \"memory_store\") ? parseInt(args.classification ?? args.class ?? \"1\", 10) : 0;\n const auditArgs = storeClass >= 2\n ? `{\"class\":${storeClass},\"[REDACTED]\":true}`\n : redactSecrets(JSON.stringify(args));\n audit({ ts, tool: name, args: auditArgs, userId: context?.userId });\n\n try {\n const result = await tool.execute(args, context);\n audit({ ts, tool: name, status: \"ok\", chars: result.length });\n checkSkillRead(name, args);\n return result;\n } catch (err) {\n audit({ ts, tool: name, status: \"error\", error: err instanceof Error ? err.message : String(err) });\n throw err;\n }\n}\n", "/**\n * skill-authoring.ts \u2014 skill lifecycle tools (#381, #613, #614).\n * Agent persists procedural knowledge as skills under ~/.abtars/skills/self/.\n */\n\nimport { existsSync, mkdirSync, writeFileSync, readFileSync, renameSync, appendFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abmind } from \"../../utils/abmind-lazy.js\";\nimport { abtarsHome } from \"../../paths.js\";\nimport { logInfo } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { setProvenance } from \"../skill-stats.js\";\nimport type { ToolDefinition } from \"./tool-registry.js\";\n\nconst TAG = \"skill-authoring\";\nconst NAME_RE = /^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/;\nconst MIN_BYTES = 100;\nconst MAX_BYTES = 50_000;\nconst MAX_TAGS = 5;\n\nfunction skillsDir(): string { return join(abtarsHome(), \"skills\"); }\nfunction selfDir(): string { return join(skillsDir(), \"self\"); }\nfunction trashDir(): string { return join(skillsDir(), \".trash\"); }\nfunction auditLogPath(): string { return join(abtarsHome(), \"logs\", \"skill-authoring.log\"); }\n\nfunction audit(entry: string): void {\n const line = `[${new Date().toISOString()}] ${entry}\\n`;\n try {\n const dir = join(abtarsHome(), \"logs\");\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n appendFileSync(auditLogPath(), line);\n } catch (err) { logAndSwallow(TAG, \"audit write\", err); }\n}\n\nfunction validate(name: string, description: string, content: string): string | null {\n if (!NAME_RE.test(name)) return `Invalid name \"${name}\". Must be 3-64 chars, lowercase alphanumeric + hyphens, no leading/trailing hyphens.`;\n const desc = description.trim();\n if (desc.length < 1 || desc.length > 120) return `Description must be 1-120 chars (got ${desc.length}).`;\n const bytes = Buffer.byteLength(content, \"utf-8\");\n if (bytes < MIN_BYTES) return `Content too short (${bytes} bytes, minimum ${MIN_BYTES}). Write a useful skill, not a one-liner.`;\n if (bytes > MAX_BYTES) return `Content too large (${bytes} bytes, maximum ${MAX_BYTES}). Split into a skill + references/ files.`;\n const path = join(selfDir(), name, \"SKILL.md\");\n if (existsSync(path)) return `Skill \"${name}\" already exists. Use skill_update to modify it.`;\n const scan = abmind()?.scanForInjection(content);\n if (scan && !scan.safe) return `Content blocked by injection scanner: ${scan.flags[0]?.category ?? \"unknown\"} (score=${scan.score}). Rephrase the content.`;\n return null;\n}\n\n/** Parse YAML-like frontmatter from SKILL.md content. */\nfunction parseFrontmatter(raw: string): { meta: Record<string, unknown>; body: string } {\n const match = raw.match(/^---\\n([\\s\\S]*?)\\n---\\n\\n?([\\s\\S]*)$/);\n if (!match) return { meta: {}, body: raw };\n const meta: Record<string, unknown> = {};\n for (const line of match[1]!.split(\"\\n\")) {\n const idx = line.indexOf(\":\");\n if (idx < 0) continue;\n const key = line.slice(0, idx).trim();\n let val: unknown = line.slice(idx + 1).trim();\n // Parse array: [a, b, c]\n if (typeof val === \"string\" && val.startsWith(\"[\") && val.endsWith(\"]\")) {\n val = val.slice(1, -1).split(\",\").map(s => s.trim()).filter(Boolean);\n }\n meta[key] = val;\n }\n return { meta, body: match[2]! };\n}\n\n/** Serialize frontmatter fields back to YAML-like string. */\nfunction serializeFrontmatter(meta: Record<string, unknown>): string {\n const lines: string[] = [\"---\"];\n for (const [k, v] of Object.entries(meta)) {\n if (v === undefined || v === null) continue;\n if (Array.isArray(v) && v.length > 0) {\n lines.push(`${k}: [${v.join(\", \")}]`);\n } else if (!Array.isArray(v)) {\n lines.push(`${k}: ${v}`);\n }\n }\n lines.push(\"---\\n\\n\");\n return lines.join(\"\\n\");\n}\n\n/** Guard: skill must exist in self/ dir. Returns error string or null. */\nfunction guardSelfSkill(name: string): string | null {\n if (!NAME_RE.test(name)) return `Invalid name \"${name}\".`;\n const path = join(selfDir(), name, \"SKILL.md\");\n if (!existsSync(path)) return `Skill \"${name}\" not found in self/.`;\n return null;\n}\n\nexport const skillCreateTool: ToolDefinition = {\n name: \"skill_create\",\n description: \"Persist a new procedural skill to disk. Use when you've solved a novel task, discovered a workflow, or received a correction worth remembering as a repeatable recipe. Skills become available in future sessions via the skills_catalog.\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Skill identifier, kebab-case, e.g. 'fix-pnpm-workspace-drift'. 3-64 chars, [a-z0-9-]+.\" },\n description: { type: \"string\", description: \"One-line description, max 120 chars. Shown in skills_catalog.\" },\n content: { type: \"string\", description: \"Skill body in Markdown. Starts with # <Title>. No frontmatter \u2014 the tool writes it.\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"Optional tags for categorization (max 5). E.g. ['tools', 'browser', 'debugging'].\" },\n related: { type: \"array\", items: { type: \"string\" }, description: \"Optional related skill names.\" },\n },\n required: [\"name\", \"description\", \"content\"],\n },\n async execute(args) {\n const { name, description, content, tags, related } = args as unknown as { name: string; description: string; content: string; tags?: string[]; related?: string[] };\n const error = validate(name, description, content);\n if (error) {\n audit(`skill_create name=${name} bytes=${content.length} ok=false error=\"${error}\"`);\n return JSON.stringify({ error });\n }\n\n const tagList = (tags ?? []).slice(0, MAX_TAGS).map(t => t.toLowerCase().trim()).filter(Boolean);\n const relList = (related ?? []).filter(Boolean);\n const tagsLine = tagList.length > 0 ? `tags: [${tagList.join(\", \")}]\\n` : \"\";\n const relatedLine = relList.length > 0 ? `related: [${relList.join(\", \")}]\\n` : \"\";\n const frontmatter = `---\\nname: ${name}\\ndescription: ${description.trim()}\\n${tagsLine}${relatedLine}---\\n\\n`;\n const fullContent = frontmatter + content;\n const dir = join(selfDir(), name);\n const filePath = join(dir, \"SKILL.md\");\n const tmpPath = filePath + \".tmp\";\n\n try {\n mkdirSync(dir, { recursive: true });\n writeFileSync(tmpPath, fullContent, \"utf-8\");\n renameSync(tmpPath, filePath);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n audit(`skill_create name=${name} bytes=${content.length} ok=false error=\"write failed: ${msg}\"`);\n return JSON.stringify({ error: `Write failed: ${msg}` });\n }\n\n setProvenance(name, \"agent\");\n audit(`skill_create name=${name} tags=[${tagList.join(\",\")}] bytes=${content.length} ok=true`);\n logInfo(TAG, `Created skill: self/${name} (${content.length} bytes)`);\n return JSON.stringify({ ok: true, path: filePath, message: `Skill \"${name}\" created in self/. Available in skills_catalog after /skill reload.` });\n },\n};\n\nexport const skillUpdateTool: ToolDefinition = {\n name: \"skill_update\",\n description: \"Full rewrite of an existing skill's SKILL.md in self/. Preserves frontmatter fields (tags, related, description) when omitted by caller.\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Skill name (must exist in self/).\" },\n description: { type: \"string\", description: \"New description (optional \u2014 keeps existing if omitted).\" },\n content: { type: \"string\", description: \"New skill body in Markdown (no frontmatter).\" },\n tags: { type: \"array\", items: { type: \"string\" }, description: \"New tags (optional \u2014 keeps existing if omitted).\" },\n related: { type: \"array\", items: { type: \"string\" }, description: \"New related skills (optional \u2014 keeps existing if omitted).\" },\n },\n required: [\"name\", \"content\"],\n },\n async execute(args) {\n const { name, content, description, tags, related } = args as unknown as { name: string; content: string; description?: string; tags?: string[]; related?: string[] };\n const guard = guardSelfSkill(name);\n if (guard) { audit(`skill_update name=${name} ok=false error=\"${guard}\"`); return JSON.stringify({ error: guard }); }\n\n const bytes = Buffer.byteLength(content, \"utf-8\");\n if (bytes < MIN_BYTES) return JSON.stringify({ error: `Content too short (${bytes} bytes, minimum ${MIN_BYTES}).` });\n if (bytes > MAX_BYTES) return JSON.stringify({ error: `Content too large (${bytes} bytes, maximum ${MAX_BYTES}).` });\n\n const scan = abmind()?.scanForInjection(content);\n if (scan && !scan.safe) return JSON.stringify({ error: `Content blocked by injection scanner: ${scan.flags[0]?.category ?? \"unknown\"}.` });\n\n const filePath = join(selfDir(), name, \"SKILL.md\");\n const existing = readFileSync(filePath, \"utf-8\");\n const { meta } = parseFrontmatter(existing);\n\n // Merge: caller fields override, omitted fields preserved\n const merged: Record<string, unknown> = { ...meta, name };\n if (description !== undefined) merged[\"description\"] = description.trim();\n if (tags !== undefined) merged[\"tags\"] = tags.slice(0, MAX_TAGS).map(t => t.toLowerCase().trim()).filter(Boolean);\n if (related !== undefined) merged[\"related\"] = related.filter(Boolean);\n\n const fullContent = serializeFrontmatter(merged) + content;\n const tmpPath = filePath + \".tmp\";\n try {\n writeFileSync(tmpPath, fullContent, \"utf-8\");\n renameSync(tmpPath, filePath);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n audit(`skill_update name=${name} ok=false error=\"write failed: ${msg}\"`);\n return JSON.stringify({ error: `Write failed: ${msg}` });\n }\n\n audit(`skill_update name=${name} bytes=${bytes} ok=true`);\n logInfo(TAG, `Updated skill: self/${name} (${bytes} bytes)`);\n return JSON.stringify({ ok: true, path: filePath, message: `Skill \"${name}\" updated.` });\n },\n};\n\nexport const skillPatchTool: ToolDefinition = {\n name: \"skill_patch\",\n description: \"Targeted find-and-replace within a skill's SKILL.md in self/. old_string must match exactly once.\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Skill name (must exist in self/).\" },\n old_string: { type: \"string\", description: \"Exact string to find (must match once).\" },\n new_string: { type: \"string\", description: \"Replacement string.\" },\n },\n required: [\"name\", \"old_string\", \"new_string\"],\n },\n async execute(args) {\n const { name, old_string, new_string } = args as unknown as { name: string; old_string: string; new_string: string };\n const guard = guardSelfSkill(name);\n if (guard) { audit(`skill_patch name=${name} ok=false error=\"${guard}\"`); return JSON.stringify({ error: guard }); }\n\n const filePath = join(selfDir(), name, \"SKILL.md\");\n const existing = readFileSync(filePath, \"utf-8\");\n\n const count = existing.split(old_string).length - 1;\n if (count === 0) return JSON.stringify({ error: `old_string not found in skill \"${name}\".` });\n if (count > 1) return JSON.stringify({ error: `old_string matches ${count} times \u2014 must match exactly once.` });\n\n const patched = existing.replace(old_string, new_string);\n const scan = abmind()?.scanForInjection(patched);\n if (scan && !scan.safe) return JSON.stringify({ error: `Patched content blocked by injection scanner: ${scan.flags[0]?.category ?? \"unknown\"}.` });\n\n const tmpPath = filePath + \".tmp\";\n try {\n writeFileSync(tmpPath, patched, \"utf-8\");\n renameSync(tmpPath, filePath);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n audit(`skill_patch name=${name} ok=false error=\"write failed: ${msg}\"`);\n return JSON.stringify({ error: `Write failed: ${msg}` });\n }\n\n audit(`skill_patch name=${name} ok=true`);\n logInfo(TAG, `Patched skill: self/${name}`);\n return JSON.stringify({ ok: true, path: filePath, message: `Skill \"${name}\" patched.` });\n },\n};\n\nexport const skillRemoveTool: ToolDefinition = {\n name: \"skill_remove\",\n description: \"Soft-delete a skill from self/ by moving it to .trash/ (recoverable for 7 days).\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Skill name (must exist in self/).\" },\n },\n required: [\"name\"],\n },\n async execute(args) {\n const { name } = args as unknown as { name: string };\n const guard = guardSelfSkill(name);\n if (guard) { audit(`skill_remove name=${name} ok=false error=\"${guard}\"`); return JSON.stringify({ error: guard }); }\n\n const srcDir = join(selfDir(), name);\n const ts = Date.now();\n const destDir = join(trashDir(), `${name}-${ts}`);\n try {\n mkdirSync(trashDir(), { recursive: true });\n renameSync(srcDir, destDir);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n audit(`skill_remove name=${name} ok=false error=\"move failed: ${msg}\"`);\n return JSON.stringify({ error: `Move failed: ${msg}` });\n }\n\n audit(`skill_remove name=${name} dest=${destDir} ok=true`);\n logInfo(TAG, `Removed skill: self/${name} \u2192 .trash/`);\n return JSON.stringify({ ok: true, message: `Skill \"${name}\" moved to .trash/. Will be pruned after 7 days.` });\n },\n};\n", "/**\n * mcp-tool.ts \u2014 Generic MCP tool (#471 v2).\n * Single tool that routes to any mcporter server/tool. Daemon starts on-demand.\n */\n\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { logInfo, logWarn } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport type { ToolDefinition } from \"./tool-registry.js\";\n\nconst execFileAsync = promisify(execFile);\nconst TAG = \"mcp\";\nlet daemonStarted = false;\n\nasync function ensureDaemon(): Promise<void> {\n if (daemonStarted) return;\n try {\n await execFileAsync(\"mcporter\", [\"daemon\", \"start\"], { timeout: 10_000 });\n daemonStarted = true;\n logInfo(TAG, \"mcporter daemon started (on-demand)\");\n } catch {\n logWarn(TAG, \"mcporter daemon start failed \u2014 calls may still work if already running\");\n daemonStarted = true; // don't retry every call \u2014 assume already running\n }\n}\n\nexport const mcpTool: ToolDefinition = {\n name: \"mcp\",\n description: \"Call an MCP server tool via mcporter. Available servers shown by /mcp command. Use when you need JIRA, presentations, or other MCP-connected services.\",\n parameters: {\n type: \"object\",\n properties: {\n server: { type: \"string\", description: \"Server name (e.g. 'pptx', 'atlassian')\" },\n tool: { type: \"string\", description: \"Tool name (e.g. 'jira_search', 'create_presentation')\" },\n args: { type: \"string\", description: \"Tool arguments as JSON string (e.g. '{\\\"query\\\": \\\"assignee = me\\\"}')\" },\n },\n required: [\"server\", \"tool\"],\n },\n async execute(params) {\n await ensureDaemon();\n const { server, tool, args } = params as { server: string; tool: string; args?: string };\n const cliArgs = [\"call\", `${server}.${tool}`];\n if (args) {\n try {\n const parsed = JSON.parse(args) as Record<string, string>;\n for (const [k, v] of Object.entries(parsed)) cliArgs.push(`${k}=${v}`);\n } catch (err) {\n logAndSwallow(TAG, \"JSON.parse mcp args\", err);\n cliArgs.push(args);\n }\n }\n try {\n const { stdout } = await execFileAsync(\"mcporter\", cliArgs, { timeout: 30_000, encoding: \"utf-8\" });\n return stdout;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return JSON.stringify({ error: `mcp call failed: ${msg}` });\n }\n },\n};\n", "/**\n * peer-delegation-tools.ts \u2014 peer_delegate, peer_check, peer_terminate (#675).\n *\n * Remote delegation tools for the Orc. Uses PeerTransport to call\n * remote peers' /v1/tasks endpoints. Results tracked in local kanban\n * with type=\"remote\" and meta JSON for peer + remote_task_id.\n */\n\nimport type { ToolDefinition } from \"./tool-registry.js\";\nimport { getPeerTransport } from \"../peer-transport/index.js\";\nimport { kanbanEnqueue } from \"../tasks/kanban-board.js\";\nimport { logInfo, logWarn, logDebug, logTrace } from \"../logger.js\";\n\nconst TAG = \"peer-delegate\";\n\nexport const peerDelegateTool: ToolDefinition = {\n name: \"peer_delegate\",\n description: \"Delegate a task to a remote peer. If peer is omitted, auto-selects the best capable peer by load. Use 'requires' to specify needed capabilities (gpu, docker, ollama, browser, xcode).\",\n parameters: {\n type: \"object\",\n properties: {\n peer: { type: \"string\", description: \"Peer name (optional \u2014 auto-selects if omitted)\" },\n goal: { type: \"string\", description: \"Task goal/instructions for the remote peer\" },\n priority: { type: \"string\", enum: [\"CRITICAL\", \"HIGH\", \"MEDIUM\", \"LOW\"], description: \"Task priority (default: MEDIUM)\" },\n context: { type: \"string\", description: \"Optional context to include\" },\n requires: { type: \"array\", items: { type: \"string\" }, description: \"Required capabilities (e.g. ['gpu', 'docker'])\" },\n artifacts: { type: \"string\", description: \"JSON array of {name, content} objects (base64-encoded files to send)\" },\n },\n required: [\"goal\"],\n },\n async execute(args: Record<string, string>): Promise<string> {\n const { goal, priority, context } = args;\n let peer = args.peer;\n const requires: string[] = args.requires ? (typeof args.requires === \"string\" ? JSON.parse(args.requires) : args.requires) : [];\n const artifacts: Array<{ name: string; content: string }> | undefined = args.artifacts ? JSON.parse(args.artifacts) : undefined;\n\n if (!goal) return JSON.stringify({ error: \"goal is required\" });\n\n // Auto-select peer if not specified\n if (!peer && requires.length > 0) {\n const { findCapablePeer } = await import(\"../peer-transport/gossip.js\");\n const match = findCapablePeer(requires);\n if (!match) return JSON.stringify({ error: `No alive peer with capabilities: [${requires.join(\", \")}]` });\n peer = match.name;\n logDebug(TAG, `Auto-selected peer ${peer} for requires=[${requires.join(\",\")}] (load=${match.load})`);\n } else if (!peer) {\n // No peer, no requires \u2014 pick least loaded\n const { getPeerTable } = await import(\"../peer-transport/gossip.js\");\n const alive = getPeerTable().sort((a, b) => a.load - b.load);\n if (alive.length === 0) return JSON.stringify({ error: \"No alive peers available\" });\n peer = alive[0]!.name;\n logDebug(TAG, `Auto-selected least-loaded peer ${peer} (load=${alive[0]!.load})`);\n }\n\n // Validate capabilities if requires specified + explicit peer\n if (requires.length > 0 && args.peer) {\n const { getPeerTable } = await import(\"../peer-transport/gossip.js\");\n const entry = getPeerTable(true).find(p => p.name.toLowerCase() === peer!.toLowerCase());\n if (entry && !requires.every(r => entry.capabilities.includes(r))) {\n const missing = requires.filter(r => !entry.capabilities.includes(r));\n return JSON.stringify({ error: `Peer ${peer} lacks capabilities: [${missing.join(\", \")}]` });\n }\n }\n\n logDebug(TAG, `peer_delegate: peer=${peer} priority=${priority ?? \"MEDIUM\"} goal=${goal.length}ch requires=[${requires.join(\",\")}]`);\n logTrace(TAG, `peer_delegate goal: ${goal.slice(0, 500)}`);\n\n try {\n const transport = getPeerTransport();\n const { taskId: remoteTaskId, remoteSessionId } = await transport.delegateTask(peer, goal, { priority, context, artifacts });\n\n const localCardId = kanbanEnqueue(`[remote:${peer}] ${goal.slice(0, 80)}`, \"peer\", undefined, {\n type: \"remote\",\n priority: priority ?? \"MEDIUM\",\n notes: JSON.stringify({ peer, remote_task_id: remoteTaskId, remote_session_id: remoteSessionId, goal, requires }),\n });\n\n // #949: Create hollow session to track remote worker locally\n if (remoteSessionId) {\n const { spin } = await import(\"../spin.js\");\n const { getMasterUserId } = await import(\"../master-user.js\");\n spin.createHollowSession(getMasterUserId(), \"telegram\", \"W\", peer, remoteSessionId);\n }\n\n logInfo(TAG, `Delegated to ${peer}: remote#${remoteTaskId} \u2192 local#${localCardId}`);\n return JSON.stringify({ ok: true, local_card_id: localCardId, remote_task_id: remoteTaskId, remote_session_id: remoteSessionId, peer, status: \"queued\" });\n } catch (err) {\n logWarn(TAG, `peer_delegate failed: ${err instanceof Error ? err.message : String(err)}`);\n return JSON.stringify({ error: `peer_delegate failed: ${err instanceof Error ? err.message : String(err)}` });\n }\n },\n};\n\nexport const peerCheckTool: ToolDefinition = {\n name: \"peer_check\",\n description: \"Check the status of a task delegated to a remote peer. Returns status and result if complete.\",\n parameters: {\n type: \"object\",\n properties: {\n peer: { type: \"string\", description: \"Peer name\" },\n task_id: { type: \"number\", description: \"Remote task ID (from peer_delegate result)\" },\n },\n required: [\"peer\", \"task_id\"],\n },\n async execute(args: Record<string, string>): Promise<string> {\n const peer = args.peer;\n const taskId = parseInt(args.task_id ?? \"\", 10);\n if (!peer || isNaN(taskId)) return JSON.stringify({ error: \"peer and task_id are required\" });\n\n try {\n const transport = getPeerTransport();\n const result = await transport.checkTask(peer, taskId);\n return JSON.stringify({ ok: true, ...result });\n } catch (err) {\n logWarn(TAG, `peer_check failed: ${err instanceof Error ? err.message : String(err)}`);\n return JSON.stringify({ error: `peer_check failed: ${err instanceof Error ? err.message : String(err)}` });\n }\n },\n};\n\nexport const peerTerminateTool: ToolDefinition = {\n name: \"peer_terminate\",\n description: \"Cancel/terminate a task running on a remote peer.\",\n parameters: {\n type: \"object\",\n properties: {\n peer: { type: \"string\", description: \"Peer name\" },\n task_id: { type: \"number\", description: \"Remote task ID to terminate\" },\n },\n required: [\"peer\", \"task_id\"],\n },\n async execute(args: Record<string, string>): Promise<string> {\n const peer = args.peer;\n const taskId = parseInt(args.task_id ?? \"\", 10);\n if (!peer || isNaN(taskId)) return JSON.stringify({ error: \"peer and task_id are required\" });\n\n try {\n const transport = getPeerTransport();\n await transport.terminateTask(peer, taskId);\n logInfo(TAG, `Terminated remote task ${taskId} on ${peer}`);\n return JSON.stringify({ ok: true, terminated: true, peer, task_id: taskId });\n } catch (err) {\n logWarn(TAG, `peer_terminate failed: ${err instanceof Error ? err.message : String(err)}`);\n return JSON.stringify({ error: `peer_terminate failed: ${err instanceof Error ? err.message : String(err)}` });\n }\n },\n};\n\nexport function getPeerDelegationTools(): ToolDefinition[] {\n return [peerDelegateTool, peerCheckTool, peerTerminateTool];\n}\n", "/**\n * kanban-tool.ts \u2014 Agent-facing tool for managing the kanban board.\n */\n\nimport type { ToolDefinition } from \"./tool-registry.js\";\nimport { kanbanEnqueue, kanbanUpdate, kanbanList, type KanbanCard } from \"../tasks/kanban-board.js\";\n\nfunction formatCard(c: KanbanCard): string {\n const icon = c.status === \"delivered\" ? \"*\" : c.status === \"done\" ? \"*\" : c.status === \"running\" ? \"~\" : c.status === \"failed\" ? \"x\" : \"+\";\n const due = c.due_at ? ` due:${c.due_at}` : \"\";\n const lbl = c.labels ? ` [${c.labels}]` : \"\";\n const deps = c.blocked_by ? ` <- #${c.blocked_by}` : \"\";\n const tokens = c.tokens_used ? ` ${c.tokens_used} tok` : \"\";\n const source = c.type === \"remote\" ? (() => { try { return ` [${JSON.parse(c.notes ?? \"{}\").peer}]`; } catch { return \" [remote]\"; } })() : \"\";\n return `${icon} #${c.id} ${c.title} (${c.priority}/${c.status})${tokens}${source}${due}${lbl}${deps}`;\n}\n\nasync function execute(args: Record<string, string>): Promise<string> {\n const action = args.action;\n\n if (action === \"create\") {\n if (!args.title) return \"[err] title required\";\n const id = kanbanEnqueue(args.title, args.source || \"agent\", undefined, {\n priority: args.priority,\n type: args.type,\n labels: args.labels,\n due_at: args.due_at,\n parent_id: args.parent_id ? parseInt(args.parent_id, 10) : undefined,\n notes: args.notes,\n blocked_by: args.blocked_by || undefined,\n });\n return `+ Card #${id} created: \"${args.title}\"${args.blocked_by ? ` (blocked_by: ${args.blocked_by})` : \"\"}`;\n }\n\n if (action === \"update\") {\n if (!args.id) return \"[err] id required\";\n const fields: Record<string, unknown> = {};\n for (const k of [\"title\", \"status\", \"priority\", \"type\", \"labels\", \"due_at\", \"notes\", \"approval\"] as const) {\n if (args[k]) fields[k] = args[k];\n }\n if (args.parent_id) fields.parent_id = parseInt(args.parent_id, 10);\n kanbanUpdate(parseInt(args.id, 10), fields as any);\n return `* Card #${args.id} updated`;\n }\n\n if (action === \"list\") {\n const cards = kanbanList(args.status || undefined);\n if (cards.length === 0) return \"Board is empty\";\n return `Kanban Board (${cards.length}):\\n` + cards.map(formatCard).join(\"\\n\");\n }\n\n return `[err] Unknown action: ${action}. Use create | update | list`;\n}\n\nexport const kanbanTool: ToolDefinition = {\n name: \"kanban_manage\",\n description: \"Create, update, or list cards on the kanban board. Use for tracking work items, user requests, and task decomposition.\",\n parameters: {\n type: \"object\",\n properties: {\n action: { type: \"string\", description: \"create | update | list\", enum: [\"create\", \"update\", \"list\"] },\n title: { type: \"string\", description: \"Card title (required for create)\" },\n id: { type: \"string\", description: \"Card ID (required for update)\" },\n source: { type: \"string\", description: \"Who created: user | agent | cron | peer\" },\n status: { type: \"string\", description: \"New status (for update): queued | running | done | failed\" },\n priority: { type: \"string\", description: \"CRITICAL | HIGH | MEDIUM | LOW\" },\n type: { type: \"string\", description: \"Card type (task, bug, feature, research, report, etc.)\" },\n labels: { type: \"string\", description: \"Comma-separated tags\" },\n due_at: { type: \"string\", description: \"ISO deadline (e.g. 2026-06-08T12:00:00)\" },\n parent_id: { type: \"string\", description: \"Parent card ID for subtasks\" },\n notes: { type: \"string\", description: \"Additional context\" },\n blocked_by: { type: \"string\", description: \"Comma-separated card IDs this card depends on, or 'children' to wait for all child cards\" },\n approval: { type: \"string\", description: \"pending | approved | rejected\" },\n },\n required: [\"action\"],\n },\n execute,\n};\n", "/**\n * channel-tool.ts \u2014 Agent-facing tools for the communication channel (#891).\n */\n\nimport type { ToolDefinition } from \"./tool-registry.js\";\nimport { channelPost, channelRead, type ChannelMessage } from \"../tasks/kanban-channel.js\";\n\nfunction formatMsg(m: ChannelMessage): string {\n const dir = m.directive ? \" \u26A1\" : \"\";\n return `[${m.from_agent}\u2192${m.to_agent}]${dir} ${m.message} (${m.created_at})`;\n}\n\nasync function executePost(args: Record<string, string>, ctx?: { userId?: string }): Promise<string> {\n const cardId = parseInt(args.card_id ?? \"\", 10);\n if (!cardId) return \"\u274C card_id required\";\n if (!args.message) return \"\u274C message required\";\n const from = args.from || ctx?.userId || \"agent\";\n const to = args.to || \"ALL\";\n const directive = args.directive === \"true\" || args.directive === \"1\";\n const msgType = args.type || \"progress\";\n const id = channelPost(cardId, from, to, args.message, directive, msgType);\n return `\u2713 Posted #${id} to card:${cardId} [${from}\u2192${to}]`;\n}\n\nasync function executeRead(args: Record<string, string>): Promise<string> {\n const cardId = parseInt(args.card_id ?? \"\", 10);\n if (!cardId) return \"\u274C card_id required\";\n const msgs = channelRead(cardId, { since: args.since, from: args.from });\n if (msgs.length === 0) return \"No messages.\";\n return msgs.map(formatMsg).join(\"\\n\");\n}\n\nexport const channelPostTool: ToolDefinition = {\n name: \"channel_post\",\n description: \"Post a message to the project discussion channel. Keep messages short (<1000 chars). For long plans, write a file and reference the path.\",\n parameters: {\n type: \"object\",\n properties: {\n card_id: { type: \"string\", description: \"Kanban card ID this message belongs to\" },\n to: { type: \"string\", description: \"Recipient: ALL (default), Worker-01, ORC, MASTER, or peer:name\" },\n message: { type: \"string\", description: \"Short message (max 1000 chars)\" },\n directive: { type: \"string\", description: \"Set to 'true' for priority directive (Orc/master only)\" },\n type: { type: \"string\", enum: [\"progress\", \"question\", \"result\", \"error\"], description: \"Message type (default: progress)\" },\n },\n required: [\"card_id\", \"message\"],\n },\n execute: executePost,\n};\n\nexport const channelReadTool: ToolDefinition = {\n name: \"channel_read\",\n description: \"Read messages from the project discussion channel.\",\n parameters: {\n type: \"object\",\n properties: {\n card_id: { type: \"string\", description: \"Kanban card ID to read messages from\" },\n since: { type: \"string\", description: \"ISO timestamp \u2014 only messages after this time\" },\n from: { type: \"string\", description: \"Filter by sender name\" },\n },\n required: [\"card_id\"],\n },\n execute: executeRead,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["execFile", "appendFileSync", "mkdirSync", "join", "TAG", "TAG", "getMasterUserId", "TAG", "join", "mkdirSync", "audit", "appendFileSync", "execFile", "homedir", "readFileSync", "existsSync"]
7
+ }