bloby-bot 0.42.0 → 0.46.0

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 (348) hide show
  1. package/bin/cli.js +97 -0
  2. package/dist-bloby/assets/angular-html-olSuI25H.js +1 -0
  3. package/dist-bloby/assets/{angular-ts-BNEmshfa.js → angular-ts-BJPoZ_vo.js} +1 -1
  4. package/dist-bloby/assets/{apl-CD5excG6.js → apl-CyVuPSCb.js} +1 -1
  5. package/dist-bloby/assets/{astro-BsuvMd51.js → astro-CKc3-gwH.js} +1 -1
  6. package/dist-bloby/assets/{blade-BzCfsa5s.js → blade-DMAsVBaV.js} +1 -1
  7. package/dist-bloby/assets/{bloby-ChBqlrgZ.js → bloby-BnHElaWD.js} +23 -23
  8. package/dist-bloby/assets/{bsl-BODK--Fo.js → bsl-B1qbqNES.js} +1 -1
  9. package/dist-bloby/assets/c-BvB8CVo8.js +1 -0
  10. package/dist-bloby/assets/{cairo-BwpHIzLA.js → cairo-BDj8wWhy.js} +1 -1
  11. package/dist-bloby/assets/{cobol-Dvyhsqyz.js → cobol-hBjMZW-R.js} +1 -1
  12. package/dist-bloby/assets/{coffee-CyaHgmLy.js → coffee-B4OtR3w-.js} +1 -1
  13. package/dist-bloby/assets/cpp-BblbpnyR.js +1 -0
  14. package/dist-bloby/assets/{crystal-CR4Yni1K.js → crystal-x3k4USY-.js} +1 -1
  15. package/dist-bloby/assets/css-zY4NE9yA.js +1 -0
  16. package/dist-bloby/assets/{edge-CeStCG6d.js → edge-B-9TrlZC.js} +1 -1
  17. package/dist-bloby/assets/{elixir-CNfWtFyr.js → elixir-CXCzbj1r.js} +1 -1
  18. package/dist-bloby/assets/{elm-WhyRrsYH.js → elm-BdRiwmde.js} +1 -1
  19. package/dist-bloby/assets/{erb-BvJkfco6.js → erb-C9tvRzx3.js} +1 -1
  20. package/dist-bloby/assets/{erlang-CjZU-VwD.js → erlang-Bc4hQuqa.js} +1 -1
  21. package/dist-bloby/assets/{fortran-fixed-form-CLgNuKMV.js → fortran-fixed-form-B02FOYI-.js} +1 -1
  22. package/dist-bloby/assets/{fsharp-kVgJ9XJy.js → fsharp-DhdR18vN.js} +1 -1
  23. package/dist-bloby/assets/{gdresource-DDsMuL8p.js → gdresource-DgnrMPIx.js} +1 -1
  24. package/dist-bloby/assets/{git-commit-BKhxSJdF.js → git-commit-DGJi7qBD.js} +1 -1
  25. package/dist-bloby/assets/{git-rebase-C1GyNmcX.js → git-rebase-HwDSB2qJ.js} +1 -1
  26. package/dist-bloby/assets/{glimmer-js-Cl3u7vjy.js → glimmer-js-B6LF_BMd.js} +1 -1
  27. package/dist-bloby/assets/{glimmer-ts-CtPlRgiA.js → glimmer-ts-Cn42BUKe.js} +1 -1
  28. package/dist-bloby/assets/globals-BYieEOqL.js +18 -0
  29. package/dist-bloby/assets/globals-BzeCWV3t.css +2 -0
  30. package/dist-bloby/assets/glsl-CEMf-THb.js +1 -0
  31. package/dist-bloby/assets/graphql-dBCd2Czl.js +1 -0
  32. package/dist-bloby/assets/{hack-XsNdYtzr.js → hack-DDEqRjBe.js} +1 -1
  33. package/dist-bloby/assets/haml-Ck5pVAEG.js +1 -0
  34. package/dist-bloby/assets/{handlebars-Rv2-mTii.js → handlebars-g9Qe0ao2.js} +1 -1
  35. package/dist-bloby/assets/highlighted-body-OFNGDK62-B4IKFiNq.js +1 -0
  36. package/dist-bloby/assets/html-CzX0w7K_.js +1 -0
  37. package/dist-bloby/assets/{html-derivative-CNiypDIO.js → html-derivative-D-XvNBA6.js} +1 -1
  38. package/dist-bloby/assets/{http-Vgn8hmbu.js → http-qlhghEti.js} +1 -1
  39. package/dist-bloby/assets/{hurl-C_EA75yu.js → hurl-CHIKfBKk.js} +1 -1
  40. package/dist-bloby/assets/{hxml-YehGxZ3T.js → hxml-adC65L_J.js} +1 -1
  41. package/dist-bloby/assets/java-BqKEu7zh.js +1 -0
  42. package/dist-bloby/assets/javascript-CzjRtS1s.js +1 -0
  43. package/dist-bloby/assets/{jinja-BovBDArb.js → jinja-BHZt0_Dn.js} +1 -1
  44. package/dist-bloby/assets/{jison-C7UZOdoh.js → jison-TqJYWKkW.js} +1 -1
  45. package/dist-bloby/assets/json-CdFmZMJc.js +1 -0
  46. package/dist-bloby/assets/jsx-BL6Wh6Qw.js +1 -0
  47. package/dist-bloby/assets/jsx-runtime-C0W9Wf2W.js +1 -0
  48. package/dist-bloby/assets/{julia-D8hM3XBr.js → julia-CW07fy07.js} +1 -1
  49. package/dist-bloby/assets/{just-CHnwfRRG.js → just-DBcWo9WY.js} +1 -1
  50. package/dist-bloby/assets/{latex-Ccu-ZO0T.js → latex-D6lXiPTF.js} +1 -1
  51. package/dist-bloby/assets/{liquid-BRbNyfzr.js → liquid-DhYYAQ41.js} +1 -1
  52. package/dist-bloby/assets/lua-B4ezzssg.js +1 -0
  53. package/dist-bloby/assets/{marko-Both7s0f.js → marko-xtrIBdcL.js} +1 -1
  54. package/dist-bloby/assets/{mdc-7TpRllSI.js → mdc-DyZVNnwP.js} +1 -1
  55. package/dist-bloby/assets/mermaid-GHXKKRXX-32SDjrR3.js +1 -0
  56. package/dist-bloby/assets/{nextflow-C2lnptGp.js → nextflow-JEyYUlIq.js} +1 -1
  57. package/dist-bloby/assets/{nginx-1MGd6YK-.js → nginx-CGgm1VOJ.js} +1 -1
  58. package/dist-bloby/assets/{nim-CXWhMB6N.js → nim-Br7S817Z.js} +1 -1
  59. package/dist-bloby/assets/onboard-DoRN5jiz.js +1 -0
  60. package/dist-bloby/assets/{perl-s-whHxj8.js → perl-DqDX-7VG.js} +1 -1
  61. package/dist-bloby/assets/{php-KdIqqcNq.js → php-DYSqNNGJ.js} +1 -1
  62. package/dist-bloby/assets/{pug-Cj_1QUAx.js → pug-Bob3gNio.js} +1 -1
  63. package/dist-bloby/assets/{qml-BQHwZF2t.js → qml-CsMafcqN.js} +1 -1
  64. package/dist-bloby/assets/r-CGji9_vM.js +1 -0
  65. package/dist-bloby/assets/{razor-D4oLdRr2.js → razor-B4PzhaZX.js} +1 -1
  66. package/dist-bloby/assets/regexp-CvWG4lI-.js +1 -0
  67. package/dist-bloby/assets/{rst-kaCCXG10.js → rst-BXuz-2b8.js} +1 -1
  68. package/dist-bloby/assets/{ruby-DIAu88GV.js → ruby-CXP5_4kq.js} +1 -1
  69. package/dist-bloby/assets/{sas-DW2U5bKI.js → sas-Cov9PzAD.js} +1 -1
  70. package/dist-bloby/assets/scss-Efq7Dmbs.js +1 -0
  71. package/dist-bloby/assets/{shaderlab-CCgEvKkt.js → shaderlab-DZ3Lsiak.js} +1 -1
  72. package/dist-bloby/assets/shellscript-BbEstezf.js +1 -0
  73. package/dist-bloby/assets/{shellsession-vB5Hy6UU.js → shellsession-BHLVblBB.js} +1 -1
  74. package/dist-bloby/assets/{soy-BNDHXm4e.js → soy-e0u3-wIA.js} +1 -1
  75. package/dist-bloby/assets/{sparql-DH0hFmAi.js → sparql-B9c85a_o.js} +1 -1
  76. package/dist-bloby/assets/sql-CB6kO6Km.js +1 -0
  77. package/dist-bloby/assets/{stata-BHXdpuN3.js → stata-B1mLEMrz.js} +1 -1
  78. package/dist-bloby/assets/{surrealql-eiBkI2Jy.js → surrealql-BTKo2XFY.js} +1 -1
  79. package/dist-bloby/assets/{svelte-DcqzCcP6.js → svelte-B7URZ-wm.js} +1 -1
  80. package/dist-bloby/assets/{templ-DpMCsFaT.js → templ-DVRYIgGq.js} +1 -1
  81. package/dist-bloby/assets/{tex-B71AZ6Vb.js → tex-CdJ24HJj.js} +1 -1
  82. package/dist-bloby/assets/{ts-tags-CRuJWBGV.js → ts-tags-CCSbelDn.js} +1 -1
  83. package/dist-bloby/assets/tsx-DrzBggF8.js +1 -0
  84. package/dist-bloby/assets/{twig-CuSIh_aH.js → twig-Dn4ruiVl.js} +1 -1
  85. package/dist-bloby/assets/typescript-COZIw7xM.js +1 -0
  86. package/dist-bloby/assets/{vue-YbgnWnT2.js → vue-D19cWHwY.js} +1 -1
  87. package/dist-bloby/assets/{vue-html-CXsio3-X.js → vue-html-_j-KC7Cs.js} +1 -1
  88. package/dist-bloby/assets/{vue-vine-C8pVogU0.js → vue-vine-BC03MN6c.js} +1 -1
  89. package/dist-bloby/assets/xml-BlDEvPia.js +1 -0
  90. package/dist-bloby/assets/{xsl-CqzL2w2F.js → xsl-DR-zOeBm.js} +1 -1
  91. package/dist-bloby/assets/yaml-iUXljnLs.js +1 -0
  92. package/dist-bloby/bloby.html +4 -5
  93. package/dist-bloby/onboard.html +4 -5
  94. package/package.json +2 -1
  95. package/supervisor/channels/manager.ts +7 -60
  96. package/supervisor/channels/whatsapp.ts +22 -43
  97. package/supervisor/chat/bloby-main.tsx +61 -17
  98. package/supervisor/index.ts +8 -31
  99. package/worker/db.ts +0 -3
  100. package/worker/index.ts +36 -30
  101. package/worker/prompts/bloby-system-prompt.txt +44 -17
  102. package/dist-bloby/assets/angular-html-DxXh-QMA.js +0 -1
  103. package/dist-bloby/assets/c-QpHxjkb9.js +0 -1
  104. package/dist-bloby/assets/cpp-DlbkFQj0.js +0 -1
  105. package/dist-bloby/assets/css-jgrsA6xW.js +0 -1
  106. package/dist-bloby/assets/globals-DVrYk5bl.js +0 -18
  107. package/dist-bloby/assets/globals-De7_TMX7.css +0 -2
  108. package/dist-bloby/assets/glsl-Bz5r7Lln.js +0 -1
  109. package/dist-bloby/assets/graphql-IV9ZCUty.js +0 -1
  110. package/dist-bloby/assets/haml-BDRqXh7d.js +0 -1
  111. package/dist-bloby/assets/highlighted-body-OFNGDK62-Bb7Snr_m.js +0 -1
  112. package/dist-bloby/assets/html-BkYSbpwH.js +0 -1
  113. package/dist-bloby/assets/java-div3J5pm.js +0 -1
  114. package/dist-bloby/assets/javascript-D7sYfeLa.js +0 -1
  115. package/dist-bloby/assets/json-DsAnzN7U.js +0 -1
  116. package/dist-bloby/assets/jsx-CftCCFil.js +0 -1
  117. package/dist-bloby/assets/jsx-runtime-DsY8nUeV.js +0 -1
  118. package/dist-bloby/assets/lua-BcwT4KiU.js +0 -1
  119. package/dist-bloby/assets/mermaid-GHXKKRXX-B2-90bpm.js +0 -1
  120. package/dist-bloby/assets/onboard-CM9DDSYf.js +0 -1
  121. package/dist-bloby/assets/r-BW3neTZ6.js +0 -1
  122. package/dist-bloby/assets/regexp-CK2Vecnb.js +0 -1
  123. package/dist-bloby/assets/rolldown-runtime-C-57s9n3.js +0 -1
  124. package/dist-bloby/assets/scss-CpUwMEPb.js +0 -1
  125. package/dist-bloby/assets/shellscript-BhywzMlr.js +0 -1
  126. package/dist-bloby/assets/sql-D395ukne.js +0 -1
  127. package/dist-bloby/assets/tsx-CEFbrBOd.js +0 -1
  128. package/dist-bloby/assets/typescript-CV9iMaP7.js +0 -1
  129. package/dist-bloby/assets/xml-Zmzpltp0.js +0 -1
  130. package/dist-bloby/assets/yaml-Dc_auW1I.js +0 -1
  131. /package/dist-bloby/assets/{abap--vzi7Rxy.js → abap-smLpETzL.js} +0 -0
  132. /package/dist-bloby/assets/{actionscript-3-CV21uODD.js → actionscript-3-o-aRvjY5.js} +0 -0
  133. /package/dist-bloby/assets/{ada-DpXSEmbw.js → ada-D5RRX1i4.js} +0 -0
  134. /package/dist-bloby/assets/{andromeeda-C1V0Cb0M.js → andromeeda-N4z3YzmR.js} +0 -0
  135. /package/dist-bloby/assets/{apache-CRmVjs8c.js → apache-DttKlSqg.js} +0 -0
  136. /package/dist-bloby/assets/{apex-DIIc4r7E.js → apex-DL7j-a2n.js} +0 -0
  137. /package/dist-bloby/assets/{applescript-DMX6NGuU.js → applescript-DCbL_2FX.js} +0 -0
  138. /package/dist-bloby/assets/{ara-3SArX2Zn.js → ara-DqheWJCe.js} +0 -0
  139. /package/dist-bloby/assets/{asciidoc-CnVFjb7X.js → asciidoc-BH2sf2K4.js} +0 -0
  140. /package/dist-bloby/assets/{asm-Cb-CgaBD.js → asm-rfjOMz3U.js} +0 -0
  141. /package/dist-bloby/assets/{aurora-x-CjvoFyi0.js → aurora-x-CND-FqEb.js} +0 -0
  142. /package/dist-bloby/assets/{awk-BYjsWVhV.js → awk-CMV5n9Z7.js} +0 -0
  143. /package/dist-bloby/assets/{ayu-dark-C4UVdT_g.js → ayu-dark-on7xzq_B.js} +0 -0
  144. /package/dist-bloby/assets/{ayu-light-CFJ-dST-.js → ayu-light-DnGeGGc2.js} +0 -0
  145. /package/dist-bloby/assets/{ayu-mirage-BxM9D2Mi.js → ayu-mirage-DG3LlYC_.js} +0 -0
  146. /package/dist-bloby/assets/{ballerina-BsKCUtAm.js → ballerina-BjMqJjlr.js} +0 -0
  147. /package/dist-bloby/assets/{bat-CJlQOahT.js → bat-BaVbo_qw.js} +0 -0
  148. /package/dist-bloby/assets/{beancount-Cyf6Xlzd.js → beancount-DBt5Mbc_.js} +0 -0
  149. /package/dist-bloby/assets/{berry-DHYmFnza.js → berry-Cyjuxiss.js} +0 -0
  150. /package/dist-bloby/assets/{bibtex-BUB9btZd.js → bibtex-BV_0nsPq.js} +0 -0
  151. /package/dist-bloby/assets/{bicep-CNVX4dQj.js → bicep-C2gEwu4J.js} +0 -0
  152. /package/dist-bloby/assets/{bird2-LZP25z1s.js → bird2-BRyaEJd0.js} +0 -0
  153. /package/dist-bloby/assets/{c3-BI41OB2W.js → c3-DTTbp5N2.js} +0 -0
  154. /package/dist-bloby/assets/{cadence-BDnzkZFt.js → cadence-CPz83cmI.js} +0 -0
  155. /package/dist-bloby/assets/{catppuccin-frappe-DpT1lCYX.js → catppuccin-frappe-Dr22sraq.js} +0 -0
  156. /package/dist-bloby/assets/{catppuccin-latte-qMMse1WJ.js → catppuccin-latte-C57EeX8c.js} +0 -0
  157. /package/dist-bloby/assets/{catppuccin-macchiato-DMu0Ac9B.js → catppuccin-macchiato-CpheI4uD.js} +0 -0
  158. /package/dist-bloby/assets/{catppuccin-mocha-DicTaD9V.js → catppuccin-mocha-D8Lmdks_.js} +0 -0
  159. /package/dist-bloby/assets/{clarity-CPz-yzAn.js → clarity-CFJ2Yc3q.js} +0 -0
  160. /package/dist-bloby/assets/{clojure-BxJLFKTj.js → clojure-6R01QgJC.js} +0 -0
  161. /package/dist-bloby/assets/{cmake-BmC4o4J9.js → cmake-D5rSbMir.js} +0 -0
  162. /package/dist-bloby/assets/{codeowners-BPHDuybI.js → codeowners-_3A-ClkN.js} +0 -0
  163. /package/dist-bloby/assets/{codeql-DYWyWzRY.js → codeql-DlIhJTR7.js} +0 -0
  164. /package/dist-bloby/assets/{common-lisp-CsDdrwfa.js → common-lisp-BvQzz173.js} +0 -0
  165. /package/dist-bloby/assets/{coq-BZNwxllS.js → coq-DTNXReIC.js} +0 -0
  166. /package/dist-bloby/assets/{csharp-BLhQzhUA.js → csharp-BDKQY1K9.js} +0 -0
  167. /package/dist-bloby/assets/{csv-DPc9UZFt.js → csv-DNUpVBxl.js} +0 -0
  168. /package/dist-bloby/assets/{cue-Bat8Mt8Y.js → cue-DDdBc2s3.js} +0 -0
  169. /package/dist-bloby/assets/{cypher-CTnWkM4Y.js → cypher-CguaznO2.js} +0 -0
  170. /package/dist-bloby/assets/{d-CccbtpLU.js → d-CHcoyjv3.js} +0 -0
  171. /package/dist-bloby/assets/{dark-plus-CKh7uIvz.js → dark-plus-CqeW_0kH.js} +0 -0
  172. /package/dist-bloby/assets/{dart-SbRHwU1n.js → dart-RM3aRphk.js} +0 -0
  173. /package/dist-bloby/assets/{dax-vVKSTwd9.js → dax-nbnY1d79.js} +0 -0
  174. /package/dist-bloby/assets/{desktop-rdWGepy4.js → desktop-BD76cvxT.js} +0 -0
  175. /package/dist-bloby/assets/{diff-G5H-0DNT.js → diff-CdkWtnkL.js} +0 -0
  176. /package/dist-bloby/assets/{docker-CC20slQp.js → docker-ZyPHc6zB.js} +0 -0
  177. /package/dist-bloby/assets/{dotenv-C36c6TdP.js → dotenv-BdJZEwA6.js} +0 -0
  178. /package/dist-bloby/assets/{dracula-nNMQZYa7.js → dracula-CtqCPLGa.js} +0 -0
  179. /package/dist-bloby/assets/{dracula-soft-BPmUsSlJ.js → dracula-soft-DmBpwRAy.js} +0 -0
  180. /package/dist-bloby/assets/{dream-maker-DleGc9Hy.js → dream-maker-BJL4qlg3.js} +0 -0
  181. /package/dist-bloby/assets/{emacs-lisp-D_QlcMHs.js → emacs-lisp-_LyYa2Ky.js} +0 -0
  182. /package/dist-bloby/assets/{everforest-dark-FkVvIMUl.js → everforest-dark-CrbyKk4n.js} +0 -0
  183. /package/dist-bloby/assets/{everforest-light-d3V1wTAd.js → everforest-light-DRbSh8Tm.js} +0 -0
  184. /package/dist-bloby/assets/{fennel-BEssPROc.js → fennel-CC2BkRsS.js} +0 -0
  185. /package/dist-bloby/assets/{fish-Cz5yLEyJ.js → fish-D2ZCzqcE.js} +0 -0
  186. /package/dist-bloby/assets/{fluent-TGO8KajN.js → fluent-DKAm3m7q.js} +0 -0
  187. /package/dist-bloby/assets/{fortran-free-form-CHQXX5JB.js → fortran-free-form-BPTf0lbT.js} +0 -0
  188. /package/dist-bloby/assets/{gdscript-DBkVGsC6.js → gdscript-CsadCSaZ.js} +0 -0
  189. /package/dist-bloby/assets/{gdshader-CWQhZP7Q.js → gdshader-PfnN_8tR.js} +0 -0
  190. /package/dist-bloby/assets/{genie-7iw14YxB.js → genie-Bj-orPAV.js} +0 -0
  191. /package/dist-bloby/assets/{gherkin-D4AlAQSH.js → gherkin-COVWpJ-Q.js} +0 -0
  192. /package/dist-bloby/assets/{github-dark-default-Cr5Q59Ad.js → github-dark-default-DX3IG_X0.js} +0 -0
  193. /package/dist-bloby/assets/{github-dark-dimmed-WEORr92a.js → github-dark-dimmed-CH6p_7ez.js} +0 -0
  194. /package/dist-bloby/assets/{github-dark-high-contrast-uM2plAzl.js → github-dark-high-contrast-Bg2sSao5.js} +0 -0
  195. /package/dist-bloby/assets/{github-dark-CpBni1SQ.js → github-dark-ipGuFGYC.js} +0 -0
  196. /package/dist-bloby/assets/{github-light-BROm54vS.js → github-light-BxjqOQl0.js} +0 -0
  197. /package/dist-bloby/assets/{github-light-default-jSwgX00f.js → github-light-default-DwpDd1IQ.js} +0 -0
  198. /package/dist-bloby/assets/{github-light-high-contrast-Bp9ESXtp.js → github-light-high-contrast-C0QeixPf.js} +0 -0
  199. /package/dist-bloby/assets/{gleam-D1LXnIj0.js → gleam-BF2NigGj.js} +0 -0
  200. /package/dist-bloby/assets/{gn-CReOiE5m.js → gn-CMIt9roj.js} +0 -0
  201. /package/dist-bloby/assets/{gnuplot-DufViamc.js → gnuplot-DgWlRTEj.js} +0 -0
  202. /package/dist-bloby/assets/{go-DC_Zm44P.js → go-DLnOLj8q.js} +0 -0
  203. /package/dist-bloby/assets/{groovy-DEGDVBi0.js → groovy-B9qLWIkE.js} +0 -0
  204. /package/dist-bloby/assets/{gruvbox-dark-hard-C-zANgxR.js → gruvbox-dark-hard-BIMX9ePb.js} +0 -0
  205. /package/dist-bloby/assets/{gruvbox-dark-medium-DY7Z6TBK.js → gruvbox-dark-medium-DxuwyVzM.js} +0 -0
  206. /package/dist-bloby/assets/{gruvbox-dark-soft-Bpj6owGh.js → gruvbox-dark-soft-ba2fjht0.js} +0 -0
  207. /package/dist-bloby/assets/{gruvbox-light-hard-DVwTvHam.js → gruvbox-light-hard-DAJK2PqC.js} +0 -0
  208. /package/dist-bloby/assets/{gruvbox-light-medium-98PeoD5Y.js → gruvbox-light-medium-WRifDAJD.js} +0 -0
  209. /package/dist-bloby/assets/{gruvbox-light-soft-BHI2PZTB.js → gruvbox-light-soft-B0dBOoVB.js} +0 -0
  210. /package/dist-bloby/assets/{haskell-B-K-GoPf.js → haskell-BaGpmm_c.js} +0 -0
  211. /package/dist-bloby/assets/{haxe-md5t_Y_E.js → haxe-DfXTCEOz.js} +0 -0
  212. /package/dist-bloby/assets/{hcl-qSvp9jTg.js → hcl-CbCtpSbi.js} +0 -0
  213. /package/dist-bloby/assets/{hjson-BNeV6JDA.js → hjson-_4-w-pHU.js} +0 -0
  214. /package/dist-bloby/assets/{hlsl-CFf5czm3.js → hlsl-DpuYn7pp.js} +0 -0
  215. /package/dist-bloby/assets/{horizon-C4a2pCDo.js → horizon-C5RtD1fY.js} +0 -0
  216. /package/dist-bloby/assets/{horizon-bright-Bgpx-0aF.js → horizon-bright-pEOice34.js} +0 -0
  217. /package/dist-bloby/assets/{houston-BZHNDhe5.js → houston-A0zg9vNP.js} +0 -0
  218. /package/dist-bloby/assets/{hy-hI-CUgFt.js → hy-t9zDXBje.js} +0 -0
  219. /package/dist-bloby/assets/{imba-Dr5pZl3x.js → imba-Bxu-TDfw.js} +0 -0
  220. /package/dist-bloby/assets/{ini-KxzJ-qxg.js → ini-D-v34c8N.js} +0 -0
  221. /package/dist-bloby/assets/{json5-SRM7tKmT.js → json5-D0XL1D5m.js} +0 -0
  222. /package/dist-bloby/assets/{jsonc-Cix1XnqC.js → jsonc-BBgf3TX3.js} +0 -0
  223. /package/dist-bloby/assets/{jsonl-BzKwo-fD.js → jsonl-KrKLbtB7.js} +0 -0
  224. /package/dist-bloby/assets/{jsonnet-DaiLv8or.js → jsonnet-B2ZwWMOt.js} +0 -0
  225. /package/dist-bloby/assets/{jssm-B1pV58QJ.js → jssm-ByRpI9-B.js} +0 -0
  226. /package/dist-bloby/assets/{kanagawa-dragon-BihvT_N-.js → kanagawa-dragon-CtPmcCMp.js} +0 -0
  227. /package/dist-bloby/assets/{kanagawa-lotus-DQN_bzSt.js → kanagawa-lotus-DpOXEGCa.js} +0 -0
  228. /package/dist-bloby/assets/{kanagawa-wave-Bvz_F3hD.js → kanagawa-wave-CLVCyc-n.js} +0 -0
  229. /package/dist-bloby/assets/{kdl-DupMG4Bk.js → kdl-6FPPEH4H.js} +0 -0
  230. /package/dist-bloby/assets/{kotlin-rOGI_fXV.js → kotlin-D4L3Nd2D.js} +0 -0
  231. /package/dist-bloby/assets/{kusto-CHXnQR8L.js → kusto-D-mmc07O.js} +0 -0
  232. /package/dist-bloby/assets/{laserwave-CPMyzJF3.js → laserwave-7fEj4XGb.js} +0 -0
  233. /package/dist-bloby/assets/{lean-B76KugVy.js → lean-BMVMuP2E.js} +0 -0
  234. /package/dist-bloby/assets/{less-DwUMKQAG.js → less-C95PyOu0.js} +0 -0
  235. /package/dist-bloby/assets/{light-plus-C6sdUQiS.js → light-plus-DHI2dh3p.js} +0 -0
  236. /package/dist-bloby/assets/{llvm-DumY6MCH.js → llvm-Dy3qORTl.js} +0 -0
  237. /package/dist-bloby/assets/{log-DdP6k-FU.js → log-BQop7fzg.js} +0 -0
  238. /package/dist-bloby/assets/{logo-Cx0gX691.js → logo-DKtnYmrp.js} +0 -0
  239. /package/dist-bloby/assets/{luau-CI4wJBxI.js → luau-Dha4KG0q.js} +0 -0
  240. /package/dist-bloby/assets/{make-BlyBJiAs.js → make-DfmS6buu.js} +0 -0
  241. /package/dist-bloby/assets/{markdown-BFgBvytj.js → markdown-BaI9LyM4.js} +0 -0
  242. /package/dist-bloby/assets/{material-theme-CyGvAAeY.js → material-theme-Dm6ETY8i.js} +0 -0
  243. /package/dist-bloby/assets/{material-theme-darker-DJAOSarR.js → material-theme-darker-BeyjmM5Z.js} +0 -0
  244. /package/dist-bloby/assets/{material-theme-lighter-Cb7t96j2.js → material-theme-lighter-CCOYYzKL.js} +0 -0
  245. /package/dist-bloby/assets/{material-theme-ocean-EZZ55_HD.js → material-theme-ocean-CUtPiiX3.js} +0 -0
  246. /package/dist-bloby/assets/{material-theme-palenight-DtmMSfya.js → material-theme-palenight-2L4zMwIM.js} +0 -0
  247. /package/dist-bloby/assets/{matlab-BFLobVcp.js → matlab-BT79Cq_j.js} +0 -0
  248. /package/dist-bloby/assets/{mdx-Baux4qlv.js → mdx-CxGBwLNt.js} +0 -0
  249. /package/dist-bloby/assets/{mermaid-DHr7T0Rt.js → mermaid-DLf3axBN.js} +0 -0
  250. /package/dist-bloby/assets/{min-dark-C9N1U4-e.js → min-dark-B8TUPGHg.js} +0 -0
  251. /package/dist-bloby/assets/{min-light-Ce9oxBvH.js → min-light-BDOoBxcA.js} +0 -0
  252. /package/dist-bloby/assets/{mipsasm-Cgb1v7yV.js → mipsasm-DXuU_0cI.js} +0 -0
  253. /package/dist-bloby/assets/{mojo-BnTBKscO.js → mojo-1Omp2pIo.js} +0 -0
  254. /package/dist-bloby/assets/{monokai-BGD_YBH-.js → monokai-E_VBmXGZ.js} +0 -0
  255. /package/dist-bloby/assets/{moonbit-HXw0ZM4h.js → moonbit-DZzq699o.js} +0 -0
  256. /package/dist-bloby/assets/{move-DG2efXqI.js → move-DxDAOJVd.js} +0 -0
  257. /package/dist-bloby/assets/{narrat-BSasSB5t.js → narrat-CxDcPPb9.js} +0 -0
  258. /package/dist-bloby/assets/{nextflow-groovy-DXLl8k8E.js → nextflow-groovy-wvmJO4hi.js} +0 -0
  259. /package/dist-bloby/assets/{night-owl-DxqNTXDa.js → night-owl-DefhalNX.js} +0 -0
  260. /package/dist-bloby/assets/{night-owl-light-MPn8GCyh.js → night-owl-light-byb3AbEn.js} +0 -0
  261. /package/dist-bloby/assets/{nix-BpnttlWr.js → nix-DsFTDHWT.js} +0 -0
  262. /package/dist-bloby/assets/{nord-Mt6M_qHE.js → nord-D5rQzHT-.js} +0 -0
  263. /package/dist-bloby/assets/{nushell-CS7Mvg-G.js → nushell-BQ_rO0AM.js} +0 -0
  264. /package/dist-bloby/assets/{objective-c-U4EuJXJs.js → objective-c-BMq6JT_m.js} +0 -0
  265. /package/dist-bloby/assets/{objective-cpp-CE_PrXRW.js → objective-cpp-DRwojuGv.js} +0 -0
  266. /package/dist-bloby/assets/{ocaml-ZsxDKzyv.js → ocaml-e4_gKO6E.js} +0 -0
  267. /package/dist-bloby/assets/{odin-CDoDiNYU.js → odin-mdTPwYOg.js} +0 -0
  268. /package/dist-bloby/assets/{one-dark-pro-B9P_I1yh.js → one-dark-pro-DxXww9jg.js} +0 -0
  269. /package/dist-bloby/assets/{one-light-Cv3j6GXq.js → one-light-D9c03w7t.js} +0 -0
  270. /package/dist-bloby/assets/{openscad-CfJwW9dY.js → openscad-D2aTdNfr.js} +0 -0
  271. /package/dist-bloby/assets/{pascal-CjE0UTC7.js → pascal-D4n_G8vj.js} +0 -0
  272. /package/dist-bloby/assets/{pkl-BN6EkHr9.js → pkl-DcjhAp0L.js} +0 -0
  273. /package/dist-bloby/assets/{plastic-BCnZnfMk.js → plastic-uOsw7z1x.js} +0 -0
  274. /package/dist-bloby/assets/{plsql-1LW-CqWM.js → plsql-BSy3Ag0J.js} +0 -0
  275. /package/dist-bloby/assets/{po-Cf5hRC9x.js → po-Be96RYkA.js} +0 -0
  276. /package/dist-bloby/assets/{poimandres-B_zC30Vt.js → poimandres-CyO4HORD.js} +0 -0
  277. /package/dist-bloby/assets/{polar-S6fWkEw8.js → polar-BmhMKWum.js} +0 -0
  278. /package/dist-bloby/assets/{postcss-cZXfRCsF.js → postcss-BTQso3H9.js} +0 -0
  279. /package/dist-bloby/assets/{powerquery-CoRQQdNP.js → powerquery-DVyQv3M2.js} +0 -0
  280. /package/dist-bloby/assets/{powershell-B2VxwRch.js → powershell-BmtCGJVD.js} +0 -0
  281. /package/dist-bloby/assets/{prisma-sLrt38jj.js → prisma-CCFA9rEj.js} +0 -0
  282. /package/dist-bloby/assets/{prolog-CL99toUJ.js → prolog-DWGEEo78.js} +0 -0
  283. /package/dist-bloby/assets/{proto-CtiBQJNn.js → proto-C3eop1kM.js} +0 -0
  284. /package/dist-bloby/assets/{puppet-BlbpxWq2.js → puppet-C0_7Nv5A.js} +0 -0
  285. /package/dist-bloby/assets/{purescript-DPcVkoDV.js → purescript-Bv-B8yRw.js} +0 -0
  286. /package/dist-bloby/assets/{python-BLpCXkJ6.js → python-CKg5r0C3.js} +0 -0
  287. /package/dist-bloby/assets/{qmldir-BcwbwUc8.js → qmldir-Cqfb4Lox.js} +0 -0
  288. /package/dist-bloby/assets/{qss-erDfnnzG.js → qss-Csho9BH8.js} +0 -0
  289. /package/dist-bloby/assets/{racket-Dch6VQku.js → racket-D8-uWeQH.js} +0 -0
  290. /package/dist-bloby/assets/{raku-Db8mfsiE.js → raku-Cj4JSa8p.js} +0 -0
  291. /package/dist-bloby/assets/{red-DWyyM82l.js → red-z4H4llUY.js} +0 -0
  292. /package/dist-bloby/assets/{reg-3F9yjO5J.js → reg-DXGFiJSl.js} +0 -0
  293. /package/dist-bloby/assets/{rel-CQq8nxxL.js → rel-CunnVTBK.js} +0 -0
  294. /package/dist-bloby/assets/{riscv-CsUwotvK.js → riscv-C8BcOCkS.js} +0 -0
  295. /package/dist-bloby/assets/{ron-BwlS4rWu.js → ron-DiDyR9oa.js} +0 -0
  296. /package/dist-bloby/assets/{rose-pine-DEj8gOox.js → rose-pine-BADquuIH.js} +0 -0
  297. /package/dist-bloby/assets/{rose-pine-dawn-DjarqQ2I.js → rose-pine-dawn-BLcEeBoh.js} +0 -0
  298. /package/dist-bloby/assets/{rose-pine-moon-D7ffkR_D.js → rose-pine-moon-BK_tLY1Y.js} +0 -0
  299. /package/dist-bloby/assets/{rosmsg-BmwwVMq5.js → rosmsg-CHmL1Uyj.js} +0 -0
  300. /package/dist-bloby/assets/{rust-DsIgDjpj.js → rust-DjJFInu3.js} +0 -0
  301. /package/dist-bloby/assets/{sass-CkIFK_bT.js → sass-D3xZ5o-v.js} +0 -0
  302. /package/dist-bloby/assets/{scala-C0TSxhxD.js → scala-B0IRml5w.js} +0 -0
  303. /package/dist-bloby/assets/{scheme-e-5nJ58U.js → scheme-BhwcV3Av.js} +0 -0
  304. /package/dist-bloby/assets/{sdbl-DOe8Nral.js → sdbl-BmWYR-pI.js} +0 -0
  305. /package/dist-bloby/assets/{slack-dark-CClHvLju.js → slack-dark-DOnVms5P.js} +0 -0
  306. /package/dist-bloby/assets/{slack-ochin-DwCpSVBI.js → slack-ochin-DcRTft4q.js} +0 -0
  307. /package/dist-bloby/assets/{smalltalk-fjkC4HKG.js → smalltalk-DVQuUMII.js} +0 -0
  308. /package/dist-bloby/assets/{snazzy-light-2nD216w0.js → snazzy-light-x9CLJ1W9.js} +0 -0
  309. /package/dist-bloby/assets/{solarized-dark-BkxMSETv.js → solarized-dark-BB1sh-pe.js} +0 -0
  310. /package/dist-bloby/assets/{solarized-light-BScqQ1C4.js → solarized-light-9-RPS998.js} +0 -0
  311. /package/dist-bloby/assets/{solidity-DbOxJfAY.js → solidity-gQ4WXILB.js} +0 -0
  312. /package/dist-bloby/assets/{splunk-BW0l10cw.js → splunk-OB48_RcD.js} +0 -0
  313. /package/dist-bloby/assets/{ssh-config-XN7RWvZy.js → ssh-config-DA9YMRGV.js} +0 -0
  314. /package/dist-bloby/assets/{stylus-D69is74S.js → stylus-sKwvsUaC.js} +0 -0
  315. /package/dist-bloby/assets/{swift-CqNHAbQB.js → swift-C72NbAtg.js} +0 -0
  316. /package/dist-bloby/assets/{synthwave-84-Ct3Np89a.js → synthwave-84-eJ9uRN_S.js} +0 -0
  317. /package/dist-bloby/assets/{system-verilog-CHbvBf8h.js → system-verilog-CnWMF7Nq.js} +0 -0
  318. /package/dist-bloby/assets/{systemd-BBC3Z_R4.js → systemd-DMzItW5N.js} +0 -0
  319. /package/dist-bloby/assets/{talonscript-DhYQB2ic.js → talonscript-DopQCWDL.js} +0 -0
  320. /package/dist-bloby/assets/{tasl-CNtai3BH.js → tasl-C28SYKbq.js} +0 -0
  321. /package/dist-bloby/assets/{tcl-DFzyQSXW.js → tcl-DHq7zmoF.js} +0 -0
  322. /package/dist-bloby/assets/{terraform-BijD6Khb.js → terraform-CogS1YKX.js} +0 -0
  323. /package/dist-bloby/assets/{tokyo-night-Dd5BGAxh.js → tokyo-night-B9N7LyrF.js} +0 -0
  324. /package/dist-bloby/assets/{toml-DZofdujH.js → toml-BH_iPsgK.js} +0 -0
  325. /package/dist-bloby/assets/{tsv-DOp6g7sz.js → tsv-BIkdBZX1.js} +0 -0
  326. /package/dist-bloby/assets/{turtle-BKcRDROw.js → turtle-CqNXyJWZ.js} +0 -0
  327. /package/dist-bloby/assets/{typespec-Mmt3-2Cw.js → typespec-CQ9LYD_e.js} +0 -0
  328. /package/dist-bloby/assets/{typst-CndOdNo_.js → typst-T-Fsk-Sv.js} +0 -0
  329. /package/dist-bloby/assets/{v-DjlZIA0C.js → v-BhMEOw9x.js} +0 -0
  330. /package/dist-bloby/assets/{vala-C5Nm5NXo.js → vala-DzajMnwt.js} +0 -0
  331. /package/dist-bloby/assets/{vb-zZeWbE2_.js → vb-7Xr8dEYW.js} +0 -0
  332. /package/dist-bloby/assets/{verilog-CyZIVfoz.js → verilog-AvXtwZir.js} +0 -0
  333. /package/dist-bloby/assets/{vesper-B0BMGbco.js → vesper-CtgQQ2sf.js} +0 -0
  334. /package/dist-bloby/assets/{vhdl-DH1mJdjZ.js → vhdl-BHu0zg1P.js} +0 -0
  335. /package/dist-bloby/assets/{viml-e-oP1x-l.js → viml-Di0QpLfC.js} +0 -0
  336. /package/dist-bloby/assets/{vitesse-black-BRAUsA4Q.js → vitesse-black-jXdfyqgD.js} +0 -0
  337. /package/dist-bloby/assets/{vitesse-dark-Dyg71HnT.js → vitesse-dark-B88PxG1r.js} +0 -0
  338. /package/dist-bloby/assets/{vitesse-light-BJKZKqvd.js → vitesse-light-BXxZh2iV.js} +0 -0
  339. /package/dist-bloby/assets/{vyper-BRPzCrki.js → vyper-C3R5yXgx.js} +0 -0
  340. /package/dist-bloby/assets/{wasm-Drz0Uqci.js → wasm-CEUrWlVz.js} +0 -0
  341. /package/dist-bloby/assets/{wasm-DYMpDie-.js → wasm-Chsuwt1A.js} +0 -0
  342. /package/dist-bloby/assets/{wenyan-BiJ0NePu.js → wenyan-BonVcr2i.js} +0 -0
  343. /package/dist-bloby/assets/{wgsl-CNe_V6SG.js → wgsl-D59WYmNq.js} +0 -0
  344. /package/dist-bloby/assets/{wikitext-DZrjZKWn.js → wikitext-ariTI2Wk.js} +0 -0
  345. /package/dist-bloby/assets/{wit-BUTESHa8.js → wit-EA4fa3Dt.js} +0 -0
  346. /package/dist-bloby/assets/{wolfram-COEZldPx.js → wolfram-DDp7LhyU.js} +0 -0
  347. /package/dist-bloby/assets/{zenscript-DThCxjUC.js → zenscript-4WaROUyc.js} +0 -0
  348. /package/dist-bloby/assets/{zig-Bu6QWpR2.js → zig-CJoLJGwV.js} +0 -0
@@ -0,0 +1 @@
1
+ import{o as e}from"./jsx-runtime-C0W9Wf2W.js";import{t}from"./java-BqKEu7zh.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
@@ -1 +1 @@
1
- import{t as e}from"./xml-Zmzpltp0.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
1
+ import{t as e}from"./xml-BlDEvPia.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
@@ -0,0 +1 @@
1
+ import{o as e}from"./jsx-runtime-C0W9Wf2W.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
@@ -4,11 +4,10 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content" />
6
6
  <title>Bloby Chat</title>
7
- <script type="module" crossorigin src="/bloby/assets/bloby-ChBqlrgZ.js"></script>
8
- <link rel="modulepreload" crossorigin href="/bloby/assets/rolldown-runtime-C-57s9n3.js">
9
- <link rel="modulepreload" crossorigin href="/bloby/assets/jsx-runtime-DsY8nUeV.js">
10
- <link rel="modulepreload" crossorigin href="/bloby/assets/globals-DVrYk5bl.js">
11
- <link rel="stylesheet" crossorigin href="/bloby/assets/globals-De7_TMX7.css">
7
+ <script type="module" crossorigin src="/bloby/assets/bloby-BnHElaWD.js"></script>
8
+ <link rel="modulepreload" crossorigin href="/bloby/assets/jsx-runtime-C0W9Wf2W.js">
9
+ <link rel="modulepreload" crossorigin href="/bloby/assets/globals-BYieEOqL.js">
10
+ <link rel="stylesheet" crossorigin href="/bloby/assets/globals-BzeCWV3t.css">
12
11
  <link rel="stylesheet" crossorigin href="/bloby/assets/bloby-DkK0ymA2.css">
13
12
  </head>
14
13
  <body class="bg-background text-foreground">
@@ -4,11 +4,10 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content" />
6
6
  <title>Bloby Setup</title>
7
- <script type="module" crossorigin src="/bloby/assets/onboard-CM9DDSYf.js"></script>
8
- <link rel="modulepreload" crossorigin href="/bloby/assets/rolldown-runtime-C-57s9n3.js">
9
- <link rel="modulepreload" crossorigin href="/bloby/assets/jsx-runtime-DsY8nUeV.js">
10
- <link rel="modulepreload" crossorigin href="/bloby/assets/globals-DVrYk5bl.js">
11
- <link rel="stylesheet" crossorigin href="/bloby/assets/globals-De7_TMX7.css">
7
+ <script type="module" crossorigin src="/bloby/assets/onboard-DoRN5jiz.js"></script>
8
+ <link rel="modulepreload" crossorigin href="/bloby/assets/jsx-runtime-C0W9Wf2W.js">
9
+ <link rel="modulepreload" crossorigin href="/bloby/assets/globals-BYieEOqL.js">
10
+ <link rel="stylesheet" crossorigin href="/bloby/assets/globals-BzeCWV3t.css">
12
11
  </head>
13
12
  <body class="bg-background text-foreground">
14
13
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bloby-bot",
3
- "version": "0.42.0",
3
+ "version": "0.46.0",
4
4
  "releaseNotes": [
5
5
  "1. # voice note (PTT bubble)",
6
6
  "2. # audio file + caption",
@@ -87,6 +87,7 @@
87
87
  "vite": "^8.0.3",
88
88
  "web-push": "^3.6.7",
89
89
  "ws": "^8.19.0",
90
+ "x402-fetch": "^1.2.0",
90
91
  "zustand": "^5.0.11"
91
92
  },
92
93
  "devDependencies": {
@@ -116,7 +116,6 @@ export class ChannelManager {
116
116
  },
117
117
  (status) => this.handleStatusChange(status),
118
118
  (audioBase64) => this.transcribeAudio(audioBase64),
119
- (fromMe, isSelfChat, isGroup) => this.shouldProcessWhatsAppAudio(fromMe, isSelfChat, isGroup),
120
119
  );
121
120
  this.providers.set('whatsapp', whatsapp);
122
121
 
@@ -141,7 +140,6 @@ export class ChannelManager {
141
140
  },
142
141
  (status) => this.handleStatusChange(status),
143
142
  (audioBase64) => this.transcribeAudio(audioBase64),
144
- (fromMe, isSelfChat, isGroup) => this.shouldProcessWhatsAppAudio(fromMe, isSelfChat, isGroup),
145
143
  );
146
144
  this.providers.set('whatsapp', whatsapp);
147
145
  provider = whatsapp;
@@ -421,35 +419,6 @@ export class ChannelManager {
421
419
  return config.channels?.[channel];
422
420
  }
423
421
 
424
- /** Decide whether an inbound WhatsApp audio is worth transcribing.
425
- * Mirrors the gates in handleInboundMessage so we don't burn Whisper calls
426
- * (or, worse, leak the bot via "Whisper not enabled" replies) on messages
427
- * that would be filtered out anyway.
428
- *
429
- * Audio carries no `@bloby` text trigger, so in assistant mode we only
430
- * transcribe when the audio is admin's self-chat command. */
431
- private shouldProcessWhatsAppAudio(fromMe: boolean, isSelfChat: boolean, isGroup: boolean): boolean {
432
- const channelConfig = this.getChannelConfig('whatsapp');
433
- if (!channelConfig) return false;
434
-
435
- const mode = channelConfig.mode || 'channel';
436
-
437
- // Group gating mirrors handleInboundMessage.
438
- if (isGroup) {
439
- if (mode === 'channel') return false;
440
- if (!channelConfig.allowGroups) return false;
441
- }
442
-
443
- if (mode === 'channel') return fromMe && isSelfChat;
444
- if (mode === 'assistant') return fromMe && isSelfChat;
445
- if (mode === 'business') {
446
- // Outbound non-self-chat messages are filtered out — same as handleInboundMessage.
447
- if (fromMe && !isSelfChat) return false;
448
- return true;
449
- }
450
- return false;
451
- }
452
-
453
422
  /** Handle an incoming message from any channel — debounces rapid messages from the same sender.
454
423
  *
455
424
  * Per-mode behavior is decided here. To add a new mode: extend the gating block below
@@ -669,25 +638,14 @@ export class ChannelManager {
669
638
  const { workerApi, broadcastBloby, getModel } = this.opts;
670
639
  const model = getModel();
671
640
 
672
- // Get or create conversation (shared with chat for mirroring).
673
- // The current_conversation setting can desync from the DB (e.g. a chat-UI
674
- // re-mount writing back a stale cached id, or a conv that was never
675
- // persisted in the first place). Verify it actually exists before using it,
676
- // otherwise we'd push messages into a ghost conv and FK-fail on every write.
641
+ // Get or create conversation (shared with chat for mirroring)
677
642
  let convId: string | undefined;
678
643
  try {
679
644
  const ctx = await workerApi('/api/context/current');
680
645
  if (ctx.conversationId) {
681
- const verify = await workerApi(`/api/conversations/${ctx.conversationId}/exists`);
682
- if (verify?.exists) {
683
- convId = ctx.conversationId;
684
- } else {
685
- log.warn(`[channels] current_conversation=${ctx.conversationId} is stale (no DB row) — creating fresh`);
686
- }
687
- }
688
- if (!convId) {
646
+ convId = ctx.conversationId;
647
+ } else {
689
648
  const conv = await workerApi('/api/conversations', 'POST', { title: 'WhatsApp', model });
690
- if (!conv?.id) throw new Error(`POST /api/conversations returned no id: ${JSON.stringify(conv)}`);
691
649
  convId = conv.id;
692
650
  await workerApi('/api/context/set', 'POST', { conversationId: convId });
693
651
  }
@@ -699,20 +657,15 @@ export class ChannelManager {
699
657
  // Use display text for DB/chat (hides enriched agent context from the UI)
700
658
  const displayContent = msg.displayText || msg.text;
701
659
 
702
- // Save user message to DB. The worker returns {error,...} on failure
703
- // without throwing, so check the response body — silent drops here are
704
- // the original cause of "messages not appearing in UI" reports.
660
+ // Save user message to DB
705
661
  try {
706
- const result = await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
662
+ await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
707
663
  role: 'user',
708
664
  content: displayContent,
709
665
  meta: { model, channel: msg.channel },
710
666
  });
711
- if (result?.error) {
712
- log.warn(`[channels] CRITICAL: user message NOT persisted (convId=${convId}): ${result.error}`);
713
- }
714
667
  } catch (err: any) {
715
- log.warn(`[channels] CRITICAL: user message NOT persisted (convId=${convId}): ${err.message}`);
668
+ log.warn(`[channels] DB persist error: ${err.message}`);
716
669
  }
717
670
 
718
671
  // Broadcast to chat clients (mirroring)
@@ -780,13 +733,7 @@ export class ChannelManager {
780
733
  role: 'assistant',
781
734
  content: eventData.content,
782
735
  meta: { model },
783
- }).then((result: any) => {
784
- if (result?.error) {
785
- log.warn(`[channels] CRITICAL: assistant reply NOT persisted (convId=${convId}): ${result.error}`);
786
- }
787
- }).catch((err: any) => {
788
- log.warn(`[channels] CRITICAL: assistant reply NOT persisted (convId=${convId}): ${err.message}`);
789
- });
736
+ }).catch(() => {});
790
737
  }
791
738
 
792
739
  // Handle turn completion — restart backend if file tools were used,
@@ -48,16 +48,6 @@ export type OnWhatsAppMessage = (
48
48
  /** Callback to transcribe audio via whisper */
49
49
  export type TranscribeFn = (audioBase64: string) => Promise<string | null>;
50
50
 
51
- /** Callback that decides whether an audio message warrants transcription.
52
- * Returning false makes the channel silently skip the audio (no Whisper call,
53
- * no "Whisper not enabled" reply) — used to avoid leaking the bot in modes
54
- * where the message would be filtered out downstream anyway. */
55
- export type ShouldTranscribeAudioFn = (
56
- fromMe: boolean,
57
- isSelfChat: boolean,
58
- isGroup: boolean,
59
- ) => boolean;
60
-
61
51
  export class WhatsAppChannel implements ChannelProvider {
62
52
  readonly type: ChannelType = 'whatsapp';
63
53
 
@@ -68,7 +58,6 @@ export class WhatsAppChannel implements ChannelProvider {
68
58
  private onMessage: OnWhatsAppMessage;
69
59
  private onStatusChange: (status: ChannelStatus) => void;
70
60
  private transcribe: TranscribeFn | null = null;
71
- private shouldTranscribeAudio: ShouldTranscribeAudioFn | null = null;
72
61
  private reconnectTimer: ReturnType<typeof setTimeout> | null = null;
73
62
  private intentionalDisconnect = false;
74
63
 
@@ -87,12 +76,10 @@ export class WhatsAppChannel implements ChannelProvider {
87
76
  onMessage: OnWhatsAppMessage,
88
77
  onStatusChange: (status: ChannelStatus) => void,
89
78
  transcribe?: TranscribeFn,
90
- shouldTranscribeAudio?: ShouldTranscribeAudioFn,
91
79
  ) {
92
80
  this.onMessage = onMessage;
93
81
  this.onStatusChange = onStatusChange;
94
82
  this.transcribe = transcribe || null;
95
- this.shouldTranscribeAudio = shouldTranscribeAudio || null;
96
83
  }
97
84
 
98
85
  async connect(): Promise<void> {
@@ -454,29 +441,6 @@ export class WhatsAppChannel implements ChannelProvider {
454
441
  continue;
455
442
  }
456
443
 
457
- // Resolve sender/chat identity up front so audio gating can consult mode/role.
458
- const fromMe = msg.key.fromMe || false;
459
- const rawSender = msg.key.remoteJid || '';
460
- const participant = msg.key.participant || '';
461
- const isGroup = rawSender.endsWith('@g.us');
462
-
463
- // chatJid: where to reply (group JID for groups, peer JID otherwise).
464
- const chatJid = rawSender;
465
-
466
- // The actual sender JID:
467
- // - groups: always `participant` (remoteJid is the group)
468
- // - 1:1: `participant` if Baileys provided one (newer protocol), else remoteJid
469
- const actualSender = isGroup
470
- ? participant || rawSender
471
- : (participant || rawSender);
472
-
473
- // Translate LID JIDs to phone JIDs (only handles our own LID)
474
- const sender = this.translateJid(actualSender);
475
- const pushName = msg.pushName || undefined;
476
-
477
- // Self-chat: only meaningful for 1:1 — remoteJid is our own number AND no participant.
478
- const isSelfChat = !isGroup && !participant && this.ownPhoneJid !== null && this.translateJid(rawSender) === this.ownPhoneJid;
479
-
480
444
  // Extract text — or transcribe audio if it's a voice note
481
445
  let rawText = this.extractText(msg.message);
482
446
  const images: WhatsAppImageAttachment[] = [];
@@ -495,13 +459,6 @@ export class WhatsAppChannel implements ChannelProvider {
495
459
  }
496
460
 
497
461
  if (!rawText && this.isAudioMessage(msg.message)) {
498
- // Mode-aware gate: don't transcribe (and don't reveal the bot with a
499
- // "Whisper not enabled" reply) when the message would be filtered out
500
- // downstream — e.g. a friend's voice note in assistant mode.
501
- if (this.shouldTranscribeAudio && !this.shouldTranscribeAudio(fromMe, isSelfChat, isGroup)) {
502
- log.info(`[whatsapp] Audio skipped by mode gate (fromMe=${fromMe}, selfChat=${isSelfChat}, group=${isGroup})`);
503
- continue;
504
- }
505
462
  // Voice note / audio — download and transcribe
506
463
  if (!this.transcribe) {
507
464
  log.info('[whatsapp] Audio message received but no transcribe function configured — skipping');
@@ -537,6 +494,28 @@ export class WhatsAppChannel implements ChannelProvider {
537
494
  // Escape special characters to prevent prompt injection via message content
538
495
  const text = this.escapeMessageText(rawText);
539
496
 
497
+ const fromMe = msg.key.fromMe || false;
498
+ const rawSender = msg.key.remoteJid || '';
499
+ const participant = msg.key.participant || '';
500
+ const isGroup = rawSender.endsWith('@g.us');
501
+
502
+ // chatJid: where to reply (group JID for groups, peer JID otherwise).
503
+ const chatJid = rawSender;
504
+
505
+ // The actual sender JID:
506
+ // - groups: always `participant` (remoteJid is the group)
507
+ // - 1:1: `participant` if Baileys provided one (newer protocol), else remoteJid
508
+ const actualSender = isGroup
509
+ ? participant || rawSender
510
+ : (participant || rawSender);
511
+
512
+ // Translate LID JIDs to phone JIDs (only handles our own LID)
513
+ const sender = this.translateJid(actualSender);
514
+ const pushName = msg.pushName || undefined;
515
+
516
+ // Self-chat: only meaningful for 1:1 — remoteJid is our own number AND no participant.
517
+ const isSelfChat = !isGroup && !participant && this.ownPhoneJid !== null && this.translateJid(rawSender) === this.ownPhoneJid;
518
+
540
519
  log.info(`[whatsapp] Message from ${sender} (chat=${chatJid}, group=${isGroup}, fromMe=${fromMe}, selfChat=${isSelfChat}, images=${images.length}): ${text.slice(0, 80)}`);
541
520
 
542
521
  this.onMessage(sender, pushName, text, fromMe, isSelfChat, chatJid, isGroup, images.length > 0 ? images : undefined);
@@ -25,8 +25,10 @@ function BlobyApp() {
25
25
  // Backend health
26
26
  const [backendHealthy, setBackendHealthy] = useState(true);
27
27
 
28
- // Wallet balance
29
- const [walletBalance, setWalletBalance] = useState<string | null>(null);
28
+ // Wallet balances (per network)
29
+ const [walletTempo, setWalletTempo] = useState<string | null>(null);
30
+ const [walletBase, setWalletBase] = useState<string | null>(null);
31
+ const [walletOpen, setWalletOpen] = useState(false);
30
32
 
31
33
  // Recording state (for header animation)
32
34
  const [chatRecording, setChatRecording] = useState(false);
@@ -272,10 +274,14 @@ function BlobyApp() {
272
274
  })
273
275
  .catch(() => {});
274
276
 
275
- // Fetch wallet balance
277
+ // Fetch wallet balances (Tempo + Base)
276
278
  authFetch('/api/wallet/balance')
277
279
  .then((r) => r.json())
278
- .then((w) => { if (w.address) setWalletBalance(w.balance); })
280
+ .then((w) => {
281
+ if (!w.address) return;
282
+ setWalletTempo(w.tempo ?? '0.00');
283
+ setWalletBase(w.base ?? '0.00');
284
+ })
279
285
  .catch(() => {});
280
286
  }, [authenticated]);
281
287
 
@@ -385,19 +391,57 @@ function BlobyApp() {
385
391
  <div className="flex-1" />
386
392
 
387
393
  {/* Wallet */}
388
- {walletBalance !== null && (
389
- <div className="flex items-center rounded-xl bg-white/[0.04] border border-white/[0.06] pl-3 pr-1 py-1 mr-1.5">
390
- <span className="text-[11px] text-muted-foreground/70 mr-1.5"><span className="hidden sm:inline">My </span>Wallet:</span>
391
- <span className="text-[13px] font-semibold font-mono tracking-tight">${walletBalance}</span>
392
- <div className="w-px h-4 bg-white/[0.08] mx-2" />
393
- <a
394
- href="https://www.bloby.bot/dashboard"
395
- target="_blank"
396
- rel="noopener noreferrer"
397
- className="text-[11px] font-semibold text-primary bg-primary/10 hover:bg-primary/20 px-2.5 py-1 rounded-lg transition-colors"
398
- >
399
- <span className="sm:hidden">+</span><span className="hidden sm:inline">+ Add</span>
400
- </a>
394
+ {(walletTempo !== null || walletBase !== null) && (
395
+ <div
396
+ className="relative mr-1.5"
397
+ onMouseEnter={() => setWalletOpen(true)}
398
+ onMouseLeave={() => setWalletOpen(false)}
399
+ >
400
+ <div className="flex items-center rounded-xl bg-white/[0.04] border border-white/[0.06] pl-3 pr-1 py-1">
401
+ <span className="text-[11px] text-muted-foreground/70 mr-1.5"><span className="hidden sm:inline">My </span>Wallet:</span>
402
+ <span className="text-[13px] font-semibold font-mono tracking-tight">
403
+ ${(Number(walletTempo ?? 0) + Number(walletBase ?? 0)).toFixed(2)}
404
+ </span>
405
+ <div className="w-px h-4 bg-white/[0.08] mx-2" />
406
+ <a
407
+ href="https://www.bloby.bot/dashboard"
408
+ target="_blank"
409
+ rel="noopener noreferrer"
410
+ className="text-[11px] font-semibold text-primary bg-primary/10 hover:bg-primary/20 px-2.5 py-1 rounded-lg transition-colors"
411
+ >
412
+ <span className="sm:hidden">+</span><span className="hidden sm:inline">+ Add</span>
413
+ </a>
414
+ </div>
415
+
416
+ {walletOpen && (
417
+ <div className="absolute right-0 top-full pt-1.5 z-50">
418
+ <div className="min-w-[220px] rounded-xl border border-white/[0.06] bg-popover py-2 shadow-xl">
419
+ <div className="px-3.5 pb-2 text-[10px] uppercase tracking-wider text-muted-foreground/60">Balances</div>
420
+ <div className="flex items-center justify-between px-3.5 py-1.5">
421
+ <div className="flex items-center gap-2">
422
+ <img
423
+ src="https://cdn.jsdelivr.net/gh/atomiclabs/cryptocurrency-icons@master/svg/color/usdc.svg"
424
+ alt="USDC"
425
+ className="h-5 w-5"
426
+ />
427
+ <span className="text-[13px] font-semibold font-mono tracking-tight">${Number(walletTempo ?? 0).toFixed(2)}</span>
428
+ </div>
429
+ <span className="text-[11px] text-muted-foreground">on Tempo</span>
430
+ </div>
431
+ <div className="flex items-center justify-between px-3.5 py-1.5">
432
+ <div className="flex items-center gap-2">
433
+ <img
434
+ src="https://cdn.jsdelivr.net/gh/atomiclabs/cryptocurrency-icons@master/svg/color/usdc.svg"
435
+ alt="USDC"
436
+ className="h-5 w-5"
437
+ />
438
+ <span className="text-[13px] font-semibold font-mono tracking-tight">${Number(walletBase ?? 0).toFixed(2)}</span>
439
+ </div>
440
+ <span className="text-[11px] text-muted-foreground">on Base</span>
441
+ </div>
442
+ </div>
443
+ </div>
444
+ )}
401
445
  </div>
402
446
  )}
403
447
 
@@ -82,7 +82,7 @@ const SW_JS = `// Service worker — app-shell caching + push notifications
82
82
  // JS/CSS modules → stale-while-revalidate
83
83
  // API, WebSocket, Vite internals → network-only (no cache)
84
84
 
85
- var CACHE = 'bloby-v13';
85
+ var CACHE = 'bloby-v14';
86
86
  var HASHED_RE = new RegExp('/assets/.+-[a-zA-Z0-9]{6,}[.](js|css)$');
87
87
 
88
88
  // Precache the HTML shell on install so the cache is never empty.
@@ -1325,33 +1325,16 @@ ${!connected ? `<script>
1325
1325
  }
1326
1326
 
1327
1327
  try {
1328
- // Resolve the conversation id, but verify it exists in the DB
1329
- // before reusing it. clientConvs and current_conversation can both
1330
- // hold stale ids (e.g. after a manual DB swap or a chat-UI
1331
- // re-mount writing back a cached id) — pushing into a ghost conv
1332
- // FK-fails silently and loses every message.
1328
+ // Check if we have an existing conversation for this client
1333
1329
  let dbConvId = clientConvs.get(ws);
1334
- if (dbConvId) {
1335
- const verify = await workerApi(`/api/conversations/${dbConvId}/exists`);
1336
- if (!verify?.exists) {
1337
- log.warn(`[bloby] cached convId ${dbConvId} is stale (no DB row) — discarding`);
1338
- dbConvId = undefined;
1339
- clientConvs.delete(ws);
1340
- }
1341
- }
1342
1330
  if (!dbConvId) {
1331
+ // Check if there's a current conversation set in settings
1343
1332
  const ctx = await workerApi('/api/context/current');
1344
1333
  if (ctx.conversationId) {
1345
- const verify = await workerApi(`/api/conversations/${ctx.conversationId}/exists`);
1346
- if (verify?.exists) {
1347
- dbConvId = ctx.conversationId;
1348
- } else {
1349
- log.warn(`[bloby] current_conversation=${ctx.conversationId} is stale (no DB row) — creating fresh`);
1350
- }
1351
- }
1352
- if (!dbConvId) {
1334
+ dbConvId = ctx.conversationId;
1335
+ } else {
1336
+ // Create a new conversation
1353
1337
  const conv = await workerApi('/api/conversations', 'POST', { title: content.slice(0, 80), model: freshConfig.ai.model });
1354
- if (!conv?.id) throw new Error(`POST /api/conversations returned no id: ${JSON.stringify(conv)}`);
1355
1338
  dbConvId = conv.id;
1356
1339
  await workerApi('/api/context/set', 'POST', { conversationId: dbConvId });
1357
1340
  }
@@ -1370,12 +1353,9 @@ ${!connected ? `<script>
1370
1353
  type: f.type, name: f.name, mediaType: f.mediaType, filePath: f.relPath,
1371
1354
  })));
1372
1355
  }
1373
- const result = await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
1356
+ await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
1374
1357
  role: 'user', content, meta,
1375
1358
  });
1376
- if (result?.error) {
1377
- log.warn(`[bloby] CRITICAL: user message NOT persisted (convId=${convId}): ${result.error}`);
1378
- }
1379
1359
 
1380
1360
  // Broadcast user message to other clients
1381
1361
  broadcastBlobyExcept(ws, 'chat:sync', {
@@ -1487,12 +1467,9 @@ ${!connected ? `<script>
1487
1467
 
1488
1468
  (async () => {
1489
1469
  try {
1490
- const result = await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
1470
+ await workerApi(`/api/conversations/${convId}/messages`, 'POST', {
1491
1471
  role: 'assistant', content: eventData.content, meta: { model: freshConfig.ai.model },
1492
1472
  });
1493
- if (result?.error) {
1494
- log.warn(`[bloby] CRITICAL: assistant reply NOT persisted (convId=${convId}): ${result.error}`);
1495
- }
1496
1473
  } catch (err: any) {
1497
1474
  log.warn(`[bloby] DB persist bot response error: ${err.message}`);
1498
1475
  }
package/worker/db.ts CHANGED
@@ -90,9 +90,6 @@ export function listConversations(limit = 50) {
90
90
  export function deleteConversation(id: string) {
91
91
  db.prepare('DELETE FROM conversations WHERE id = ?').run(id);
92
92
  }
93
- export function conversationExists(id: string): boolean {
94
- return !!db.prepare('SELECT 1 FROM conversations WHERE id = ?').get(id);
95
- }
96
93
 
97
94
  // Messages
98
95
  export function addMessage(convId: string, role: string, content: string, meta?: { tokens_in?: number; tokens_out?: number; model?: string; audio_data?: string; attachments?: string }) {